Transaction delayed >12 hours by Satoshi Bitcoin client Yesterday I sent 20 BTC to 1Hj8kJ3rq4c4Hn9Prtw45Zue791f4Nc9L3 with a 0.0001 fee and transaction Id 30d1ef9aa05898b11b5ee4f5f5e703a822a821fb499c647b658fc3cb67a899b8.

My Satoshi client said today that is still unconfirmed. But when I search blockchain.info for the id of the transaction, it says that the transaction was sent today (>12 hours after I made it).

Is there any way, if a transaction isn't relayed, to force the satoshi client to send it another time (the same transaction).

That transacation has over 1,400 confirmations. I think you might need to run your client with the rescan option on. (That rescans the blockchain for transactions it might have missed)


HD Wallets - Why Extend a Private Key with addition? (Non Hardened) As I currently understand, there exist two methods for extending keys in a hierarchical deterministic wallet: regular derivation, and hardened derivation. Hardened derivation essentially “breaks the chain,” adding security because through normal derivation, a leaked child private key, along with the chain code, could be used to derive any parent private keys through subtraction.

Normal child private key derivation would happen like this: Take the HMAC-SHA512 hash of the parent public key, parent chain code, and index number. The first 256 bits are added to the parent private key to derive the child private key, and the other 256 bits are the child chain code. Using this, an adversary who possesses a child private key and the chain code could use subtraction to find the parent private key.
And hardened derivation is similar, but the parent private key is used as input to the hashing function so it can’t be reversed, even if the chain code is known. The disadvantage is that a parent private key is required to generate child public keys, eliminating the possibility of a “receive only” machine having access to public keys only.

My question is, why is reversible arithmetic (addition of the parent private key and output from the hashing function) used instead of a “one way” function such as elliptic curve addition or others?

My question is, why is reversible arithmetic (addition of the parent private key and output from the hashing function) used instead of a “one way” function such as elliptic curve addition or others?

To allow public derivation.

This means that it is possible to give someone a parent extended key (public key + chain code), and they can derive all public keys in the chain.

If the final secret key is computed by a one-way function directly, no equivalent operations exists with public keys to compute the public version of the result.


General private/public key generation Not sure if this is the correct forum to ask, but I couldn't find a general one for all cryptocurrencies
I wanted to get an idea on how the whole cold-storage private/public key generation works for different cryptocurrencies. So I was playing around with BIP32 deriviation path on: https://iancoleman.io/bip39/#english

I noticed that for example BTC, XRP, PIRL all have the same BIP32 root key and BIP32 extended private/public key, but DOGE was completely different. Why is that? BTC hashing algorithm is SHA256 and PIRL uses Scrypt, their root seeds are the same, while DOGE which uses Dagger has a different seed and private/public key.

The second part that I don't understand is the generation process of addresses for different cryptocurrencies, is there a web site where I could look up on how it's done? The only one I found is for bitcoin here https://www.mobilefish.com/services/cryptocurrency/cryptocurrency.html#refMethod2

I can't say I'm familiar with all of the cryptocurrencies you mentioned, but the Bitcoin clones generally use elliptic curve (secp256k1) cryptography and the same address generation scheme.

Keys

A private key is any 256 bit number. However, for the EC used by Bitcoin, it must be between 0x1 and 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140. Any random number in that range is valid.

A public key is calculated from the private key using the elliptic curve algorithm with the secp256k1 parameters, which is a one-way deterministic algorithm.

BIP32 is a standard Bitcoin proposed for key generation so a hierarchy of keys can be derived using a set of indices. This is to be implemented by wallet software to make it easier to generate a set of keys deterministically and restore them if needed from a single master key and set of indices. It is not required to follow BIP32 to generate a valid key pair.

Addresses

See Address, Technical background of version 1 Bitcoin addresses, and List of address prefixes.

Also, I wrote this article explaining Bitcoin address generation step by step, which might be helpful: https://medium.com/coinmonks/how-to-generate-a-bitcoin-address-step-by-step-9d7fcbf1ad0b


What is the safest bitcoin wallet? The reason i asked this question, because i just discover bitcoin a day back. And i found out that there are 3 type of wallet, which is in web like coinbase, our own computer like multibit, and mobile wallet.

Seems like those 3 have flaw. I just imagine, if my computer got crashed or the website closed; will that mean i lost all the entire bitcoin. Is there any other method to keep bitcoin in the safest place on earth?

Sorry if this sound too noob. Thanks for answering.

The answer from Anton A. is pretty good; I'm adding this as additional information.

Offline wallets are stored on a computer that never connects to the network so they can only be hacked by being physically present. Additional security can be added by encrypting the Bitcoin wallet or the computer as a whole (be aware on the later that the encrypted computer is only secure once it has been completely shut down for several minutes).

The way it works with Armory is that you have an online copy with the public key where you can see your balance. To create a transaction you do it on the online wallet, copy it to a USB stick, connect it to the offline computer and sign it there, then once you load the signed transaction on the online wallet it gets sent to the Bitcoin network for inclusion in blocks.

The paper backup is needed to recover your Bitcoin in case you lose your offline wallet or password (failure, fire, etc.). I recommend storing it in a bank safe if it holds any substantial value.

Another type of wallet that provides a new, handier way of storing Bitcoin safely is called a Hardware wallet. Hardware wallets are a small piece of hardware which store your private key securely and only allow signing transaction, in some case with an address confirmation display and PIN. Just like offline wallets, hardware wallets allow you to save a paper copy of your key in case you lose or break the device.

These devices are safe to use even on a compromised computer provided that you can verify the transaction output addresses before letting the device sign it, and a PIN may protect the device from theft. There are multiple different implementations with varying levels of security. Some of these wallets have additional features such as providing 2-factor authentication.

Offline wallets are probably still the best way to store large amounts securely, accompanied with either a mobile or hardware wallet for day-to-day Bitcoin transactions.


Create an arbitrary script with two locktimes and p2sh Alice, Bob and Carol create a p2sh address that initially requires 3/3 signatures. After some time (lock1 using OP_CHECKLOCKTIMEVERIFY)  only Alice and Carol can spend and Bob is permanently forgot. After more time (lock2 using OP_CHECKLOCKTIMEVERIFY) Alice can spend alone.

How would a script like this look like?

There are a lot of possibilities to write such script. This is the simpliest, but not the shortest one

OP_IF
  lock2 OP_CLTV OP_DROP pubAlice OP_CHECKSIG
OP_ELSE
  OP_IF
    OP_3 pubAlice pubBob pubCarol OP_3
  OP_ELSE
    lock1 OP_CLTV OP_DROP OP_2 pubAlice pubCarol OP_2
  OP_ENDIF
  OP_CHECKMULTISIG
OP_ENDIF


Decode script return different value from my relative timelock I want to lock a UTXO for 90 days.
My Binary is:
00000000010000000011101101010011

And my sequence is: 533B40
When I decode the witness script with bitcoin-cli decodescript I can see 4209491.
Where 4209491 comes from?
UPDATE
It's seems that the 533B40 convert into little endian and the convert into base 10
printf 533B40 | tac -rs ..
403B53

Then convert in base 2
echo "ibase=16; obase=2; 403B53" | bc
10000000011101101010011

And then in base10
echo "ibase=2;10000000011101101010011" | bc
4209491

why decodescript has this behaviour?

decodescript has this behavior because integers in Bitcoin are little endian. So decodescript is telling you what number the script interpreter would use when it processes your script.


How can we receive hashtx and hashblock from bitcoind by zmq subscribe? install bitcoind by sudo apt install bitcoind in Ubuntu 16.04 server amd64(https://bitcoin.org/en/full-node#ubuntu-1410)
bitcoind --version show v0.13 ga402396
bitcoind -daemon -zmqpubhashblock=tcp://127.0.0.1:28332 -zmqpubhashtx=tcp://127.0.0.1:28332
after download, blocks file is 89G.
and the bitcoin.conf only have rpcuser=xxxyyy and rpcpassword=xxx123
should add server=1 to bitcoin.conf?
git clone https://github.com/bitcoin/bitcoin
cd bitcoin/contrib/zmq and pip install zmq, then do python zmq_sub.py and we can't receive anything in long wait.
How can we receive hashtx and hashblock from bitcoind? Should i install libzmq3-dev? Is libzmq3-dev only for compile bitcoind and don't need in runtime?

The PPA you have installed (https://launchpad.net/~bitcoin/+archive/ubuntu/bitcoin/+packages) is not compiled with ZMQ support (It should in future).

You need to self-compile bitcoin v0.13.0 or use one of the "official" binaries: https://bitcoin.org/bin/bitcoin-core-0.13.0/

EDIT: since 0.14, ZMQ support is available via the PPA


Why does an adversary have to control 50% of the computing power to double spend? If transactions in a block are valid, in order to add that block in the block chain, a proof of work needs to be found. I have read the bitcoin paper by Satoshi.

If the difficulty of the proof of work requires say 2^52 computations (13 hex zeros) on an average, and since every node on the network is working independently, why can't the powerful adversary surpass the length of current block chain and present his version of block chain to the network? Specifically, why does the attacker have to control 1 percent or x percent of the network's computational power, when honest nodes on the network are not working in collaboration to find the proof of work?

If the adversary can find a proof of work quicker than the most powerful honest peer, he can compute a longer block chain and broadcast it to the network.

Let us assume that there are 2^20 nodes on the network, each computing 2^40 hashes per second on an average. Each node would then require 68 minutes to find a proof of work (trying 2^52 hashes). The total computing power of the network is number of nodes * computing power of each node = 2^20*2^40 = 2^60.

If the adversary operates at the speed of 2^45 hashes per second, he requires just 2^7 = 2 min to find a proof of work (2^52 hashes).

Now, the computing power of the network is 2^60, however each node is trying to find a proof of work independently. The computing power of adversary compared to the network is 32,000 times smaller. The amount of computing power controlled by the adversary is 1/32000 = 0.00001%,  but still he can compute the longer block chain.

Please help, if I am assuming something wrong here. The honest nodes on the network do not work in collaboration. So attacker need not control 50% of computing power on the network and has to expend computing power just more than average computing power of the honest nodes.

There are two assumptions in your question that aren't completely correct.

1) Each node would then require 68 minutes to find a proof of work (trying 2^52 hashes).

The process of finding a new block is not a linear task of work that needs to be accumulated. Rather it is a random process. Instead of a pile of work you are going through that has a fixed size, you could think of it as a lottery: Each try can win, but in average it takes 2^52 tries to win. This distinction is very important, because…

2) The honest nodes on the network do not work in collaboration.

…it allows the network to collaborate without coordinating!
Every mining entity is trying to confirm a different block. This is so, because each is trying to claim the block reward for themselves, therefore at least one transaction, the coinbase transaction, must differ.¹
So, since we have established that we are looking at a random process, and everyone is working on different data, we realize that the honest nodes are not duplicating each other's work. Therefore, all the honest nodes are going through a lot more inputs together than the adversary, and in effect are collaborating at finding a new block.
As cpast has pointed out in the comments, it is also very important to realize that nobody loses progress by switching. Therefore, only the time that the block requires to propagate through the network is lost, and everybody will switch to the new block with the one just found as a parent as soon as they receive it.
Finally, this means that we need to compare the mining power of the honest network with the adversary's mining power in order to see who can create the greater chain. And as you have said yourself, with your exemplary numbers the network is 2^15 times as powerful than the adversary.

¹ Also, they can be working of different sets of transactions, the transactions will be in a different order for different miners, the timestamp changes every second, and they add more random data to try different inputs.


setting up and verify a wallet under special circumstances A friend of mine has a problem in verifying a wallet for the following reason.

Since about 40 years he has been denied a passport and a normal ID card by the german authorities after he handed in his old IDs after marriage. But it seems there is no chance to set up an BTC wallet that permits usual activities (buying resp. selling and transferring BTC.

Q: Is there any institution in the EU (using german or english language) that permits wallet on/with alternative identification and is at the same time trustworthy and has high level of integrity?

My friend would intend to buy 3 BTC and following per year one additional BTC for an indefinite period.

I would appreciate someone's help in this matter. Thank you.

It seems your friend is attempting to open an account at an online exchange, this is the general instance in which people new to Bitcoin try to make an initial purchase.

It is important to note that the account they are opening at an online exchange, is not just a bitcoin wallet, but also an exchange trading account. Currently the vast majority of online services do not make proper distinctions or delineations between the difference financial services they offer.

To create an account and associated set of keys to accept and transfer Bitcoin funds in the Bitcoin blockchain, one does not need to use a service, and may use any number of wallet software options. There are also free online services which do not require any identification to set up and host a wallet using their service.

I will not try to attempt to answer all the security related issues regarding wallet hosting services. This should be a separate area of inquiry for any new user of Bitcoin.

Any market, exchange, or trading platform where users can trade Bitcoin credits for national currencies, is managing transactions in those currencies, and will generally be attempting to comply with local laws respecting those transactions. It is at this point that these services are requiring identification of users, in order to comply with financial regulations.

The common practice of those looking to trade small amounts of Bitcoin credits for national currency, or vice versa, is to find ways to do so in person, rather than online. This usually done by finding someone to meet using an online service like LocalBitcoins.com or meetup.com and then meeting the person, or using a nearby Bitcoin ATM. In either case, small amounts of funds traded between the people or with the ATM are considered to be within legal limits of a non-reportable transaction. You may want to check your local regulations to see what those limits are.

It's good to keep in mind, for those who are new to Bitcoin, that there are two parts to any currency trade you are making for Bitcoin credits. The national currency transfer, and the Bitcoin funds transfer. The national currency transfer is the one that requires identification of users, generally speaking.


How does a pool know work has been done I have not been able to find any method that pools use to verify you've done the work you say you did. So if someone does a solution withholding attack but without actually knowing what the solution is in a PPS pool then can't this attack just get free coins?

Miners submit shares to the pool to prove that work has been done. Shares are easier hashes than blocks (by default, one in 2^32 hashes will be a share), and there is no way to find shares without doing the work needed to find blocks. See also What is a share? Can I find it while mining solo, or only when pool mining?

However, a miner can do the work but still refuse to send valid blocks if he finds them. This is called block withholding and can be used in several attacks.


In Bitcoin scripting, can you have an IF within an IF? In bitcoin, you can create a script like this:

OP_1 OP_IF OP_RETURN OP_ENDIF

But could you place another if statement inside the first?

OP_1 OP_IF OP_1 OP_IF OP_RETURN OP_ENDIF OP_ENDIF

I grant that this is a bit of a silly example (given that the whole thing could be replaced with OP_RETURN) but is that a valid script?

Firstly, I'd like to note that you could change your script to OP_1 OP_1 OP_BOOLAND OP_IF OP_RETURN OP_ENDIF and it would be the same.

I'm reading the bitcoin source code, and I can't see a check for nested OP_IF's. These are the IF related checks I've found:

No IF/NOTIF without a value on the stack
No ELSE/ENDIF without an IF/NOTIF
No IF/NOTIF without an ENDIF

So it would let you nest IF's. In fact, it appears that allowing people to nest IF's is intended. Take this variable, which is used to figure out whether a branch of an IF is executing:

vector<bool> vfExec;

If they didn't want nested IF's, they could have made that a single bool variable.

Amusing fact that I figured out while researching this: The script OP_1 OP_IF OP_ELSE OP_ELSE OP_ENDIF is entirely valid.


How does the network handle changing IPs? From what I understand, when a node first comes online, it requests a list of known IPs from all of it's peers. I'm assuming that by doing that, it shares its own ip to all of the peers, which in turn save it into their list. At this point, the network is in sync.

My question is, what happens when the node in question changes IPs?

That's a good question, but nothing really substantial changes.

The node will reconnect to a peer (whose IP address has remained the same) and the node's new IP address is added to the list of available peers. The old IP address remains in the list, but eventually removed when it gets older: the peer list also keeps track of the last time it saw the node.

  it shares its own ip to all of the peers

It doesn't actually, the node you connected to will tell you what your IP address is. (I'm not a 100% sure about this tho)

  what if the list if full of old IPs?

Well, that's why there are 'seed nodes' active on the network. They often use domain names, which get resolved to IP addresses (so they can change). They only exist to distribute peer lists. In Bitcoin Core, you connect to the seed node and disconnect after about a minute. You should have enough IPs in your peer list to remain connected to the network from then on.


I have lost the ‘seed keys’ (password) to my Mycelium soft wallet (which is on my old iPhone) I purchased Bitcoin several years go, it is on a ‘soft wallet’ (Mycelium is the name of the wallet) on an old I phone that is no longer used. Is this Bitcoin in any way recoverable?

If you didn't write down the seed phrase, didn't write down the private key and didn't make a backup, you don't have any way to recreate your wallet and have lost control over any money.
A seed phrase is not a password.


Buy alt coin with bitcoin and both go up 300%, so did I even make any money? Seems that my poor and rich bitcoin holding friends don't seem to even know the answer to this  :/

Say I used coinbase and transfer BTC to an exchange like bittrex and exchanged BTC for some alt coin lets call it  XYZ.

If say Bitcoin was at the time (months ago)  $5,000 USD, and then say the value of this alt coin called XYZ was valued at $100 USD  ( via the BTC estimation)

If we ignore fees...

XYZ goes up 300%   from $100 to $300  ,  but at the same time period , BTC also went up 300% and goes from $5000 to $15,000
Exchange XYZ for BTC ,
Send BTC to coinbase  ... send to bank account   ( ignoring fees )

Ignoring fees,  did I just break even????   serious question as it seems like I did, right?

Example say monero went up from $30 to $300 ,  and BTC did a 10x increase ... well then on one hand I was about to say I didn't make any money ,... but now that doesn't make any sense    Ugh   Help

Of course you profited, because your market value just increased by 300%.

In your case:
You had 1BTC (worth $5000) on Monday.
You sell 1 BTC and buy 50 XYZ( 50 * $100 = $5000).
Then comes Tuesday, both XYZ and BTC goes up 300%.
Now your 50 XYZ is worth $15000, you exchange 50 XYZ for 1 BTC.
You see, your total market value increased from $5000 to $15000.


Bitstamp ripple bridge clearing time How long does it take for a ripple bridge transaction to clear?

Bitstamp BTC on ripple -> bitcoin address

Currently, the only functional bitcoin bridge the client directly uses is operated by Bitstamp. The time until they issue a matching bitcoin transaction is completely dependant on how well Bitstamp's automation and bitcoin transaction batching is working.

The Ripple side of the transaction completes within seconds. When Bitstamp is operating "correctly" the bitcoin transaction is initiated within seconds or a couple of minutes. Then of course you'll need to wait for however many bitcoin confirmations the receiver requires.

Once the Ripple side of the transaction completes, if there are any further unexpected delays or problems the sender will need to enter a support ticket with the brigde operator (Bitstamp for now) to have someone there look into the issue/problem. For example, a week or so ago, their automation stopped processing most Ripple transactions and it took quite a long time for their support to straighten everything out.


Issue with sendrawtransaction missing inputs error code -25 Working with Bitcoin-qt 0.16.3 testnet

Attempting to sendrawtransaction, however, receive following error:

Missing inputs (code -25)

From what I have read, this results from attempting to use outputs in the transaction that have already been spent.

I am confused, however, because I am explicitly using a transaction listed by listunspent. Doesn't that mean the output is unspent???

If you could point me to where I am going wrong, it would be greatly appreciated.

Here's exactly my work:

listunspent

output

[
  {
    "txid": "8d42a2db310b794ae0d75ed9a68262081fd83817a862f87a99cd176ce8743223",
    "vout": 1,
    "address": "2MtBLx3arsHFV1cBYSo5AXmX5Pf3tfcgda3",
    "account": "addy2",
    "redeemScript": "0014436faf386d5c77c575e3372a97e268a08e3f5378",
    "scriptPubKey": "a9140a3c45e4e27e98b6bf1171b4fe1bf689b9a3dbf287",
    "amount": 0.00010000,
    "confirmations": 229,
    "spendable": true,
    "solvable": true,
    "safe": true
  }
]

input

createrawtransaction '[{ "txid": "8d42a2db310b794ae0d75ed9a68262081fd83817a862f87a99cd176ce8743223", "vout":2 }]' '{ "2N8kPhdhwAYYK8rFt7Fhvm3oapsMF7vqbcB":0.00003, "2MtBLx3arsHFV1cBYSo5AXmX5Pf3tfcgda3":0.0000695}'

output

0200000001233274e86c17cd997af862a81738d81f086282a6d95ed7e04a790b31dba2428d0200000000ffffffff02b80b00000000000017a914aa0e0ebe49d03dc1b79f91775aada9293179bb2387261b00000000000017a9140a3c45e4e27e98b6bf1171b4fe1bf689b9a3dbf28700000000

input

signrawtransaction '0200000001233274e86c17cd997af862a81738d81f086282a6d95ed7e04a790b31dba2428d0200000000ffffffff02b80b00000000000017a914aa0e0ebe49d03dc1b79f91775aada9293179bb2387261b00000000000017a9140a3c45e4e27e98b6bf1171b4fe1bf689b9a3dbf28700000000' '[{"txid":"8d42a2db310b794ae0d75ed9a68262081fd83817a862f87a99cd176ce8743223","vout":2,"scriptPubKey":"a9140a3c45e4e27e98b6bf1171b4fe1bf689b9a3dbf287","redeemScript": "0014436faf386d5c77c575e3372a97e268a08e3f5378",
"amount":0.0001}]'

output

{
  "hex": "02000000000101233274e86c17cd997af862a81738d81f086282a6d95ed7e04a790b31dba2428d0200000017160014436faf386d5c77c575e3372a97e268a08e3f5378ffffffff02b80b00000000000017a914aa0e0ebe49d03dc1b79f91775aada9293179bb2387261b00000000000017a9140a3c45e4e27e98b6bf1171b4fe1bf689b9a3dbf287024830450221009274a153ee55925681d5382fecbff723e2ec12e92dafc7188565e2ee2bef092402201133ec3545333afeacda23b63917660ed62be667508dbb5a121a4ed9aa52125401210273340ff4511f6bbcf7d9f1c1fe69f66704398e54f4cde0e0ec60313476fc92ab00000000",
  "complete": true
}

input

sendrawtransaction 02000000000101233274e86c17cd997af862a81738d81f086282a6d95ed7e04a790b31dba2428d0200000017160014436faf386d5c77c575e3372a97e268a08e3f5378ffffffff02b80b00000000000017a914aa0e0ebe49d03dc1b79f91775aada9293179bb2387261b00000000000017a9140a3c45e4e27e98b6bf1171b4fe1bf689b9a3dbf287024830450221009274a153ee55925681d5382fecbff723e2ec12e92dafc7188565e2ee2bef092402201133ec3545333afeacda23b63917660ed62be667508dbb5a121a4ed9aa52125401210273340ff4511f6bbcf7d9f1c1fe69f66704398e54f4cde0e0ec60313476fc92ab00000000

output

Missing inputs (code -25)

From your listunspent: "vout": 1,

From your createrawtransaction: "vout":2

You are trying to spend an output that doesn't exist.


How long do transactions on the Liquid Network take to clear? Transactions on the Liquid sidechain are said to enable much faster transfers than the main Bitcoin blockchain.  How fast are the the transfers?   Does it still use a blockchain?

Does it still use a blockchain?

Yes, it is using a blockchain, however it is "federated" with a known set of participants which enforce consensus rules. It does not utilize proof-of-work mining.  The Liquid sidechain allows 2-way pegging of assets eg: L-BTC <-> BTC.

  How fast are the the transfers?

The Liquid white paper mentions 1 minute block times with the possibility to reduce this:

"Today, the implementation allows for one minute blocks. It will be possible to reduce the time to the amount required for the pre-commit and agreement threshold time of the network traversal"

However (as of October 29th, 2018) the Blockstream website has a bullet point indicating the actual settlement time is 2-minutes currently:

"React to trading opportunities faster thanks to two minute settlement times when sending between exchanges."

This should allow much faster transfers between exchanges which could potentially let users trade L-BTC upon receipt as though it were BTC.


Definition of confirmation time in blockchain.info What will be the definition of confirmation time and data used for

https://blockchain.info/charts ?

I would appreciate confirmation.

I believe the data presented on blockchain.info's site is collected by the following method:

a blockchain.info node hears about a new transaction. It is added to the node's mempool, and an entry that includes a timestamp is also recorded into a local database
when the node hears about a new block, it will check to see which transactions are included. It will then compare the time the transaction was first seen, with the time the block was first seen, and the difference between the two would be a 'time until confirmation'.

This chart reports the median time for transaction confirmation, but note that it excludes any transactions with zero fee.

It is potentially worth noting that some transactions are published with a low time preference, meaning the person initiating the transaction may intentionally include a low fee that will take a while to confirm, and this would drive the 'average confirmation time' up, even though the network is functioning well for it's users.


What would happen to bitcoin in a world with no electricity/internet? Many people discuss gold as an 'apocalyptic' currency because it will be what's used (supposedly) if the world ends, or there is some cataclysmic event that wipes out the power grid and internet connectivity.

In such a scenario, would bitcoin still maintain value, could a blockchain be maintained, would paper wallets still contain bitcoin, etc?

Without computers or electricity, Bitcoin would have no value and could not be used as it is entirely a digital asset. There are no such an object as a coin and thus Bitcoin cannot be put into a physical asset. The blockchain itself is what determines something is Bitcoin, and without it (because there are no computers or electricity), anything physical intended to represent or store Bitcoin (e.g. a paper wallet) has no value besides the value of the material itself.


How to find the private key of blockchain wallet? How to find the private key of blockchain wallet of this address 1DkyBEKt5S2GDtv7aQw6rQepAvnsRyHoYM

I am hoping you are talking about blockchain.info

If yes, then I am again hoping that the above address you have posted is a wallet address in your blockchain.info

If again, the answer is yes, please follow the below steps:

Go to settings, then click addresses as shown below:

Click on more options aside your address whose private key you require as shown below:

In 'More Options' you will find "Private Key", please click it:

They will show you a warning as below, please click continue:

You can see your private key for the corresponding wallet address:

Hope this helps you!


How does Nxt agree on a chain when "active accounts" can be easily faked? From what I understand, in Nxt, blocks are mined (or forged) using a system based on Proof-of-Stake where block creation works similarly to a lottery: people have tickets, and the more tickets you have, the greater the chances of winning and therefore forging a block. Tickets in Nxt are just coins you own in the system.

What I don't understand is that for each block creation, the winner is found from a pool of "active accounts" which so happens to be people that are online at that moment. Based on specific things (like how many coins one has), the winner is then found. My concern is that someone can forge a new block without caring about the "active accounts", he sort of pretends that nobody else is online. So he'll mine it for sure, as he's the only one, and then he'll broadcast it. He keeps doing this for the next blocks and so on.

What's stopping other peers from accepting his chain?

Linking to the discussion on the NXT forum https://nxtforum.org/general-discussion/academic-questions-regarding-pos-and-nxt


Why do multihop LN payments start settling from the recipient's end? In HTLC, after all the parties have locked their funds in the contract, claiming payment happens in a reverse way, starting with the receiver who reveals the preimage of the corresponding payment hash.

What would be the problem if it had started with the sender? After the receiver confirms receipt of the contract, it sends an acknowledgment to sender. Sender releases preimage, timelock set in increasing order across the path, contract initiated by sender having the least locktime. Receiver is the last node to settle the payment.

For reference, I am adding a picture so that one can visualize what I am trying to say.

I think you have answered your question yourself. If all nodes would behave honestly and in good faith your process would work. But in that case we would not need to go through the hustle of setting up htlcs to begin with but we could just forward money by changing the balances in each channel. The whole point of using htlcs is to make the payment process atomic and prevent nodes along the path from stealing funds.
Other than that I do not see any additional flaws.
Offtopic:
Looking at your recent post on the mailing list (c.f: https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-May/002718.html ) I wonder if this idea of "forwarding a second preimage" in addition to the current process of "releasing a preimage" could be constructed to prevent griefing attacks because the sender could enforce settling the htlc in case someone stalls the process. But the way how I  imagine such a solution right now, it would basically run into the same problems as you already described in your initial question. It might be interesting to investigate if PTLCs (with adoptor signatures and payment decorellation) could be used to identify the griefing node and use such a process.


Can a cryptocurrency be "decapitated" Say the first n blocks on the block chain were mined by the creator of the currency. What's to stop everyone unanimously deciding to ignore those first n blocks at a later date and therefore "bankrupting" the creator. Obviously agreement between a large number of parties to do this is unlikely in practice, but is there anything theoretical that prevents this?

No, nothing stops it.  The rules of the currency are whatever people decide they are.  If there is unanimous agreement on a change - that is, if all users adopt a patch implementing different rules - then the change happens.

Obviously this would be a bit strange if some of those coins had already been spent - they might have changed hands many times and now be held by many different people, who would be punished by such a rule. But still, if everyone adopts the patch, that's what happens.

Such a change might also shake the market's confidence in the currency.  An investor might think "The vengeful community turned on this one guy and wiped out his funds.  What if they turn on me next? I better dump all my holdings right now, before that happens."  If enough people think that way, the value of the currency crashes.

If there is only partial agreement - some adopt the patch and others don't - then the currency forks.  Some people would accept coins that originated with those first n blocks, and others wouldn't.  This situation can be very confusing if you are trying to buy something from a merchant, but they follow different rules than you do; your money might or might not be accepted.  Previous forks (e.g. Bitcoin Cash) have been relatively orderly because both sides were willing to go their separate and independent ways, and make it clear that they were two separate currencies.  (I did say "relatively orderly"; if you browse this site, you'll see lots of "halp I sent BTC to a BCH address" posts showing it hasn't been trouble-free for everyone.)  If both sides insisted that they were "the one true Bitcoin", it would be much more chaotic.


Is there any wallet that allows safely storing private keys in an offline computer? I have a computer that is 100% disconnected from the internet. I'd like to:

Generate my own private keys by dice rolls;
Import them on the offline computer wallet;
Send coins to their addresses;
Spend those coins by signing the transaction offline and sending to the network from another connected computer, i.e., the online computer never has access to the private keys.

Is there any Bitcoin wallet that allows this use case?

Armory will allow you to do everything except #1. That, you can do with a livecd:

http://www.swansontec.com/bitcoin-dice.html


Java mining solution I am a beginner in mining algorithms and I have a general question regarding the mining using Java language.

Does it make sense to use Java to develop for example ETHASH algorithm (or any other) and is it going to be as such effective as C ?

I already found that it is possible to do mining with Java and OpenCL, for example here : is there a Java or C# library for mining bitcoins?

But still, I am confused, is it going to be slower? Or Java just need to transfer data/code to GPU and then it works the same as native C code? Or am I missing something? How is it working under the hook?

Thanks in advance for any response or reference.

Java (Oracle and not JavaScript) is typically one of two competing paradigms for enterprise servers. The other is windows, assuming that Java is always paired with some enterprise version of Linux. So though you can completely use Java on windows servers without any loss of utility or performance, in the setting that you were to use Java you would just likely use Linux as windows has a competing programing paradigm known as c#. Also the comparison here is rough and not meant to be lliteral 1 to 1 map of c# to Java.

That said the primary reason for Java is complete hardware abstraction and portability of programs. A side effect of this is easier scalability. New server hardware can come online and completely and automatically join existing server hardware in running Java.

Java is probably one of the most high level software languages there are. In that you can deal with primarily abstract computational notions with out dealing with often repetitive and frankly independent aspects of everyday computers in their present formats. Additionally this could be why Java has some following in academia. You can study the abstract computational problems instead of some standard publication which may go out of date. In theory some Java software will never be outdated or obsolete if correctly written.

Java as a trade off does have significant overhead. When you say c or c++, that doesn't necessarily describe it's performance as to some extent that is just a standard which describes the syntax of the language. What you may actually be thinking of is what it compiles to. Depending it can be portable executable or .exe for example or it can be microcontroller arm machine binary or a list of Opcode's ready to be read off by the processor.

Java does specify the performance because it only compiles to one thing. That is a set of codes which the Java virtual machine executes (which in turn is executed by the stuff c would produce). This is how Java gets its portability. The JVM acts as a socket or adapter from one interface to another. Therefore one person need develop the JVM for the particular machine and that's it. You can see it's high priority for Java to improve performance of its JVM's. But even still for example in c and low to hardware, you can switch out costly trig functions to rough approximation by multiplication of a constant. In for loops etc calling trig functions this might be permissible in c while rendering a Java application utterly impossible.

Finally as to mining, Java key aspect is scalability. Software in Java can easily and very neatly be written to detect say new network additions and start scheduling work for them. So you can take any computer and as long as it has a JVM, it is now part of the pool simply by starting the same Java app that everyone else is running. I'm not sure you can get this aspect as easily with c. This is partly because windows has a different philosophy on hardware OEMs partly motivated by profits and a business environment, however you can see the good it has done in its own right by the excellent diversity of windows PC hardware while still typically retaining top performance to alternatives.

Again. Though Java allows enterprise to easily gain the server power they need and minimizing headaches. Sometimes the headaches are necessary to learn but sometimes it's not what's wanted.

In any case if you model the reduction in performance due to JVM overhead, you would have to compare that to longer down time or time in bringing up new hardware. If it took you a week to get a new minor up on say windows in c, and you could of had it up in 5 miinutes on Linux distribution with Java JVM you may be losing money short term. If the mining hardware had short life span that too could improve the cause for Java. It's some what to iot and using o.s. or not. You may get better performance with your custom servo controller but if a raspberry pi gets it up and running with Linux in 1 percent of the time, realistically after only a few projects testing prototypes you begin to devalue the bare bones solution.


Double spend attempts examples on testnet? Where can I find some double spend attempts examples on testnet? Can anyone refer me some TXIDs with double spends on testnet?

EDIT: I need some example in which an outpoint was intended to be used in two different transactions, like this one:

https://blockchain.info/tx/6900440e3bf9d7177ef69b8ca8bb620cb439d9261ce54b3df564f6778547003c

but on the testnet.

Invalid transactions are not kept as part of the blockchain; they are, after all, invalid. Your best bet might be to listen to the chatter on the network (you'd require a custom-written client for this, I would imagine).


Save transaction space with economic Scripts I have some questions regarding the programming of economic Scripts, so Scripts that save some transaction space compared to functionally the same Scripts but with redundancy by e.g. using the same public keys twice.
One example comes from the Script used for the atomic swap in the wiki:
https://en.bitcoin.it/wiki/Contract#Example_5:_Trading_across_chains

OP_IF
  2 <key A> <key B> 2 OP_CHECKMULTISIGVERIFY
OP_ELSE
  <key B> OP_CHECKSIGVERIFY OP_SHA256 <hash of secret x> OP_EQUALVERIFY
OP_ENDIF

In the script above the public key for B is referenced twice. But it can be rewritten to:

OP_SHA256 <hash of secret x> OP_EQUAL
OP_NOTIF
  <key A> OP_CHECKSIGVERIFY
OP_ENDIF
<key B> OP_CHECKSIG

Functionally it is the same script, but does not use the public key of B twice and thus saves space in the transaction.
The difference is the way the scriptSig must now be provided with the signatures or secret.

Other than that, is there anything against using the script above instead of the one from the wiki?

And what about the following example:

OP_SHA256 <hash of secret x> OP_EQUAL
OP_IF
  <K2> OP_CHECKSIG
OP_ELSE
  2 <K1> <K2> <K3> 3 OP_CHECKMULTISIG
OP_ENDIF

It is similar to the atomic swap above, but now there is a mediator involved.
Again the public key  is used twice. But it can be rewritten to:

OP_SHA256 <hash of secret x> OP_EQUAL
2 <K2>
OP_ROT
OP_IF
  OP_NIP
  OP_CHECKSIG
OP_ELSE
  <K1> OP_SWAP <K3> OP_CHECKMULTISIG
OP_ENDIF

This script accepts the exact same scriptSigs as the one before. It involves two more opcodes (OP_SWAP and OP_NIP), which are two bytes in total. But it saves 31 bytes in total by only using the public key K2 once.
It may not be so readable, but is there anything against using this script compared to the first one?

There are many similar cases I can come up with using the exotic opcodes like OP_SWAP, OP_ROLL, and so on. But I want to know if this does actually make sense when creating Scripts to use them to save transaction space?

Yes, that would save space. However, there are two ways in which your scripts are different.

It checks if there is a value that hashes to the hash of x at the beginning,
It performs the operation in step 1 whether we're executing branch 1 or 2.

Your first script can be rewritten like so to fix that:

OP_NOTIF
  <key A> OP_CHECKSIGVERIFY
  OP_0
OP_ELSE
  OP_1
OP_ENDIF
OP_SWAP
<key B> OP_CHECKSIG
OP_IF
  OP_SHA256 <hash of secret x> OP_EQUAL
OP_ENDIF

Space savings

Each public key is 34 bytes (33 bytes for compressed key plus 1 for data push). Blocks are about 617k at the moment, and the total fees for a block are about 0.223 BTC. Each public key therefore costs:

34 / 617000 * 0.223 * 1e8 = 1228 satoshis

A small amount, but it would add up over time.


Is Bitcoin's mining difficulty adjusted if it fails to solve a block If the current Bitcoin miners lose 99.99% of their hash rate, mining the next block would take a lot more than the average set of 6 per hour (10 minutes). Is the mining difficulty somehow readjusted in order to face this potential problem?

No,

According to the Bitcoin Wiki, the difficulty is only adjusted every 2016 blocks.

  The difficulty of the mathematical problem is automatically adjusted by the network, such that it targets a goal of solving an average of 6 blocks per hour. Every 2016 blocks (solved in about two weeks), all Bitcoin clients compare the actual number created with this goal and modify the target by the percentage that it varied. The network comes to a consensus and automatically increases (or decreases) the difficulty of generating blocks.

However, Bitcoin Cash has a solution to the problem.

If less than 6 blocks have been mined in the past 12 hours. It becomes 20% easier to mine blocks.


Can a block have multiple coinbase transactions? Also is there a limit to the number of signatures a multi-sig transaction has or requires? I am wondering if a block can be created with multiple coinbase transactions. The US government regulates mining pools that have control over the miner's wallets, so it would be fabulous if this could be circumvented by having multiple coinbase transactions to multi-sig wallets. Also is there a limit to the number of signatures that a multi-sig wallet can require?

A block can only have one coinbase transaction. You could however send the reward+fees of the coinbase transaction to multiple addresses (of any type) just like any other transaction.

  is there a limit to the number of signatures that a multi-sig wallet can require?

https://bitcoin.stackexchange.com/a/28092/87716


From a legel perspective, are Bitcoins "created" by a miner or the Bitcoin Protocol? The recent FinCEN announcement said explicitly that virtual currency isn't a "currency" by the standard sense of the word, and shouldn't be regarded as such.

Should Bitcoin ever be considered a "currency" I think it would be helpful to know if the coins were created by the miner or created by the protocol.

Miners

Miners claim and distribute brand new coins that have never been used before.
The ability to claim a coin is distributed worldwide and is equally random

Protocol

The protocol existed before any miner was configured.
The protocol demands that no more than 21 million coins ever exist
The protocol controls the inflation/deflation of the coins through "difficulty"

To me it seems that the "creator" of a Bitcoin is the protocol, and not a miner, and that the term "miner" may not be appropriate.

For most legal purposes, is it ever likely that a "miner" will be considered illegal in any country as if they are "creating" a currency"

The new FinCEN regulations are quite clear that the term "create" includes currencies that people "obtain by their own computing or manufacturing effort".

A final type of convertible virtual currency activity involves a de-centralized convertible virtual currency (1) that has no central repository and no single administrator, and (2) that persons may obtain by their own computing or manufacturing effort.
A person that creates units of this convertible virtual currency and uses it to purchase real or virtual goods and services is a user of the convertible virtual currency and not subject to regulation as a money transmitter. By contrast, a person that creates units of convertible virtual currency and sells those units to another person for real currency or its equivalent is engaged in transmission to another location and is a money transmitter.
In addition, a person is an exchanger and a money transmitter if the person accepts such de-centralized convertible virtual currency from one person and transmits it to another person as part of the acceptance and transfer of currency, funds, or other value that substitutes for currency.

And, if by some chance you still think it's ambiguous and perhaps "mining" and "creating" aren't the same thing, it then says this:

How a person engages in "obtaining" a virtual currency may be described using any number of other terms, such as "earning," "harvesting," "mining," "creating," "auto-generating," "manufacturing," or "purchasing," depending on the details of the specific virtual currency model involved. For purposes of this guidance, the label applied to a particular process of obtaining a virtual currency is not material to the legal characterization under the BSA of the process or of the person engaging in the process.


Why is it hard to fake proof of work? Does someone understand this?

  "Because of all this work, when a Bitcoin client signs on to the network it can trust the block chain that was most difficult to produce (since this is evidently the one that was being worked on by the most miners). If there was a "fake" blockchain competing with the real ones (say, where someone pretends that they didn't actually give Sofia those 8.4 bitcoins and they still have them), the fraudster would have to do as much work as the whole rest of the network to make their block chain look as trustworthy. So essentially, the intense work that goes into finding blocks through hashing secures the network against fraud. There is also, of course, some nifty code that figures out how to choose between conflicting transactions; and what to do if two people find valid blocks at the same time."

For each new block to be fixed to the end of the blockchain, a mathematical puzzle must be solved. In simple terms, the block is hashed, along with a hash of the previous block and a 'nonce', to create a new hash. The nonce can be thought of as the 'solution' to the block. It is a value such that, when all the information (previous hash, transactions and nonce) are hashed together, the resulting hash is below a certain value. (You can see that all the hashes of blocks have a long string of leading zeroes.)

The aim is for a new block to be completed every ~10 minutes, so the network agrees on a 'hash threshold'. The more computers that are competing to find the nonce, the lower the threshold becomes. How many computers are competing is gauged by whether blocks are regularly found in less than, or greater than, ten minutes on average.

So if your Bitcoin client finds a long blockchain, where each nonce is found according to a low threshold, it can surmise that a lot of work has gone in to creating that blockchain.

Even if another blockchain of the same length existed, for it to have such 'rare' hashes a lot of computer time would need to be dedicated to its construction. The longer the (real) blockchain gets, the harder it is to construct one that is equally long and has equally low hashes for each block.


What vulnerabilities have been found in Bitcoin Core using fuzzing? Is there a list of vulnerabilities that have been found in Bitcoin Core using fuzz testing?

For a list of historical Bitcoin related CVEs (common vulnerabilities and exposures) see the Bitcoin wiki.
However, for a focus on Bitcoin Core vulnerabilities found by fuzzing there is a resource on the Bitcoin Core dev wiki on "fuzz trophies".
Marco Falke stated here in May 2021:

I did a survey of all bugs found first by fuzzing, excluding known
bugs that can merely be reproduced by fuzzing (regression fuzz
testing). I found that most bugs fall into one of the categories:

Silent merge conflict (forgetting to update the fuzz target after code changes)
A bug in the fuzz target itself
A recently introduced critical (exploitable) bug, but only present in    the master main development branch
A minor (non-exploitable) bug, potentially present in previous    releases


Is there a documentation of the first altcoins timeline? Meaning, which altcoin was created one, in a chronological order.

It's interesting, from a historical perspective, to collect such an archive.

When posting I forgot about this cool site that does exactly that!


Need help recovering my bitcoins A few years ago I purchased some bitcoins from MtGox and decided to retrieve them to the wallet on my PC.

Now without getting into detail I got sick of the headaches and ended up uninstalling the program before I received ANY coins. In retrospect I could not have been a bigger idiot.

Now these coins are worth a small fortune and I've done everything I could think of to retrieve them. I contacted MtGox and all they could say was that the network says the transaction shows as complete. I have extensively and on a byte level searched the PC in question for remnants of my private key, with no success.

Which brings me to the question at hand.

I still have my public key, the knowledge the coins were never received and access to the MtGox account they were sent from.

What can I do? MtGox simply left it at "the network says it was completed, therefore fuck off"

First step: stop using that harddisk absolutely immediately. Either get a new one and start using that or make a complete image on the byte level (for example with dd in linux). Any write action you do on your current disk may overwrite your private key (assuming it hasn't already).

For further steps you need to provide more info.

Which bitcoin wallet were you using?

Was your wallet encrypted with a password, do you remember?


Found an old wallet with transaction history with coins (unconfirmed), but no balance I have found an old bitcoin wallet in my files. I can see there are old transactions but they aren't confirmed. But there should be more BTC received than was sent, so there should be a balance. Is there anyway to get those transactions confirmed from 2013. And how do I check those addresses to see if there is any balance in those wallets?

To check balance, just use this link: https://blockchain.info/address/your-wallet-address-here to check the balance of any wallet. You can also see all the transactions happened through that link.


Is it possible to send coins WITHOUT importing private key? I have a cold storage wallet that I periodically move funds into.  I want to be able to send funds out of the wallet quickly.  Right now, I have to keep a clean VM up with the full blockchain, then import the key, send my funds, and basically revert my VM.  While it's manageable, i'm curious if there is a more elegant solution.

Basically what Murch said. You have to use the private key to sign the transaction.

There is a point I want to add, however. It is possible to send coins without importing the private key into a computer which is connected to the Internet. In fact, this is how a properly run exchange or online wallet service ought to maintain its cold storage. Normally, funds are just sent to the public address of the cold storage. When it comes time to send coins out of cold storage, the private key is imported into an offline computer, the transaction is generated and signed, and the signed transaction is then broadcast using a different computer (which is connected to the network). This increases security as it prevents malicious attackers from gaining access to the private key because they simply have no way of connecting to the offline computer on which it is stored.


Can difficulty target by exploited by miner with proprietary computer? Assume a hypothetical situation where a researcher was able to develop a computer capable of 2,000 PH/s (the current network hashrate). During his first 2 weeks of mining, he would strike it rich as he would win 50% of block generations with 5 minutes per block.

After 2 weeks, the difficulty target would readjust, and this miner would no longer have an advantage.

However, for this next 2 week period, the miner sits out, waits 2 more weeks, and allows the network to re-adjust back to a higher target, at which point he re-enters and sweeps the rewards once more.

He repeats this cycle in perpetuity.

A solo miner with 2,000 PH/s seems infeasible, but what if a powerful mining pool were to pull this stunt — withdraw from mining for 2 weeks, allow for the difficulty target to re-adjust, and re-enter with a much easier difficulty?

No, for two reasons:

His advantage is always the same. If he has 50% of the mining power, he makes 50% of the revenue when he's mining and 0% when he's not. The difficulty does not change this.
In the on/off scheme, when he's mining, blocks are being found twice as quickly. So the difficulty adjustment comes twice as fast. When he stops mining, he has to wait twice as long for the difficulty to drop, so he's mining less than half the time. By forcing the difficulty up and then not mining, he has to wait an awfully long time before it comes back down -- during all that time, his mining hardware is depreciating.

I am assuming that the only thing he does is mine or not mine. I'm ignoring the possibility that he attempts to force reorganizations or does other "bad" things.


Transfer Bitcoins From Bitcoin Core To Blockchain Wallet? I used to have Bitcoin core on another computer and kept it on C drive with 2TB hard drive. I kept the dat on a USB.

However it broke and on my new computer the C drive is a fast but small drive that doesn't have the space to download the blocks now. So after a google search i found some info to use my D drive for the downloads which i have done.

The problem is every time i load the software it seems to need to verify the blocks as if there is some error and constantly stays on 3 years and 7 weeks behind and never seems to get further. My internet speed is ok but not ultra fast also so the software wallet just seems like a nightmare to use now as the balance remains at 0 and i can't seem to do any transfers until all the blocks have updated i guess. Why the wallet can't do a quick blockchain based balance update to save people from this serious problem i have no idea.

I have about $50 in bitcoin in the Bitcoin Core wallet though and would like to transfer it to the online Blockchain wallet, is this possible?

Yes. It is possible. To transfer the bitcoins out without synchronising the blockchain, you'll have to create a signed raw transaction and broadcast it with a third-party provider (such as blockchain.info). You can lookup the input from a blockchain hosted on a third party provider.

bitcoin-cli help createrawtransaction


Walletnotify under windows Few questions about Walletnotify under win:

1)  Is this the rigt way to write .py script into litecoin.conf: walletnotify=C:\Python27\python.exe D:\LiVe\listener.py %s
If not, how it should be modified?

2) Walletnotify gives txid as an %s, txid contains number of confirmations. So here is question, at which point happens call to script, on 0 confirmations, on 1, on 1-3(meaning script will be called three times on transaction, when it gets 1,2 and 3 confirmations? On each confirmations?

3) Is there a way to transfer small ltc to own wallets account without transfer fees, because at the moment i have exactly 0 ltc, thus denying me to just test 2 in peace.

Thanks a lot

1) Your command line looks fine. Remember that %s will be replaced by a transaction id, such as 9de5056696618f22237eb280bbefe94c1d19661de960a1f2c546a0e3a2bc4600.  So if you can run the script at the command line like this you should be ok:

C:\Python27\python.exe D:\LiVe\listener.py 9de5056696618f22237eb280bbefe94c1d19661de960a1f2c546a0e3a2bc4600

2) The transaction id by itself does not contain the number of confirmations.  To get the number of confirmations, you'll have to look up the transaction yourself.  You can either use an external service like blockchain.info's API, or call bitcoind's GetTransaction.

WalletNotify will fire twice for each transaction: the first time that the transaction appears on the network and the first time that a block is published that contains that transaction.  There are no notifications on subsequent confirmations.

3) If you want to move coins between accounts within a wallet, you can use the move command.  But if you are going to publish the transaction in the blockchain (i.e. send from one address to another, even within the same wallet) then you may have to add a transaction fee, depending on your inputs.


mobile app which stores wallet locally From what I understand, both the CoinBase and BlockChain iOS apps store your wallet on their servers.   There doesn't seem to be any iOS app (or perhaps Android either) which stores your wallet locally on the mobile device.

I understand why it may be impractical to download and store the multi-GB blockchain locally on the device but the wallet is usually very small.  I understand that by storing the wallet locally you risk losing your coins if your phone is lost or stolen but that could be mitigated by offering features to encrypt your wallet with a passphrase and also back it up over USB to your computer (or choose to assume the risk of loss).

Is there some technical reason why a mobile app can't be developed that stores the wallet locally (and obviously does not transmit it to the server) but stores the blockchain on the server?

Bitcoin Wallet

Electrum

BitcoinSpinner

All of the above mentioned store the wallet file locally on your phone


Electrum and public note Is it possible to attach a public note to transaction using Electrum client, if yes so how ?

No, that's not possible.

Public notes are a feature of blockchain.info and only exist in the blockchain.info database (and not in the Bitcoin blockchain).

The only way to add a public note to a transaction on blockchain.info seems to be by using their wallet.


Why are transactions grouped into blocks? (how are transactions put into blocks) Why are transactions grouped into blocks (PART 3)?

Lets say we have just put a block on the blockchain. Now miners start forming new blocks and try to guess new hash values. The miners are putting transactions into their formed block (with a hash guess)? Which of the unconfirmed transactions do they put into the block (all unconfirmed or a subset)?
Is putting a transaction into a block a way of stating that transaction has been validated? How does this guarantee the transaction, miner put in the block, is valid?

Lets say we have just put a block on the blockchain and there are no blocks at the moment that miners mine. Now miners start forming new blocks and try to guess new hash values. The miners are putting transactions into their formed block (with a hash guess)? Which of the unconfirmed transactions do they put into the block (all unconfirmed or a subset)?

Miners will select transactions to include based upon transaction fees. In Bitcoin Core, this transaction selection is done as follows: Group up transactions into packages, a package consists of a transaction and its unconfirmed ancestors and descendants (some packages may just be 1 transaction, others more). Then calculate the total fee rate paid by a package and sort the packages by fee rate. Select transactions by going down the list of packages and choosing each package until the weight of all of the transactions (as defined by BIP 141) cannot allow any more transactions to be included (i.e. add packages until the weight exceeds the limit, then remove what was just added and add the next one, etc. until no transactions left to add).

There will often be more unconfirmed transactions than can fit in a block, so miners will only select a subset of unconfirmed transactions.

  Is putting a transaction into a block a way of stating that transaction has been validated? How does this guarantee the transaction miner put in the block is valid?

It is not. A block could contain invalid transactions and the block (and those invalid transactions) would be invalid. A full node must check that a block is valid. They do this by checking the block header is valid, the coinbase transaction is valid, and all transactions in the block are valid. Just because a transaction is found in a block does not mean that it is necessarily valid, and if it is not, the block is invalid and should be rejected.


Is there a list of coins that are bip-32 compatible? BIP 32 allows me to derive keys based off a root key pair, and all these keys will be on the secp256k1 curve. That means I'll be able to use BIP 32 for other coins that are also based on your curve.

Is there a list of well know coins and the curve they are based on? My spot check shows that most seem to be, but I'm looking for a more comprehensive list

Bip-32 allows me to dereive keys based off a root key pair, and all these keys will be on the secp256k1 curve.

This is actually not true. The BIP32 proposal simply states that (emphasis mine):

  In the rest of this text we will assume the public key cryptography used in Bitcoin, namely elliptic curve cryptography using the field and curve parameters defined by secp256k1

In reality, it can be used for any curve, as evidenced by the fact that both Monero and Zcash support BIP32 backed derivations, but use different curves.

If you wish to see a list of coins that follow the BIP32/39/44 system, you can check the coin type list maintained by Satoshi Labs at SLIP-0044


Where can I find a graph of average transactions per block over time? Is there a website where I can view the size of the memory pool over time, or the average number of transactions per block?

For a chart of the average number of transactions per block per day:

http://blockchain.info/charts/n-transactions-per-block


What happens if I mistype the address when making a payment? I sent bitcoins to an address, but I think I made a typo when I copied it. Where did these bitcoins go. Can I get them back?

Bitcoin is very resistant to typos because the addresses contain a built-in check code.  So if you had simply mistyped a few of the letters or numbers in the address, it's unlikely the client would have let you send them.  If, however, you pasted in a different and valid address, the coins are already transferred to it permanently.  In this scenario, Bitcoin works pretty much like cash--there is no way to get it back after giving it away.


Network Time of Bitcoin Bitcoin uses UNIX time for timestamp. Unix Time is really accurate. I want to know why there is a "70 minutes" offset is allowed in Bitcoin network adjusted time. Is there any distribution used to get to this "70 minutes".

The leeway exists mostly because timekeeping is not very synchronized, overall. Computers can easily be off by several minutes, and around daylight time changes it's not uncommon to see computers off by an hour or so.

Having stuff like NTP makes things more in-sync, but one cannot expect all participants in the network to be using services like NTP.

Counting up from the Unix epoch is very accurate, yes. The ability of various computers to maintain that accuracy is not.


Mining operations: what's allowed and what's not? I understand that miner's compete to create blocks that meet certain (very specific) cryptographic criteria. However, I'm still having trouble seeing the "forest through the trees" here, and have a few very-similarly-related questions that I think will tie everything together for me:

What are these competitions/races called? Block bids? Block challenges?
What software announces to all the miners that a new "block bid" is ready? In other words, how do miners know to start competing with each other?
What software do miners use to compete with? bitcoind? Something else?
Can miners write custom software the interfaces with #3 above (bitcoind or other), or is that "not allowed"?
Can miners divide a "block bid" problem over multiple computers, or again, is that "not allowed"?

I usually don't like to ask "multi-questions" like this one, but these questions are so small/micro in and of themselves, and so closely-related, I think their answer will make for a nice "mining overview"-type question for future readers and newcomers.

Thanks in advance!

I think you miss general understanding about the Bitcoin mining problem. Try reading "Bitcoin mining in plain English", a good article trying to explain mining the easy way.

I'll answer your different questions, but some of them are quite irrelevant.

What are these competitions/races called? Block bids? Block challenges?

I assume you mean proposals here. A block try must satisfy certain conditions to be valid. Once a miner finds a valid block, it broadcasts it through the Bitcoin network so that other miners and clients can verify it and, if it is valid, add it to their block chain.

What software announces to all the miners that a new "block bid" is ready? In other words, how do miners know to start competing with each other?

Miners don't compete. When a miner finds a block, it announces this via a Bitcoin client. All other miners will stop their current search for a block and start to find a new block that is valid to follow the last block found by another miner.

It is important to understand that the mining problem does not get's easier to find when you try longer. Every try for a solution has an equal chance of success. It's just about making many tries. So when another miner finds a valid block, it is no problem for you to slightly change the problem you are working on because every try still has an equal chance.

What software do miners use to compete with? bitcoind? Something else?

Miners can announce their new blocks with any client that implements the protocol. bitcoind is an obvious choice. However, many people do pooled mining, by which a mining pool gives them parts of the problem and the pool will announce new blocks when one miner finds the solution. This means that pooled miners don't need a Bitcoin client like bitcoind to mine, but only a miner program that supports pooled mining.

Can miners write custom software the interfaces with #3 above (bitcoind or other), or is that "not allowed"?

If I understand this right, you ask if miners can write their own Bitcoin clients to announce their blocks? Of course they can. Bitcoin has an open protocol and every client that correctly implements this protocol will be accepted by the network.

Can miners divide a "block bid" problem over multiple computers, or again, is that "not allowed"?

Of course. This is what mining pools do essentially. They distribute the problem over all miners that are registered with it. When one of them finds a block, the reward is shares among all connected miners, proportionally with their relative contribution to the problem solving.

What's allowed and what not?

To answer your question heading: everything is allowed.

You can use whatever techniques to do Bitcoin mining. It is an essential part of Bitcoins security that you cannot cheat, because everything is allowed.

However, when you don't follow the Bitcoin protocol, none of you actions will be accepted by the network. So basically, you can do everything, but there are things that you should not do, because the other people in the Bitcoin network will just ignore you when you do.


Why do the Bitcoin RPC Calls use decimals for coin amounts? The Bitcoin RPC calls all use 8 digit decimals ('reals') to encode amounts of satoshis. For example, if I get a transaction output, it might look like this:

{
  "value" : 0.00050000,
  "n" : 1,
  "scriptPubKey" : {
  "asm" : "OP_HASH160 c6e0b29d2aa23b6436cec99e65dfeed2c64a2cad OP_EQUAL",
  "hex" : "a914c6e0b29d2aa23b6436cec99e65dfeed2c64a2cad87",
  "reqSigs" : 1,
  "type" : "scripthash",
  "addresses" : [
    "3KpatoAjz3H5huJJieSpH4j7qFUeTXMnFC"
  ]
}

Is there a reason the developers decided to work with "0.00050000" instead of just "50000"? A whole number seems like it would be better for computers to work with.

EDIT: I guess the other half of this is that if the RPC calls are being used by a person, then it is easier to use with amounts in decimals (a human can tell the difference between 5.5 and 0.55 a lot easier than 55000000 and 5500000). So I guess the real question is, is the RPC interface meant to be used more for human command line use or for coding applications' use?

I would say the RPC interface is intended mainly as an application interface, but it's also meant to be simple enough for a human to use.  And the computer cares less than you think.

For human users, using decimal bitcoins (rather than integer satoshis) makes life significantly easier.  For people writing software to interface with it, it makes their life only infinitesimally more complicated (you have to write maybe one extra line of code to insert and parse the decimal point).  The computer running it takes maybe a few more nanoseconds to run the code, which nobody will notice.  So on balance, it seems like more good is achieved by including the decimal point than not.


The app wrote incorrectly adress of bitcoin I can't send bitcoins becouse the system wrote inccorect adress

Put in the correct address, and try again.


Which ASIC Bitcoin Miner gets you best bang for you buck as of today? I'm thinking of purchasing an ASIC miner, but I'm not sure which one to go with as there seem to be multiple options. When they mention 20-60Gh/s, I'm not sure how many bitcoins can that mine in a specific time. I would like to know how to calculate how many BTC is mined with say 40 Gh/s.

ASICminer and Avalon are already deploying, and they will hit over 100Th/s before too long.   Butterfly Labs has 75,000 chips on their way, each at 7.5Gh/s, this will account for another 560Th/s.  Avalon has sold out batch 1 and 2.   ASICminer is in the process of deploying their farm.   BFL has 19500+ orders.   Many of those orders are for multiple units.

Basically, many people have pre-ordered based on the idea that they are going to get rich quick, so they have overbought.   This was part of why BFL has delayed so long I believe, to generate more orders than they would if people knew how far up the difficulty was going to go.   Go ahead and order if you want, but realize that ROI could be much longer than you anticipate.   Safe bet would be to wait a couple months to order, then you will have a much better idea.   Honestly at this point, there are so many orders in front of you, it will only make a few days difference whether you order now or later.


How are bitcoins reassigned? How are bitcoins reassigned, that is, what about a transaction makes a "coin" no longer usable by the sender, and makes it usable by the recipient?

Alice wants to send bitcoins to Bob. Alice's wallet gathers transactions originally sent to Alice so that the monetary amount of said transactions is at least the amount that Alice wants to send Bob. The transaction is basically a message, so a little bit of ECDSA on top of that and boom, there's a transaction: only Alice could have created that particular transaction (message), and anyone can verify Alice's signature for that transaction.

Now Bob "receives" the money. Why can he use it? (Indeed, why could Alice use the money above...) Digital signatures of themselves don't solve this problem, i.e. the transaction/message along with its signature doesn't "transfer" anything, there's gotta be some other ingredient involved, but what is it? I can't see, or at least not understand, the answer in the various sources I've read.

It has to be something about Bob's private key, but I can't see how it's used to "unlock" the money he received from Alice. I don't know what transactions look like exactly, but suppose they're basically of the form tx_1 = (Alice's public key)+amount+(Bob's public key) - would Bob's wallet basically be saying "reproduce Bob's public key and you can access tx_1"? I guess that would do the trick, but then again Bob was already "logged on" to his wallet so he's already proven the ability to reproduce Bob's public key.

Ok I think I'm getting ahead of myself. Anyway, received transactions, how are they "unlocked"? Thanks.

(Yes, I have tried finding an answer on BSE and elsewhere already.)

Transactions are chained in a way that when Alice spend funds, she has to provide two pieces of information, the first one is a proof that the money was sent to her  and the other is a challenge for whomever wants to spend the coins she is sending, so when Alice received her coins she provided an Address, I.E the challenge, or a hash of the challenge to be more precise.

When Bobs gives his address he is doing the same, he is providing the challenge that needs to be solved in order to spend the coins.

When Bob generates an address what he is doing is generating a key pair, the private key he keeps secret to use when he wants to spend funds, and the public key is hashed twice and encoded in a special format, (Base58Check), and is that encoded hashed value what he shares with Alice.

So when Alice pays to Bob, she creates a new transaction, that refers to the old transaction from which she is spending, that old transaction has the hash of Alice's PublicKey, it pays to whomever can demonstrate that owns the ECDSA private key that generated Alice address. That is easy to check, because Alice provides the public key that hashes to that address and she signs the spending transaction with the private key and adds the signature to the transaction that spends the funds.

It means that she needs not only to prove that she has the private key, but she must also prove that having the private key she approves the spending by signing the transaction that spends her funds.


What does channel num_updates mean? Some LND wallets provide a channel's "Number of Updates". Here's an example from Zap Desktop:

The LND gRPC API Channel Reference cites a property called num_updates. The description of this field is not very informative:

  The total number of updates conducted within this channel.

What specifically is a channel update?

For some reason stackoverflow has a 50 reputation limit on comments, so I must use the answer box to point out that Karlo's answer is not correct - or at least does not tell the whole story. I understand that this is not the correct use for the answer box, blame stackoverflow's poorly thought out reputation limits.

I have a node with a few (outgoing) channels, have not spent a single satoshi with it yet. So the "remote balance" of the channels has always been 0, in other words there have been no balance updates. Yet the number of updates in the channels is non-zero.


Do wallets always require a private key to spend coins? I recently imported a very old (2012) bitcoin qt wallet address to a new blockchain wallet, but since it's imported, the coins are "watch-only." i was hoping that i could simply send them from my old wallet to my new one, and then i'd be free to spend them. i attempted 1 relatively small transaction as a test, and it broadcast to 4 nodes, but never got any confirmations after a day or so. my transaction fee was set at .01 (about $48 at the time), so i'd assume that a low fee wasn't the issue. i eventually aborted the transaction, and decided to try again with a newer version of that wallet - one that would actually be able to sync the entire blockchain. so that's what i'm doing now... just waiting for it to sync.

my new blockchain wallet won't allow me to spend my coins without a private key because they're "watch only." i found a lot of stuff from way back when that i thought was (or should have been) my private key. various passwords, a 6-word (no, not 12 words) recovery combo (which were not random - i chose them), and some long gobbledygook that looked like a private key (found in a jason file), but none of them worked.

all this to say that my old bitcoin qt wallet never asked me for my private key, and as i had mentioned, my attempted transaction was broadcast to 4 nodes, which i'm hoping someone can confirm means that either a) no private key is needed to complete a transaction from that wallet, or b) the private key is saved in the app (possibly from way back when it was originally installed). of course "c" would be that the transaction was not, and never could have been confirmed, and my coins are just gone forever. can anyone tell me if wallet apps back in early 2012 used private keys? i'm just trying to figure out whether i lost mine, or if there never was one, and therefore don't need one.

Yes, all wallets have always used private keys. They're what prevents other people from simply going and spending your money, they're used to make the authorisation signatures in a bitcoin transaction. Your best bet is to just use Bitcoin Core to load the wallet.dat file rather than importing it into a third party service.

  all this to say that my old bitcoin qt wallet never asked me for my private key

The private keys are part of the wallet.dat file and are never user facing in Bitcoin Core.


Should a JSON-RPC user be required to use a password when backing up the wallet? I was surprised I was able to back up my wallet over JSON RPC without requiring the wallet password (or even without a secondary backup-only password)

I'm concerned that this could create a DOS attack if the following were to occur

A read-only wallet service is created to perform low-risk operations with the wallet
That low risk service is somehow exploited via a web front end, etc.
The background process (now in control of the attacker) issues the backupwallet command

I think that can be a risk depending on a number of scenarios:

The user can save the file with many different random names and fill up the drive (DOS attack)
The user can overwrite system files with a copy of the wallet (DOS again)
If previous files aren't overridden, and an error is returned, (due to duplicate file, locked file, etc) the attacker can infer information about the remote file system
If the system supports pipes, perhaps the wallet can be piped to another remote system (/dev/???)

So I'm wondering if a separate, backup-only password should be created to address this issue.  Namely I don't want to use the "decrypt wallet" password.

Also I'd like to force that all backups go to a specific directory (and not any other drive/path)
Is this a good idea and if so, how should it be incorporated into the network?

The JSON-RPC was never intended to be open to the public, hence the required rpcuser and rpcpassword. For added security it should also be configured to either listen only to the loopback interface or the allowed IPs limited to a few trusted sources.

The wallet password is used to access the encrypted private keys, that's the reason everything involving either adding new private keys or signing with the private keys requires the wallet to be unlocked.

backupwallet exports the keys in their encrypted form and therefore does not require the passphrase.

If you have to allow JSON-RPC access to untrusted users, put a filter in front of it.


If UASF activates, are blocks found by ASICBoost still valid on UASF nodes? If UASF activates, are blocks found by ASICBoost still valid on UASF nodes?

I understand that segwit is a softfork and that hence the segwit changes makes some blocks that were previously valid now invalid (including those using tx malleability).

I've got basically one question but I cannot formulate it well enough, so I'm breaking it into several questions.

Once segwit shall be activated, does it mean that ASIC miners using ASICBoost miners won't be able to mine on that chain at all anymore?

What about when UASF activates on august 1st 2017 (if it activates)? Does it mean that UASF nodes won't accept block found by ASIC miners using ASICBoost?

Are all the current ASICs using ASICBoost good for the trash should the UASF chain win?

Once segwit shall be activated, does it mean that ASIC miners using ASICBoost miners won't be able to mine on that chain at all anymore?

No. Nothing about segwit prevents miners from mining non-segwit blocks using ASICBOOST. Mining segwit blocks will slow down (and likely prevent) covert ASICBOOST from working, but miners can still use it and also use overt ASICBOOST if they want to.

  What about when UASF activates on august 1st 2017 (if it activates)? Does it mean that UASF nodes won't accept block found by ASIC miners using ASICBoost?

No. It means that all blocks must signal for segwit so that segwit activates under the BIP 141 activation rules. This has nothing to do with ASICBOOST and does not require segwit commitments in blocks until after activation. After activation, segwit commitments are only required in blocks containing segwit transactions which not all miners must have in their blocks.

  Are all the current ASICs using ASICBoost good for the trash should the UASF chain win?

No. Segwit itself does not prevent ASICBOOST. It only partially prevents covert ASICBOOST, and only for blocks that include the segwit commitment (i.e. blocks containing segwit transactions). In order for covert ASICBOOST to be blocked, all blocks would need to have a segwit commitment in them regardless of including segwit transactions, but that is not something that segwit specifies.


Transaction shows up in blockchain.info but not in Electrum wallet I sent a test transaction earlier today. It shows up in Blockchain.info but not in the Electrum wallet.

There are more than 20 confirmations already.

Electrum version: 2.6.4

Why is the transaction not showing up and how can I fix this?

Looks like the problem has been resolved. Seemingly it may have been caused by Electrum being too old in terms of version number. A simple update using the website instructions appears to have solved the issue and I can now see the balance. New version number: 2.9.3


Why is my Antminer S9 only using one Chain I have 2 AntMiner S9's running. Each of them appears to be operating only at 4.9 TH/s. All 3 of the ASIC's appear to be in good shape, though each of the miners is only using a single ASIC board.

Key config items:
1. I am using Slushpool on one Antminer. I'm using Antpool on the other. The pools are showing at least one live pool server.
2. I see all ASIC's showing positive status.
3. They are set up in a pretty cool room (10-deg C) with sufficient power

I looked for support on this and I don't see it anywhere--is this a hardware issue? It looks like it isn't as the boards are all showing ok?

Also posting as an answer: the issue is that the GH/S (RT) on board 6 and 7 is 0--it is because the power quality coming into that dedicated power supply is too low.

The board has an ideal measurement (~4TH/s), no busted ASICS. After doing about 3 days of testing, it appears that the power quality upstream of the ASIC boards is pretty important. Even if the power supply is powered on (and reads the appropriate voltage), it is sensitive to the amperage rating of its circuit (I use 2 PS's, one for the main board + 1 ASIC board and a second one for the 2 other ASIC boards).

By moving the 2nd power supply (the one powering the 2 ASIC boards) to a high capacity 20 AMP circuit, everything works. (although now I have a huge power cable running to my miners from a separate circuit). I had to have an electrician come and pull that separate circuit from my main.


Confirming transactions in the Merkle root and SegWit I'm trying to find out how exactly transactions are confirmed in a block.  I understand that to confirm a transaction, you hash it with its associated transaction and then the associated hashes until you get the Merkle root, and if the Merkle root is the same as that which is in the block, the transaction is legitimate.

But how would someone know which associated transaction is required to hash with your transaction to confirm its validity?  And where would you get it from?

Also, i'm a little confused about Segregated Witness.  As I understand it, the signatures are separated from the transactions and the signatures are hashed in the same manner as transactions.  This final signature hashed is either hashed with the final transaction hash to form a Merkle root, or it is contained as another Merkle root in a separate field in the block.  But if the Merkle root is always the same size (I assume) how does this save space?  If the Merkle root is always 256 bits, why does it matter if the signatures are hashed with the transactions or hashed separately?

I can't find clear answers to my questions so any help will be appreciated.

But how would someone know which associated transaction is required to hash with your transaction to confirm its validity? And where would you get it from?

Your question is a little vague, it sounds like you are asking how a lite client confirms that a transaction they care about is indeed in a block. The party trying to convince them the transaction is included can give them the required information.

Full nodes already have all the data and don't need to have it provided.

  Also, i'm a little confused about Segregated Witness. As I understand it, the signatures are separated from the transactions and the signatures are hashed in the same manner as transactions. This final signature hashed is either hashed with the final transaction hash to form a Merkle root, or it is contained as another Merkle root in a separate field in the block. But if the Merkle root is always the same size (I assume) how does this save space? If the Merkle root is always 256 bits,

The segwit commitment is down lower in the tree not at the top. This doesn't make any real functional difference but it answers your question about the root always being the same size.

  why does it matter if the signatures are hashed with the transactions or hashed separately?

Because when transactions specify which coins they are spending they refer to it by the txid. If the signature data is part of the txid then changes to the signature (like third party malleation or resigning) invalidate subsequent transactions.  If the signatures are excluded from those txids this problem does not happen.


Pricing in "Bitcoin days destroyed" Is it possible to use "Bitcoin days destroyed" as unit of currency? If yes, how to price anything using this? If no, why not?

In other words, a system where coins that have not been spent recently are worth more? I suppose you could do such a thing, but it doesn't seem useful; typically friction in economies is a bad thing.

But I imagine you'd price things just like in any other market: supply and demand.


How do Bitcoin clients/miners verify balances quickly? Bitcoin clients must find balances for some public keys quickly. Especially, miners must find balances for all incoming transactions.
I see the problem: public key with associated address can appear many times in 300 GB blocks data which can't be stored whole in memory. Full Bitcoin client uses binary data files and LevelDB index(?).
How can it do it quickly? Especially, miners spend most of the time hashing, not verifying transactions (?)

Balances
Bitcoin doesn't care about balances. Miners also don't.
Your wallet may keep track of your balance but it doesn't need to know about anyone else's. No one else cares about your balance. It is irrelevant.
Bitcoin only keeps track of unspent transaction outputs (UTXOs) - If you like metaphors and understand their limits, you can think of UTXOs as "coins" whose "current ownership" is indirectly kept track of in an almost anonymous way. When you give someone a coin in payment, they don't care how many other coins you have in your pocket, they only care whether the coin you gave them is genuine (really yours).
Fast verification
Bitcoin is designed so that creating new pages in the replicated journal of transactions is expensive and slow (i.e. constructing blocks that can be added to the blockchain). However, transactions can be verified quickly.
In the database world you speed up retrieval by adding appropriate indexes. You can have separate tables for live vs dead data, you can hold important data in memory, etc etc. That is how software finds UTXO's fast.


When did the main Bitcoin client become known as Bitcoin Core? When/Why/How did this happen? Afaik at some point in 2014/2015, Bitcoin became known as 'Bitcoin Core'. I assume this was to differentiate it from other implementations of Bitcoin.
When and how did this decision come about?

The renaming was merged in December 2013 with prior discussion on this GitHub issue. The general motivation was to distinguish between one particular implementation of the Bitcoin protocol (many refer to Bitcoin Core as the "reference implementation") versus other implementations (libbitcoin, btcd, bcoin, bitcoin-s etc) that either existed at the time or came later.
At the time most of the well known altcoins (Litecoin, Dogecoin etc) didn't hard fork the Bitcoin blockchain. They started their blockchain from a different genesis block to Bitcoin. The well known hard forks came later in 2017 with BCH, BSV etc.


Is there some sort of algorithm to calculate transaction speed? I'm wondering if there's a way that I can calculate how long it will take for a transaction of x BTC paid a y fee to get z confirmations based on current difficulty

The creation of blocks is purely random but does trend towards 10 minutes per block. The lower z is the less accurately the predictions will be.  It is up to the miners to decide which transactions they include, different mining pool software can choose different transactions, thus there is no formula to determine the answer to this question.  It will always vary.


If I connect to a specific DogeCoin Node, is it possible to determine the transactions that originate at that node? I would like to know if it is possible to determine what transactions are originating at a specific node, assuming that I am connected to only that node.

This post applies to Bitcoin and DogeCoin as well.

No. And if you could, that would be considered a bug.

Think about it. Say I create a transaction. I send it to exactly one node, and only one node. How can that node convince you that it got the transaction from me rather than that it originated it itself? How can that node know whether I originated that transaction or got it from some other node?


Historical number of full nodes in Bitcoin Is there anybody keeping historical data regarding the number of full nodes on the Bitcoin network?

There is :
https://getaddr.bitnodes.io/dashboard/?days=90

but it only shows data up to 90 days.

Additional sources also here :

http://www.coindesk.com/bitcoin-nodes-need/

There is no measure of the number of full nodes. The number published by many websites is the number of listening nodes, instances of software which is advertising itself as available for connections on the Bitcoin network. The term "full" refers to "fully validating", as distinct from non-validating or BIP37 SPV. To be listening you do not need to be validating, or even a Bitcoin node at all (a proxy connection is indistinguishable from a real node).

If you want to know about the number of listening nodes, bitnodes.io does track numbers for these though they appear to be easily manipulated at times (see the spike around September 2015).


Error: Wallet backup failed! (code -4) when setting up bitcoin-qt for first time I downloaded and ran bitcoin-qt to play around with.

First thing I did was create a wallet passphrase.

The second thing I did was try to create a wallet backup.

Then I got this message:
Error: Wallet backup failed! (code -4)

If I simply delete the wallet file (no coins on it yet) and then restart bitcoin, everything works fine.  But if I try to encrypt the wallet and then create a backup I get the error again.

What am I missing?

>getinfo
{
"version" : 90300,
"protocolversion" : 70002,
"walletversion" : 60000,
"balance" : 0.00000000,
"blocks" : 340782,
"timeoffset" : -3,
"connections" : 8,
"proxy" : "",
"difficulty" : 41272873894.69702100,
"testnet" : false,
"keypoololdest" : 1422415118,
"keypoolsize" : 101,
"unlocked_until" : 1422419612,
"paytxfee" : 0.00000000,
"relayfee" : 0.00001000,
"errors" : ""
}

>backupwallet wallet.backup
Error: Wallet backup failed! (code -4)

When looking at the debug.log file I see this error:

2015-01-27 16:07:36 error copying wallet.dat to wallet.backup - boost::filesystem::copy_file: Access is denied: "C:\Users\Matthew\AppData\Roaming\Bitcoin\wallet.dat", "wallet.backup"

I've looked at Bitcoin's backupwallet code, and that error is triggered by a filesystem error. I can't tell what kind of filesystem error it is, though. Please open debug.log in the Bitcoin directory. There should be a line like

<date + time> error copying wallet.dat to <path> - <kind of error>

This is the most common type of error:

error copying wallet.dat to <dest> - boost::filesystem::copy_file: Access is denied: "<src>", "wallet.backup"

This means Bitcoin is trying to backup your wallet to C:\Program Files\Bitcoin. You don't have the permissions to backup there. To fix this, run

backupwallet "C:\Users\<username>\AppData\Roaming\Bitcoin\wallet.backup"

instead.


Inheritance and Bitcoins A basic economic property of any currency is the ability to hold its value in the long term.  While Bitcoin's ability to hold its value is evident, since there is no central authority to control the flow of BitCoins and the current traditional method of transfer of value from a deceased person to their legal heir's depend a lot on a central authority, how could inheritance work with bitcoins.  This is not a open ended question asking for opinions but an attempt into finding if the protocol or any other system has been attempted in this direction. This could include both planned transfers and those that are not planned for.

nlocktime transactions are probably the closest thing you have at a protocol level.

Essentially, you can make a signed transaction that pays a bunch of your relatives on January 1st 2016. If you should die before then, the transaction goes through and they get their inheritance. If you are alive on December 31 2015, you would publish another transaction that invalidates the first transaction. If at this point, you want to continue with the same estate plan, you can publish another transaction for July 1st 2016 that pays out the inheritance. And again, on June 30th 2016, if you are alive you would publish another transaction that invalidates the TX about to be published on July 1st.

You can do this as long as you want and a similar transaction can be used in place of a trust (X gets some amount of bitcoins on their 21st birthday). You do have to be careful about this, as the bitcoins you're dispersing must not be moved in any way on the blockchain for the nlocktime transaction to work.