How to get the Bitcoin address from the bitcoin Public key?

Try bitcoinjs-lib

The following will generate a P2SH(P2WPKH) address

const bitcoin = require('bitcoinjs-lib')
let pubkey = Buffer.from('027a2c8c567a5bb7777580d31d1fd8d9910d4b1bb398570e3a36e81d7522cf828a', 'hex')
let address = bitcoin.payments.p2sh({redeem: bitcoin.payments.p2wpkh({ pubkey })}).address
console.log('address: ', address)

address:  3F1JMjuxgNFuK4kBxv4JXMEdQ2yvjuz939


Which RPC may I use to query bitcoind for raw transactions coming through?

My question is, how do I use the HTTP POST JSON RPC API back to my local bitcoin >instance to query for transactions? Is there a tutorial?

You can find information about bitcoin RPC in https://bitcoin.org/en/developer-reference#remote-procedure-calls-rpcs

Also you can actually execute bitcoin RPC calls in https://chainquery.com/bitcoin-cli. If you only want to see what they are returning

  I'd imagine I would be running in a continuous thread and periodically query >bitcoind (the daemon) for the latest batch of transactions. Is this possible?

That's the approach I'm using in my project, you can see the code in https://github.com/JRamosGarcia/bitcoindAdapter It uses many java technologies as spring (for many uses, but make RPC a breeze to implement) ,  or quartz for periodic jobs. It's a work in progress, but maybe you can find some code or technology that helps you.


Need Help with Gitian-Builder - Missing Signer Error

When you run the gitian-build.sh script, you need to specify additional arguments for it to build and produce gitian signatures. You need to specify the version (or commit or branch) that you want to build. You must also specify an identifier for the GPG key that you want to use to sign the gitian output. That identifier is the signer.

For example, for me, I use the command

./gitian-build.sh -B --kvm 0.16.1 achow101

to build Linux, Windows, and MacOS binaries for 0.16.1 using kvm and signing the gitian output with the key achow101.


You can simply copy .bitcoin/wallet.dat to another place, and use it like HOME dir for bitcoind/bitcoin-qt.

It is like a copy the whole bitcoind data.

Other files in .bitcoin/ directory are just a logs and configs with database, which will be downloaded from network automatically by your new client program.


tx_hash and tx_hash_big_endian are the transaction id of the transaction that this output originated from in little endian and big endian (reversed).

tx_output_n is the number of the output in the referenced transaction, i.e if a transaction has 5 outputs and you need to refer to the 5th you use a tx_output_n = 5.

tx_index I believe is an internal unique key that blockchain.info uses to identify transactions

script is the ScriptPubKey of the output, that is the conditions you need to fullfill to be able to redeem the coins.


what prevents from address generation to accidentally use an existing one?

what promises the address doesn't override a current existing address?

Nothing does, the security comes in a different way.

There are 2^160 possible addresses. That number is HUGE. It is so big, that the chance of ever generating an address more than once is basically zero. No matter the power of your supercomputer, or the length of time you have, you will just keep generating new unique addresses.


in Bitcoin, every node solves the POW puzzle.

Not really, only miners solve the "PoW puzzle" as you put it, all the other nodes just verify that the "solution" is correct. It is actually random which of the miners solves it, like you suggest, while higher probability of finding a solution is given by more powerful mining hardware, even mining with the smallest computer theoretically has a chance of finding the next block.


How to get Mutlibit Hd private keys from mnemonic

In multibit HD clicking wallet dashboard under wallet capabilities the BIP32 derivation path was shown as m/0h but as per this post https://github.com/keepkey/multibit-hd/issues/445 the derivation path is m/0'/0 which gave me the correct addresses and private keys.


What is the data structure of the signature cache in Bitcoin?

The signature cache is basically a set of public key, message hash, and signature tuples. When there is a valid pubkey, message hash, and signature combination, all of those are hashed together with SHA256. This hash is then inserted into the signature cache. So the signature cache contains only the hashes of valid combinations. When verifying a signature, the pubkey, message hash, and signature are hashed together, and that resulting hash is looked up in the signature cache. If it is in there, then the signature is known to be valid and actual signature verification can be skipped.
The signature cache itself is not just a set. It is actually a Cuckoo cache which is a type of hash table that guarantees constant time lookup in the worst case.


How to retrieve Trezor wallet with recovery seed?

Instructions for recovering Trezors can be found on Satoshi Labs' documentation site here: https://doc.satoshilabs.com/trezor-user/recovery.html


Is it possible that two miners mine blocks with different headers because they include different transactions

Yes, different miners will almost certainly always search for different nonces. Besides including different transactions from the network, they will also almost certainly send the proceeds from the coinbase transaction to different accounts. There are many other places where the block can also be different.


How is it possible that the same WIF Private Key generates two different addresses?

The same private key can be used to derive a couple of different addresses. For example, there will be a different address generated depending on whether you use a compressed or uncompressed public key in the derivation.

More relevant to your question, you can use a private key to derive a P2SH-wrapped segwit address (3ASaGJ.. in your example), or just a plain old P2PKH address (1C8ju3.. in your example). Both addresses are spendable using the same private key, since they are both derived from the same private key.

Note that you should not design a wallet to create segwit addresses using an uncompressed public key (use the compressed key only!), due to potential backwards-compatibility issues in the future.

This image from the bitcoin wiki Address page helps to illustrate this point:


BitcoinLib SignRawTransaction JSON-RPC returns false when using private key

I'm sorry but there were missing inputs when I created my Raw transaction. This error has nothing to do with BitcoinLib.


Generate addresses without private key: Stealth addresses vs Master Public Key

What Electrum describes as 'Master Public Keys' are more commonly know as 'extended public keys' and are an excellent way for a Point of Sale terminal to accept payment without being able to spend that payment.

  Is there any other approach one could generate addresses without a private key available?

Well, there's always the approach of generating all of your addresses in advance. That has the advantage of simplicity. Other than that, I don't think there are any other approaches which work as well as BIP32.

  Are there any problems one could face with the MPK derivation approach?

You mentioned that you have multiple terminals, which means that you need to avoid using the same index with the same MPK , or you'll generate the same address. You can avoid this by either using different indexes, or different MPK's.

  Which wallets expose the MPK and furthermore which wallets get a notice of transactions done to addresses derived outside of their knowledge (however from the seed they know)?

Electrum does this. It's called a 'gap limit.' It will check for transactions beyond the last address with a balance that it knows about. By default it only checks 5 extra addresses, but you can increase that. Having an adjustable gap limit is pretty common.


Bitcoin-qt multiple wallets and transferring between?

You can use a combination of command-line arguments in a shortcut, namely, the "-wallet=" and "-rescan" arguments, to run Bitcoin-qt using different wallets.

Say you want to work with 2 different wallets (one for your shared mining profits, and the other for personal mining profits)

Step 1:

Start up bitcoin-qt and set it up so that it doesn't start up automatically when windows starts up (Settings > Options > Main)

Step 2

Visit your Bitcoin Data directory, located by default at:

C:\Documents and Settings\YourUserName\Application data\Bitcoin (XP)

C:\Users\YourUserName\Appdata\Roaming\Bitcoin (Vista and 7)

And rename your wallet file. In this example we will name it "Personal Profits.dat"

Start up Bitcoin-qt and let it generate a new wallet file (upon finding that there's no "wallet.dat file, the client creates a new one). Encrypt it (use a strong password) and close the client.

Step 3

Set up the short-cut.

If you already have a shortcut created to start up Bitcoin-qt you can make a copy (The original will keep on working with the newly generated wallet.dat, the new one will use a manually specified wallet file).

Otherwise create 2 differnt shortcuts for the client, leave one as is, and edit the other one as noted here.

Right-click on the shortcut you want to use with your shared profits wallet and go to properties, and on the "Shortcut" Tab, add this line a the end of the "Target" Field like so:

C:\Program Files\Bitcoin\bitcoin.exe -rescan

Now right-click on the shortcut you want to use with your personal profits wallet and edit again, like so:

C:\Program Files\Bitcoin\bitcoin.exe -walletfile=Personal_Profits.dat -rescan

Final Thoughts:

As noted on answer posted below, the "-rescan" argument is necessary to avoid issues with your balances (missing funds)

As for how to transfer money from one wallet to the other, while running the client using wallet A, take note of an address on the wallet. Close the program, and run the other shortcut. Now use the send option on the client and fill in with that address. (Method can be used both ways).

And yes both wallets are on the same computer and even the same directory (Bitcoin Data Dir as explained above)


Bitcoin Mining ASICs used for cryptographic application? Rainbow tables?

TLDR; forget about it.

The ASICs are optimized for bitcoin mining. Not just Sha256(Sha256(x)) hashing, but very specifically bitcoin mining. You can't even use them for the Sha256(Sha256(x)) hashing in the rest of the bitcoin system, like hashing transactions.

The ASICs are made for hashing 80 bytes, where you give them the midstate from hashing the first chunk (64 bytes), and 12 bytes from the second chunk. They then try all variations of the last 4 bytes to try and find a hash that starts with 4 zero-bytes. Only values that result in the 4 zero-bytes are reported at all. That's basically what mining is.

The ASIC could aid in password cracking if:

the hashes are generated with sha256(sha256(x))
salt + password = 80 bytes
the hash starts with 4 zero-bytes


How much testing is done on each pull request before it is merged?

Each pull request usually isn't that big, so it's not hard to look through every line of code. Each pull goes through meticulous testing, in case of any malicious code or an unintended flaw. Why do you think it takes usually more than one month after the pull is made to get added, even though there is alot of discussion in the comments?


>50% crash induced by stakeholders of current financial systems

How big are the efforts to induce a >51% attack? (DDoS / hack Pools + provide own hashing power)

I don't think anyone really knows. What you would need to know is how much hashing power, either currently being used to mine or not, is controlled by a single organization that might develop malicious intent.

If a pool, or pools conspiring, suddenly started launching 51% attacks, miners would leave those pools. But by that time, some damage would certainly be done.

  Could the crashed BlockChain get recovered? (after implementing attack prevention code)

Sure. In theory, all the honest Bitcoin users could agree to rewind the blockchain to a point prior to the first significant reorganization. At that point, there would be a battle to get transactions in before others get conflicting transactions in. There would be winners and losers and it would be ugly, but Bitcoin would survive.

It's not clear what the "attack prevention code" would consist of. One possibility would be to change the mining algorithm so that the attacker would have to buy all new ASICs, but so would all Bitcoin miners, so it's not clear whether you could obtain an agreement to do this.

Another possibility is a trusted central authority to issue "mining contracts". Miners would have to sign their blocks and miners who attempted 51% attacks would find their contracts revoked. This would have the unfortunate effect of centralizing Bitcoin somewhat, but at least each pool could decide for themselves which "contracts" they'll honor.

Perhaps there are better solutions out there.


Do I need a Bitcoin full node in order to use BTC RPC Explorer?

Will this cause issues when running btc-rpc-explorer if I wanted to query old data?

Yes, as it requires txindex.

And if so what is the appropriate pruned node amount to access 1-2 years of blockchain history?

txindex is currently only supported without pruning, so you need to have a non-pruned bitcoind to use btc-rpc-explorer.


How can I use a vanity address as my main address

I'll show you how to do this with the reference client.

First you need to import your newly obtained private key for your vanity address into your wallet. There is a great tutorial on how to achieve this here: https://en.bitcoin.it/wiki/How_to_import_private_keys_v7%2B. Once you do this, bitcoin-core will keep track of the balance for your newly obtained vanity address, so you don't have to do it manually.

Reusing addresses without a good reason behind that is not recommended.
If you still insist on doing so, first you will need to get familiar with raw transactions and then take some time to read the answer to this question: https://stackoverflow.com/questions/23324442/is-there-a-way-to-send-funds-from-a-specific-bitcoin-address-in-a-wallet that explains how you can send funds from a specific address.

On top of that, you should be very careful when generating vanity addresses. These links will give you an idea: https://bitcointalk.org/index.php?topic=795023.0 and http://www.reddit.com/r/Bitcoin/comments/21foj9/funds_currently_being_stolen_from_vanity/. A reliable way to do this is by an unmodified version of a vanity address generator that would run in an offline computer that will never get online before it is low formatted.


It is not possible to verify just a single transaction, without knowing the state of the network. To know the state of the network, you must verify all of it's historical transactions (aka, run a full node).

So this means it is not possible to just take a single transaction alone, and verify it using some bit of code. Rather, you will need the entire history of transactions, so that you can determine whether the transaction is valid in relation to the current state of the network (ie, does the person who is attempting to spend some coins rightfully own them?).

There are various implementations of a bitcoin node available, written in various languages. You'll want to find one that you can interact with programmatically using javascript.

EDIT: I now see you seem to be asking about building some mining software. My answer above still holds true (you'll need a full node to determine the network state and create block templates), but otherwise I think your question (build mining software) is overly broad.


If using Bitcoin core client am I constantly going to be downloading data from the blockchain?

At the time of writing, the blockchain is 24 GB in size after 5 years. This is an expansion of 0.12 kilobytes per second. However, this does not represent all of the bandwidth used by the Bitcoin client:

The Bitcoin client also relays transactions and blocks it downloads.
The protocol has overhead.
Sometimes the Bitcoin client will download transactions that don't get into the blockchain.

I tested the amount of bandwidth that Bitcoin uses by measuring it using bwm-ng, over the course of six and a half hours. I found that it uses 2.1 kilobytes per second, combining upload and download. Over a month, that would add up to 5.5 GB.

Note that my Bitcoin client did not accept incoming connections, which would have changed the result significantly.

This can be an expensive amount of bandwidth. In that circumstance, you can use an alternative, like BlockChain.info, or MultiBit, both of which use almost no bandwidth.


Bitcoin QT error. How can I prevent corruption of database?

I think the error is hardware based. Ran memtest86 and found multiple errors in my RAM. Also got a blue screen for the first time last night. Makes sense, sometimes bitcoin qt would run for minutes, other times days. I think it was hitting a bad address at different times.

If anyone else is getting this error, test your RAM with memtest86. Probably should have done this first thing. Prime 95 could also be used to test your processor (let Prime 95 run overnight, if there are no errors in the morning you can be 95% sure your processor is in pefect condition. Run it longer, say 48 hours, to be more sure).
Test your hhd/ssd with CrystalDiskInfo; it should display your drive's health instantly. (hdd/ssd shouldn't cause this error, as your controller detects and automatically doesn't use bad sectors.)

Prime95:
http://files.extremeoverclocking.com/file.php?f=205

Memtest86:
http://www.memtest86.com

CrystalDiskInfo:
http://crystalmark.info/software/CrystalDiskInfo/index-e.html


Why bech32 address always starts with bc1q?

q is the Bech32 encoding of the number 0. For a segwit address, as defined in BIP 173, the number immediately following the separator is the witness version. In this case, bc1q, the q means it is a witness v0 address, which is the only type currently used but allows for easy future addition of new versions


Is the native Bitcoin client intended for mining?

No.

Long long A decade or so ago, back in the mists of time, in prehistoric days when dinosaurs roamed the earth, early versions of the Bitcoin software did indeed include a mining capability that used the pitiful capabilities of CPUs. But this function has long been rendered defunct by the advance of mining hardware such that one small ASIC is now more powerful at mining than a billion 4.6 million† modern high-end decentish desktop computers even if each were crammed with dozens of overclocked multi-core CPUs and GPUs. So the vestigial and useless appendix was removed from Bitcoin-core's DNA mainnet phenotype.

Hardware
Hashrate Mh/s

Intel® Core™ i7-2600 / 8 / 3.40 GHz
23.9

Antminer S19 Pro
110,000,000.0

Your choice of mining hardware determines what specialised control software you use.
(Health warning: answer may contain microscopic traces of hyperbole)
† Roughly. Give or take an order of magnitude, or two.


Here is a list of wallers which supporting a SegWit

bitcoincore.org/en/segwit_adoption


Attack on bitcoin network with modified client?

Is it possible?

Yes and no.

The behaviour you are describing a normal feature of the functioning network, that is, the most difficult to produce (often but not necessarily the longest) chain will always win.

  Malicious nodes decrease complication of block founding, and dramatically outrace whole of world.

When the two networks rejoin, the second one having a lower difficulty, the new blocks would be instantly rejected. This is due to bitcoin looking for the most difficult chain to produce, not the ultimate highest block. A shorter chain with a higher cumulative difficulty is preferred over a longer, easier to product once.

Moreover, it would take a very large amount of computing power even just to ride the difficulty down. A single entity or group solving just a single block at difficulty 112M is unlikely, and they would need to solve up to 2015 of them to reach the next adjustment period. If they had enough hashpower to do that, they would be a lot better off financially just mining on the real network rather than attempting to attack it.


How can you view the Ripple orderbook without being logged in?

http://xrp.webr3.org/usd-xrp has the orderbooks of Bitstamp BTC/XRP, Bitstamp USD/XRP. https://ripplewise.info has Bitstamp, SnapSwap, RippleChina orderbooks.


Bitcoin in wallet transactions but not on the blockchain (old wallet)

I'm afraid you won't be able to access these funds.

How do I access these BTC and get them onto the blockchain? I could be wrong but I believe that it's such an old unconfirmed transaction that it doesn't even show on the blockchain.

The transaction is not, and has never been, confirmed on chain. From the perspective of the network, it doesn't exist.

So far I have tried forcing the transaction to go through again with a hex code of the transaction on https://blockchain.info/pushtx, but it didn't work

If that doesn't work, it likely means the transaction is spending funds that no longer exist (i.e., it was double spent). The error you get from sendrawtransaction does not mean anything, as your node is not fully synchronized yet.
Regardless, I'd suggest to let your node synchronize with the network. It's possible that it has received other transactions at that time, which did get confirmed.


How to verify Wrapped Bitcoin (WBTC) issuance

However, how do I know that BitGo has the private keys for those UTXOs?

You need to trust Bitgo that they have the keys.

Am I supposed to just accept the bonafides of BitGo and their audits, or is the a technical way to remove that trust?

Those transactions and UTXOs are only helpful in transparency to some extent and keep track of things. You still need to trust BitGo for everything involving WBTC token.
Also there can be other issues with such tokens: https://twitter.com/jchervinsky/status/1344385524086161408
Anyone can create such tokens and publish some data on their website for random transactions. Example: I can create a token on a network which has nothing to do with Bitcoin. Use the symbol "PBTC" for it. Do some transactions, share some UTXOs on website and the marketing team promotes it as "PBTC scales Bitcoin and is better than Bitcoin". People who use this token will have to trust me, use the network that it was created for and imagine it is same as BTC because symbol "PBTC".


Is there a service that alerts about attempted double spends for merchants accepting 0-confirmation transactions?

Because of the way the Bitcoin protocol with the distributed and decentralized P2P network is architected, monitoring the way you describe would do more harm than good.

If a merchant is expecting to learn of double spends, then the monitoring service needs to know of each transaction.   A race attack double spend attempt might, however, communicate one transaction that reaches the merchant but a different transaction that reaches the miner that happens to include that transaction in a block.    If the monitoring service sees what the miner sees, then the monitoring service would never know that the merchant had received a transaction that eventually became invalid due to the later transaction from a mined block.

So a merchant that is following the DIY route has further exposure to double spends.

Some payment processors will deliver if a 0/unconfirmed notice was sent and then later that transaction becomes invalid due to a double spend.  BitPay is, I believe, one of them that will do this.

There is a need for some more utilities for aiding merchants, including transaction re-broadcast.  So for example if a merchant accepts a 0/unconfirmed transaction that transaction gets rebroadcast sufficiently even if the original sender fails to re-broadcast it.  Also needed might be a service that tries to ensure that if there is a blockchain fork (two or more chains both at the same height) that the confirmed transactions from one side are relayed to miners still working on the other side of the fork.

The reason these haven't already been built is that there are so few merchants currently who accept payment on 0/unconfirmed transactions.  There will need to be some double spending thefts to raise awareness that this is a risk not to be ignored, especially for those merchants following the DIY path.


Which trading plateform to make cavalry?

I suggest you to read this writeup https://blockgeeks.com/guides/best-cryptocurrency-exchanges/
it presents well known platforms with their pro&cons e.g:

Coinbase

Backed by trusted investors and used by millions of customers globally, Coinbase is one of the most popular and well-known brokers and trading platforms in the world. The Coinbase platform makes it easy to securely buy, use, store and trade digital currency. Users can purchase bitcoins or Ether from Coinbase through a digital wallet available on Android & iPhone or through trading with other users on the company’s Global Digital Asset Exchange (GDAX) subsidiary. GDAX currently operates in the US, Europe, UK, Canada, Australia and Singapore. GDAX does not currently charge any transfer fees for moving funds between your Coinbase account and GDAX account. For now, the selection of tradable currencies will, however, depend on the country you live in. Check out the Coinbase FAQ and GDAX FAQ

Pros: Good reputation, security, reasonable fees, beginner friendly, stored currency is covered by Coinbase insurance.
Cons: Customer support, limited payment methods, limited countries supported, non-uniform rollout of services worldwide, GDAX suitable for technical traders only.

Kraken

Founded in 2011, Kraken is the largest Bitcoin exchange in euro volume and liquidity and is a partner in the first cryptocurrency bank. Kraken lets you buy and sell bitcoins and trade between bitcoins and euros, US Dollars, Canadian Dollars, British Pounds and Japanese Yen. It’s also possible to trade digital currencies other than Bitcoin like Ethereum, Monero, Ethereum Classic, Augur REP tokens, ICONOMI, Zcash, Litecoin, Dogecoin, Ripple and Stellar/Lumens. For more experienced users, Kraken offers margin trading and a host of other trading features. Kraken is a great choice for more experienced traders. Check out the Kraken FAQ

Pros: Good reputation, decent exchange rates, low transaction fees, minimal deposit fees, feature rich, great user support, secure, supported worldwide.
Cons: Limited payment methods, not suitable for beginners, unintuitive user interface.

The Ultimate Guide To The Best Cryptocurrency ExchangesSave

Cex.io

Cex.io provides a wide range of services for using bitcoin and other cryptocurrencies. The platform lets users easily trade fiat money with cryptocurrencies and conversely cryptocurrencies for fiat money. For those looking to trade bitcoins professionally, the platform offers personalized and user-friendly trading dashboards and margin trading. Alternatively, CEX also offers a brokerage service which provides novice traders an extremely simple way to buy bitcoin at prices that are more or less in line with the market rate. The Cex.io website is secure and intuitive and cryptocurrencies can be stored in safe cold storage. Check out the Cex.io FAQ

Pros: Good reputation, good mobile product, supports credit cards, beginner friendly, decent exchange rate, supported worldwide.
Cons: Average customer support, drawn out verification process, depositing is expensive.

The Ultimate Guide To The Best Cryptocurrency ExchangesSave

ShapeShift

ShapeShift is the leading exchange that supports a variety of cryptocurrencies including Bitcoin, Ethereum, Monero, Zcash, Dash, Dogecoin and many others. Shapeshift is great for those who want to make instant straightforward trades without signing up to an account or relying on a platform to hold their funds. ShapeShift does not allow users to purchase crypto’s with debit cards, credit cards or any other payment system. The platform has a no fiat policy and only allows for the exchange between bitcoin and the other supported cryptocurrencies. Visit the Shapeshift FAQ

Pros: Good reputation, beginner friendly, Dozens of Crypto’s available for exchange, fast, reasonable prices.
Cons: Average mobile app, no fiat currencies, limited payment options and tools.

Poloniex

Founded in 2014, Poloniex is one of the world’s leading cryptocurrency exchanges. The exchange offers a secure trading environment with more than 100 different Bitcoin cryptocurrency pairings and advanced tools and data analysis for advanced traders. As one of the most popular trading platforms with the highest trading volumes, users will always be able to close a trade position. Poloniex employs a volume-tiered, maker-taker fee schedule for all trades so fees are different depending on if you are the maker or the taker. For makers, fees range from 0 to 0.15%, depending on the amount traded.

For takers, fees range from 0.10 to 0.25%. There are no fees for withdrawals beyond the transaction fee required by the network. One of the unique tools on the Poloniex platform is the chat box which is constantly filled with user help and just about everything. Any user can write almost anything but inappropriate comments are eventually deleted by moderators. It can sometimes be hard to distinguish the good advice from the bad, but the Chatbox is a great tool that will keep you engaged.

Pros: fast account creation, feature rich, BTC lending, high volume trading, user-friendly, low trading fees, open API.
Cons: Slow customer service, no fiat support.


What is scriptpubkey for in the coinbase transaction ? (and more..)

The mined Bitcoin "goes" to the scriptPubKey(s) in the coinbase transaction.
Bitcoin operates on spending transaction outputs. Submitting a block does not magically cause a transaction output to appear, you need to specifically create them. This is done through the coinbase transaction (and is really the purpose of it). The only different between a coinbase transaction is that it doesn't have any real inputs. But just like with normal transactions, coinbase transactions can create any number of transaction outputs as it wants, and these just need to follow the rules for output validity.
Thus for a miner to be paid, they need to make sure that the coinbase transaction has transaction outputs that they can spend, and that the amounts for those outputs are what they want to be paid. This means that if you want to collect transaction fees, you need to set the amount to also include the transaction fees of the block, otherwise that Bitcoin will be gone forever. The rule for output amounts in a coinbase transaction is that they must not be greater than the block subsidy + transaction fees for that block.


In fact, you can start mining with only a small piece of mining software.

When you mine for a pool, a mining program will be sufficient to begin mining.

When you want to solo mine, you also need a client that connects you to the network for announcing new blocks you find. bitcoind is an obvious choice for this.

There are plenty of beginner's guides on Bitcoin mining available on the web.

WeUseCoins mining guide
TechCrunch's "How To Mine Bitcoins"
BitcoinMining.com "Getting started"
Google!

A small remark on your question: InstaWallet is absolutely no requirement for participating to the Bitcoin network. A client is absolutelly everything you need. This can be the default Bitcoin-Qt, bitcoind (which you download together with Bitcoin-Qt), the daemon implementation of the default client, or any other client.

InstaWallet is just a web service that allows a very easy and fast way to create a Bitcoin wallet, based on a URL.


Since the very beginning. Transactions have had the nLockTime field since Bitcoin 0.1.0.


Best strategy for using hundreds of 1 kh/s CPU litecoin miners

Most likely it isn't worth the effort, even if you're not paying for electricity. But if you want to do it, CPU coins are the way to go. I'm not sure why you consider it "more trouble than it's worth." Check out the profitability calculators for Memorycoin and Primecoin to see if they're worth your time. If you don't want to hold those coins, you can sell them on an exchange for Bitcoin or Litecoin.


What is the formula for calculating the private key? resued R value

If the same private key is used to sign different data with the same R (or equivalently k), the private key can be extracted. Since the transactions you linked have inputs from different addresses, there's no one private key that you can extract.
However, if you know the k value that caused this R value, which you would if you're the creator of at least one of these transactions, you should be able to extract the private key of the other by using the same method but skipping the derivation of k steps.


why verification of transaction after proof of work?

I'm not sure how exactly it was described in the whitepaper, but obviously every node checks new transactions for validity before adding them into their block template. i.e. between step 1 and step 2. As you stated, it would not make sense to waste energy on finding a proof-of-work without checking validity in beforehand.

However, each node needs to still check the validity of a block after it's been found. Otherwise they would be trusting the block author to have adhered to the rules. Why trust, when it's cheap to verify? ;)


What are some counter arguments for NXT (nxtcoin) "premine" or initial distribution setup?

Arguments of Nxt creator are written here - https://nxtforum.org/initial-distribution/initial-distribution-of-100-pos-currencies/:

  Initial distribution of the coins and the forging schedule are more
  serious problems than they appear at first glance. A 100%
  proof-of-stake currency needs at least a small part of the coins to be
  distributed in the beginning because these coins is the only forging
  instrument. A forging schedule has a lot of influence on initial
  distribution and must be defined in the first place.

  The PoS algorithm used in Nxt has such properties that give a little
  advantage to an account that holds more coins comparing to an account
  with a lower amount. If every block subsidizes the forger with extra
  coins (in addition to the fees) then bigger accounts become even
  bigger by following the compound interest curve. In a currency with
  selfish forgers most of the coins would be absorbed by very few
  accounts that would lead to centralization of the currency. Because of
  this all the coin in Nxt were distributed at once in the genesis
  block.

  Bootstrapping requires to make a decision how to do the initial
  distribution. We consider three main schemes, any other scheme can be
  represented as a combination of them.

  The first scheme – all the coins go to a single account controlled by
  one entity that transfers coins to the others in exchange for work
  done for development and promotion of the currency. This scheme is
  completely unacceptable because it’s not “compatible” to decentralized
  nature of cryptocurrencies.

  The second scheme – all the coins are split equally among a group of
  people. This approach faces some problems. A Sybil attack can be
  easily conducted by an entity to acquire a significant part of the
  coins. Such a counterattack as usage of a certification service can’t
  be used because majority of potential users won’t agree to reveal
  their true identities. Another possible counterattack, based on
  proof-of-resources approach, can’t give “fair” distribution because
  the resources are distributed in “unfair” way. Anyway, even if the
  Sybil attack could be significantly mitigated, the second scheme is a
  bad choice because the history of humankind teaches us that an economy
  driven society where all individuals own equal amount of resources is
  unsustainable and even utopian. (Note by CfB: It would be interesting
  to hear opinion of NEM guys on this issue…)

  The third scheme – all the coins are distributed in “chaotic” way.
  This scheme doesn’t have disadvantages of the previous ones, no
  centralization, no necessity to deanonymize users, no need to
  counteract Sybil attacks. Economy and sociology sciences state that
  distribution of the coins will follow the Pareto 80-20 principle. An
  important note should be made. The fact that (almost?) all the
  societies conform to this principle assures that the third scheme is
  the best one. The Pareto principle seems to be a result of universal
  but yet unknown laws of nature. If the distribution follows the
  principle then with high probability we can assume that our system
  will sustain for a long period of time. The previous schemes will
  transform into “80% of coins belongs to 20% of entities” systems
  anyway, but the third scheme has such an advantage that it doesn’t
  need to survive the period of instability.

  According to the described above logic Nxt was created by issuing all
  the coins at once and distributing them by following the last
  distribution scheme.

  Initial distribution has two properties – percentages and number of
  participants. Common sense says that number of participants should be
  as large as possible.  This seems to be true, but we should take into
  account that every system has three main stages of the progress –
  bootstrapping, normal functioning and decaying. We consider only the
  first two because our goal is to create an ever-functioning system.

  We shouldn’t ignore the lessons of history. Societies created by a lot
  of people are abnormal phenomena. Number of participants in the very
  beginning should be rather small than large. This is an arguable
  statement but disputes on the issue lay out of the scope of this
  paper. The creator of Nxt preferred a small number of “founders”
  because he had no possibility to do several experiments on finding the
  best number nor he had time to build a theory that could predict this
  number. The most stable economic systems were always bootstrapped by a
  few people (feods, corporations, etc.) so it was safer to follow a
  similar way.

  Now, half a year after the launch of Nxt we see that it didn’t die and
  keeps growing at fast pace. This lets us guess that the choice of
  BCNext was a correct one.


How does bitcoin functional test framework work?

The functional tests test the RPCs. The unit tests test the C++ code directly by calling the functions.

The functional test frameworks uses a version of python-bitcoinrpc which can be found here. This library allows the test framework to call RPC commands as if they were python functions; authproxy handles the conversion to HTTP POST requests for the RPC server. So when you see lines like self.nodes[0].getblockchaininfo(), it is actually calling the getblockchaininfo command on node0. You will see many lines like this throughout the functional tests.


How does solving a block work in relation to the first letter/number after the 0's?

The comparison used is numeric
These are numbers not strings of characters. You can see this by looking at the code in the 2009 main.cpp of the Bitcoin reference implementation:
        uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256();
        uint256 hash;

[...]

           if (hash <= hashTarget)
            {
                pblock->nNonce = tmp.block.nNonce;
                assert(hash == pblock->GetHash());

                    //// debug print
                    printf("BitcoinMiner:\n");
                    printf("proof-of-work found  \n  hash: %s  \ntarget: %s\n", hash.GetHex().c_str(), hashTarget.GetHex().c_str());

Note that if (hash <= hashTarget) is a numeric comparison. Both hash and hashTarget are type uint256 - an unsigned integer.
Numbers expressed in hexadecimal are still numbers
There is a choice of visual representations but the choice made does not change the underlying nature of the number or the way in which numbers are compared arithmetically or at a machine level in a computer.
Your example, 00005fad, is a number expressed in hexadecimal (base 16), the same number can be written in normal decimal (base 10) as 24493. Anyone unfamiliar with non-decimal representations such as hexadecimal, octal and binary can check this using something like the Windows 10 calculator, in the menu choose "Programmer Mode" then click on "hex" and enter 5fad - it shows the same value in several different representations.
Leading zeroes
The notion that Bitcoin cares about the number of leading zeroes in, say, a hexadecimal representation, is a commonly repeated mistake (don't ask me how I know this).
If you insist on writing numbers with leading zeroes it is still obviously true that 000015 (fifteen) with four leading zeroes is smaller than 000150 (a hundred and fifty) with only three leading zeroes. It would however be a mistake to think that smaller numbers always have more leading zeroes. Both you and Bitcoin know that 000017 (seventeen) is smaller than 000019 (nineteen) even though both have the same number of leading zeroes.
It is true that a is less than b in exactly the same way that 7 is less than 8 or that 2 is less than 3. But it is probably a mistake to start comparing individual digits in a particular visual representation. The hash and hash targets are ordinary numbers (though large) that are compared in an ordinary way.
So where does this talk of leading zeroes come from? It is part of a method of encoding the target value as a difficulty in a compact representation. Bitcoin has some rather arcane methods of saving space in data that are transmitted.
See

Difficulty - Bitcoin Wiki
Target - Bitcoin Wiki
Difficulty Representation - O'Reilly, Mastering Bitcoin

Examples
Lets look at some recent blocks (most recent at top, reverse chronological order)

Block
Mined on
Difficulty
Hash
bits

669315
2021-02-06 02:48
21434395961349
0000000000000000000bbefe7b336aab05ef49c9c6ccd70a895b3cc4669ac924

669314
2021-02-06 02:36
21434395961349
0000000000000000000ae88c36b136ef612f0a0622bdf614854a7810e3f781cf

669313
2021-02-06 02:34
21434395961349
0000000000000000000acd9e8fd6512d3832e98a8c87d049afbd805abd44d8c2

669312
2021-02-06 02:25
21434395961349
0000000000000000000beb9d24f999168c79fa58394868f9fcc5367c28f137dc

669311
2021-02-06 02:22
20823531150112
00000000000000000004f29390852281bae27d3662f648020bb47cced0d883b8

669310
2021-02-06 02:18
20823531150112
00000000000000000000cd7ef96b5f6687c8b49df40c2dec2128adc39827707e

669309
2021-02-06 01:54
20823531150112
00000000000000000009d6c5902b0b8598f2ebd0fe076581b039fe789b4daca6

669308
2021-02-06 01:37
20823531150112
0000000000000000000be631fd1026989a86cf9dae421e7eca0f80d77b6bba5e

Notice that the difficulty increased after block 669311 but the number of leading zeroes in the hashes has not increased (not in hexadecimal and not in binary).
Implementations
If you want to see exact details you could look at early versions of the Bitcoin reference implementation in C++. However I would suggest instead looking at the current BTCD implementation in go-lang because that is well commented and, in my opinion, an easier language to read.
e.g. https://github.com/btcsuite/btcd/blob/master/chaincfg/params.go
    // TargetTimespan is the desired amount of time that should elapse
    // before the block difficulty requirement is examined to determine how
    // it should be changed in order to maintain the desired block
    // generation rate.
    TargetTimespan time.Duration

    // TargetTimePerBlock is the desired amount of time to generate each
    // block.
    TargetTimePerBlock time.Duration

and https://github.com/btcsuite/btcd/blob/master/blockchain/difficulty.go
    // Calculate new target difficulty as:
    //  currentDifficulty * (adjustedTimespan / targetTimespan)
    // The result uses integer division which means it will be slightly
    // rounded down.  Bitcoind also uses integer division to calculate this
    // result.
    oldTarget := CompactToBig(lastNode.bits)
    newTarget := new(big.Int).Mul(oldTarget, big.NewInt(adjustedTimespan))
    targetTimeSpan := int64(b.chainParams.TargetTimespan / time.Second)
    newTarget.Div(newTarget, big.NewInt(targetTimeSpan))

Calculating the hash target
See

How is a block header hash compared to the target (bits)?
Mining Difficulty and Leading Zeros
What keeps the average block time at 10 minutes?
How to calculate new "bits" value?
Chain with most proof of work - hash target or block header hash?


If there was a period of time with no transactions, what would miners have to do?

They would mine empty blocks. Block difficulty would remain the same.

Would they have an incentive to mine blocks? In the year 2140, all mining rewards will be from fees. If there are no transactions, there are no fees. Between now and then, rewards will step down over time. So either:

Clients will keep mining.
Clients will stop mining because there are no transactions.

I recognize that this is a useless answer (maybe they will, maybe they won't) but I hope you understand the difficulty of predicting what mining clients will be like in 5-10 years.


Can I trace Website Addresses that a Bitcoin wallet has passed through?

Your bitcoin address and private key are created locally from a random seed and because there are so many possible addresses you can be very very very much sure that it hasn't been used by anyone else.

IP adresses or websites that have used a specific bitcoin address aren't recorded in the blockchain

Hope this answers your question!


Practical interpersonal address exchange

Very true! Manually copying a 34 character address is no fun.

You have three major options:

QR code. Print it out in advance.
Create a FirstBits address.
Bring your phone, and load a client that supports NFC.

By the way, if you enter someone's address wrong, the Bitcoins won't send - Bitcoin addresses have a checksum built in.


Don't worry, you're coins are safe. You only need to fix the connection. You should go to Tools -> Network and then choose a server.


Significance of average block generation rate

The block difficulty is adjusted every 2016 blocks so that, on average, it takes 10 minutes for miners to generate a new block. It would take any individual miner much longer than 10 minutes to compute the proof-of-work, but all miners together should be able to compute the proof-of-work in roughly 10 minutes.


how to get the sender's address in bitcoinj

Bitcoin transactions don't have a sender's address.

What you're doing is inferring what address previously controlled some or all of the funds involved in the transaction. But:

Previously controlling the funds doesn't mean you found the sender. In case the coins were held by a custodial exchange, the address will be the exchange, and not the sender of the funds. In particular, sending coins back there won't make them reach the right person.
Transactions can be jointly constructed using multiple participants. You can only guess which is which.
The script that previously controlled the funds may not have an associates address at all.

If you want to know what the sender's address of a transaction is, ask the person who sent it (for example if you need a refund address, ask it before showing an address to pay to). If it's not a transaction you're involved in, it's probably none of your business.


Can a Bitcoin node create an outgoing connection to a inbound node?

Nothing prevents this as it is impossible to distinguish whether the node that is connecting to you is the same one that you are already connected to. This is because one machine can run multiple node software or multiple instances of the same software and thus it can be multiple nodes on the network.

There's also no reason to block such a connection.


What is the difference between the rpc port 8332 and port 8333?

The Bitcoin.org client will try to communicate to other nodes via port 8333 and those communications follow the Bitcoin protocol.   If an explicit connection is given (IP address and port) the port setting can be overridden to use any port.

The bitcoin.org client can be configured to accept JSON-RPC communications, and when that is enabled will, by default, be on port 8332.  Earlier versions of Bitcoin Core permitted this to be secured with SSL communications using the same port or a different port, however that capability has since been removed.


How could the Bitcoin protocol be modified so that pruned nodes could still participate in BIP 37 SPV?

Pruned peers do not have the full blockchain history and therefore have only limited value for SPV clients.
With Bitcoin Core 0.16, pruned peers will announce their service via NODE_NETWORK_LIMITED (see BIP159). BIP159 is not a consensus change.
This will allow SPV clients to connect to pruned peers. But, since they only signal for the last 288 blocks, SPV/BIP37 clients interested to load history older than 1 day of blocks would still require to connect to traditional peers.
In the future, pruned nodes may have a way to signal how many blocks they will keep on disk (without adding a fingerprinting vulnerability).
Note that BIP37 is a controversial concept. It has significant privacy downsides (see Jonas Nick's research).
A far better concept is "Client side filtering". See the upcoming BIP157 and BIP158.


How do I get bitcoins in the first place?

You can use buy BitCoins on exchange market like Mt.Gox.

You can get BitCoins by mining process. But this second option is very slow and hard. You can join some mining community to create blocks and get bitcoins for it. It takes couple of hours of your computer to make calculations worth 0.0001 bitcoins.

You can find quick intro here: How to Get Bitcoins.


How can I contribute to the open source Bitcoin project?

As a Programmer

You can contribute by acquiring the bitcoin source code at github.  Fixing bugs, adding features and creating a "pull request".  Here are guidelines for creating pull requests.

Gavin Andresen, currently the lead developer of bitcoin, has suggested that testing is a bottleneck, so it would be helpful to compile the existing pull requests on github and test them.

It should be noted that it is possible to safely test bitcoin transactions without using real bitcoins by using the testnet (see the -testnet command line option).  You can even create your own self-contained testnet-in-a-box.

As a Non-Programmer

Learn more about bitcoin. Try using them. Learn proper ways to secure them. When you become better versed in bitcoin technology help by explaining it to others.  If you have a business, experiment with accepting bitcoin. If you are a customer, ask if a business accepts bitcoin. Help to dispel the myths and misunderstandings of bitcoin whenever you talk about them. However, be careful to get your facts straight.

If you have talents in other areas such as design, business, or blogging, etc. then look for ways to contribute using those skills. It has been suggested that the client needs better interface designs, businesses have expressed interest in advice on bitcoins, blogging can help address all the misinformation and rhetoric.

Everyone has something they could contribute, so give it a try.


There are no requirements about your nationality, skills or need to have a credit card to use Bitcoin. The only major requirement is that you have a smart phone or computer and access to the internet. In terms of earning bitcoin, you may earn it any way you might earn Taka or United states dollars, however you might find few employers will pay you in bitcoin.

There are some services to earn small amounts of bitcoin for simple tasks. A quick search turned up coinworker, but it looks like there are other similar sites if you find that doesn't work.

Hope that answers your question Banda!


How can I delete an address (private key) in the list of received Bitcoins?

I don't think it's possible to delete addresses from just the UI.

You can delete addresses completely using Pywallet. However, unless you back up the key first, this means that you will not have access to any coins sent to these addresses (either future coins or existing coins which have not moved elsewhere).

The many addresses will be more manageable if you label them. You can even simply label each as "Z" to put them at the end of the list when sorted by label.


Self-hosted Bitcoin wallet for Linux with API?

did you look at bitcoind?
It does everything you are looking for.

-port=           Listen for connections on  (default: 8333 or testnet: 18333)

-walletnotify=    Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)

-alertnotify=     Execute command when a relevant alert is received (%s in cmd is replaced by message)

http://paste.ee/p/IBU79

And all of your transactions you do via rpc  https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list

enjoy!


It's probably hashed. Any URL is valid.

https://uno-wallet.com/wallet/0


You cannot earn Bitcoins mining unless you either add blocks to the blockchain or cooperate with others to do so. Without being online, you wouldn't know the current head of the blockchain (or any information based on it), so there's no way you could actually do either of those things. You could hash all you want, but you would never mine a block nor contribute towards mining one, so there wouldn't really be any reason to do so.


Do pools distribute "jobs" to miners based on "failed" solutions which have already been submitted?

I've read simplistic descriptions of mining as simply incrementing the nonce until a solution is found, but I've also read much more detailed explanations which would imply much more is involved. Even if only the nonce is changed in the input, the pool would still need to assign each miner a unique nonce to try after each submission, no?

Miners do change more than just the nonce, and it is this fact that allows a mining pool to ensure that two miners don't produce the same work twice.

Because mining always involves the transactions used in the block, changing those transactions will effect the merkle root and thus the result. One of those transactions is the coinbase transaction which is something that miners have control over. In particular, the input script for the coinbase transaction's input can contain up to 100 bytes of aribtrary data. So miners will use this space as an extra nonce (known as the extranonce). They will have a nonce there too in order produce new coinbase transactions which lets them produce different merkle roots and thus different block headers. The extranonce allows miners to have more nonces than from just the 32 bit nonce in the block header.

Mining pools make use of this extranonce to ensure unique work. They will give a miner part of an extranonce (e.g the first half). Then the miner can use the rest of the extranonce as an extranonce for themselves. This lets miners still have a large search space so that they are not constantly asking the pool for more work. By giving miners different extranonce halves, the pool can be sure that two miners will not be hashing the same thing multiple times.

  Say a pool stored every solution it had ever received, considering the massive size of the bitcoin network, would this not eventually become a statistically significant (in terms of usability) database of sha256 collisions?

Eventually, yes. But it's going to be a very long time before that happens. The entire Bitcoin network has done ~2^90 hashes total. However to even get to a 50% chance of a collision, you need ~2^128 hashes. 2^90 is 1/274877906944 of 2^128. So the amount of time to even get to 2^128 hashes is many times the number of years that the universe has even existed. So in theory, yes, there could be enough hashes computed that a collision is found be sheer brute force. But for all intents and purposes, it isn't going to happen.


Is it safe to say that all bitcoin that is mined is staying in the bitcoin adresses that is generated between 2^0 and 2^256?

First of all, since a single key can be represented by tons of different address types, let's assume what you meant to ask is about private keys. As @dave_thompson_085 points out, most addresses are actually limited to a 2^160 space by a RIPEMD hash. So that number may be closer to the actual amount of keys you'd need to sweep "all" the bitcoin.
But you are basically correct, the security of ECDSA is based on really big, really random numbers that are so big and so random no one will ever generate the same number as you.
A few details though, from my understanding:
The order of the curve is 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
ref 1
ref 2
So there is a slightly lower number of possible private keys than just 2^256
Also, not all Bitcoin outputs require a single key for spending. There are multisig scripts and more complicated spending policies. Assuming you had "all" the private keys and could look them up in a practical way, I suppose you could assemble multisigs where necessary. But that's not all - plenty of transactions are HTLCs which require the pre-image to a hash in addition to a valid signature to spend.
Another thing is that some Bitcoin addresses really are black holes (burn addresses). If an address represents a point that is not on the secp256k1 curve, then there is literally no private key.
Some Bitcoin may also have been sent to unrecoverable scripts like OP_RETURN or scripts that require finding a hash collision.


Litecoin mining is currently more profitable for likely all GPUs.

From the bitcoin and litecoin hardware wikis, you'd get 300-400MH/s for bitcoin mining and 340-470kH/s for litecoin mining if you set it up properly (and there is something VERY fishy about you getting 250MH/s with your CPU, I'd guess it is using your GPU though you don't know it...).

For bitcoin, the current difficulty is about 6,500TH/s.  Thus, you'd own about 300/6,500,000,000 of the network.  At 25 bitcoins per block, 6*24 blocks per day, and $800 per bitcoin, you'd make about $0.13/day.  There is specifically-designed hardware for mining Bitcoins, which is way more powerful than GPUs, so unless you can buy a dedicated mining ASIC, your energy bill would overcome your revenue.

For litecoin, the current difficulty is about 90GH/s.  Thus, you'd own about 340/90,000,000 of the network.  At 4*6*24 blocks per day, 50 litecoins per block, and $25 per litecoin, you'd make about $2.72/day.  It uses a different algorithm (called Scrypt) than Bitcoin. FPGAs and ASICs can't be optimized for this algorithm as much as they can be optimized for Bitcoins' algorithm, so Litecoins are mined exclusively with GPUs. This means that you can still be comptetitive, and you should mine those.


I'm predicting that this transaction will confirm in less than a week considering its relative feerate.

Paid $4.26 on a $133 transfer - why unconfirmed?

Because the input addresses are 1... addresses instead of the newer SegWit addresses bc1. By switching to a native SegWit addresses you may enjoy faster confirmation times at any constant feerate level.
The destination address is 3... which means probably it's a SegWit address too. However, 3... addresses pay slightly higher fees than bc1 addresses so bc1 addresses are suggested whenever possible. (Still, the suggested feerate difference between 1... and 3... addresses will make a considerable difference, you'll notice it when you spend from your destination address)


Is it possible to estimate the Gini coefficient for Bitcoins and if the trend is increasing or decreasing?

The owner of the Bitcoinica site has released some data from his site which may reflect the wider bitcoin economy. He gives a value for the Gini coefficient of:

Gini Coefficient = 0.87709

The Bitcoin Report site also releases a regular report on the number of bitcoins in the top 100 wallets. Although one person can own multiple wallets or a wallet of a exchange (e.g. MtGox) may contain coins with multiple owners so it is impossible to know for certain the real wealth distribution but it may have some correlation.
The Bitcoin Trader blog used the Bitcoin report data on the top 100 wallets and compared the data from May 1st and Oct. 29th 2011.
.
From the Bitcoin Trader:

The distribution of coins among the top 100 has evened out, as can be seen in the chart.
Even though 1,310,000 Bitcoins have been mined since May 1st, the top 100 have still managed to increase their relative wealth, and now hold 29.8% of all the Bitcoins ever created!

While  certainly not perfect these type of statistics may be give some indication of the trends in the wealth distribution in the bitcoin economy.


Why don't any of the SHA-256 vulnerabilities matter for mining?

The attacks are against a "poor man's" version of SHA-256, where less rounds are performed than in the real SHA-256. They are useless for breaking SHA-256 itself, and more so for the double SHA-256 used in Bitcoin mining.

Also, what would be most useful for mining is a preimage attack, and those are much harder than collision attacks. You can see in the table on Wikipedia that the proposed preimage attacks, though faster than pure brute force, are still impossibly complex.


Bitcoin is like digital cash.
A bitcoin address is like an email account but for cash.
A bitcoin address has a private key and a public key.
The public key is like your email (joesmith@gmail.com)
The private key is like your password to access your email (mypassword)
The main difference here is that a bitcoin private key holds all the information to access the account. So with a private key you can get the public key.

A bitcoin wallet holds the private keys to bitcoin addresses - so instead of a wallet, think of it as a key chain with keys to different safes.
Wallets are used as an interface where you can access the bitcoins in your addresses without having to enter the private key in each time.
It makes the user experience a lot easier. So instead of entering in your private key each time you just might enter in a pin code instead.
Wallets also let you easily see the balance of each address, add and remove accounts (addresses) and send and receive bitcoin.
This is a very basic explanation but a good one to start with.
Hope this helps.


How does Bitcoin prevent replay-attacks?

A transaction contains a reference to the output that it is spending from. So all you would be doing is just rebroadcasting the same transaction over and over again. Since transactions are identified by the hash of the transaction, the transaction you are rebroadcasting is exactly the same thing as the one already broadcast, and all nodes will treat it as the same transaction, one that they have already seen.


Can transaction be stuck in the 'processing' stage and has not been mined by the Blockchain network?

Yes, if the fee is not enough then it can take days and then it will be canceled.


json_rpc_call solo mining with bitcoin running on Windows 7 for antminer

BFGminer needs to use stratum (bitcoin core doesn't)

Add --stratum-port=3333 to your bat file with 192.168.1.123:8333 then point your antminer at 192.168.1.123:3333

Ta. 3KMxGyAFJA9zFnaXfPEkrjoLozXcZz8FH4


Can I mine bitcoin with a gaming computer?

It is not profitable to mine Bitcoin with computer(s) and GPU(s). If you just want to help secure the network and/or keep your place warm in a high-tech way, then you could mine Bitcoin ;)

It could be profitable for you to mine some other coin, using your computer and GPU(s). You could also set your computer up to rent its computing power to others by joining services like miningrigrentals.com

For GPU mining have in mind that the more GPUs you have, the better. Since you don't pay the cost of electricity, you might want to add more GPUs to your computer. Just make sure the Power Supply Unit (PSU) can handle them.


What's difference between Multichain, Chain, Hyperledger, Ethereum etc

Multichain is directly built from Bitcoin Core which power the bitcoins. Of course there are modifications to it. Multichain provides direct interface with many parameters and is basically used to make permissioned networks.  And the major difference between multichain and other blockchain technologies is no use of smart contracts in multichain.

Also, Bitcoin is open network, Ethereum allows public network apps, hyperledger is used for building private blockchains and multichain for permissioned blockchains.


Can someone find out how much bitcoin do I have using my public key?

Can he find out how much bitcoin do I have?

Yes, Bitcoin addresses are derived from public keys.

If someone has your public key, they can obtain your BTC address and therefore search the blockchain for transactions involving your wallet address. On the other hand, if you use a separate private/public key pair (separate address) per transaction and someone only has one of your public keys, they will not have enough information to obtain the address from the other keys unless you are transacting between them and it is somehow obvious that they all belong to you (analysis).


How Lightning Networks protect itself from 'Selfish Mining'?

Your question seems very similar to the 51% attack vector on the lightning network which I described on the lightning dev mailing list. I am not aware of any protocol to prevent this nor do I see any way of preventing what you and what the mailinglist post describe. The timeouts depend on blockheight and the Bitcoin protocol has the consensus rules that the longest proof of work chain wins.

I think it is a generally accepted assumption that Bitcoin will only operate in a secure way if at least 51% of the mining power comes from honest nodes (which are following the rules) on the plus side any secrete mining operation would statistically speaking only be harmful if the operation has at least 51 percent which is hard to achieve and probably also more expensive than the gains from winning such an attack.


What's the best way to introduce Bitcoin to the family and friends?

I don't know the best way. But what I do is talk about it all the time. And actually use the bitcoins. I mean purchase things with your bitcoin not trade with them on exchange networks.

I buy a new product with my bitcoins and use it in front of my friends and family. Those who are interested ask where I got it, and then ask how much I spent on it. My response is in bitcoins. eg it was just 0.10 bitcoins very decent deal. Or it is just 2 bitcoins.

I've found that when selling an idea of bitcoin by saying things like 0.10BTC is worth $60.00 today I tend to get strange looks. Like so you spend $60.00 on 10 cents? People have a hard time understanding concept of ForEx and values of money when comparing one currency with another. It is more successful when you buy something and explain that you purchased it with bitcoin.

Also Christmas is coming up. And I've made paper wallets loaded with bitcoins. And on the paper wallets I have a list of websites that accept bitcoins as payments. So it is like a gift card and it helps people get the idea of what bitcoin is.


If the address is not in your wallet that is not possible with the current bitcoind RPC API. You have to either go through the blockchain calculating the balance of the address yourself (i.e. find the last transaction from that address or sum the payouts to the address) or use an online tool like blockchain.info as you mentioned.


You cannot send anything other than bitcoin to (or out of) your Bitcoin Core wallet. You'd need to acquire bitcoin somewhere else first, then you will be able to send it to your Bitcoin Core wallet.


I ended up forking p2pool and applying an adaptive difficulty patch.

My fork:
https://github.com/jramos/p2pool

Adaptive difficulty patch: https://github.com/jramos/p2pool/commit/e44dc19dada6a346628d838fa9261cd1872f493e

I'll post results of adaptive vs. non-adaptive on the fork's README page when I have a better sample.


blockchain.com saying I do have enough funds

When you click send a modal window pops up. Look at the transaction fee in the bottom right of that. Deduct that from your balance and you'll be able to move your bitcoins.


How can importprivkey compromise wallet security when importing a publicly known private key?

If Eve gives you a private key that contains Bitcoins in exchange for a pile of gold coins, she still has a copy of the private key, and can take the Bitcoins back, leaving her with both the gold coins and the Bitcoins.

Instead, tell Eve to send Bitcoins to your address.


bcchanger.com: why are bitcoins being sold at 1/3 market value?

If you look at low price orders posting date, you will notice most of them are relatively older OR with zero feedback. The ones that with some positive feedbacks are genearlly in line with the price of the order posting date.

So it is more of a combination of old orders and scams.


How do you safely set up a offline deterministic wallet?

On a deterministic wallet the only thing you need to keep safe is your seed / passphrase to be able to restore it in the future

Here you can find a tutorial on how to make transactions with an offline Electrum wallet using your Master Public Key

http://electrum.org/tutorials.html#offline-mpk


Although I don't fully understand your question, I can tell you that you can get the hash of a block at height Happy using the getblockhash api call:

getblockhash 277586

Will result in the block hash for the block on the main chain at height 277586.

Block Explorer.com provides an online api for this api call: http://blockexplorer.com/q/getblockhash


First, you should backup your wallet.dat in case something goes wrong. The file is located in the data directory:

  Windows

  C:\Documents and Settings\YourUserName\Application data\Bitcoin (XP)

  C:\Users\YourUserName\Appdata\Roaming\Bitcoin (Vista and 7)

The easiest way to open your appdata folder is to press Windows Key-R, then type %appdata% and hit enter.

  Linux

  ~/.bitcoin/

  Mac

  ~/Library/Application Support/Bitcoin/

Then install the new version in the regular manner. The new client should use your previous settings (including the wallet and the blockchain data).
If, by some strange magic, your wallet gets corrupted, just copy your backup into the data folder.


When a market charges taker and maker fees, they differentiate whether you're increasing the size of the order book or decreasing the size of the order book.
When you create an order that is immediately matched with already existing orders, you're a taker because you take liquidity from the market. When you add an order that doesn't match existing offers, you add liquidity to the market and are charged a maker fee.
For example given the following orderbook:

Alice sell 1 BTC at $1000

Bob  sell 1 BTC at $995

Charlie buy 1 BTC at $990

Dave buy 1 BTC at $985

If you add a buy order at $1000 for 2 BTC, you will immediately match the offers of Alice and Bob. You're a taker.
If you add a buy order at $993 it doesn't get matched and you're a maker.

In your case, both suggested prices for your sell order are higher than any buy offers, so you'd only pay the maker fee of 0%.


Casascius Coins are the ones that have been the most well known, though according to their website they no longer contain any actual bitcoin as of Nov 27, 2013.

https://www.casascius.com/

I am not familiar with any others, though I did find this article to be informative.

The pictures linked in the question look like they may be the Cryptmint coins in the article.

I also suspect that many of those pictures used in articles are just well-done computer-generated images.


Depends: libgcc-s1 (>=3.0) but it is not installable (Bitcoind wallet dependency problem on Debian)

You probably need a newer version of gcc.
This helped me fix for Ubuntu: https://askubuntu.com/questions/1140183/install-gcc-9-on-ubuntu-18-04
TL&DR: adds custom PPA repo so you will able to upgrade:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt --fix-broken install


How is difficulty enforced in the bitcoin blockchain?

Difficulty progresses in epochs of 2016 blocks. The difficulty for a given epoch is calculated from the difficulty of the preceding epoch and the difference of the timestamps between the first and the last block of the preceding epoch. The rules governing difficulty are part of the consensus rules.
Following the consensus rules is sort of voluntary but it's pointless not to. The network can only converge on a shared ground-truth by adhering to a set of shared rules. Generally, all nodes enforce those consensus rules. While you'd be free to create a block that doesn't adhere to the consensus rules, the block will be considered invalid by all other nodes.


PHP functions not working in bitcoin JSON-RPC version 16 (bitcoin-cli is working properly)

getinfo was removed from Bitcoin Core 0.16. Use getblockchaininfo, getnetworkinfo, getmininginfo, or getwalletinfo depending on what you actually need. A mapping of each getinfo field to its replacement can be found here: https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.14.0.md#getinfo-deprecated


So from what I understand, Bitcoin's PoW is prone to 51% attack, but as a distributed system it is also prone to BFT's 1/3 attack right?

No. Bitcoin is not a "consensus system" by any of the traditional definitions: It never reaches a state from which it can't, at least, theoretically roll back. In theory today's blocks could get undone years from now, but in Bitcoin the computationally difficulty of that increases over time.

As a result the impossibility results for consensus don't generally apply.

  The other is if more than 1/3 of the nodes in the whole network are bad guys working together with modified malicious node code then they can potentially stop the correct block being accepted.

Nah. So long as an attacker does not manage to partition the graph of honest nodes, they could control (say) 99% of the nodes and the network would continue to run just fine. There isn't some magic threshold number of nodes where partitioning happens,  you need only have a single honest peer to be completely functional.


Is the UTXO set size important for non-mining full nodes?

The main motivation cited is reducing block orphaning

Where do you see this being cited?

AFAIK, the motivation is to reduce the resources required to run a full node which has nothing to do with reducing block orphaning. Furthermore, the size of the UTXO set does not really effect block orphaning that much, especially with compact blocks and FIBRE allowing blocks to be relayed without being fully validated.

  My personal fullnode does not care about if the UTXO is fetched from disk and takes time to verify. (as long it's well under 10 mins)

Your node does not just need the UTXO set when verifying blocks. It constantly needs it to verify the transactions that it receives. Your node does not just sit idly doing nothing between blocks, it constantly receives transactions, verifies them, and relays them. If access to the UTXO set is slow, then verifying these transactions is also slow. It also means that your computer may be devoting a lot of extra resources in order to try to process transactions quickly which will impact its performance in other tasks if you use your computer for more than just a Bitcoin full node.

  1) Is there some other reason for research behind UTXO set size other than block-orphaning?

As mentioned earlier, block orphaning is really unrelated. The main reason is to keep the cost of running a full node down to allow full nodes to be run on as low end hardware as possible (e.g. a raspberry pi) so that there are more nodes. Having more full nodes is better for the network, and keeping the size of the UTXO set small helps allow for lower powered hardware to be used for full nodes.

  2) Directly related to the first question, is the UTXO set size really that important for non-mining full nodes?

Yes. All full nodes need the UTXO set in order to validate transactions. If the UTXO set is too large, it becomes more expensive to retrieve data from the UTXO set which thus increases the costs of running a full node.

Presumably you do other things on the computer that runs your full node. You don't want the node to take up all of the resources of your computer, otherwise you wouldn't be able to use it to do other stuff. Part of keeping the node performant is to reduce the size of the UTXO set.


Number of main chain in a blockchain network

The purpose of the blockchain is to reach consensus on the state of the network. Everybody has to be in agreement which money belongs to whom in order for the network to be useful. All four transactions would be collected in the same chain.


Why does Blockchain (the company) open source their code but not license it?

If they haven't put a license, it means it is "All rights reserved" You can refer to these questions about it:

https://stackoverflow.com/questions/4007674/whats-the-default-license-of-code-published-at-github

https://softwareengineering.stackexchange.com/questions/148146/open-source-code-with-no-license-can-i-fork-it

https://opensource.stackexchange.com/questions/1720/what-can-i-assume-if-a-publicly-published-project-has-no-license

It probably means "You can use it for yourself, and for small projects. However, if we want, we may shut down all your projects containing our code."


Why binary trees? Is there any particular benefit to using binary trees instead of some higher radix?

Bitcoin transactions are not stored in a Merkle tree. That is just one way of representing them.
The most common serialization for blocks is just:

Header (prevhash, merkleroot, time, nonce, difficulty, version)
Number of transactions
Concatenation of all those transactions

This serialization is used on the P2P network in block messages, as well as on disk for various software implementations. Other serializations exist, for example BIP152 compact blocks serialize them as a concatenation of transactions, where most of them are replaced with a short identifier, hoping that the receiver already have them.
The Merkle tree is relevant to block's commitment structure; the question on how you compute the hash of a block from its contents. That's all - the tree is never actually materialized.
This matters for one purpose only: being able to give short proofs inclusion of a transaction in a block. To do that, you must provide the transaction, as well as all partners that transaction is hashed with, so the receiver can recompute the parent, recursively, until they hit the merkle root (which they knew ahead of time).
What happens if you'd use a ternary tree? Yes, you'd have log(3)/log(2) times fewer steps in the tree, but for every inner node, you'd need to give two partner hashes. Using any higher number just makes the bandwidth cost worse.
In short: in terms of inclusion proof size, binary Merkle trees are best.


Buy coins using a australian bank account from Germany

Use one of the Australian exchanges such as coinjar.com or coinspot.com.au. They offer methods such as POLI and BPay (which are specific to Australia) for deposits from an Australian bank account.

The rates are slightly more expensive than coinbase but I doubt there's any easy way around that.


Why does Bitcoin Core take up so much space?

It's not Bitcoin Core that's taking up all the space, but the Bitcoin blockchain that Core needs to download, validate, and reference.  This is because Bitcoin Core is what's called a full node.  There is another type of wallet, called an SPV client, that does not require the full blockchain to operate, but relies on the trustworthiness of other peers in order to validate transactions.  I get the feeling that an SPV client is probably what you're looking for.

Alternatively, if you really want to run Core, you can store the downloaded blockchain on a separate hard drive so long as that drive is mounted when you want to run core.  You can learn more about that here:  How do I relocate my bitcoin data in bitcoin-qt to save space?


BTCPayServer vs. Bitpay or other for accepting bitcoin payments in online store

It's my highly subjective opinion, but if you're not a government organization, using a service provider like Bitpay is a terrible idea. Bitpay was known to create anti-privacy features, perform KYC, and even known to stop some payments from going to the recipient. Every time you use a payment processor who is the custodian for the funds you want to receive you're in danger of losing those funds. And on top of it, you pay for that.
BTCPay is feature-packed, not only for bitcoin (segwit addresses) but also for lightning network, connectivity to hardware wallets and much more. If you want to use any compliance suit on top, cool, but you don't have to. Also there are no fees for using an intermediary. You can create widgets and use it as a patreon page, webshop, or just monthly subscription. Setup is extremely easy and running it in a light version costs less than $10 per month.


BitcoinJ how to understand receive Address?

I'm not very familiar with bitcoinj but it appears to me that you need to do the following.

You're passed the transaction that was received (tx).  Call getOutputs to get a list of the transaction's outputs, and for each one, call getAddressFromP2PKHScript to determine the address credited by that output.

You should account for the possibility that there might be multiple outputs paying the same address, or multiple outputs paying different addresses that are in your wallet.


Why mining pools miners need to choose their difficulty?

Having a different difficluty and thus have lower luck does not reduce the payout at all. Payouts are proportional to a miner's hashrate. So with higher difficulty shares, the payout will be higher per share which compensates for having fewer shares.

However a miner will want to use an appropriate difficulty level even though the payouts are the same. Although the payouts will be the same in theory, in practice, there is a difference. If a miner mines at too low of a difficulty, the mining hardware may spend a lot of time having to send and receive data from the pool server that it remains idle for so long it can't submit as many shares as it should so the payout isn't as high.

Conversely, if the difficulty is too high, the hardware won't ever be able to find a share so the payout will be basically 0. So a miner should choose a difficulty which matches his hardware so that it is at 100% utilization almost all the time but still be able to submit shares frequently.

The pool difficulty itself has no effect on the luck a miner has on finding a share at the actual network frequency. Pool difficulty is just a way for pools to keep track of how much work each miner is doing.


Can Bitcoin transactions actually be reversed/"undone" by the sender by using/abusing the newish "replace-by-fee" feature?

Basically, he is saying that Bitcoin has been fundamentally broken on purpose by introducing the "replace-by-fee" feature, which, according to him, allows you to "reverse" (take back) Bitcoin transactions for minutes, hours and "sometimes even weeks" after it was sent.

Not true. Bitcoin transactions with ZERO confirmations were always unsafe to accept as final. RBF just allows you to manage transactions in a better way because fee estimation is difficult in Bitcoin. For example: You can use any algorithm or manually check mempool stats and use a fee rate to broadcast a transaction but lot of other transactions broadcasted at almost the same time with a higher fee rate will decrease the probability of your transaction getting confirmed soon. If required you can replace this unconfirmed transaction with another transaction by using higher fee rate and fee.

Another thing that makes me doubt myself and my own understanding of the whole situation is what he says about the Lighting Network, which I agree is "ultra-complex" and "never seems to come into actual use".

Its easy to use with wallets mentioned in this link: https://blog.bitrefill.com/top-11-lightning-network-wallets-bitrefill-328b5465b1b4
Exchanges: Bitfinex, Okex, Paxful, Kraken(soon), LNMarkets, fixedfloat, sideshift
DEX Protocols using LN: OpenDEX, OmniBOLT


Is there a way to create decentralised rating system akin to #bitcoin-otc?

Shouldn't be too hard. Let the identities be coupled with a private/public keypair, ratings for one another are signed. As long as you do not blindly trust identities with high ratings but instead go through the web of trust (either you directly trust someone or trust him because he's trusted by some of your trustees) then you should be able to recreate the #bitcoin-otc web of trust faithfully.


Buy and selling Bitcoin in different currencies

No, the price in each currency would have the exchange rate factored into it, you would most likely make a loss due to exchange fees converting from AUD to USD and back after you buy/sell. (assuming the price of bitcoin was stable through the whole process)


Cannot recover wallet from 12 word BIP 39 seed generated by Bread Wallet on iOS

Electrum doesn't support BIP39 (by default) as far as i know, so you will need to use another wallet.

You could try and use an older version of Electrum, then enable BIP39 seeds, and see if that works.

See https://onedrive.live.com/view.aspx?resid=584F122BA17116EE!313&app=Excel for wallets that DO support BIP39 seeds.

But then again, you said you tried Mycelium aswell, which might use BIP44 by default..?

Or, you choose for a "New" wallet when first booting up Mycelium, instead of the "Recovering" option.

You need to click the recovering/restore from backup option and fill in your seed, otherwise it won't work. Don't ask me why.

If you currently installed mycelium, you should delete all of it's apdate and reinstall it.

Possible duplicate of https://bitcoin.stackexchange.com/a/53461/61384


After being officially canceled, SegWit2x is live. Will transaction replaying be massive ? If yes what does this means?

Frauder then perform a segwit2x transaction through his segwit2x software to an exchange accepting segwit2x. The transaction being larger than 1Mb block size, it is rejected on the original blockchain and he keeps his balance on the original blockchain but not on the second.

Note: just because a transaction on the 2x chain is in a block larger than 1MB, that only makes the block invalid on the main BTC chain, but the transaction itself can still be replayed on the BTC chain.

Frauder then converts his segwit2x bitcoins to an other cryptocurrency like Doge or Litecoin, and send them to an exchange not supporting segwit2x (which he converts to original bitcoin).
He does the same operation on the exchange were he sent his replayed transaction (and sends the doge/ethereums to the same exchange he sends his ethereum doge converted from segwit2x).

Up til this point, all you have done is sold your S2X and your BTC for Doge or Litecoin, you have gained nothing extra. This is equivalent to selling both your BCH and BTC for Litecoin after the BCH fork.

He then repeat the operation by resending his doubled non segwit2x bitcoins to his wallet on his computer.

Firstly, he would not have doubled the non-S2X bitcoin. Even if there was trading support for S2X, the price would be much lower than the price of bitcoin so you might only gain a small extra percentage from the sale. For example HitBTC price for B2X is currently 0.034 BTC, so in selling your B2X you would only gain 3.4% more BTC than what you started with.
Secondly, after you have purchased post-fork BTC, you would not get the corresponding S2X coins too. You would only get the BTC that you purchased. So you cannot repeat that procedure. All you have done in the method you outlined is sell your S2X coins for a small amount of extra BTC, which is fine. In general, you only get corresponding fork-coins of BTC you hold at the time of the fork, nothing if you bought them after or sold them before the fork occurred. (Unless, due to no replay protection, the coins could not be separated, in which case you wouldn't be able to sell them either).


Lightning Network : Pay a Bolt11 Invoice in multiple Payments

Currently, no. The receiver will reject an attempt for less than the requested amount and fail with incorrect_or_unknown_payment_details.

Each invoice has a payment_hash which a payment corresponds to, and the payment hash is generated from a random payment_preimage. This preimage must be unique for each payment, else it may be possible for any party along the route of a payment to take money without forwarding the payment on.

When the payee receives the full amount for a payment, they release the payment_preimage to the penultimate hop in the route, who then removes the HTLC from their channel and the payment completes. The penultimate hop then forwards the payment_preimage to the hop before them, and so on, until it reaches to payer.

You can see that, if only half of the payment was done, then every participant along the route would already have knowledge of the payment_preimage. If you attempted to pay again with the same payment_hash, then any hop in that route could instantly remove the HTLC and take the payment by using the payment_preimage they already know, without forwarding the payment to the next hop.

There is work in progress to allow payments to be broken up and send along multiple routes, with the payee only surrendering the payment_preimage if the full amount from all routes is received. This is known as AMP (Atomic Multi-path Payments). There are multiple proposals for this which have been discussed on the mailing list.


Use getreceivedbylabel. It takes label and minconf as arguments. label is the label, and minconf is the minimum number of confirmations for a transaction to be considered for inclusion in this value. The default is 1 confirmation.


Electrum wallet is showing not enough fund

It's likely because of transaction fees. Go to tools > preferences > fees tab and check edit fees manually and set "propose replace by fee" to "always". Now on the send tab you'll be able to set fees manually. Note that if you set a fee that is too low and your transaction doesn't confirm you can right click on it on the history tab and choose increase fee to bump the fee higher.


Witness program hash mismatch while signing bech32 transaction

This error means that the transaction wasn't signed, which given that all of the inputs look correct, means that you are providing the wrong private key to sign the transaction with.


Bitcoins Anonymity - Do Exchanges Break It?

could authorities subpoena bitcoin exchanges for information regarding any accounts of anyone who bought bitcoin and sent the BTC to that public key?

Yes.

It seems the exchange of USD for BTC almost requires bank account information.

No.
Non-KYC exchanges: Bisq and HodlHodl


Could the $25/£16 Raspberry Pi computer be used to run mining equipment?

Yes and no.

As far as FPGAs are concerned, I see no reason why you should not, technically, be able to handle a getwork on one of these and pass the work units to one or more FPGAs via USB.

These units do not, however, have a PCIe slot nor do they have any connectors which, to my knowledge, are capable of connecting to an external PCIe enclosure box, so GPU mining is out of the question.

The real problem you're likely to run into is software. The Raspberry Pi uses an ARM processor and runs on a custom-compiled version of Debian. All software running on the device will have to be compiled from source (since most projects don't just release ARM-compatible executables) and even then some software simply might not work. I'm not an FPGA expert by any means so I've got no idea what kind of software is required to speak to that particular hardware, but I do at least know that software is required and you'll probably have to do some tweaking to make that hardware work.

So yes, it's technically feasible, but don't expect it to be easy (or done for you).


Were one or more machines required to be running 24/7 on the network after the first block was mined?

After mining the genesis block, did Satochi have to leave his computer running to mine the subsequente empty blocks?

You can be sure that he had to leave his computer for a while because the hash of the genesis block did already start with 10 zeros. That's a lot for an average computer.

  Was he running the whole network on a single node or did he require multiple nodes to test the transaction verifications?

I think, it's obvious that he wanted to test his own idea in a "almost real scenario" and so I think that he used more than 1 node.

  What would happen if at some point all nodes were off and no transactions or blocks were being generated?

Nothing happens. The nodes do this have the blockchain(s) in their memory. That Satoshi could not make transactions but the transaction history was still there.

  At some point the whole net work were probably a couple of personal computers. Did they run 24/7?

Probably a couple of them did do that to experiment.

But: We don't even know who Satoshi Nakamoto is. So we do also not know how he did it exactly.


If SPV clients didn't exist, would Bitcoin still use Merkle trees?

The merkle root is included in the block header as a cryptographic commitment of the transactions that were included in that block. Without such a commitment, the POW for the block would be computed independent of the transactions included in the block. Transaction ordering is important, so a cryptographic proof/commitment needs to be included in the POW, otherwise the network would be unable to verify which transactions are in each block.

The merkle tree structure itself could be replaced by something else (eg just chain all transactions, hash that, and include the result in the header as a cryptographic commitment), but using the merkle tree structure has some added benefits (faster verification for SPV wallets, for example).

There may be some other reasons I am not remembering, but the cryptographic commitment is the most obvious that comes to mind.


First, it should be said it's not possible to enforce which sighash flags may be used in a P2SH address. Signing is a concern for only the parties to wish to spend funds. Their intent can be captured using SIGHASH flags when signing.

OP is right, and certainly can mix SIGHASH flags in an input script. Signatures in the same script are considered separately, meaning each specifies its own SIGHASH flags. This informs validating nodes how to verify the signature, and mixing them


How do I find out where a bitcoin address is from?

You can't find a person, organisation or place from a Bitcoin address alone.

A Bitcoin address isn't really an address in the normal sense. It doesn't label a place or person or anything else in the real world. Really its just a reference number produced from a secret number by a mathematical function. You can't even reverse the maths to find the secret number from the address.


You can send bitcoins to the same address you are sending from, if you create a raw transaction manually, or if you use a wallet that does not create a new change address each time a transaction is made.

One reason why this new address process exists is to protect privacy. If you consider that the outputs of a transaction with change, where one of the outputs points back to itself, you will immediately be able to determine how much you paid, and factually, that you paid that amount to someone else, keeping the change.

If on the other had a different address is used for change, an independent observer cannot determine which of the two amounts was change and which was the payment.

However what I suspect you are doing is the classic mistake of thinking that the difference between what you are paying to the other address and what was in the originating address is automatically sent back to you.

I cannot emphasize this enough - the difference is sent to the miner as a mining fee. You have in effect not explicitly told the transaction what to do with the difference and it is therefore assumed that this is a fee that you are paying, and is collected by the miner who mines the block containing your transaction.

In order to avoid this, each transaction must have a minimum of two explicit payments, and one implicit payment:

Input amount
Payment to address 1 (must be less than input)
Payment to address 2 (must be change minus the fee that you want to pay)

The input must be explicitly greater than the sum of payment 1 and 2, and anything left over is implicitly the miners fee


As long as you keep your private/public keypair, you aren't in danger of actually losing the funds.

The problem is most likely due to "missing inputs" for your current wallet. In order to spend bitcoins, your wallet must reference the inputs that gave your wallet the funds in the first place. The function of the blockchain is to keep track of these inputs from creation to their current wallet. Without the full blockchain, qt will not be able to reference inputs for spending, and thus won't show such inputs as existing in your wallet.

Download the blockchain. If you can't/won't sweep you private key into a new wallet that has access to the full blockchain. This will also serve to reset the oldest input in your new wallet.


I guess you are missing the coinbase immaturity here.
Coinbase transaction can only be spent after 100 blocks.
A single generate will not make the coinbase-transaction appear in listunspent. If you do a generate 101 it will (because you mine 100 blocks on top of your "fee block").

Then you should get something like:

{
    "txid": "11cc285148b32fd312260a67193875420931b8511b5f34f2991feb5d94901b8e",
    "vout": 0,
    "address": "n3y4wCJcY8zzim3CWuKpFi6BPPAf6DzhVm",
    "scriptPubKey": "2103559b1d5cd126e03b8ee0887ffc1ffd74d34fae49e2e2e65f7708071b032aabf5ac",
    "amount": 25.01920001,
    "confirmations": 101,
    "spendable": true,
    "solvable": true
  },


There is no limit in the consensus rules about that. However nodes have a local policy rule about this. In Bitcoin Core, the limit is 25 unconfirmed transactions. This limit is user configurable.


How to use UTXO of xpub derived addresses?

Gabriel’s HD wallet offers a much better solution through the ability to derive public child keys without knowing the private keys. Gabriel can load an extended public key (xpub) on his website, which can be used to derive a unique address for every customer order. Gabriel can spend the funds from his Trezor, but the xpub loaded on the website can only generate addresses and receive funds.

The link you mentioned describes how you can use XPUB to get new address for each order on your website and the address will belong to your wallet setup maybe on a hardware wallet or elsewhere to spend.

But how do we access that money if we don't have private keys?

You don't access it on the web store but you access it using hardware wallet or maybe wallet setup on a different machine etc.
You can try this with btcpayserver