I am not sure that I can rule out that something useful could be achieved with a tree of blocks, but let me walk you through a few thoughts and you can then tell me whether they answer your question.

When we're talking about Bitcoin, we should make clear what we're actually interested in achieving. We're talking about a decentralized system to track value, so to put it crudely, the main goal is to agree on who owns what. Additionally, we need a way to update ownership, or people wouldn't be able to transfer value.

In accounting systems, these two functions are generally fulfilled by a journal and a ledger. The ledger contains the current balances and the journal is a log of all changes.

You should think of transactions as updates to the ledger. But, since the network doesn't have a central party, what happens if some malicious party attempted to tell different parts of the network conflicting updates? How would network participants know which version of the update to apply?

To that end, Bitcoin has a lottery to elect temporary authors for the journal. To enter the lottery, participants pay with computing power, and when they win, they get to write one page of updates to the journal, i.e. author one block. Of course everyone else is watching the journal as well, so they have to stick to the rules and pick a valid set of updates. Regarding the "doublespending problem", this means that when there are multiple conflicting transactions, they can only chose a single one. Voilá, we now have a mechanism how to pick a ground truth in the network without a central figurehead!

You might have noticed that the ownership of value is not actually tracked in the blockchain! Rather, it's the Unspent Transaction Output Set (UTXO Set) that tells us who owns what. Where the blockchain corresponds to the journal, you can think of the UTXO Set as the ledger. While the ledger is the thing we're interested in, you need to apply the whole journal to compile the current ledger. So, in the end, the blockchain is basically a waste product of our desire to converge on a single shared UTXO Set.

Now, given our goals, it may seem a little more obvious, why we only want one single last page in the journal instead of multiple in parallel: otherwise, there would be multiple possible versions of the ledger and we wouldn't agree who owns which money!


What if two public keys have the same hash？

In your scenario, Carmen can simply see and spend the money as if it was theirs.

The network does not have any way of distinguishing this event.


Where to buy non scam bitcoin with ICBC credit card?

You are likely to have trouble finding a place to buy Bitcoin with a credit card. A credit card transaction can often be charged back, in which case the seller has no way to recover the  bitcoins. Honest sellers may not want to take this risk, meaning they are probably far outnumbered by scammers.


Generating Bitcoin Public and Private Keys

Bitcoin uses point multiplication on the Elliptic Curve secp256k1 to generate a public key from a private key. Basically, this curve has a defined Generator point G, and a method for 'adding' two points together in a way to get a new point (EC Point Addition).

Your private key is just a number, aka a Scalar, so to get your public key you just add the generator point to itself privkey number of times - basically scalar multiplication on the Elliptic curve. At the end, you'll end up with a point on the curve, with an X and Y coordinate, and this point is your public key. Those two coordinates of your point are what is referred to by the document you quoted, using 32 bytes for each coordinate plus a prefix.

The 0x04 prefix used is to denote the fact this is an uncompressed private key. You can also form a compressed version, by just using the X coordinate with either 0x02 or 0x03 prefix, because the Elliptic curve has only 2 values for Y coordinate for each X coordinate (one positive and one negative), so it's trivial to recover the Y coordinate if you know the X coordinate and the sign (based on your choice of prefix).


How long would it take to crack an 8-word brain wallet?

A very, very long time.

Oxford English Dictionary contains full entries for 171,476 words in current use.

If you use only lower case letters and they are mostly random words (no phrases - "four score and seven years ago" is like having your password be "secret"), there are about 7.47e41 possibilities.

At 50 million attempts per second, it'll be about 4.74e26 years.

The current estimate for the age of the universe is 1.2e12 years.

If you reduce it to just the most commonly used 1000 words, at 50m gueses a second, it's reduced to 634,195,839 years.

That's pretty secure for a password.


Gridseed not mining bitcoin - no shares accepted

So, I'm not much of a miner myself, so please take this with a grain of salt.

When I plug in your numbers into a mining calculator, 11Gh/s resolve to earnings of just below 0.001 btc per month. This corresponds e.g. to the minimal "Send threshold" you can set on Slush pool. It's worth is less than $0.5 (for the whole month), where you probably pay a few cents per hour in electricity.

On another help page Slush pool states "Permanently Low or Offline state of your worker can be caused by weak worker whose hash rate is below 10 Gh/s. We recommend to switch off monitoring for such workers."

I suspect that your hashrate may be so low, that pools don't serve shares at a level where you can succeed, but perhaps you can find out more if you specifically research corresponding to that line of thought.


What could be causing hourly bitcoin price spikes?

Someone could have programmed a bot to place buy-orders every hour based on a some historical price average, say over the last 24 hours.


If you want to hold bitcoins anonymously then the only thing you can easily do is a cash transaction.  In the good old days you could just have mined some, but that's not an option available to most people today.

To answer the specific question, the exchange will have records of the receiving and sending transactions, so if you consider them to be compromised then there is no additional security available in using an exchange regardless of if you are moving currency within a blockchain or  between blockchains.


scriptcode, scriptsig, pubkeyscript confusion

The execution order is:

scriptSig/witness to construct the initial stack
scriptPubKey (which may invoke redeemScript evaluation in case of P2SH, and witness script invocation in case of P2WSH)

The scriptCode is simply a name for "the code being executed". Inside scriptPubKey evaluation, it is equal to the scriptPubKey. Inside redeemScript evaluation, it is equal to the redeemScript. Inside witness script evaluation, it is equal to the witness script.


How to access my Segwit2X currency using private key after the hard fork?

To use the SegWit2x chain directly you'll need to download and build the btc1 full node from the git repo. You then copy your existing Bitcoin (SegWit1x) full node wallet file into the btc1 directory to load your existing private keys.

BUT I wouldn't do that. There doesn't seem to be a safe way to spend SegWit2x coins without risking your Bitcoins. It seems like the recommended approach is to wait until after the dust has settled, with some articles indicating this could take a few days after the fork, and then determine if there's a safe way to spend your 2x coins (most likely by converting them for 1x coins which I'm sure is what you had in mind).

Update: You could take a look at the chainspl.it initiative and their associated design doc to get some additional ideas. Although after perusing the site and reading the doc I'd still say it's arguable whether the "easily handle forked coins" tag can be lived up to.


Is there anything called anonymous or private bitcoins?

Edit: This is almost certainly a scam - I'm looking at the source right now, and they have replaced the actual Bitcoin seeds with IPs, so it is likely a cloned network that tries to trick you into accepting worthless coins. It may also steal your keys, but I don't have evidence for that yet.

Within Bitcoin, there is no form of private transactions (in the form that you will not see it on Blockchain.info).

Moreover, the website you linked to is almost certainly a scam - The footer claims that it is built by the Bitcoin Core Developers, which seems unlikely (archive.org). You can find the actual wallet/node built by them directly on Github -https://github.com/bitcoin/bitcoin.

It seems likely that they have either:

Created an altcoin network, and are distributing their own wallet that connects to their network while branding it as a Bitcoin wallet. This would trick you into believing you have received Bitcoin as payment, while you have actually received worthless coins from a cloned network. This would also explain why blockchain.info is not showing the transaction.
Distributed a malicious wallet client that is able to steal your keys in some way (or provide you with keys that are already compromised), so that if you receive actual Bitcoin, they can take it from you.

If your client wishes to pay in BTC, there are many safe ways to accept it. You simply need to download an actual, reliable bitcoin wallet, such as from the link above, or Electrum, or buy a hardware wallet such as a ledger or trezor.

Then simply provide the client with an address from your trusted wallet - As long as you receive BTC with multiple confirmations, you can be sure that it is valid. When dealing with someone who is already attempting to scam you, make sure you check multiple sources before considering the payment completed, such as checking your transaction on multiple, independent explorers, in addition to what your wallet shows you.


Hey everyone fixed my own problem with viabtc

I recommend using them if you have been waiting. Both transactions started confirming within the hour!

My fee was between 28 - 50 sat/b

So if you have given a fee that's low (no lower than 0.0001 Btc) then go with these guys


How to prove legitimacy or that my coin was not used in a recent illicit deal?

Administratively, there should be plenty of evidence that Bob was working a legitimate job.

If the web firm is a US company and Bob a US worker, then the company is required to file a form 1099-MISC.  Yes ... even if they paid him in non-USD currency.
Some time in that seven-month period, Bob should have paid his quarterly    taxes.  That adds to the legitimacy of his income.
There must be some kind of timekeeping and invoicing process between Bob and the web company, along with specifications, emails, and other evidence of a working relationship.
Bob can point to the stuff he built. (I know from experience that this isn't always possible.  I have worked on a lot of internal projects that people outside a company never have access to.)
If the web company bought their bitcoins on open exchanges, then there is an associated bank account and a bunch of regulatory machinery that has already kicked in at some point.  The company is already being monitored under the usual rules for currency exchanges.

There is a technical side of this too.  Because the entire bitcoin ledger is public knowledge, it should be very clear that Bob has been saving his bitcoins for the past several months.  That is probably not typical behavior for a money launderer.  If, on the other hand, it is clear Bob has been using a mixing service to receive his Bitcoins he may have a problem.

Ultimately all money is fungible.  As you've already intuited, this problem isn't really much different from if Bob was taking his pay in USD instead of Bitcoin.


Ledger: is the private key tied to the device or the wallet?

The keys are tied to the mnemonic (or seed phrase or recovery phrase) that you use. The keys are derived directly from it. If any gains access to the mnemonic, they can directly produce the private keys that you used without access to any of the physical hardware. Furthermore, having the mnemonic does not allow them to unlock your hardware wallet - the PIN you use is independent of and unrelated to the mnemonic and the private keys. But that is moot because if someone has the mnemonic, they don't need your hardware to take your Bitcoin.
Importing means that you setup a new device with the same mnemonic. So anyone with the mnemonic can still take your Bitcoin. If they get access to the old device and figure out the PIN, then they can also take your Bitcoin because it is the same private keys.


Who generates a new block in bitcoin blockchain?

Yes. Miners are the ones who generate new blocks on the blockchain. But in your example, Alice and Bob act as sender and receiver, neither is considered a miner.

When Alice sends Bob $1 (0.0002384 BTC), their transaction gets added to the blockchain's memory pool or mempool of still pending transactions. From there miners compete to see who can find the correct solution nonce to solve the math problem, validate a block of mempool transactions, and receive the 12.5 BTC mining reward.

Once Alice and Bob's transaction is validated by a miner it is considered confirmed. 6 confirmations (the original, plus the next 5 blocks) is considered to be irreversible and safe to classify as complete.

Additionally, it's important to notice that there is no way to find out or expect who will be the next miner due to the nature of mining (proof-of-work) which is based on randomness. Indeed, randomness provides robustness to the network. For example, an attacker won't be able expect from where the next block will be generated. Here is nice paper on that.

A miner can be anyone who is running a full bitcoin node (with the mining flag enabled). However, because of how difficult it is to solve the math problem, the majority of miners choose to pool their resources into a mining pool. The pool's participants then collectively share the 12.5 BTC reward proportionally to how much work (read computing power) each miner contributes to finding the solution.

To gain an advantage, most of today's miners use specialized hardware called ASICs.

From Wikipedia

  An application-specific integrated circuit (ASIC) /ˈeɪsɪk/, is an integrated circuit (IC) customized for a particular use, rather than intended for general-purpose use.

Asics are designed to maximize the efficiency of the problem solving process and have basically made CPU and GPU mining pointless for Bitcoin. However, GPU mining is still extremely popular with several Altcoins, which were specifically designed to thwart ASICs and level the playing field.

Take a look at this Reddit thread for more info on which coins you can still GPU mine effectively.


List transactions after losing wallet and private key?

If you have your wallet.dat in the Bitcoin core and someone else for some reason knows a private key that is associated with this wallet.dat, this person can spend the Bitcoins of that private key in basically, any other wallet, if this person does that, you will see this transaction in your Bitcoin core as the type "Sent to".
If you like to test it you can type listunspent in your Bitcoin core, then you will see the addresses with an amount to be spendable, then you can copy any of these addresses and take the private key for that address using the command dumpprivkey address, take this private key and import in any other wallet then send the Bitcoin to some other wallet.


How much binary data (bytes) could I put in a transaction and how?

There's 3 related issues to your question where confusion may be arising.

The Blockchain can be used to hash PDFs or JPGs as a means of proof of existence - this is not the same as attaching the document itself
As seen here, it is (was?) possible to take hex code for a PDF/JPEG and use the resulting hex string as a public address. Splitting the file into ?? byte chunks then using these addresses as outputs in a Bitcoin transaction allows for things like photos of Nelson Mandela
Coinbase (source of mined coins) allows 100 bytes of arbitrary text in the block which was utilised in the Genesis Block, where encoded in hex (0x5468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73) was the phrase: 'The Times 03/Jan/2009 Chancellor on brink of second bailout for banks'.

Find more interesting stuff encoded in the Blockchain at BitcoinStrings.com


Solving PyCrypto 2.6.1 errors for Python 3.4 (Windows7 x64)?

Binaries available for Python 3.4:

https://github.com/axper/python3-pycrypto-windows-installer 32 & 64 bits

As outlined here on SE, binaries available for Python 2.x - 3.3:

http://www.voidspace.org.uk/python/modules.shtml#pycrypto

This solves the dependencies issues error compile failed with error code 1 using pip. Also, the following error screen (at the CLI) should not be appearing any more following installation, via pip or setup install, of pycrypto dependent libraries!

Skipping implicit fixer: ws_comma
running build_ext
building 'Crypto.Random.OSRNG.winrandom' extension
warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath.
error: Unable to find vcvarsall.bat


Understanding Nano Ledger S concept + Full Node

Here is my understanding - please let me know if any-step is incorrect.

All correct.

Since my computer is not a node, how does my client software "send the message to the network". I presume I need to be connected to wifi. Then what?

Ledger Live, I believe, just connects to Ledger's service, and it uses Ledger's node. If you care about privacy and/or don't completely trust Ledger, you should not use it.

If ledger live is not a full node wallet, what is it querying to produce the information like my "account values".

Ledger's server.

I have read that full node wallets are better because they don't require me to trust a third party. Can I link bitcoin core wallet to my ledger device?

Kind of, there has been work towards integrating hardware wallet support with Bitcoin Core, but it's not particularly user friendly yet (it's possible with 0.21 and the HWI project, but you'll need to use the command line to pass stuff around. This will improve in future releases.

Is the idea here that when I view valuable information on my interface (like number of confirmations on a transaction, or value of my UTXO's), it is querying the full blockchain stored on my node instead of gathering information from someone else?

If you have that information yourself, sure - no need to trust anymore else.

Is ledger wallet or bitcoin core wallet coin selection algorithms known to public?

Both are open source software, so you could just look at what they're doing.


Information about incoming transactions for a number of addresses

I'm not an expert here, but it looks like you're on the right track. See:

Bitcoin API (JSON RPC)
API Calls List

I'm guessing you can use the JSON RPC format to make the calls you need (i.e. "getbalance" and "getaccount" calls).

As for reading the sender's address, perhaps "listtransactions" helps?


Block rewards (coinbase outputs) can't be spent for 100 blocks.

This is called "maturity" in the codebase and is to protect some behavior around reorganizations.


Should earnings in Bitcoin converter to a traditional currency be treated as trading-income or non-trading income for tax purposes?

You might not like this answer but the correct approach for figuring out taxes related to Bitcoin earnings is to ask the question to your local tax authority, in written form and get an answer that your local tax administration legally commits to.

I can speak only for France, but I assume the same kind of thing is possible anywhere. In France you can ask for a "rescrit" it is a written answer from the FISC (our tax authority). Once they gave you an answer they are legally obliged to stand by it.

There is no other correct way to account for your Bitcoin taxes than asking the people that actually can give you a definitive and legally binding answer.


Addresses found in wallet.dat that start 00 14

More than likely these are native segwit address scripts. Native segwit scriptPubKey start with 0014 followed by a 20-byte public key hash. There is an online tool available for encoding the public key hash into its native segwit address representation. Note that although the risk of using such tools is minimal in terms of security, there is a possible risk toward privacy. I have not personally verified/reviewed the code for this online tool and you should proceed with caution.

Remove the 00 14 section and paste the remaining 40-character string (20 bytes) into the "Data" field. The associated bitcoin address will be displayed on the right-hand side under "Encoded data".


I don't have CentOS, but running on SuSE Linux, which is quite similiar.

At first, let me say, it is not recommended to run bitcoin daemon with root privileges. You may want to create a user to run bitcoin.

After install with the script, you should have three files (well, symbolic links) in /usr/bin, one is bitcoin-cli, the other we need bitcoind. With the new user you would open a terminal window, and see if you can start the daemon (bitcoind). It would normally create a bitcoin.conf file in the directory ".bitcoin" in the users home directory. In this file you can set the rpcuser and rpcpassword, that you will then use with bitcoin-cli.

If daemon does not start, is there any logfile from the system or in the ~/.bitcoin directory of the user?


Why all blocks at Blockchain are relayed by Unknown now?

There was an update to the site that changed its behavior to no longer properly identify who relayed blocks.

Until they fix the issue, you can use other blockexplorers to find the information.

Given your stated usecase, I suggest you look at http://coin.dance/blocks


How to import entire Armory wallet into Electrum?

In Armory:

Select "Wallet Properties".
Select "Backup This Wallet".
Select "See Other Backup Options".
Select "Export Key List".
Select "Omit spaces in key data".
The important string is the PrivBase58 for every bitcoin address. It is the private key of this address encoded in base58 (encoded not encrypted), which is the (only?) format Electrum accepts when importing.

In Electrum:

Select File → New Wallet
Enter the private keys you took from armory into the textbox


Does Bitcoin use smart contracts to enable multisig?

Bitcoin's script language that enables smart contracts is used for everything in the technology, even single signature payments. One could say even those are smart contracts.


Bitcoin Core - autogen.sh failing on Mac

This happens because /usr/local/bin/glibtoolize: is pointing to the wrong directory

line  49 : ${SED="/usr/local/Library/ENV/4.3/sed"}

This was changed when homebrew decided to move their paths. See this stackoverflow post

What worked for me was

brew reinstall libtool


What are the top crypto-currencies based on funding?

Bitshares - 500,000 USD from investors + 5625 BTC in donations (via BTS AGS)
Digibyte - 250,000 USD from investors
Ethereum - 31,531 BTC from presale
Factom - 2287 BTC from presale
GetGems - 2633 BTC from presale
MaidSafe - around 12,200 in BTC from presale
Mastercoin (Omni) - around 4700 BTC from presale
NEM - around 63 BTC from presale
Neucoin - 2.25M USD from Investors + around 4000 BTC from Neucoin presale.
NXT - around 21 BTC from presale
Ripple - Over 30M USD from VC's
Stellar - 3M USD from Stripe
Storj - 910 BTC from presale
SuperNet - 5737 BTC from presale ~ part the the NXT platform asset
Swarm - 1200 BTC from presale
ViaCoin - 610 BTC from presale
Ziftr - 3700 BTC from presale

Taken from: https://bitcointalk.org/index.php?topic=1045967.0

Highest funding: Ethereum & Ripple

Lowest funding: NXT -- but they seem to have the most progress compared to every coin out there so far from this research as of 2015-Jun.

Conclusion, its not funding or even a good team, but something else in play that causes good progress in one of these funded coins.


Chronologically sorting transactions within a block

The arrow-of-time in bitcoin is achieved through the blockchain. The whole point of proof-of-work is to arrange transactions in chronological order, to prevent double-spending.

Under this light, transactions in the same block cannot be put in strict chronological order; the time each miner saw an unverified transaction varies depending on their view of the network. The only certain order is that transactions in a future block happened after transactions in a past block (a parent block) on the blockchain.

You can order transactions heuristically if you want, but this is not cryptographically secure. One way to do it is to look at when they first appeared on the network, e.g. on blockchain.info or some other such service.


Bitcoind v0.18 was unable to broadcasst my channel transactions because of bug in LND. This error has been found in lnd log:

Second argument must be numeric (maxfeerate) and no longer supports a boolean. To allow a transaction with high fees, set maxfeerate to 0.

https://github.com/lightningnetwork/lnd/issues/2961

I have downgraded bitcoind and the stuck transactions moved.


How finding a working nonce says anyting about the validity of an initial transaction

Finding the nonce and computing Proof of Work is unrelated to transaction validation. Locking blocks together in a chain of expensive Proof of Work ensures that is expensive to replace the current ledger/ blockchain with an alternative.

Further, transactions do not contain information about blocks or Proof of Work. Validation of transactions is achieved through the use of Elliptic Curve cryptography. Specifically, an Elliptic Curve Digital Signature Algorithm (ECDSA) over the curve secp256k1.

The mathematics of ECDSA ensure that only those who know the private key can generate valid signatures. However, any one can use the public key to verify that a signature was produced by somebody who has knowledge of the private key.

Lastly, to ensure that unspent transaction outputs (UTXOs) are not double spent, the Bitcoin protocol dictates that a block is invalid if it includes a transaction which references a specific UTXO as an input which has previously been referenced in a transaction input before.


Armory takes 8 Hours to sync. Is it going to get worse as Bitcoin becomes more popular?

The short answer would be yes, if the chain
becomes bigger it takes more time to download
it.

The more detailed answer would be: there is
plenty of options to make it quicker: for
example you can download already constructed
chain from some trusted source.


Expected property "0" of type ECPair, got p

HDNode was removed and is now a separated package.

  npm install bip32 See Issue #1243

const bitcoin = require('bitcoinjs-lib')
const bip39 = require('bip39')
const bip32 = require('bip32')

const mnemonic = 'praise you muffin lion enable neck grocery crumble super myself license ghost'
const seed = bip39.mnemonicToSeed(mnemonic)
const node = bip32.fromSeed(seed)

Test examples: bitcoinjs-lib tests


How do the blue encrypted bitcoin paper wallets work?

When the time has come to spent your coins, whatever wallet software you use to scan the private QR code, will have to ask you for the passphrase.

Give it a try with one and any wallet app on your smartphone. You don't need to put any bitcoins on it.


Bitcoin Core 0.10 was not released until 2015. It is impossible for you to have used that version in 2013 as it did not exist.

However the wallet format itself has not changed since at least 2012 (and earlier really) so it is completely fine to upgrade your software. The wallet.dat file can still be used in Bitcoin Core 0.15. All you need to do is make sure that Bitcoin Core is shut down, go to the Bitcoin Core data directory, and copy the wallet.dat file from there to the Bitcoin Core data directory on your other machine.


No suitable long-poll found means that your bfgminer could not find a server that will inform it of a new block appearing on the network. This is correct, since you are solo mining, and litecoin-qt doesn't supply this.

Don't worry, your setup is correct.

Not having LP only means that your miner will get informed a little bit slower by litecoin-qt about a new block a little later, and potentially doing work on a block that has just been solved for a few seconds at most.


(Shouldn't be too hard) Where vanitygen checks if the random address starts with the expected pattern?

Recall that vanitygen allows you to list several patterns and search for addresses that match any of them.  It looks to me like for each prefix, we compute the range of hash160 values that, after base58 encoding, would match the desired prefix.  (Conveniently, the checksum only affects the end of the address, so we don't have to worry about it.) These ranges are put into an AVL tree.  Then vg_prefix_avl_search takes a generated hash160 and searches the tree to see whether it matches any of the desired ranges.  Note this means that base58 encoding doesn't actually have to be done at all for addresses that won't match.

If we are in regex matching mode instead, then the relevant code is in vg_regex_test which is pretty straightforward: compute the base58 encoding and match against the given regexes.


Why is it so expensive to transfer Bitcoins?

What's the point in using alternative moneys if it is far more expensive than actual banks?

Well, there are more advantages. It's a decentralized system, you act pseudonymously...

  And how can I do to avoid these transfer fees next time I want to buy neos??

1) You wait until the fees are low again. 3 months ago, you could send 500$ as Bitcoins with a fee of only 0.07$. I think, they will decrease again.

2) I think, there are also exchanges that accept $ or € to buy NEO directly (https://anycoindirect.eu/en/buy/neo for example)


How do I ensure that the multisig transaction that's signed by multiple parties is the same?

Your server creates the transaction, so it knows what to compare it to. I create a json array of the outputs, hash and store the resut. Later when a user submits a partially signed, or fully signed transaction, I need to check it's valid.

First verify the inputs are the correct txid's, and that a signature was added by that user by doing ECDSA signature verification. This parts tough, look at http://en.bitcoin.it/wiki/OP_CHECKSIG. Then compare the hash of the outputs against what you're expecting, since if an address or amount changes, you'll get a different result.


Transaction Rejected, bitcoins not returned to wallet?

Have I lost my bitcoins

no. unless confirmed the bitcoins are still yours

  or what can I do to recover them?

you can do nothing. you should wait and spend your time for learning


Is the whole idea of proof of work or proof of stake quite unnecessary and superfluous for cyptocurrencies?

Can you elaborate some of your statements a bit?

  Now this time calculation is merely a matter of good faith, and hope that a majority abides by it.

When you have a look here you will see that the average block times is 9m 4s. Not too far away from the ten minutes the protocol tries to enforce.

  If you look a bit deeper, the whole hash function itself relies on good faith, also called the 51% risk/attack whatever.

Why does the hash function rely on good faith?

You're example ripple is in no means a replacement for bitcoin or ethereum. It is a completely centralised currency / system. We could use SWIFT banking instead.


How to fetch all UTXO from a SPV wallet using bitcoin-filter.js (or other lib)?

You are asking a few different questions here, I'll try to help with each:
Wallet filters: See BIP37 which describes SPV wallets in general. A Bloom Filter is generated by the SPV wallet and sent to full nodes on the network. The filter is a compact data structure that represents every public key the SPV wallet is interested in. The full node will check each transaction in blocks and the mempool against this filter and if there is a match, that transaction is sent back to the SPV wallet. BIP37 specifies all the data the filter is tested against but in summary, it includes transaction hashes, public keys, public key hashes, and script hashes.
You can see here in the bcoin wallet (also JavaScript) where the wallet's public key hashes and watched outpoints are added to the bloom filter.
The bcoin socket API also has a method for adding address hashes to a bloom filter before it is sent to a full node.
HD Wallet Addresses: To understand HD wallets it's important to read BIP44 which describes the recovery process. During BIP44 wallet recovery, the program starts with a seed of entropy (derived from your 12- or 24-word phrase). It then generates account 0, receive and change addresses 0 through 20. Then, starting from a specified block height (just before the wallet was first generated in time) it iterates through the blockchain looking for TXs that match those addresses. Every time it finds a match, it generates another address (the 21st address, and so on...). In SPV mode, each new address would have to be added to the Bloom Filter and sent back to the full node. This actually can cause issues with the wallet sync, and some blocks may need to be re-scanned.
Notes:

I am using bitcoinjs-lib to create private key (WIF), addresses and sign the transactions. I would like to fetch all transactions (UTXOs) associated with a wallet.

In general using a single private key and reusing a single address is considered bad practice. BIP44 is an excellent design for wallets that generate multiple keys and addresses.
If you really only have one address to scan for UTXO you can use an address indexer like in bcoin or soon-to-be-merged to Bitcoin Core. You may also have some success just using rpc scantxoutset fo your single address.


What are the pros/cons of the Multigateway service on NXT?

The Multigateway (often abbreviated MGW) is a service that was built to run on top of Nxt and acts as a semi-decentralized exchange.  An asset is issued on the Nxt Asset Exchange (the AE) and users can buy and sell this asset.  The value of the asset is presumed value of the associated cryptocurrency, in Nxt.  For instance, a BTC Nxt asset should trade at the value of BTC in Nxt.

The idea for semi-decentralization is that N separate individuals agree to run a multigateway server for a specific, non-Nxt cryptocurrency that supports multisig transactions (BTC, LTC, DOGE, just to name a few.)

Each server manager contains a multi-key to the associated addresses that hold the funds for the exchange.  When a user makes a multigateway purchase on the Nxt Asset Exchange for the currency provided by the multigateway operator, they can request a withdrawal by sending a message over the blockchain.

For the withdrawal to take place, a majority of the keys, held by the MGW servers, from the payment address must sign the withdrawal transaction.  For instance, if 3 MGW servers manage a BTC asset on the AE, then 2 servers must sign the out-going BTC payment before it is considered valid by the BTC daemon.

The advantage to this setup is primarily two-fold.  First, if one of these MGW servers manages to get hacked, and the keys are stolen, the hacker can't take the coins.  He will have to also hack into at least one other server (assuming there are only 3) and still those keys as well, before he can clear out the exchanges wallet.

The second benefit is that those who run the servers can't withdraw funds on a whim.  The majority of the server managers must agree to make a manual withdrawal and sign the transaction together.  This means that no single manager of an MGW asset can withdraw any associated cryptocurrency that's being traded on the AE.  If a bogus-transaction occurs outside of the typical MGW functionality, then the MGW managers would have some explaining to do.

It must be understood that the 3-Server setup is most common but isn't the only setup possible.  There could just as well be 5, 6 or even 7 servers.  If there were 7 servers, then 4 of those servers would need to sign the withdrawal request.  Notion is why the MGW can claim to be "decentralized".


What does it mean by "many different transactions tied to a particular bitcoin address" in this context?

many different transactions tied to a particular bitcoin address

The sentence refers to the fact that the address can be involved in many different transactions. This is most likely seen with the address working as a receiving address, or destination address. For instance, imagine that you want to have an address posted in your personal website where you receive donations from people. It would be tedious to change it every time you receive a transaction.

As you already mentioned, reusing an address is not usually a good practice, since it could involve some privacy issues. By using a different address each time you perform a payment, you make it harder to link different bitcoin addresses owned by you (however, not impossible). By using always the same address when paying you make way easier for a third party to analyse your behaviour, based on where you are sending bitcoins.

Finally you should not mix up Bitcoin address with wallet. Think in a wallet as a collection of tools that let you manage your Bitcoin address (or addresses), such managing public/private keys to create transactions. What is said to be a bad practice in the Bitcoin wiki is referring to use the same Bitcoin address multiple times. The wallet is a collection of tools, the Bitcoin address will be more like an endpoint.


How can I unstuck a transaction sent from Mycelium?

First, find the transaction on a blockchain explorer like blockchair.com or blockchain.info and make sure it appears as valid. If it isn't found, it wasn't broadcast at all by your wallet, and you can find many free broadcast services here.

Assuming it is valid, has been broadcast, then find a free transaction accelerator (don't bother paying the ones that ask for a fee) and enter the transaction ID and usually you'll see it get confirmed. I recommend the ViaBTC Accelerator*  or creating an account at AntPool (free) and using the AntPool accelerator.

Be patient. It can still take a few hours or so.

* You'll have to time it right. They only allow a handful per hour.


Are there bitcoin exchanges that do not require an extensive verification process?

No U.S. exchange. Btc-e does not but they will not do business with U.S. banks. Coinbase does not have an extensive verification process, but they are technically not an exchange, and to buy or sell bitcoins through their service you have to link a U.S. bank account which for all intents and purposes is the same thing as verification.

Due to the patriot act any currency exchange doing business with the U.S. has the burden of proving that they are not laundering money for terrorists.


Can malicious peer hack freshly installed bitcoin-core node

Does freshly installed bitcoin-core node have genesis block included in the installation?

Yes.

  This fresh node contacts some peer for downloading blockchain. Can malicious peer give node wrong chain? Is this attack possible and how is it mitigated in bitcoin?

There is no way for the chain to be "wrong" that would not be detectable to the node. If it's invalid, the node will reject it. If there's a longer chain, the node will reject the shorter chain. If it's the longest, valid chain, it's not wrong.


How much Bitcoin did I mine in December 2013?

You can go to https://en.bitcoin.it/wiki/Non-specialized_hardware_comparison for a table of mining performance of many different CPUs and GPUs.  The GT650M is reported as doing 17.8 Mhash/s; let's round it up to 20.  There is a range of values for various Core i5 CPUs from 5 to 20 Mhash/s; let's be generous and call it 20 also.  So you were mining at a combined rate of say 40 Mhash/s; in scientific notation that's 4.0e7 hash per second.  You mined for 28 days which is 2.4e6 seconds, so you performed a total of 9.6e13 hashes.

Next we need to know the mining difficulty around that time.  There is a chart at Blockchain.info.  It was increasing rapidly during that time but in early December it was around 707,000,000, or 7.1e8.  Each 1 unit of difficulty corresponds to 2^32 = 4.3e9 hashes needed to mine one block.  So at that time, it took about 3.0e18 hashes to mine one block.

As such, you would expect to have mined 9.6e13 / 3.0e18 = 3.2e-5 blocks.  The block reward at that time was 25 BTC per block (see https://en.bitcoin.it/wiki/Controlled_supply) and so you would have earned, on average,  BTC 8e-4, or in other words BTC 0.0008.

At today's exchange rate of USD 6149 per bitcoin, that is worth just under USD 5.00.

This is of course an average, or expected value.  If you were mining for a pool, this may or may not have been enough to actually earn a payout.  If you were solo mining, you would have had to mine a full block worth BTC 25; the probability that you did so is about 3.2e-5.


Will I, or anybody have more capabilities with a Lightning Node, that is CPU or GPU Powered?

No
I believe all implementations of Lightning nodes are CPU based. There doesn't seem to be any need for using GPUs to accellerate any mathematical computations.
I assume we exclude budget microcontrollers from what you mean by "CPUs". We are talking about CPUs found in general purpose computers on the market today that have at least some usefulness as typical light-usage desktop computing devices.

For instances a more powerful computer vs Raspberry Pi

It seems you can run a Lightning network on a Raspberry Pi 3.
Having a faster CPU doesn't give you any specific financial advantage over other people. It just makes the computer more responsive in interactive use.
A faster CPU might enable your lightning node to run more channels (or something) or act as a gateway for a higher volume of traffic - but as I understand it, the financial benefits are absolutely insignificant.
I'm not certain what sorts of capabilities you are concerned about but it seems that a typical usage of a lightning node is not especially CPU intensive.

References:

Bitcoin Lightning Node on Raspberry Pi


Where can I view my HD wallet seed in bitcoin core 13.2

To get the extended private masterkey itself (not a seed), you can use the dumpwallet command and provide it with a filename to dump your keys to. The extended master key will be at the top of the file, and then it will list all addresses along with their keypaths underneath that, line by line.

Note that the dumped file is not encrypted, so be careful with what you do with it :)


estimatesmartfee outputs very different results

The node that has been synchronized for only 5 hours and is less well connected seems to be estimating the fee better than the one that has been synchronized for three weeks. Why is the "best" node the one that gives the worst fee?

Just because the fee is lower does not mean it is better.

The fee estimator tries to estimate the fee the balances between cost and time to be included in a block. It does this by looking at the fee rates of transactions that it receives in its mempool and seeing how long it takes for transactions at a given fee rate to be included into a block. It becomes more accurate as it sees more transactions and more blocks because it has had more data to analyze.

So your two nodes are giving wildly different numbers because of their uptime. Node 1 has been online for much longer. It has seen more unconfirmed transactions become confirmed thus its estimator has had more data to observe.

However Node 2 has not been online as much so it doesn't have as much data. It hasn't seen as many blocks and as many transactions become confirmed. Since it has a lack of data it resorts to the fallback values. These values are the minimum relay fee rates which are not likely to actually be the true fee rate. The minimum relay fee rate is not the minimum to be included in a block, it is the minimum for a node to even relay your transaction to another node.

  what can be done to make them more accurate?

Just wait. Leave the nodes online. The estimators require data and the only way to do that is to wait. They become more accurate over time.


On ethereum, all tokens are contracts, but not all contracts are tokens.

ERC20 is a specific type of contract that is recognized by everyone to be a token contract. It has a base definition and structure that is defined in the ERC20 spec regarding how transfers, balances, approvals, issuance, etc. work.

An ICO or anyone issuing a token will write an ERC20 contract that specifies things such as the initial supply, price of the token (if it is being crowdsold), bonus rounds, etc. This contract is deployed on the ethereum blockchain, and functions as the token. Any given user's token balance is simply a value that the contract says that user controls.

Ethereum is native to the platform, and does not have an underlying contract. It is not an ERC20 token.

You can also have non-ERC20 contracts, such as the lottery contracts, DAO contract, Ethereum Name Service contracts, etc. A contract can be any variety of programs in solidity.


What is the advantage of running a Ripple masternode?

The same reason someone would run a bitcoin full node. If you want to transact on the network, you either have to run your own node or use someone else's. If you choose to use someone else's, you are relying on them to give you a proper view of the network and run their server reliably. If you run your own, you are independent. You also help improve the stability and reliability of the network for everyone.

Strictly speaking, you could just run a node that's not a validator. But there is almost no additional effort to running a validator -- it's literally just one extra command you enter once. It's nothing like mining.

If nobody is using the XRP Ledger or deriving any value from it, then it makes no difference who validates or, for that matter, whether anyone validates at all. If there are people using the XRP Ledger and deriving value from it, then they have a stake in ensuring that the network continues to operate reliably and that its rules continue to be the rules that make the network useful to them. This acts as incentive to run a validator, considering that there is no additional cost.


How would I push a negative number with OPCODES onto the stack?

Both will work. OP_NEGATE simply XORs with 0x80, so you can also directly push the result.


If by "instantaneous" you mean "right at the moment of the transaction" - well, no. Not even with Visa et al. Even if you mean that, after waiting for a reasonable amount of time (say, less than 2 mins.) you receive a definite answer about your transaction's validity, it's not possible either.

The way cryptocurrencies work, all transactions are "waiting in line" to be picked up by a miner and included in a block. Meanwhile, you can always revert it or create another that conflicts with the first one. Once a transaction's in a block, though, you can still not claim victory for they're still not part of the official coin history: other miners need to accept the block and start constructing new blocks over it - and this is the critical part.

Another miner, somewhere else in the world, may have discovered another solution to the current block and broadcasted it onto the network. From that moment on, there will be 2 chains in competition, both of them valid, but eventually only one will become the official one. Which one? Whichever gets longer first, i.e. which is picked up by the most miners to create a new block after it - remember each block contains not just its hash but also a hash of the previous block, so in effect each block "points" to its predecessor, hence the term "chains".

It's also possible for a malicious part to do this on purpose - should that part have access to vast amounts of computing power it could convince you to give you something in exchange for their bitcoins. You see their transaction appearing in 2 blocks and give the stuff, they then take the last block before your transaction appeared and rapidly create 3 blocks without the transaction. Once they broadcast their 3 blocks to the network - voilá! Their chain takes over due to length, you end up with no item and no coins.

So you never get a definite yes or no answer - you just get degrees of certainty. The more blocks your transaction appears on, the more likely it is that it will be part of the official transaction history. That's why it's commonly said you should wait for 6 confirmations in Bitcoin or 12 in Litecoin to consider a transaction 99% valid - after that number, the probabilities of an attacker trying to out-run (so to say) the combined hash power of the whole network become almost negligible.


Bitcoin-QT: which external memory (connected via USB2.0 + TrueCrypt) would work?

The cheapest external memory that would work fast enough to be acceptable is SATA3 HDD via usb2.0 adapter. (I didn't tested SATA1 or 2 nor old IDE drives, if you have them with over 500GB capacity you can probably use them too. I couldn't find them for my test).
For comparison, here's the time was needed to import 21GB blockchain:

2.0 USB flashdrive: never finished. took 7 days non-stop for progress bar to reach 1/3. and then speed slowed down to the point that there was no noticeable progress.
SATA3 HDD via USB2.0 adapter: about 20 hours non-stop.


Click Help > Debug window, then click on the Console tab.


Where's the code related to block 494784 for segwit2x?

It is referenced relatively, namely by using the parameter BIP102HeightDelta. The hardfork is 3 months after the block that Segwit was actived and the number of blocks after is equal to 90(days)*144(blocks/day)(https://github.com/btc1/bitcoin/blob/385cbc994f35d36cefdab8c1c00ebfaceb55cfc6/src/chainparams.cpp#L78)

Try to look for that parameter. It will show up that it is used here to define if the 3 months have passed to activate 2MB or not (https://github.com/btc1/bitcoin/blob/385cbc994f35d36cefdab8c1c00ebfaceb55cfc6/src/validation.cpp#L2934 and https://github.com/btc1/bitcoin/blob/385cbc994f35d36cefdab8c1c00ebfaceb55cfc6/src/validation.cpp#L1853 and https://github.com/btc1/bitcoin/blob/385cbc994f35d36cefdab8c1c00ebfaceb55cfc6/src/consensus/consensus.h#L24).


Are there time-series of Bitcoins in circulation?

Historical time-series of exchange rate:

https://docs.google.com/spreadsheet/ccc?key=0AmcTCtjBoRWUdHJuUE1mUkFxa3A0eHBDQkxZLVVFZmc

Source of the data is the "Raw Data" from BitcoinCharts.com.

The raw data of daily "market cap" is available in json

http://blockchain.info/charts/market-cap?timespan=all
http://blockchain.info/charts/market-cap?timespan=all&format=json <-- Thanks to Ben's comment below.


Can I upgrade the software on Cointerra TerraMiner IV?

The miner does not need a software upgrade to mine with Bitcoin XT.  The pool or whichever mining solution you choose would need to connect to a Bitcoin XT node rather than a Bitcoin core node.


Do lightweight wallets validate signatures? If not, why?

Some lightweight wallets do not check the signatures because checking the signature requires data from the previous transaction. However lightweight wallets generally will not have the previous transaction to fetch the data from and are thus unable to verify the signatures.


The tree structure is used for organizing the keys you generate. Its just a suggested way to do it.
The first number is the account, in this case account 0 (the default account). This let's you support multiple separate accounts with keys of their own.
Then you have the chain, either 0 or 1. 0 is the external keypair chain, and is used for generating new public addresses. 1 is the internal keychain and is used for things like change addresses - the addresses you don't give out to people (hence 'internal').
Finally the k is obviously used to generate the k-th keypair for account and keychain you've picked.


Does every nonce really have an equal chance of winning?

It's not unevenly distributed. The reason it appears that way in the graphs above is because the x-axis is plotted in logarithmic units. Here's what it looks like in linear units:


Is there dedicated mining hardware available to mine cryptonote coins?

From here

  CryptoNight is a proof-of-work algorithm that mixes graphics processing unit (GPU) and central processing unit (CPU) mining to create a system resistant to both application-specific integrated circuits (ASICs) and fast memory-on-chip devices.

So, there is no dedicated ASIC hardware (yet). You can currently only use CPU plus GPU (which of course counts as hardware but I assumed you meant dedicated to mining hardware like ASICs).


Can anyone explain the differences in behavior of getrawtransaction and gettransaction in RPC?

Q1: A ledger entry in the wallet view corresponds to a single output of a transaction. The suffix is there to distinguish which output of the transaction is used. It's a bit of strange choice to format it that way; in most places, ':' is used as a separator.

Q2: getrawtransaction queries the memory pool, the set of unspent transaction outputs and the blockchain (if txindex is enabled) for a transaction. It doesn't query a single output, so you pass in just the hexadecimal identifier. You can query individual unspent transaction outputs using the gettxout command (which takes a txid + the output index as separate arguments). You can pass an extra 1 as argument to getrawtransaction to have it decoded, instead of just the raw hex. decoderawtransaction can do this for arbitrary hex-encoded raw transactions. Perhaps this is the answer to Q3.

Q3: gettransaction is a wallet RPC. It cannot operate on anything else, as it needs the higher abstraction layer. It computes debit/credit and fee, which requires identifying which outputs are from/to you, and which are change. This requires knowing what keys belong to you. It does not query the blockchain, but you can use 'getrawtransaction [txid] 1' to get a decoded form of blockchain transactions (with txindex enabled).


When we can agree on mempool sorting order, we can just confirm first n-transactions that are at least 10 mins old. What's missing?

Your answer assumes different nodes can have a consistent view of the mempool. If that were the case, we wouldn't need a blockchain at all, whose sole purpose is establishing consistency between different nodes' view of history.

The reason this is not possible is due to the laws of physics. A transaction tx1 broadcast in Australia, which conflicts with a simultaneously-created transaction tx2 broadcast in Alaska cannot be both included in a block. However, nodes in the rest of Asia will see tx1 first, and nodes in the rest of North America will see tx2 first. Which of those two is legitimate?

There is no solution to that problem, as due to general relativity, the concept of 'first' depends on one's frame of reference. A proof-of-work controlled blockchain solves this problem by accepting that not all nodes need to immediately agree on which of those transactions is accepted, and instead make economics force miners to make a choice between the to candidates.

Despite not having a guarantee for consistency between mempools, there is of course a very strong overlap. This overlap is exploited in many of the proposed efficient relay protocols, including the Relay Network, IBLT, Block network coding (and Compact Blocks which you reference).


My friend's address was spent right after I paid him. What happened?

If I read it correctly, your friend had an address, to which you paid. Then someone took it from their wallet?
It might be because your friend's device is hacked or he doesn't use a trustworthy wallet.
Or it was him who spent the coins. It's also possible that they are lying to you so that you pay them again.
Double spend attacks involve the same person spending to two different addresses. Since your friend is not the voluntary author of both transactions, this is not double spend.
I can't comment further without more info.


Why is my phone app wallet showing true balance and my web wallet showing 0 balance

I had to send him a fee of 1300.00 in order for him to proceed...he hasnt been back in touch since.

You are the victim of a scam.

  My account Mgr ... got me to download the blockchain app on my phone

I suspect he may have got you to import an address also.

Can you tell whether the app on your phone has a "watch-only" address? If so, your crooked "account manager" will probably tell you to pay him some large sum for a private-key. If so, this also is typical of a scam.

  My Account Manager is James Patrick from kryptosmart247

The domain name kryptosmart247.com was only registered a month ago using NameCheap. Inc. Their webpage contains spelling mistakes like "Mointor Your Trade". Their website looks exactly like that of 24cryptostar.com. Same "Seth Trevor" etc photographs. I suspect one or both websites are just quickly set up copies of something generic.

In other words, to me this does not look trustworthy.

  You can find me on FB I will let you take the lead on this one

Unfortunately, this is the kind of thinking that lost you your money. You don't need to trust random strangers who approach you on the Internet. I expect chytrik is a decent person but you just advertised to any crooks reading this that they can get money out of you by impersonating him.

I think you should report your kryptosmart247 experience to the police but should not expect to get any of your money back.

See

How can I safely store and trade Bitcoin and other crypto currencies?
I am new to Bitcoin, how can I get started?
Getting started with Bitcoin


How to fund a bidirectional channel in Lightning Network by two participants? (Edited)

1) Peer A sends msg to Peer B

Unsigned Funding TX template including:
// Input A (unsigned, just outpoint)
// Output A (change)

2) Peer B sends msg to Peer A

Completed unsigned Funding TX template, which adds:
// Input B (unsigned, just outpoint)
// Output B (change)
// 2-of-2 Multi-sig Output (still requires sig A, sig B)
Signature for Peer A's first commitment Transaction (Unsigned funding TX is completed, so TXID is non-malleable for witness transactions. Commitment TX's can therefore be signed without risk of being invalidate by parent malleability).

3) Peer A sends msg to Peer B

Signature for Peer B's first commitment Transaction.
Now both commitment Transactions (for A and B) are signed.

4) Peer B sends msg to Peer A

B's Signature for funding transaction.
Now A has complete Funding TX after signing itself.

Caveat: If Peer A fails to respond after step 4, Peer B must double-spend its funding input to prevent future interference.


Yes, all transactions in every block are verified by full nodes. Nodes do not have to traverse the full history though, because they would have already validated the parent transactions before the child block is received usually. So they can just make sure the new transaction is valid in the ways it needs to be.


You will need to download a wallet that supports the said fork.

So for example for the "Bitcoin Cash" fork, you will need to download something like this, https://electroncash.org/

Take extreme care when downloading these wallets, as a lot of them are infected/and or malware.

Always check the authenticity of the wallet files you download.

For electronCash they can be found here https://github.com/fyookball/keys-n-hashes


Exchanges
You can use an online exchange such as BitStamp for US dollars, as well as many others for dollars, and other currencies.
See the wiki for a full list of ways to buy bitcoins.
Brokerage Services
Brokerage services allow you to buy or sell directly from them instead of relying on a third party to offer the trade with the exchange just taking a cut. One such service is Coinbase.
Local / In Person
You can use tools such as localbitcoins.com to find people near you who will trade cash for bitcoins. (Note, however, that localbitcoins strongly encourages you to use their service despite the fact bitcoin does not require using a 3rd party to do in person transactions)
IRC and Remote Trades
You can use bitcoin-otc's web of trust system to improve the likelihood of a successful long distance trade.  This could help you do trades with people you find on IRC channels or Bitcoin Forum.
Hardware Mining
Mining bitcoins is very technical, and not for many people.  Unless you already have the hardware and technical skill to set it up I would not recommend mining as a way to get bitcoins.
Accept Bitcoin
I believe by far the best way to get bitcoins is to provide goods and services for bitcoin.  This stimulates the bitcoin economy which in turn makes the bitcoins you receive more valuable.


What are the Differences Between an Antminer S9 and an Antminer S9i

S9i is an upgraded version of s9, shares almost the same hashrate 13TH/s+-10% and power consumption at 1300w+-10%, S9i is cheaper than S9.


If miners pay income tax, could a change in tax laws affect network security?

Taxes are paid on profits, not revenues. If their mining operation was profitable before, it will remain so even after the tax increase. Also, depending on the kind of tax it could increase equally to any alternative occupation they might have, so there would be no reason it should make any miner operation go out of business; definitely not enough to warrant concerns about the network security.


Why the signature of the same message changes in some wallets, but not all?

You're seeing the effect of RFC6979.

When generating a signature, some randomness is needed (called the nonce), as there are multiple valid signatures for the same message/key pair. The algorithm used, ECDSA, is extraordinarily vulnerable to weak randomness. An attacker who knows just a slight bit of information about your nonces can learn your private key after observing many signatures.

However, someone figured out that it doesn't need to actually be random. The only thing required is that it is unpredictable for the attacker. As a result, a standard was created that suggested using basically the hash of your private key and the message as your nonce. That standard is called RFC6979, and Bitcoin Core switched to using it in version 0.10.0. Clones that forked off before that version typically don't use it.

I have no idea why pubkey recovery does not work without deterministic signatures. I think it should work fine.


You should generally have a look at the charts:

http://bitcoincharts.com/markets/

A good rule of thumb to judge how much people trust a website is how large is the volume of transactions - the more, the better.

In all regards, Mt.Gox is safe, you can buy there in euros, and I don't think you can bypass the fees. If you worry about the last one, you can try finding someone willing to trade Bitcoins with you that you can trust (which can be difficult at times).


UAHF implementing sighash, specifically, how are scriptCodes serialized?

I probably was too eager to ask this question, though perhaps someone can take a look at how I implemented the solution in this pull request.  Here is the relevant code:

// from bp_tx_sigserializer function
void uahf_ser_scriptCode(cstring *s, const cstring *scriptCode){

    if(scriptCode == NULL){
        cstr_append_c(s, 0);
        return;
    }
    /** Serialize the passed scriptCode, skipping OP_CODESEPARATORs */
    struct const_buffer it = { scriptCode->str, scriptCode->len };
    struct const_buffer itBegin = it;
    struct bscript_op op;
    unsigned int nCodeSeparators = 0;

    struct bscript_parser bp;
    bsp_start(&bp, &it);

    while (bsp_getop(&op, &bp)) {
        if (op.op == OP_CODESEPARATOR)
            nCodeSeparators++;
    }
    cstring *x = cstr_new_sz(1024*8);

    it = itBegin;
    bsp_start(&bp, &it);

    while (bsp_getop(&op, &bp)) {
        if (op.op == OP_CODESEPARATOR) {
            ser_bytes(x, itBegin.p, it.p - itBegin.p - 1);
            itBegin  = it;
        }
    }

    if (itBegin.p != scriptCode->str + scriptCode->len)
        ser_bytes(x, itBegin.p, it.p - itBegin.p);

    if(0 < nCodeSeparators){
        cstr_free(x, true);
        x = cstr_new_sz(1024*8);
        cstr_append_buf(x,scriptCode->str,scriptCode->len);
    }
    ser_varlen(s, x->len);
    cstr_append_buf(s,x->str,x->len);
    cstr_free(x, true);
}


What is a typical winning block (I get coins) generation time when running on testnet.

I plugged your rig statistics into this calculator, and I find that you should be getting 60 blocks a day at difficulty 1. Seems to be oscillating between 1 and 42 at the moment. Maybe you should try running for longer.

  How can I be sure that I'm actually mining, not that I'm just computing useless hash after useless hash thats getting sent to a black hole somewhere?

The standard client is pretty good about not even trying to generate when it's not connected. Perhaps you could join a testnet pool? :)


Serialized Block doesn't have all the fields of a Block

This Serialized data doesn't contain certain fields like confirmations, chainwork nextblockhash. Is there any reason for this?

Those fields are not actually part of a block and cannot be contained in a block.

The number of confirmations for a block constantly changes as more blocks are found on top of that block. Thus it cannot be part of a block in the serialized data.

The chainwork does not need to be included in a block because it can be dynamically calculated, unlike the other data in a block.

The nextblockhash cannot be known at the time of creation for a block because miners can't see the future. The nextblockhash cannot be known wihtout the current block already existing.


How do you regenerate all 2-of-2 multisig addresses from two xPrivkeys?

Trying to generate all possible combinations would probably go on forever. I would suggest you figure out what the derivation path used on you BCH wallet was (will probably be /m/44'/145'/0') and then loop through different combinations to generate different multisig addresses.

How come you only have the xPrivkeys and not the mnemonic words?

If you had the mnemonic words I would suggest recreating the wallet on the same wallet app by importing your seeds and the wallet should scan addresses associated with those keys.


You could imagine that you're selling a car to someone. The key to open the car is tied to your bitcoin address. So only you, owner of the private key for that address, can open and turn on the car.

Once you sell the car you make a symbolical transaction to the buyer and you configure the car key with the buyer's address, so only s/he can open the car.

The symbolical transaction is actually a colored coin. It's proof that you've sold the car. That proof is also attached to the physical key itself. That proof will forever exist (or at least until bitcoin exists) in the blockchain.

If then they decide to sell the car once more, they can use that same colored coin and make another symbolical transaction. Now the third owner of the car can see the proof of ownership of his car just by looking at the blockchain.


So can a blockchain can be shutdown by shutting down power supply across the globe? What would happen in such a case?

If the world's power supply was suddenly cut off, then everything electronic would stop working. The blockchain would be 'frozen', each node would retain its local copy, but be unable to communicate with other nodes, and miners would be unable to mine and add new blocks.

  I think the transactions that were not added to the ledger would definitely be lost and they would have to be reinitiated.

This depends on what happens to the mempool of each node. If any nodes remembered any unconfirmed transactions from before the power loss, they could simply broadcast those transactions to the network once things went back online.

  I think power shutdown would create inconsistency between different instances of the ledger at different nodes and even if the power is back we wouldn't be able to pick a safe state of the ledger.

Each individual node, once it came back online, would reconnect to some peers in the network, and listen for information about new blocks, just like normal. The decision about which chain to follow would also be made as per normal: which chain has the most work? Follow that one. If there are multiple choices for a most-work chain, then the decision about which one to follow will be made when the node hears about a new block, which extends one of those chains (the other chain will become 'stale', and will not be a part of the blockchain history).

  What are the possible ways to shutdown a blockchain without having to go to each and every node and taking it down?

This is a strength of the bitcoin network: it is a decentralized network of computers, without any real hierarchy or centralized control. You would have to attack every node, otherwise the un-attacked nodes will be able to maintain the network. Given the highly distributed and anonymous nature of the network, this seems to be an extremely difficult task.


Why do I keep getting a connection lost error in Nicehash Bitcoin mining

I reinstalled Nicehash, this solved the problem :)


Someone want to mine with my bitcoin (www.elitecoinmine.com) Promises?

This is a scam.  Block all contact with this person and do not send any money, passwords, keys, or anything else.

Your friend is right, there is no such thing as mining "with" somebody's Bitcoin.  Mining requires specialized hardware (such as the AntMiner S9, which is a real device) but if one has that hardware, one doesn't need access to additional coins or anything else.

The scam will probably be organized in a way that it looks like you keep control of the coins throughout the process, and such that it is not obvious that your coins have been transferred to the scammer.  But in the end, when you try to get them back, you will find that you can't.


How to check if confirmation is done or not yet?

In order to see if the transaction has confirmed, you can search for it in any indexed transaction database. This can include Bitcoin Core running in -txindex mode, or a block explorer such as live.blockcypher.com or blockchain.info, for example. As soon as the transaction has been included in a block, it has 1 confirmation. If it is not found, or is still in the mempool, then it has either not propagated (failed validation checks), or has yet to be mined.


I'll list the mentions I've found in reverse chronological order.

It first showed up on StackExchange on August 30, 2011.

  However, I often hear the term Satoshi as if it was a monetary unit.

rebuilder discussed the divisibility of Bitcion on March 23, 2011.

  I'll use the term "Satoshi", as previously coined by others, to mean the current smallest available Bitcoin unit.

On February 18, 2011, kiba said,

  I can't wait to use satoshi to denote a very small fraction of bitcoin.

marcus_of_augustus replied,

  1 satoshi = 1 microbitcent (smallest denomination)

  100 million satoshis = 1 bitcoin

  Are we agreed?

I cannot find anything earlier on bitcointalk.

  Did Satoshi Nakamoto comment on the naming?

I cannot find a searchable copy of his writings. If I can, I'll update this answer. However, his postings were already tapering off at February 2011, so probably not.


Is there a (potential) "Blockchain size problem", and what solutions are available?

Currently, only full-nodes, i.e. nodes that have the complete blockchain inventorized relay blocks. Personally, I've recently encountered the first problem, when my Linux partition ran out of storage, yet if I had chosen a bigger partition size, I'd be able to even afford a multiple of the 50GiB easily.

Storage usage: Currently, the blockchain is about 50GiB. If it continues to grow at 1MiB per 10 minutes, storing the complete blockchain should remain affordable for those that want to.
For all the others, there now exists the option to run a pruning node. Once pruning nodes will be enabled to relay blocks, I would expect that the number of serving nodes will start to climb again.
There would need to be some nodes with the complete blockchain to secure history, though.
Client startup time: This may become a problem at some point, but the blockchain data doesn't get checked every start-up, rather synchronization only runs once for each block. So, with a current computer, I don't think it is an issue now or in the foreseeable future.
First-time synchronization: Synchronization has been dramatically improved with the release of Bitcoin Core 0.10. Now, only the block headers have to be processed in order and all other block data may be processed in any order. This and other tweaks have drastically reduced the time necessary to catch up with the network. My computer can now do initial synchronization within a few hours. As processing power will scale, I expect this to remain manageable for the foreseeable future.
Update: The coming 0.12 release will additionally increase synchronization speed by x5, due to validation of signatures being run through libsecp256k1, a library that has been specifically coded to run Bitcoin operations more efficiently.


How can I pull the "Candles" argument from the Huobi websocket data?

I will just throw it out here, there is a better way to do it, here above I was using Huobi SDK but I find using websocket without any external libraries better. A great template for websocket connection below:
import gzip
import json
import pprint
import threading

import time
import websocket

def send_message(ws, message_dict):
    data = json.dumps(message_dict).encode()
    print("Sending Message:")
    pprint.pprint(message_dict)
    ws.send(data)

def on_message(ws, message):
    unzipped_data = gzip.decompress(message).decode()
    msg_dict = json.loads(unzipped_data)
    print("Recieved Message: ")
    pprint.pprint(msg_dict)
    if 'ping' in msg_dict:
        data = {
            "pong": msg_dict['ping']
        }
        send_message(ws, data)

def on_error(ws, error):
    print("Error: " + str(error))
    error = gzip.decompress(error).decode()
    print(error)

def on_close(ws):
    print("### closed ###")

def on_open(ws):
    def run(*args):
        data = {
            "req": "market.btcusdt.kline.1min",
            "id": "id1"
            "from": int("fromtimestamp")
            "to": int("to timestamp")
        }

        for i in range(5):
            time.sleep(2)
            send_message(ws, data)
        ws.close()
        print("thread terminating...")

    t = threading.Thread(target=run, args=())
    t.start()

if __name__ == "__main__":
    # websocket.enableTrace(True)
    ws = websocket.WebSocketApp(
        "wss://api.huobi.pro/ws",
        on_open=on_open,
        on_message=on_message,
        on_error=on_error,
        on_close=on_close
    )
    ws.run_forever()


Can I generate an address without using bitcoin core?

Bitcoin Core does not store the information for all addresses as that would be computationally expensive and not very useful. For you to get this data, the address needs to be part of your wallet. So you must add the address to the wallet using importaddress and allow Bitcoin Core to rescan the blockchain. It will then find all of the transactions related to that address and look for new transactions related to that address. Note that rescanning can take a long time so if you want to import multiple addresses, use importmulti.


Why no other company is producing Bitcoin ASIC except bitmain?

This is merely a hypothesis.

The difficulty of mining difficulty was going up so quickly that any miner you bought quickly lost its value but if the value of bitcoin also went up, you could barely come out ahead in some situations before it wasn't worth mining anymore.  Some companies started charging for their miners before they had even built them or finished designing them yet, but as they were trying to stay ahead of the increase in bitcoin difficulty, they fell behind and eventually had to give money back, got sued, etc as they didn't give people what they were ordering.

Now its easier for companies who can do that to simply mine the coins for themselves.  Why sell it to customers who will just complain they didn't come out ahead when you can just use your hardware yourself and come out way ahead since you're doing it at cost.  Now it seems that the average person who wants to take part in such things need only purchase cloud mining contracts as it works out better for the hardware makers.


Is There a Safe Way to Decentralize or Spread Ownership of a Company Using Bitcoin or Altcoins?

Use multisig wallets for funds.

Use a SP (Service Provider) as a separate entity to handle your smart contracts.

Use Bitcoin and the Blockchain to act.


BTC.com APIs are Web APIs. This means you can use them by making HTTP requests (GET/POST requests).

Like all online APIs, you can access them through whatever program/script you want, provided they are able to make HTTP requests and handle the answers.
Requests/responses are usually encoded using the JSON format.

You can find a good introduction here.

You can choose your favorite language. However, since data is in JSON format, I would suggest to use either Javascript or Python.
In Python you can use the 'request' package. Here you can find a quick introduction.

In Javascript you have the 'request' library.
I wrote a generic lib to make Web API requests: https://github.com/frz-dev/webapi.js/blob/master/webapi.js


Why are zero fee transactions not being included in blocks that are not full?

It likely has to do with the minimum relay fee set on the nodes that are mining. There's also coin age that is taken into consideration on low or no fee transactions.

Relay and Mining: Priority transactions

Bitcoin Core has a heuristic ‘priority’ based on coin value and age. This calculation is used for relaying of transactions which do not pay the minimum relay fee, and can be used as an alternative way of sorting transactions for mined blocks. Bitcoin Core will relay transactions with insufficient fees depending on the setting of -limitfreerelay= (default: r=15 kB per minute) and -blockprioritysize=.

Soure


How many unspent transaction outputs are there?

As of block 177778 (Apr 29, 2012 6:17:33 PM):

2944702 transactions
6904591 transaction outputs
5376092 transaction inputs
1528499 unredeemed outputs left
642432 addresses with non-zero balance


How do I disable automatic address generation for the official bitcoin client?

The satoshi client still uses a previously unused address each time it needs to send itself change, and there's no option to prevent this.

Obviously since the client is open source you could change it to do whatever you like, or pay somebody with the appropriate skills to do it for you.


Transaction propagation criteria vs mempool inclusion cirteria

There are also the 'standardness rules', which are separate from 'validity rules'. So this means a transaction can be either valid and standard, valid but non-standard, or invalid.

A node can choose to broadcast any transaction it would like to the network, or none at all.

If a node broadcasts invalid transactions, then it is likely that its peers will disconnect, due to misbehaviour. An invalid transaction cannot possibly be included in a valid block.

The bitcoin-core core code does not relay non-standard transactions, but it will still accept blocks that include them (since they are still valid). This lack of relaying the non-standard transactions is a safety measure to prevent DoS attacks, etc. You can find some good info about issues with relaying non-standard transactions here.

Even for standard transactions, there is no stipulation that requires a node to relay them through the network. Many nodes will do so, but this is entirely up to that specific node's policy.


Generated coins mean you are getting new bitcoins that were generated with the block.  Eligius has the pool setup to pay you out when you have over a certain amount of work put in at an address.  Rather than having all 50 coins go to his address and then pay you out, he pays everyone out directly by having the coins paid out upon generation.


When exactly does the receiving party receives their payment.

This is considered to have happened as soon as the transaction is included in a newly mined block and that block starts to propagate through the Bitcoin network.

The recipient may not find out that they have received the money until their particular node (e.g. wallet) receives a copy of that block to add to its copy of the blockchain. If the recipient's node is turned off and cannot receive blocks, that does not mean they have not received the money. They have as far as everyone else is concerned.

The recipient may not consider that receipt safe until their node (or one they trust, like a blockchain explorer) sees that six confirmations have been received - that is 6 new blocks mined on top of the block that contains the transaction.

Remember that Bitcoins are not really things that move around, they are not really sent places and do not really arrive anywhere. All that happens is that everybody builds identical copies of the journal of transactions - a list of transactions called the blockchain. By inspecting that list of transactions everyone can see that a specific Bitcoin-address or script now has control over a specific amount of money that they didn't have control over before. Nothing else matters.

Since data takes time to bubble and percolate from node to node to node to node through the network, different nodes will have slightly different dates or times on which they became aware of a specific transaction. No one of these is any more correct than any other.

Blocks that fail validation might as well be considered to have never existed. The network does not keep or propagate unvalidated transactions. By design, no-one trusts anyone else, therefore every node does its own validations. Even though it knows the sending node will have already validated the block.


Generally speaking you would want to download a bitcoin wallet application (desktop, server, or mobile app) and use that (usually there is a "receive" button, or similar depending on the type of wallet, and that will show a new receiving address).

There are ways to generate an address without a wallet, like using a site like https://www.bitaddress.org ,however, I don't recommend that unless you know what you are doing.

Here is a list of some different bitcoin wallet applications: https://bitcoin.org/en/choose-your-wallet


When a mining pool pays out to the workers, why does it not just cache the transaction and then pay zero fees on its next successful block?

Sure, you can use your own blocks to send transactions instead of spreading them out on the peer-to-peer network and let anyone include them in their blocks (may require fees).

The upside as you say is that you can save on fees.

The downside is that it can sometimes be a long wait, even for a big pool.

Still could be a good idea to offer these payouts for free, and if you want your coins faster, you have to pay a fee.


how does bitcoin know which one is utxo?

To answer the title, utxos are entirely consumed and refered in transactions inputs.

Now, How can John not spend 5 BTC anymore ?

As long as the transaction spending it is in the most PoW block chain, no.

The output John used to give me 5BTC is still on Blockchain. So, does node go to that output transaction and mark it as spent ?

If a valid transaction consumes it in a next block, it is marked as spent and not available anymore.

how does it mark it as spent?

By updating a database commonly refered to as "the utxo set" in which are recorded not-yet-spent UTXOs. See How is a Transaction Output Marked as Spent? .
You likely want to give a look to questions regarding coin referencing and consumption by transactions, for example:

How is the UTXOs of each partially-spent TxIn determined?
Why is there "Change" in Bitcoins?


Wallet says “unsynchronised”, is that stopping me from seeing my bitcoins that I just received?

This is most likely the case. If your wallet is not synchronized, that means that it does not yet have a record of all transactions. Since synchronization happens in the order that blocks (and thus transactions) occurs, your later transactions will not show up until the synchronization reaches that point, which could take a while...

If you want to confirm that your coins went through without having to synchronize your wallet, you have at least two options:

Web-based Wallets such as BlockChain.info are connected to a backend service that is constantly synchronized. With blockchain.info, you can search for the public address to which your coins were sent without having to go through any signup process. This is probably your easiest option.

Electrum (http://electrum.org/) is a wallet that connects to servers that are already synchronized and thus will give you immediate results as well.

Also, there is a vague possibility, that this issues is caused by something other than the synchronization, so, if the options above don't work, please update the question with more details.


LN Payment Channels: Can you have more than two nodes in a channel?

Theoretically you are correct. However maintaining and operating the channel would become much more complex as everybody has to exchange signatures with everyone. Also the penalty case in case someone breaches the protocol is not clear. Unless we switch to eltoo channels as described in https://www.blockstream.com/eltoo.pdf I doubt that the lightning network will see multiparty channels.


reindex doesn't also re-validate blocks, does it?

It does, but signature verification (the slowest bit) is skipped on most of the early blockchain. The command attempts to sync with the network by reusing as many blocks as possible that are already written to the disk, which may very well include damaged or partially written ones.

  Any experience with speeding this up

Increasing the dbcache will speed up reindexing, putting it at 2G (dbcache=2048) would not be an unreasonable choice given you have the memory. This is about all you can do, until it gets to the point where you are validating signatures a reindex is heavily single threaded.


Does a full Bitcoin API reference exist with examples?

Here is a complete API reference that has a pending pull request for bitcoin.org

  http://bitcoindev.us.to/en/developer-reference#bitcoin-core-apis

More information:
https://bitcointalk.org/index.php?topic=511876.0


How to convert from Ardor time to Unix time?

Ardor time is measured in seconds since the Genesis block, represented as Java int. Currently there is no API which performs conversion to Unix time so you have to code it yourself.

If you are coding a server side contract in Java use the following code:

long EPOCH_BEGINNING = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z").parse(isTestnet ? "2017-12-26 14:00:00 +0000" : "2018-01-01 00:00:00 +0000").getTime();

public static long fromEpochTime(int epochTime) {
    return epochTime * 1000L + EPOCH_BEGINNING - 500L;
}

public static int toEpochTime(long currentTime) {
    return (int)((currentTime - EPOCH_BEGINNING + 500) / 1000);
}

If you are coding a client side app in Javascript use:

function fromEpochTime(epochTime) {
    return epochTime * 1000 + EPOCH_BEGINNING - 500;
};

function toEpochTime(currentTime) {
    return Math.floor((currentTime - EPOCH_BEGINNING) / 1000);
};


The only way to know for sure would be if you mined for the pool and you mined a Namecoin block for them. You would find the particular header you had submitted as a share used as a solved, merge-mined Namecoin block.


How do nodes validate that a UTXO in a new transaction is unspent?

Does it check every block in between where the UTXO first appeared and the current time to make sure it didn't get spent then?

Yes, but this check is not done for each UTXO individually as transactions come in, it is an ongoing process that specifies the current state of the network.

A bitcoin node will independently work through the entire transaction history of the network, and while doing so it will build an index of unspent transaction outputs (UTXOs), which are, as the name suggests, transaction outputs which have not yet been spent, and thus are valid to be spent on the network. As new outputs are created, they are added to the UTXO set. Likewise, when a UTXO is consumed as input to a transaction, it is removed from the UTXO set. So any valid new transaction must specify one or more of these UTXOs as inputs (with the exception of coinbase transactions, which do not have any inputs).


How would a governmental Bitcoin ban work in practice?

You may be thinking about this the wrong way.

Most countries have a ban on cars driving above a speed limit. However this is not enforced by using technical means that prevent cars driving over the limit.

These rules are enforced by doing unpleasant things to people who are detected as having broken the rules.

You may go on to suggest that rules need technical means of detection. But remember that detection need not be perfect. If the consequence of detection is that you lose your job and you life is ruined, few people will take the risk.


Bitcoind gui client, wallet client with peer preference, node manager

yup, see what you mean. Hopefully my answer is not disappointing. It is to my knowledge not existant. I'd reason this way:
I don't think it's the application, which should secure the network layer. Vice versa is the way to go on (layered approach). Create a secure network layer, and run the app on top of it. Otherwise all apps would build their own security layer, and I doubt there are enough security specialists...

The layers of the underlying OS allows to achieve security.

  A very secure 'remote wallet' GUI:

define secure :-) Well, why not tunnel X over a VPN or through ssh?

  A bitcoind full node GUI manager:

is the same.

  A wallet manager application:

again, security built into the app is against principle of layers. You can tell your full node, from which IP to connect.


What makes an extended public or private key?

The extended public key contains just a bit more information than the public key and chaincode, but the public key and chaincode are all that matter for key derivation. The rest is just metadata about the keys for wallets and people.

The version bytes distinguish between xpub, xpriv, and other types of keys. The fingerprint identifies the parent so that a wallet can know what the parent of this key is. The child index tells a wallet how to derive this key again from the parent.

  I'm unfamiliar with what comprises the extended private key.

The extended private key is exactly the same as the extended public key but instead of 33 bytes of public key data, it's 33 bytes of private key data.

  the network has an effect on this as well, which doesn't make sense to me either but clearly (as shown above) it is a part of this formula.

The network determines the version bytes. These version bytes are present in everything else in Bitcoin and is only to indicate to the user what network the key is used for. This is useful in identifying whether a key may be compromised (because e.g. it has been used for testing software)

  Can someone deconstruct an extended key from beginning to end?

Let's use xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw as our xpub.

Base58 decoding this gives us

0488B21E013442193E8000000047FDACBD0F1097043B78C63C20C34EF4ED9A111D980047AD16282C7AE6236141035A784662A4A20A65BF6AAB9AE98A6C068A81C52E4B032C0FB5400C706CFCCC56B8B9C580

0488B21E are the version bytes as defined by BIP 32.

01 means that this key as at depth one

3442193E is the fingerprint of the parent key

80000000 means that the key is index 0h (0'th hardened key)

47FDACBD0F1097043B78C63C20C34EF4ED9A111D980047AD16282C7AE6236141 is the chaincode

035A784662A4A20A65BF6AAB9AE98A6C068A81C52E4B032C0FB5400C706CFCCC56 is the public key

B8B9C580 is the base58 check encoding checksum.


How do I get started debugging Bitcoin Core functional tests?

To understand the functional tests, I think it's important to start with an understanding of how bitcoind works and how the RPC interface is used.
Start Bitcoin Core in a terminal window in regtest mode (a local test network that does not connect to any peers by default):
$ bitcoind -regtest

Keep an eye on the output! This is your debug log, and important messages are printed there -- many tests even check to make sure a certain message was printed.
In a second window, get a list of commands:
$ bitcoin-cli -regtest help

You can get help for any specific command:
$  bitcoin-cli -regtest help getnewaddress
getnewaddress ( "label" "address_type" )

Returns a new Bitcoin address for receiving payments.
If 'label' is specified, it is added to the address book
so payments received with the address will be associated with 'label'.

Arguments:
1. label           (string, optional, default="") The label name for the address to be linked to. It can also be set to the empty string "" to represent the default label. The label does not need to exist, it will be created if there is no label by the given name.
2. address_type    (string, optional, default=set by -addresstype) The address type to use. Options are "legacy", "p2sh-segwit", and "bech32".

Result:
"str"    (string) The new bitcoin address

Examples:
> bitcoin-cli getnewaddress
> curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getnewaddress", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/

Give it a try!
$ bitcoin-cli -regtest getnewaddress
bcrt1qua6ku8kkx4m57tg6q44wh00h58vpk7lm8h82sy

Now go take a look at a simple test like wallet_resendwallettransactions.py and note the syntax node.getnewaddress() -- by this point you probably know exactly what that does and what the return value will be.
To go deeper and understand how the test framework launches and configures individual nodes, read test_framework.py. You'll notice many of the functional tests pass configuration parameters to the start_nodes() function.
To get a dictionary of those command line parameters, execute:
$ bitcoind -help

These are the key tools I think and the in-program help information is an invaluable resource. By going through functional tests and looking up the rpc commands and launch arguments, you'll eventually get an instinct for how the more complicated tests work.


Best way to update an outdated blockchain

You probably want to simply update your client to the latest version (0.10.1 was just published) and just run it. As of 0.10 it will download the missing months much faster. (As well as many wallet improvements.)

Forget about the bootstrap file, just cancel the download. It's three months old, so you would still end up with the same problem.

Also: you're probably better off regularly running the bitcoin client (maybe a scheduled task, once a week?) instead of letting it get behind 8 months. You might want to add the -listen=0 option, that way you won't have others connect to you and download blocks from you (saving you some bandwidth).

If it's really too heavy for you, you might consider a different wallet as Pieter mentioned.


I resolve this. Just need to check your VPS connections and its configuration. Make sure socket handshake is proper it resolve my issue.


If there is a block-size hard fork, will the old chain have an advantage?

This is partially true, but it is not as grave a problem as the writer would have us believe. It would be much more problematic if the implementation of increasing the block size were done very poorly and discretely (such as just putting out a new client with the MAX_BLOCK_SIZE parameter changed), but there will be a more continuous process to switch over to using larger block sizes.

In Gavin's proposal, nodes that aim to eventually allow larger block sizes will start using blocks with nVersion set to 4. When a supermajority is obtained, in this case meaning that 800 of the last 1000 blocks signal support for the larger block size limit proposal by using nVersion = 4, then the network will start actually relaxing the 1 MB limit to somewhere around 16 MB. From there, every 2 years the block size limit will double.

(Aside: I think it would be beneficial to have a grace period after the supermajority is obtained to allow miners in the losing side of the hard fork to update their software. I have commented on Gavin's blog post but haven't heard back, I'm sure he is very busy)

This proposal essentially puts the decision to use a higher block size limit to a vote on the network. However, until the supermajority is obtained, all nodes will still enforce the 1 MB block size limit. Thus, nodes that embrace the hard fork will not be at a disadvantage at all before the network supermajority is obtained.

After the network supermajority is obtained, technically blocks < 1MB will be accepted by all nodes, and blocks with size 1MB < size < 16MB will only be accepted by 80%. But by this point 80% of the network has already committed to allowing larger block sizes. If the nodes with the old rule don't update, they will be on the losing side of the fork and will be working on a slower-growing chain than the main chain. The old network's chain could be accepted by the new network (if they could create block fast enough to overtake the new chain), while the main network's chain could not be accepted by the old network because it breaks consensus rules.

It is also possible that the supermajority will never be obtained due to lack of support among the mining community. I would hope this does not happen. My personal opinion is that miners who are rationally trying to make a profit should make using Bitcoin as easy as possible (while still preventing spam) so that new people who want to join the ecosystem can do so painlessly and without having to wait hours for their transaction to be confirmed. More users bringing in buying pressure means the bitcoins mined will be worth more.

Coincidentally, according to a recent survey, Gavin has about 80% support among the community for his proposal.

Related: What are the arguments for and against the increase of the block size limit?


What is BitInstant's "spot" price when sending to BitCoin Address?

I've seen the claim that they convert at the last trade at Mt. Gox as-of the time that ZipZap notifies them of the transaction.

Due to the Moneygram --> ZipZap interface, and then the ZipZap --> BitInstant, followed by the BitInstant --> Coinapult (which does the exchange) there isn't any strictly followed timeline as far as how long after you've handed over the cash before your coins are sent to you.