With the rise and fall in value of bitcoins, how do I store them once I've accummulated enough With the rise and fall in value of bitcoins, how do I accumulate the value so that I don't continue to lose them?

There are a couple of different aspects to your question.

How to avoid accidentally losing coins?

You need to have reliable and secure backups of your wallet's private keys.  Depending on the wallet you use, this could be a file (e.g. wallet.dat), a mnemonic phrase, or some other sort of information.  Make sure you know what you are storing and how to use it to recover your wallet.  In particular, just storing addresses is not enough.  If possible, practice your backup and restore procedure, even if you have to make some unnecessary transactions (and pay fees).

Keep the backups somewhere safe, perhaps in multiple copies, so that no single foreseeable disaster can destroy all of them.  Also, the backups must not be accessible by anyone untrusted, or that person could steal your coins (see below).  You could encrypt the backups, but then you need to figure out how you will make sure to remember the encryption key or passphrase.

You can store your coins with some exchange or online provider (Coinbase, etc), but this carries risks: they might go bankrupt or lose your coins due to mistakes, fraud, theft, or accident.

How to avoid having coins stolen?

We have another question about this: How can I keep my wallet secure?

You have to make sure that nobody else ever gets access to your private keys.  If you store them on the computer, phone, or other device that you typically use to work with Bitcoin, be sure to account for the possibility that the device may get lost or stolen or hacked.  Use whatever encryption or other protection mechanisms are provided by your wallet software or operating system.  Use good security practices in general; avoid installing unknown software or visiting unknown websites, and keep up with security updates.

You can also store some of your coins offline, in a paper wallet or offline USB stick.  You'll need to make sure this is stored in a safe and secure place, where nobody else can get to it, and be sure to have backups in case it is accidentally destroyed.

How to avoid having coins lose value?

You can't.  The price of Bitcoin will continue to fluctuate.  The only way to "lock in" your gains is to sell some or all your coins (or perform some sort of exotic hedge which amounts to much the same thing).   This does mean that you won't benefit (as much) if the value goes up later; you can't have it both ways.


What are the top crypto-currencies based on funding? What are some of the top crypto currencies that received outside funding? Would be great if there was a list of them.

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

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

Highest funding: Ethereum & Ripple

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

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


Is the hash of ZMQ channel blockhash a merkleroot hash? I am using the ZMQ interface of my node to keep track of wallet activity like incoming transactions. I want to know the number of confirmations of my transaction but, to do that, I would need to know in which block the tx is included and calculate from that block onwards.
I was thinking that I could watch for the ZMQ channel hashblock but there is not much documentation about these channels. Is this hashblock a merkle root hash?

As the name suggests, it is the block hash, not the merkle root hash. It is the hash of the block header which includes the merkle root hash. To learn whether your tx is included in a block, you will need to fetch the block with that hash and then search for your transaction within that block. You can do this by using the getblock RPC after receiving the ZMQ message. You could also use the rawblock ZMQ channel and receive the entire block in full, but that will also mean that you need to implement block parsing.
Even if you could just get the merkle root, the merkle root itself does not contain sufficient information to determine whether a particular transaction is included in that block. You still need to get the full block and search the transactions list for your transaction.


About to open my first wallet a couple of question before I have my own wallet.

Does having a wallet require personally identifiable information?  Do I need to use my real first and last name or company name, etc?

It seems that individual transactions in your wallet are always public. What about your total balance?  Is it possible to be a bitcoin millionaire without others knowing about it?  If you trade a few bitcoins for real currency every once in a while (i.e. make "withdrawals" for the lack of a better word), will people know that also?

Some online wallet services might require your id, however, if you create a wallet on your local computer there is no personal information required at all.

The balance of each address is public knowledge at all times, but neither is the owner of an address,  nor the fact that different addresses belong to the same wallet.

Some of this information can be gained by analysis of payment patterns or after information about ownership was revealed publicly. For example, addresses can be deduced to probably belonging to the same wallet, if both of them are used in the same transaction as inputs.

If you use big exchanges with KYC policies to trade your bitcoins for Fiat,  they will be able to tell on you. You might be able to make local exchanges for privacy.

In conclusion,  with sufficient know-how and micromanagement you can probably keep your total balance secret.


Cannot recover wallet from 12 word BIP 39 seed generated by Bread Wallet on iOS I still have access to my Bread Wallet on iOS, but I'm trying to test my setup and make sure that I can recover my wallet if for some reason Bread wallet didn't work or if I simply wanted to change wallet providers without having to send my BTC to a new address.

Unfortunately, I haven't been able to successfully "recover" my wallet using the 12-word seed that Bread Wallet generated. I've tried Electrum on macOS, Mycelium on iOS and Copay on iOS. I'm beginning to think that I'm misunderstanding something about the wallet recovery process.

My assumption is that I should be able to use that 12-word seed on any BIP 32 supported wallet, which would then regenerate the private keys and "recover" the UTXO that belongs to key hierarchy.

It definitely seems like bread supports BIP 32 according to their docs here

Does anyone know what I need to do to recover my wallet using my 12-word seed phrase?

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

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

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

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

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

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

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

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


How to Pay to Multisig Wallet Using python-bitcoinrpc? How do I pay to a multisig wallet?  I am using the Python API (based on python-bitcoinrpc) that ships with the bitcoin source code, in directory bitcoin/test/functional.  I'm using regtest.

I call createmultisig() in order to generate a P2SH address.  I create a CTransaction object.  I attempt to append to the vout list a CTxOut object that pays to the P2SH address, but this operation corrupts the object.  I think I need to do something to the P2SH address before passing it as an input to the CTxOut object, but I can't figure out what.

Below is the script for my unit test.  The line where it goes wrong is:

tx1.vout.append(CTxOut(int(8 * COIN), madd))

After that the tx1 object is corrupted and when I subsequently try to print it to the log, the operation fails with the error TypeError: can't concat str to bytes.

Any idea what I'm doing wrong?

#!/usr/bin/env python3

import pprint

from test_framework.test_framework import BitcoinTestFramework
from test_framework.messages import CTransaction, CTxIn, CTxOut, COutPoint, ToHex, COIN
from test_framework.script import CScript, CScriptOp, OP_1, OP_DROP, OP_2, OP_HASH160, OP_EQUAL, hash160, OP_TRUE, OP_DUP, OP_EQUALVERIFY, OP_CHECKSIG
from test_framework.util import hex_str_to_bytes, bytes_to_hex_str
from test_framework.address import byte_to_base58

class RawTxTest(BitcoinTestFramework):

    def set_test_params(self):
        self.num_nodes = 2
        self.extra_args = [[],["-txindex"]]

    def run_test(self):
        """Main test logic"""

        self.log.info(f"\n    DEBUG START")

        # initialize node variables
        n0 = self.nodes[0]
        n1 = self.nodes[1]

        # initialize wallet and address
        w0 = n1.createwallet(wallet_name="test_wallet")
        w0_rpc = n1.get_wallet_rpc('test_wallet')
        addr0 = w0_rpc.getnewaddress()
        self.log.info(f"\n    DEBUG addr0={addr0}")

        # TRANSACTION #0 - pay from node 0 to addr0
        txid0 = n0.sendtoaddress(addr0, 10.0)
        n0.generate(6)
        self.sync_all()

        # dump the transaction
        raw_tx0 = w0_rpc.getrawtransaction(txid0, True)
        s = pprint.pformat(raw_tx0)
        self.log.info(f"\n    DEBUG tx={s}")

        # write the balance to the log
        bal0 = w0_rpc.getbalance()
        self.log.info(f"\n    DEBUG bal0={bal0:f}")

        # TRANSACTION #1 - Pay from addr0 to multisig
        NUM_SIGS=2  # M
        NUM_KEYS=3  # N
        add = [w0_rpc.getnewaddress() for _ in range(NUM_KEYS)]
        pub = [w0_rpc.getaddressinfo(a)["pubkey"] for a in add]
        msig = w0_rpc.createmultisig(NUM_KEYS, pub, "bech32")
        madd = msig["address"]
        self.log.info(f"\n    DEBUG madd={madd}")

        tx1 = CTransaction()
        vout = [v["n"] for v in raw_tx0["vout"] if addr0 in v["scriptPubKey"].get("addresses", [])]
        assert len(vout) == 1
        v = vout[0]

        # append the input
        tx1.vin.append(CTxIn(COutPoint(int(txid0, 16), v)))

        # dump the tx to the log
        s = pprint.pformat(w0_rpc.decoderawtransaction(ToHex(tx1)))
        self.log.info(f"\n    DEBUG tx={s}")

        # append the output
        tx1.vout.append(CTxOut(int(8 * COIN), madd))

        # dump the tx to the log
        s = pprint.pformat(w0_rpc.decoderawtransaction(ToHex(tx1)))
        self.log.info(f"\n    DEBUG tx={s}")

        priv1 = w0_rpc.dumpprivkey(addr0)
        tx1 = w0_rpc.signrawtransactionwithkey(ToHex(tx1), [priv1])["hex"]
        txid1 = n1.sendrawtransaction(tx1, True)
        n0.generate(6)
        self.sync_all()

        # dump the transaction
        raw_tx1 = w0_rpc.getrawtransaction(txid1, True)
        s = pprint.pformat(raw_tx1)
        self.log.info(f"\n    DEBUG tx={s}")

        # write the balance to the log
        bal1 = w0_rpc.getbalance()
        self.log.info(f"\n    DEBUG bal1={bal1:f}")

        self.log.info(f"\n    DEBUG END")

if __name__ == '__main__':
    RawTxTest().main()

I came up with a script to pay to, and spend from, a multisig wallet.

Here are the steps I was missing before:

madd1 = msig1["address"]
a1 = w0_rpc.getaddressinfo(madd1)
scriptPubKey1 = a1["scriptPubKey"]
pubkey1 = hex_str_to_bytes(scriptPubKey1)
tx1.vout.append(CTxOut(int(8 * COIN), pubkey1))

Below is the full script.

#!/usr/bin/env python3

import pprint

from test_framework.test_framework import BitcoinTestFramework
from test_framework.messages import CTransaction, CTxIn, CTxOut, COutPoint, ToHex, COIN, sha256
from test_framework.script import CScript, CScriptOp, OP_1, OP_DROP, OP_2, OP_3, OP_HASH160, OP_EQUAL, hash160, OP_TRUE, OP_DUP, OP_EQUALVERIFY, OP_CHECKSIG, OP_CHECKMULTISIG
from test_framework.util import hex_str_to_bytes, bytes_to_hex_str
from test_framework.address import byte_to_base58

class RawTxTest(BitcoinTestFramework):

    def set_test_params(self):
        self.num_nodes = 2
        self.extra_args = [[],["-txindex"]]

    def run_test(self):
        """Main test logic"""

        self.log.info(f"\n    DEBUG START")

        # initialize node variables
        n0 = self.nodes[0] # This node used for initial balance
        n1 = self.nodes[1] # All test wallets created on this node

        # TRANSACTION #0 - pay from node 0 to addr0
        w0 = n1.createwallet(wallet_name="wallet0")
        w0_rpc = n1.get_wallet_rpc('wallet0')
        addr0 = w0_rpc.getnewaddress()
        self.log.info(f"\n    DEBUG addr0={addr0}")

        txid0 = n0.sendtoaddress(addr0, 10.0)
        n0.generate(6)
        self.sync_all()

        # dump the tx to the log
        raw_tx0 = w0_rpc.getrawtransaction(txid0, True)
        s = pprint.pformat(raw_tx0)
        self.log.info(f"\n    DEBUG tx0={s}")

        # write the balance to the log
        bal0 = w0_rpc.getbalance()
        self.log.info(f"\n    DEBUG bal0={bal0:f}")

        # TRANSACTION #1 - Pay from addr0 to multisig
        NUM_SIGS = 2 # M
        NUM_KEYS = 3 # N
        add1 = [w0_rpc.getnewaddress() for _ in range(NUM_KEYS)]
        pub1 = [w0_rpc.getaddressinfo(a)["pubkey"] for a in add1]
        priv1 = [w0_rpc.dumpprivkey(a) for a in add1]
        msig1 = w0_rpc.createmultisig(NUM_KEYS, pub1, "bech32")
        self.log.info(f"\n    DEBUG msig1={msig1}")
        madd1 = msig1["address"]
        redeemScript = msig1["redeemScript"]
        self.log.info(f"\n    DEBUG madd1={madd1}")

        tx1 = CTransaction()
        vout = [v["n"] for v in raw_tx0["vout"] if addr0 in v["scriptPubKey"].get("addresses", [])]
        assert len(vout) == 1
        v = vout[0]
        tx1.vin.append(CTxIn(COutPoint(int(txid0, 16), v)))
        a1 = w0_rpc.getaddressinfo(madd1)
        self.log.info(f"\n    DEBUG a1={a1}")
        scriptPubKey1 = a1["scriptPubKey"]
        pubkey1 = hex_str_to_bytes(scriptPubKey1)
        tx1.vout.append(CTxOut(int(8 * COIN), pubkey1))

        priv0 = w0_rpc.dumpprivkey(addr0)
        tx1 = w0_rpc.signrawtransactionwithkey(ToHex(tx1), [priv0])["hex"]
        txid1 = n0.sendrawtransaction(tx1, True)
        n0.generate(6)
        self.sync_all()

        # dump the tx to the log
        raw_tx1 = w0_rpc.getrawtransaction(txid1, True)
        s = pprint.pformat(raw_tx1)
        self.log.info(f"\n    DEBUG tx1={s}")

        # write the balance to the log
        bal1 = w0_rpc.getbalance()
        self.log.info(f"\n    DEBUG bal1={bal1:f}")

        # TRANSACTION #2 - Pay from multisig to addr2
        addr2 = w0_rpc.getnewaddress()
        self.log.info(f"\n    DEBUG addr2={addr2}")
        a2 = w0_rpc.getaddressinfo(addr2)
        pubkey2 = hex_str_to_bytes(a2['pubkey'])
        p2pk2 = CScript([pubkey2, OP_CHECKSIG])
        tx2 = CTransaction()
        tx2.vin.append(CTxIn(COutPoint(int(txid1, 16), 0)))
        tx2.vout.append(CTxOut(int(7 * COIN), p2pk2))
        scriptPubKey = raw_tx1["vout"][0]["scriptPubKey"]["hex"]
        amount = raw_tx1["vout"][0]["value"]
        prevtxs = [{"txid": txid1, "vout": 0, "scriptPubKey": scriptPubKey, "redeemScript": redeemScript, "amount": amount}]

        tx2 = w0_rpc.signrawtransactionwithkey(ToHex(tx2), priv1, prevtxs)["hex"]
        txid2 = n0.sendrawtransaction(tx2, True)
        n0.generate(6)
        self.sync_all()

        # dump the tx to the log
        raw_tx2 = w0_rpc.getrawtransaction(txid2, True)
        s = pprint.pformat(raw_tx2)
        self.log.info(f"\n    DEBUG tx2={s}")

        # write the balance to the log
        bal2 = w0_rpc.getbalance()
        self.log.info(f"\n    DEBUG bal2={bal2:f}")

        self.log.info(f"\n    DEBUG END")

if __name__ == '__main__':
    RawTxTest().main()


What is the maximal value of 1 BTC? If all of the world suddenly decided they want to use BTC as their currency, what would the value of 1 BTC be, as measured in today's US dollars?

(Of course dollars would drop to zero in this theoretical case, but we can still measure BTC in today's dollars and get a finite result)

Basing on this set of data from XKCD, world's GDP is $62,900,000,000,000, If all of it was expressed in 21 million bitcoins, then each bitcoin would be worth $2,995,238.10, so roughly 3 million dollars.


Two out of Four transaction with excluding some key pairs Is it in theory possible to set up a 2 out of 4 multi-sig transaction, but only allow a subset of all possible combinations?

More concrete: I want to have the keys A, B, C, D.

Alice controls A
Bob controls B
Charlie controls C
Dennis controls D

There are six ways to select 2 items from 4 items. However, the only valid combinations should be:

A, B
C, D
A, D

Out of curiosity, what's the use case for a configuration like this?

Is it possible to do this using the bitcoin scripting language? Yes, absolutely. Making it and actually having it included into a block is questionable, mainly because it would be a non standard transaction type.

There aren't really a lot of tools to help you do it, though. I can describe what the scripts would have to look like, but not sure how you would actually make such a transaction. This question might be of interest to you as well.

The assumed scriptSig, where we don't know what combination of signatures we have:

0 {sig1} {sig2}

The scriptPubKey would be a standard P2SH pub key script:

OP_HASH160 {hash} EQUAL

The redeemScript (in this P2SH transaction) might look something like:

3DUP 2 {A_pub} {B_pub} 2 CHECKMULTISIG DUP NOTIF
    3DUP 2 {C_pub} {D_pub} 2 CHECKMULTISIG DUP NOTIF
        3DUP 2 {A_pub} {D_pub} 2 CHECKMULTISIG
    ENDIF
ENDIF

I believe this would work, but if someone could check the logic of this script here, I'd appreciate it. The OP_3DUP is necessary because the scriptSig should have 3 items on it already (2 signatures and the OP_0 to satisfy the off-by-1 error in the original client), and those 3 items need to be used more than once.


Is it possible that transactions throughput will grow to beyond what can be synchronized? The number of users increases, and thus the number of transactions. Is it possible that in the future transactions arise faster than I can sync them?

When a transaction is broadcast to the network it enters the "mempool". Every full node maintains a pool of unconfirmed transactions in RAM memory. Newly broadcast transactions are relayed from node to node through the network.

A typical mining node selects, from its mempool, as many transactions (with attractive fees) as will fit in a block and then attempts to find a valid hash for that block. The first miner to find a valid hash for a block containing a particular transaction will then confirm that transaction.

Any and all transactions not selected for inclusion in a block remain in mempool. A node typically discards unconfirmed transactions from the mempool after 72 hours.

Hence, since memory is limited on most nodes, heavy transaction load can result in their mempool becoming full. This leads to congestion and a slow-down in transaction propagation (through the network) as well as delays in confirmation, since many transactions might not enter the mempool and will have to be rebroadcast by wallet clients until the congestion subsides.

Layer 2 solutions, such as Lightning Network, propose to allow almost unlimited, near-instant transactions per day, thereby mitigating the limited capacity of the Bitcoin network (Layer 1).


Bitcoin Game Theory Analysis I'm looking to analyse bitcoin for a (rather introductory, low-level) game theory course.

Game theory concepts I'd like to explore with regard to bitcoin: strategic games with ordinal preferences and nash equilibrium), strategic games with vNM preferences and mixed strategy nash equilibrium, discount factor and repeated games, extensive form games and subgame perfect equilibrium, coalitional games and Shapley value or core,  dominance, minimax, ...

Any interesting pointers or sources for this? It can be a simplified version of bitcoin, just looking for inspiration.

There are some excellent papers by Aviv Zohar (Red balloons, GHOST etc.) which at least touch on game theory.

There's also a comprehensive list of papers at https://docs.google.com/spreadsheets/d/1VaWhbAj7hWNdiE73P-W-wrl5a0WNgzjofmZXe0Rh5sg/edit#gid=0, you can browse it to see if any could be relevant.


How to store full blockchain on server and run Bitcoin Core as client only? How to store full blockchain on server and run Bitcoin Core as client only?

I want to run Core wallets on 2 or 3 or even more computers on my local network. The best way to store the full blockchain is to put it on one server on my local network.

I want the Core client to read only the blockchain data and listen for changes from the server but not write anything to the server, like a read-only directory. The server should be the only one allowed to write updates to the blockchain data.

The Core client should write private data to %AppData%\Bitcoin as usual but segregate the blockchain data onto the server.

How do I do this?

It is possible to configure your server/clients as follows, although it is not exactly what you have described. I presume that you still want each client to have its own separate wallet.

On your server, make a full installation of Bitcoin Core.

In the config file set bind=<internal network IP>.
Set any other options, for example to enable incoming peers from the internet.
Restart server node for config to take effect.

On each client make a full installation of Bitcoin Core.

In your config file set connect=<server IP>.
In your config file set prune=<n> where n is greater than 550MiB. This will limit storage requirements.
Set any other options.
Restart client node for config to take effect.

Using connect= disables automatic connections so, your nodes will only connect to the server.


Recover multibit.wallet data I just recieved a payment sent me bitcoins on my old multibit 0.5.18 wallet. I opened it up and didn't see it, so I refreshed the blockchain. When I did this my wallet crashed. When I started it back up I got a message saying could not load the wallet. I went to the directory $HOME/MultiBit/multibit-data/wallet-unenc-backup to load a backup and got the same message.

Is their a way I can get the private keys out of the multibit.wallet file so I can build an unencrypted.key file. So I can send the bitcoins to my new Multibit HD wallet?

Is the wallet encrypted or not ?
If encrypted, then you will have some automatically generated exports of your private keys in the $HOME/MultiBit/multibit-data/key-backup directory. They are encrypted with your wallet password.

You can create a new wallet and import this file using Tools | Import private key.

There are also rolling backups (essentially old versions of your wallet) in the directory rolling-backup that you can open using File | Open wallet


Since Bitcoin has no central system, where do network request go? I heard bitcoin and other cryptocurrencies have no central system.
BUT where do you send the transaction id?
There must be a server to send the data to!?
It probably is a simple question but, that's the thing I never understood on bitcoin and cryptocurrency.

Bitcoin is a peer-to-peer gossip flood network. Whenever a Bitcoin participant creates a transaction, their wallet software submits it to its peer nodes. These peers then relay it to their peers in turn. The transaction floods through the network and reaches most nodes. Eventually, the transaction is included in a block which makes the transaction part of the committed history of the network. Blocks have propagation guarantees, because the blockchain is the mechanism for nodes to converge on a globally shared state. Now, every node is guaranteed to get the transaction since they will get the block.
So, each transaction originates from the sender's node, and eventually, every participant's node will have a copy of each confirmed transaction.


I was getting 7 mhash/s on GUIminer.. but only 0.3 on bit minter? I'm really new to bitcoins. I have a good computer, cpu based at least. 8 core AMD processor with 4 ghz a core with decent amount of cache. I wanted to make some extra money and use my computer to get some bitcoins. Knowing nothing about the industry first thing I did was download wallet and GUIminer. Guiminer keeps taking all the cpu and generates up to 7 Mhash/s However it proves really ineffective, taking all that cpu and showing absolutely no progress on the BTC guild website. So I looked for an alternative method of bitcoin minig that will result in higher reward. I came to bitminter, downloaded their client. When I ran their client, it generated a 0.3 Mhps. This was really disappointing and I don't know why.
Well why is my mhps so low on bitminter, and where should I mine bitcoins?

Also it says "warning: electricity-wasting slow cpu" but I have a beast CPU

As far as I can tell GUIMiner may have been failing,

The reason why Bitminter says "Warning" is because CPUs are not effective for mining. (I have an Phenom II X6 @ 3.6 Ghz and get the same as you), My graphics card (ATI 7770) can only just mine them now.

How many cores is bitminter set to use?

My recommendation could be for you to mine litecoins and then exchange them for bitcoins. Litecoins mine better on the CPU.


How to install and run an official Bitcoin wallet on Ubuntu? That's probably very noob question, but I am new in Bitcoin and cannot find clear help. I downloaded Linux Bitcoin wallet from the official page, its name is Bitcoin-com-wallet-3.6.0-linux64.tar.gz. I want to just install it and run, but after unpacking I found many executable files and no README. Instructions found on the web write about ./autogen.sh and
./configure files, but I cannot find it there neither. What should I do?

I'm not sure if this package is official Bitcoin-com-wallet-3.6.0-linux64.tar.gz. I suggest you to download from https://bitcoin.org. There are several wallet programs for desktop, web, mobile, etc. Here is an list.


What are the parts of a Blockchain? In the following article What Are Bitcoins? How Do Bitcoins Work?, it is mentioned that a blockchain is composed of three parts:

Identifying address
History
Private key header

Although, after taking a look at this question "Can someone explain how the Bitcoin Blockchain works?"
  it doesn't reflect what that article mentions.

If those three parts are the actual parts of a blockchain, can someone provide a better explanation for each one?

They are not. They might be provided to try to provide a better explanation, but I don't even think that this purpose is achieved. There are several sentences throughout the article that make no sense at all, like:

  A bitcoin, at its core, is a very simple data ledger file called a 'blockchain'. A blockchain's file size is quite small, similar to the size of a long text message on your smartphone.

I would recommend you to look at the question you mentioned , that actually have two really good answers, and ignore the first article.


altcoin execoin miner is infected? looking for asic-proof alt-coins, I found one called EXE coin. however, it requires their version of the miner and it says standard miners won't work. firefox/waterfox claims the binary is infected. should I be looking for a different asic-proof alt coin or is that a false positive?

Often these CPU miners are flagged by specific AV's heuristics, mainly because the program may be an exe with a hidden CPU mining algorithm within, which if it was any other exe like an image viewer, this suggests nefarious mining.

That being said, altcoin wallets and miners are notorious for malicious code, and Bitcoin is the target of more than 100 types of BTC stealing malware.

Since cgminer/cudaminer uses scrypt-n simply find a miner which has been vouched for (ie checksum of the exe should match).


REST API to fetch block by height I am trying to incorporate bitcoin in one of the applications and want to integrate the REST API which exposes all the public information.
I tried using https://chain.api.btc.com/v3/block/3 but upon multiple requests, it starts to error out with message "Do not abuse the api".
Kindly provide the reference to API which I can use
Note: Tried https://testnet.blockexplorer.com/api as well but doesnt work. Even the link on https://github.com/blockchain/api-v1-client-python#request-limits-and-api-keys leads to error page on web

If you plan to using any API extensively I suggest installing bitcoin core and using RPC provided.


How to generate xPub Key from public key in java I am working on a Bitcoin Wallet, i have public key but can't figure out how can i genrate xPub key from this.

The extended public key, xPub, consists of both a chaincode and the public key itself. These are effectively distinct from each other, you cannot generate the chain code from the public key or vice-versa. Normally they are both generated at the same time from a seed, but without the seed you cannot generate the same chain code.


The Bitcoin.it wiki says addresses do not carry balances...but all info suggests otherwise The Bitcoin wiki states, "Addresses are not wallets nor accounts, and do not carry balances."

Yet, there's a zillion articles online about Bitcoin address balances, the Bitcoin blockchain explorers show balances, and so on.

Can you explain the Bitcoin wiki's statement to me?

The wiki is correct, it is a technicality. Bitcoin "balances" are actually just unspent transaction outputs (UTXOs, from previous transactions) which you have the ability to spend. In most cases, that means knowing the private key corresponding to an address which the transaction was sent to. But the address itself doesn't have a balance, it just "locks up" the UTXOs corresponding to it, requiring a private key.

The important point is that the blockchain doesn't store a "total balance" of an address anywhere, to find the "balance" of an address requires looking through the chain to find the unspent transaction outputs sent to that address and summing their amounts.

Then to spend bitcoins, you spend specific UTXOs, you do not just subtract the amount from your "balance".


Do transactions need to be signed I always thought a transaction can be accepted when all its inputs are correctly provided with their unlock script (which usually contains a signature) ——yes transactions may also be rejected with output > input etc but that’s not the topic

Does the transaction itself also need to be signed? If yes, when I am having inputs with different unlock scripts, which one should I use to sign the transaction?

Transaction do not need to be signed. They are if the locking script requires so, which is the most usual thing, but scripts redeemable without a signature can also be valid.

That being said, a transaction redeeming from a script that does not requires a signature could be highly insecure, since a peer (or a miner) that receives so can easily change the output.


Electrum SSL Cert Prorblem İn electrum's site;

  Create a file that contains only the private key:

  -----BEGIN PRIVATE KEY----- your private key
  -----BEGIN END KEY-----

  Set the path to your the private key file with setconfig:

  electrum setconfig ssl_privkey /path/to/ssl.key

  Create another file, file that contains your certificate, and the list
  of certificates it depends on, up to the root CA. Your certificate
  must be at the top of the list, and the root CA at the end.

  -----BEGIN CERTIFICATE----- your cert
  -----END CERTIFICATE-----
  -----BEGIN CERTIFICATE----- intermediate cert
  -----END CERTIFICATE-----
  -----BEGIN CERTIFICATE----- root cert
  -----END CERTIFICATE-----

  Set the ssl_chain path with setconfig:

  electrum setconfig ssl_chain /path/to/ssl.chain

I'm working on localhost only. I created a self-signed cert. I have ".key" and ".crt" files. But have not a ".chain" file?

How can I come from above? Thx...

You can try this

openssl req -new -x509 -days 365 -nodes -out cert.chain -keyout key.pem

The cert itself is one CA added to the chain from the above command.
A .chain file is just a concatenation of signed ca certs


Does mining activity only exist if there are bitcoin transactions? Bitcoin's mining only exists, if there are some transactions, right?
If nobody trades bitcoins, the miners don't have any transactions to validate, and so the number of bitcoins in circulation doesn't increase?

This is not correct.  There is no requirement that a block contain any transactions at all (other than the single transaction indicating what address should be credited with the block reward, currently 25 BTC).  Miners can mine whether or not there are any transactions on the network for them to include.

See also What is the smallest block ever mined?


How can I import an address or public key into my wallet.dat file? I have a wallet.dat with Bitcoin Address: 15iRTcgqBk1QNtr2gKkq2dUsm5nN25dSeN

I want to delete this Bitcoin Address: 15iRTcgqBk1QNtr2gKkq2dUsm5nN25dSeN and add another Bitcoin Address

How can I add another Bitcoin Address to this wallet.dat if I know its public key, but I don’t know the private key of this Bitcoin Address?

A wallet.dat file will contain many, many bitcoin keypairs/addresses. So there is no reason to delete an older address, and in fact this is probably a bad idea. If you or anyone else ever mistakenly sends bitcoins to that address, it will be impossible to recover them once you've deleted those keys.

If you do not have the private key for an address, you will not be able to spend any bitcoin stored at it. That said, you can still import the address as a 'watch-only' address, meaning your wallet will keep track of the address' balance, but not be able to spend the coins (because you don't have the private key).

You can use the following commands:

bitcoin-cli importaddress for a bitcoin address

bitcoin-cli importpubkey for a bitcoin public key

Note that in order for your wallet to learn about transactions sent to the imported address/pubkey in the past, your wallet will need to rescan the blockchain (rescan=true by default when calling importaddress or importpubkey). If you happen to know which blocks the relevant transactions were included in, you can set rescan=false and then run rescanblockchain ("start_height") ("stop_height") and it will complete the rescan much faster.

And if you do have the private key, you can import it using:

bitcoin-cli importprivkey


Updating my online wallet to not rely on the Blockchain.info API I had a website which allowed me to send and receive bitcoins.

To achieve this, I used the Blockchain API to process notifications of received bitcoins and the same to process sending Bitcoin to other addresses.

Due to the fact that Blockchain forced me to change my calling method because they changed the API using node.js I was considering to move away from them.

However, I found lots of issues. The Blockchain wallet can be exported to MultiBit HD and the source code is available but due to my limit knowledge of Java I am not able do replicate the same use case flow. Also, due to the fact that MultiBit HD does not run as a service, I cannot use it on a vps server being that in case of restart the program does not start automatically.

So I tried to use BitcoinJ directly to process payments the software performs the following steps:

I create a new wallet with a new address.

When the software starts, it ask via web services the remote site to
see if there is some payments to be send to other addresses, creates a
transaction and then processes it.
But again due to my limit knowledge of Java I was not able to intercept the payment received on the address of the wallet.

I had also a problem because the software works on the testnet but when I move it to the production network the program seems to start downloading all the Blockchain.

Being that I am much better at C# I also tried to use NBitcoin but again with no success.

So I Google a while and found that it is possible to run Bitcoin Core and use an rpc call to process payments but Bitcoin Core needs to first download and validate all the Blockchain which is nearly 91GB.

So my question is this:

What I need is to code a service that uses a local wallet on a vps server (nix or win does not matter) with only a Blockchain address.
When a new payment is received in the address the program gets the amount of the transaction and communicate its to a website using web-service.
Programmatically, the same software asks the website if a new sending payment should be processed and in this case send the Bitcoin from the address.

The limitations are the following:

I do not want to use third party services or APIs like Blockchain or  Coinbase.  I do not want to download and process all the Blockchain.

Is there anyone out there that has faced the same difficulties and that can give some suggestions?

Thanks for any help

I do not want to use third party services or APIs like Blockchain o
  Coinbase. I do not want to download and process all the Blockchain.

If you don't want to use 3rd party APIs, you should have your own node which requires downloaded the full blockchain. There's blockchain torrent https://bitcoin.org/bin/block-chain/ that speeds up the download process, and there's advanced Bitcoin node libraries like http://bitcore.io that integrate with Bitcoin core.

There's more reliable blockchain as a service like BlockCypher https://dev.blockcypher.com which is programming language agnostic. I use it all the time and I am satisfied.


Bitcoin Core chain download criterium net_processing.cpp contains

    // If this set of headers is valid and ends in a block with at least as
    // much work as our tip, download as much as possible.

why are we interested in chain that's only equal in work to what we already have? would it make not better sense to download only when chain is better? what is the benefit in this <= logic compared to if it was just <?

When a fork exists with two equal-work branches, it is not unreasonable that the one we saw second will get extended.

There is little DoS risk in downloading both, as an attacker must spend an enormous amount of work to even make us do so.

At the same time, it is useful to be prepared for the blocks in a reorganization, as it reduces the time needed for such a block to propagate through the network.


What dependencies are needed to build the dogecoin client? What are the actual dogecoin client requirements?  Their list doesn't seem to match exactly with what I have available, and I had to go back and forth with apt to even install what I have so far, and I'm by no means confidence that I have the correct dependencies

thufir@dur:~/dogecoin$ head doc/readme-qt.rst -n 20Dogecoin-Qt: Qt4 GUI for Dogecoin
=================================

Build instructions
==================

Debian
------

First, make sure that the required packages for Qt4 development of your
distribution are installed, for Debian and Ubuntu these are:

::

    apt-get install qt4-qmake libqt4-dev build-essential libboost-dev libboost-system-dev \
        libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev \
        libssl-dev libdb++-dev libminiupnpc-dev

then execute the following:

thufir@dur:~/dogecoin$ sudo apt-get install qt4-qmake libqt4-dev build-essential libboost-dev libboost-system-dev libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev  libssl-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
libboost-dev is already the newest version.
libboost-program-options-dev is already the newest version.
libboost-filesystem-dev is already the newest version.
libboost-system-dev is already the newest version.
libboost-thread-dev is already the newest version.
libqt4-dev is already the newest version.
libssl-dev is already the newest version.
qt4-qmake is already the newest version.
build-essential is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

somehow or another, I got this to compile.  it was some combination of:

install libboost1.48-all-dev libdb++-dev

then install without version number

then compile, compile fails

blocked packages

start over

install without version number

compile works

I don't remember, but it seemed random.

Much frustrating.

If I knew for a fact the correct dependencies, I would say so.  but, the dependencies for the client and the digger (minerd) are, or might be different, and I was compiling both.

All I'm certain of is that the documentation wasn't correct.

Ubuntu 12.04LTS  (probably didn't help, old version)


How to access any transaction detail in Bitcoin version 0.8 and above? Since the Standard Client version 0.8 removed the full index of all historical transactions, some Bitcoin applications that relied on that functionality have stopped working. For example, one is no longer able to find out the sender of a given transaction by pure RPC calls. How can one access that transaction detail in the newer versions of the Bitcoin client?

Two new command-line or bitcoin.conf file commands have been added in the 0.8 release that allow for historical transactions to be accessible by recreating the old index:

  txindex : maintains an extra index of old, spent transaction ids so they will be found
  by the getrawtransaction JSON-RPC method.

  reindex : rebuild block and transaction indices from the downloaded block data.

[...]

  you must run once
  with -txindex=1 -reindex=1 to rebuild block-chain indices


Why does vanitygen warns me to update an up-to-date OpenSSL? I tried to generate an address with vanitygen. Because I'm on a MBP 2010 it took a while onthe CPU (not finished yet, two times up to 20%) and now I am trying to get it working with my GPU (NVidea 330m). That works, it is three times as fast as the CPU (±750 kkeys/s vs 230 kkeys/s), but I have a question about the OpenSSL.

When I start oclvanitygen ./oclvanitygen -d 1 -i 1Mathias it gives me the following warning:

WARNING: Built with OpenSSL 0.9.8y 5 Feb 2013
WARNING: Use OpenSSL 1.0.0d+ for best performance

However, openssl version gives me this:

OpenSSL 1.0.1h 5 Jun 2014

And sudo port upgrade openssl returns also that there is nothing to be done. How is this possible?

You might want to try WyseNynja's Homebrew tap, you can then install vanitygen with better dependency handling.


How to physically configure graphic card for higher yields? If I were to purchase a motherboard with 7 pci-ex ports. Could I then attach 7 graphic cards and run 7 cgminer processes? One for each card?

Or would a better build be to group cards together with SLI/Crossfire?

If one of these cards generally gives 1200mhash, would i be correct to assume that 7 would give me 8400? Or is there some overhead issue here I'm not aware of?

A single instance of cgminer handles multiple GPUs, so there is no need to run separate processes.  Enabling SLI(You aren't using NVIDIA cards, right...) or Crossfire will decrease mining performance, so leave it off.

There is no overhead associated with running multiple GPUs on a single system, unless the cards are physically spaced so close together that they overheat and throttle. 7 1.2 Mh/s cards would be expected to produce 8.4 Mh/s total.

At this point, investing in new GPUs for mining is questionable, and you should only consider GPU mining for scrypt-based altcoins such as Litecoin, as ASICs have made GPUs unviable for bitcoin mining.


Are there any mining pools operating on the Testnet? Are there any mining pools operating on the Bitcoin Testnet, or do pool owners just test their code using their own machines without keeping the test pool up for too long?

Currently, one can merge mine at this pool on the Test Net:

https://alpha.masterpool.eu/


How to store cryptocurrencies safely? How paranoid should you be when storing cryptocurrencies?

1. I am currently storing some BTC and LTC at paper wallets, but this does not feel good because what if the paper wallet gets 100 transactions in? Won't the paper wallet then be "full"? What if I accidentaly missed one character when I copied the private key by hand?

2. What if I import the private key to my Bitcoin-QT wallet on my computer in order to spend some BTC. When I am done spending the BTC I backup the wallet.dat on a USB stick, then I remove the wallet.dat file from the computer. The file will still be on the HDD and what if someone gets their hand on my computer and runs some recovery program that recovers the wallet.dat file?

I have soon 10 000€ stored in cryptocurrencies and losing them would suck so hard. What if someone comes up with a backdoor in Windows that steals everyone's wallet.dat file? I am sure there are people working on something like this, since they would be millionares if they succeed...

I agree this may be a duplicate question, but fundamentally you probably need to understand what is going on to understand what is at risk.

The blockchain is where the record of of your bitcoins are kept - they are not "on your computer".

What is "on your computer" is a set of keys which allow you to "approve" a transaction to move Bitcoins from a specified address.

There are two keys:
Private Key
Public key.

The private key is used to generate the public key, so as long as you have the private key, then you have the ability to:
a) create a public key
b) sign transactions

You cannot derive the private key from the public key - that would break all cryptography!

You do not have to do this with the Bitcoin QT client - there are other alternatives, Multibit being a good alternative as it is very quick to syncronise, and you can upload private keys easily.

If you keep only one copy of that private key - then you may have a problem if it gets lost or destroyed.

Therefore you should keep multiple copies.

To answer your question specifically - if you do not copy the file correctly you are screwed. If your computer is hacked, you are potentially screwed.

Checkout the link in the comment from @frisco for more information.


Mining Bitcoin heats up my Computer. why? I am Trying to mining bit coins from last 1 year. but every time i turn on the mining it slows down my computer and heat it up very badly that it eventually stops working some times.
How To get rid of this?
Help Me Please.

All of the energy that is used in any computation eventually leaves the hardware as thermal energy. Bitcoin mining is an energy intensive computational process, so one of the by-products of it is thermal energy (heat). If you want to stop generating heat, you'll have to stop mining (or figure out how to dissipate the heat more efficiently).
Keep in mind that bitcoin mining is only profitable using specialized ASIC hardware (that generates a lot of heat). Mining bitcoin with your laptop/PC will just use up electricity (and generate heat), without any real chance of doing enough work for you to receive a reward.


Any advice for attorney accepting bitcoin? I just started accepting bitcoin for potentially anonymous legal consultations.  Does anyone out there have any advice for how to accomplish anonymous yet legally confidential attorney relations?  I firmly believe in attorney-client privilege but know that a court order can force disclosure -- making the reality of confidentiality a question of court order.

I'm not qualified to answer about the legal rules surrounding confidentiality. (Though, I imagine you have a better handle on California/United States confidentiality than I do anyway.) However, there are a few technical details you should be aware of.

First, transactions in Bitcoin are essentially public. The transaction amounts and the time of the transaction are both public information. That means that if you're forced to disclose the amount and day of the transaction, someone could figure out the transaction that you were paid by.

Second, transactions are linkable. That means that if someone figures out which transaction you were paid by, they could follow the money that you were paid with, and they might be able to identify your client.


Gitian building not working I followed this instructions https://github.com/bitcoin/bitcoin/blob/master/doc/gitian-building.md
but on this step: https://github.com/bitcoin/bitcoin/blob/master/doc/gitian-building.md#setting-up-the-gitian-image
i have got an error:

  cp: cannot stat
  ‘base-trusty-amd64-bootstrap/usr/lib/x86_64-linux-gnu/lxc/lxc-init’:
  No such file or directory debian@debian:~/gitian-builder$

How to fix it?

you have to make sure you are using AMD64 version of debian jesse


how to install Bitcoin and bitcoin cash on the same ubuntu server? I've installed bitcoin core as the documentation in bitcoin.org and its working great. then, I tried to install bitcoin-ABC manually as following:

wget bitcoin-cash-gnu.tar.gz
tar xzf bitcoin-cash-gnu.tar.gz
cd bitcoin-cash-gnu/bin
ls

  bitcoin-cli  bitcoin-qt  bitcoin-tx  bitcoind  test_bitcoin

I have renamed bin directory files so it doesn't conflict with bitcoin-legacy.

  bitcoinCash-cli  bitcoinCash-qt  bitcoinCash-tx  bitcoinCashd  test_bitcoinCash

then i've installed it on /etc/usr/bin

  sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-cash-gnu/bin/bin/*

Then I tried to run bitcoinCashd and

  Command not found

I was able to successfully install Bitcoin ABC on Ubuntu 14.04.5 LTS, alongside Bitcoin Core, using these instructions:

Download the appropriate binary from here: https://download.bitcoinabc.org/

For me, the command would be:

wget https://download.bitcoinabc.org/0.16.2/linux/bitcoin-abc-0.16.2-x86_64-linux-gnu.tar.gz
Extract the archive:

tar xzvf bitcoin-abc-0.16.2-x86_64-linux-gnu.tar.gz
Rename the binary files:

cd bitcoin-abc-0.16.2/bin/; rename 's/bitcoin/bitcoinCash/' *
Install the files into /usr/local/bin:

sudo install -m 0755 -o root -g root -t /usr/local/bin *

And voilà!

bitcoinCashd -version outputs:

  Bitcoin ABC Daemon version v0.16.2.0-6af5e93

  [...]

bitcoind -version outputs:

  Bitcoin Core Daemon version v0.15.1

  [..]

ls /usr/local/bin outputs:

bitcoinCash-cli  bitcoinCash-seeder  bitcoind    test_bitcoin
bitcoinCashd     bitcoinCash-tx      bitcoin-qt  test_bitcoinCash
bitcoinCash-qt   bitcoin-cli         bitcoin-tx


How is block-solution-withholding a threat to mining pools? If I understand the technical process (for most mining pools) correctly, a participant in a mining pool is given block data to combine with a nonce to try to solve the block. If they get close (but not close enough to give the actual solution) to solving a block, they have solved a "share", and at that point return proof-of-work to the mining pool to receive a share of the final payout when the block is solved.

However, the participant performing the mining DOES know if they actually solve the block. At this point, a malicious miner running custom mining software could potentially choose to not send the solution to the pool. I think I have seen this referred to as a "solution withholding attack".

How vulnerable are pools and pool-miners to this threat?

[Edit]: Also, what can pools do to detect or deter this threat?

Every pool is vulnerable to the threat. And there's pretty much nothing they can do about it other than perhaps to try to force their miners to use a closed source mining program that they try to make tamper-proof.

Your analysis is precisely correct. Miners know when they only found a share versus when they solved a block. A malicious miner could submit shares but withhold solved blocks.

The consequences of this depend on the payout model the mining pool uses. If, for example, the pool uses a fixed pay per share, such a miner is robbing the pool operator. But he does no harm to the other miners. If it uses most of the other distribution schemes, such a miner is robbing the other miners since he is being paid out of solved blocks and never contributes to the number of solved blocks. The amount of harm he does is typically proportional to the amount of hashing power he has.

This attack is typically undetectable because it just appears to be ordinary bad luck. An attacker can use a large number of distinct user names so it wouldn't appear suspicious that no blocks had been solved.

There are generally two motives for such an attack, depending on the payout plan the pool uses. One would simply be to make the pool operator lose money. In a PPS plan, you would get paid normally for your mining, all of which would be a straight loss to the pool operator. With other payout plans, making the pool seem unlucky (and thus driving away miners from that pool) could be a part of the motive. You still get paid for your shares, so the cost to launch such an attack (assuming you were already going to mine) is not that much.

The consensus is that such attacks are likely to remain rare and generally insignificant. The payout for the attack is simply too small and it's not an effective way to bankrupt a pool or get miners to desert a pool unless it's a particularly small pool, in which case there's generally no point.

Note that it is not possible for an attacker to submit any blocks he finds himself and keep the profits. To earn shares, he must attempt to solve the blocks the pool asks him to solve, and those will include a coinbase entry that pays the block reward to the pool's operator.


Is it safe to use a second-hand Trezor (like from ebay)? I just got a good price from eBay on a supposedly never-used Trezor hardware wallet.  I have no specific reason to think this would be dangerous to use, but I'm being cautious and ask here first:

Are there any reasons why it would be unsafe to use a second-hand Trezor to store my BTC?
Is there any way the previous owner could retain access to it and get at my coins?
Any other risks to a used hardware wallet I should be aware of?

If you update the firmware you are probably safe, but why take the chance? The Trezor itself (or even the included USB cable https://www.wired.com/2014/07/usb-security/) could have been corrupted/replaced by a sophisticated actor.

If someone gave me a used Trezor for free, I would throw it in the garbage. No discount would be sufficient enough for me to justify buying a used Trezor:

https://www.reddit.com/r/Bitcoin/comments/2dbjd9/trezor_tamper_proof_seal_doesnt_help_much_against/


Where to connect to get streaming blockchain data? I would like to connect to the blockchain to read the whole thing, then listen to it "live" as it streams.

I'm new to this and can't seem to find out how to connect to receive data. (is there a central server, is it peer to peer...)

Is it a push or pull type of format? ie: Do I need to setup and endpoint and register to get the stream, or do I need to poll something?

Again new to this, any help would be appreciated.

Your best bet is to run a bitcoind node locally and then connect to it using zmq (ZeroMQ).

Pulling it from anywhere else means you're trusting someone else and the data can easily be corrupted. Also blockchain.info has a horrible track record of being wrong and being down very often.


Is it safe to store a sha256 hash of my BIP39 seed on the blockchain? According to https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki a 12 word BIP39 passphrase has entropy of 128 bits.

My reason for doing so is that when I want check if I memorized my passphrase correctly, I could just check it against the hash instead of having to generate the HD wallet addresses and checking its balance.

So is it safe to store a double sha256 hash of my BIP39 seed on the blockchain?

You could and it's probably not a direct security issue, but it's a senseless waste of time trying to find it again. Keep in mind that doing this destroys the PBKDF2 key stretching used in the seed needlessly. Electrum stores a checksum with their 12 word seed (making it a 13 word seed) if you really desire that functionality, though it's clear if you have it right when the money in that wallet is restored.


Relationship between Hash-Rate and Difficulty What is the algebraic relationship between Total Network Hash-Rate and Difficulty?

Short answer:

  difficulty = hashrate / (2^256 / max_target / intended_time_per_block)
             = hashrate / (2^256 / (2^208*65535) / 600)
             = hashrate / (2^48 / 65535 / 600)
             = hashrate / 7158388.055

(where hashrate is expressed in hashes/s)

Longer answer: there is no direct relation between the actual network hashrate and the difficulty, because the actual hashrate cannot be observed. What happens is that every 2016 blocks, the average hashrate during that period is measured, and the difficulty is adjusted based on that.


Which bitcoin documentation is the official one for bitcoin core? English Google searches about bitcoind and bitcoin-cli often lead to two sites:

https://en.bitcoin.it
https://bitcoin.org

Any idea which one is the official one, endorsed by the maintainers?

As far as I know there is no official documentation.

The closest you can get to it is the combination of the GitHub:
https://github.com/bitcoin/bitcoin

With the whitepaper:
https://bitcoincore.org/bitcoin.pdf

Changelog appears with every version on the core site, e.g.:
https://bitcoincore.org/en/releases/0.12.1/

And lastly, while I already linked to GitHub it is probably worth mentioning that open and closed issues are documented there:
https://github.com/bitcoin/bitcoin/issues?utf8=%E2%9C%93&q=

Hope this helps.


Regarding Private Key Good day. Can you help me out regarding my question.

The company (legal entity) at the moment want to confirm the fact, tha certain BTC core wallet actually belongs to her. Though, i would like to clarify: can we refer to our Private key as to prove of ownership on wallet and on it's funds?

The second option proposed by Willtech above would work well. Simply sign a message using that private key and that will prove that you are in possession of the private key corresponding to that public key. As mentioned in the answer it doesn't ensure uniqueness of the actual key, but it does prove that at the time of signing the message that you are in control of the key.


Is there a minimum time to be mining a pool to have any results? For example if mining with Deepbit is there a minimum time one must run cgminer to have anything added to their Deepbit account balance?

Deepbit allows PPS (pay per share) or Prop (proportional) mining. Under PPS, you get credited for each share you mine. Under Prop, you get credited after the pool finds a block, with the 25 BTC split proportionally among the miners based on how many shares they have. Since Deepbit has 1% of the total hashrate (according to Blockchain.info), on average it will take 100 * 10 min = 16 hours to find a block, though I stress this is only an average and variance can be very high. So if you choose Prop, you'll get paid every 16 hours, on average.


Electrum 2of2 multisig both cosigners share the same priv key I set up this wallet on the same machine online. Thinking that was it, it was only until i sent funds to this wallet and tried to spend them that i could only partially sign the transaction.

I opened up the wallet file in notepad and indeed, the 2x cosigner had no info there apart from null to priv key and the public cosigner key.

Ive tried most things ive read but i cant get at them funds. Can anyone help?

i noticed there was never 1 of 2 wallets, both wallets were both 2/2 multisig.
I have the passwords, seed and everything including the private key that both public keys are attatched to but i dont know how to get my funds or disable or fix the coding.

thanks

Please attach the transaction in question (partialy signed), no software I know of can spend it, but I'm pretty sure I can do it by hand. Basically you just need to duplicate the signiture and update some lenght fields and such.

(you can ping me on the freenode irc, nickname "lnovy" if you don't want to share the tx here or I'm not answering you here)


How to get coin address balance from *coind server? Im running *coind on my local ubuntu box.

I see that "*coind getbalance [account]" will get me the total balance of a user account. And thats good and that works fine.

How do I get the balance of a individual users wallet (assuming they have more than 1 wallet associated with their account). For example, I have Wallet 1 with 10 coins and Wallet 2 with 20 coins for a total balance of 30 coins. How do I check the balance of the individual wallet (wallet 1 or wallet 2)?

I dont see any commands to view an individual addresses balance.

You can type 'bitcoind help' to get the available commands. You can also type 'bitcoind help command' to get more information about the command.

You can find your balance in multiple ways:

getbalance: returns the balance of your wallet.dat as a number, you can specify an account (if set) in quotes to get information for a specific account, the default account is '' (blank)

getinfo: returns an array of information about your bitcoind, including balance

listunspent: returns an array unspent outputs sent to addresses in your wallet.dat, you can put an address in quotes to get information for a specific address


What do Bitcoin Core options "maxreceivebuffer" and "maxsendbuffer" do? What do Bitcoin Core options "maxreceivebuffer" and "maxsendbuffer" do? Is this a way of controlling the bandwidth Bitcoin Core uses?

Buffers are areas of memory where data waits before it gets processed. So a receive buffer holds some data coming from the network until the process (bitcoind) is ready to actually handle it. The send buffer holds data put there by bitcoind until your operating system is ready to actually dump it on the network wire.

They need to be a decent size not to cripple smooth communication. Too large would just be a waste and not help anything. In 99.9% of the cases the defaults should be fine.

They're not a method of affecting the bandwidth use though.

I'm fairly sure the upcoming version will have options for rudimentary bandwidth throttling. Until then you could try lowering maxconnections (default 125) if you want a lower bandwidth on average (over a month for example). But peak usage will still be high.

Depending on your operating system you could try some QOS scripts/settings or QOS settings on your router.


How does CDataStream data find its way into a socket? I am curious to know how and where in the source code, the data from stream is actually sent by a node. As per my understanding the following occurs:

ProcessMessage() issues a PushMessage() with appropriate parameters
PushMessage() will basically send message headers and parameters into a stream ssData
ssData is object of CDataStream and defined in CNode
CDataStream is in src/stream.h has no information related to IP or Port

How does the data being pushed to a stream goes into the correct socket in bitcoin working. Only CNode class has information on the network address (IP) and TCP Port. How is this information picked up by the datastream?

Adding more findings:

I found this from https://bitcointalk.org/index.php?topic=41727.0

The socket thread reads the sockets and places data into a CDataStream
associated with each node called vRecv. The Satoshi client uses C++
serialization operators >> and << to read and write to a CDataStream
and then it uses generic routines to move the data between the streams
and sockets

My exact question is where(what) are these mentioned generic routines in source code?

CNode has a method SocketSendData() which pushes all the serialized data into the socket.

https://github.com/bitcoin/bitcoin/search?utf8=%E2%9C%93&q=SocketSendData&type=Code


Bitcoin Cash - Trying to implement Explorer in Linux server but getting error I have tried to setup bitcoin cash explorer in my Linux server and server start working for 5 minutes but after 5 minutes it is returning an error and I have configured explorer-API and it is not working properly in the background.

Error Facing:

[2018-02-09T13:32:31.589Z] info: Using config: /home/kiran/bchnode/bch-node.json
[2018-02-09T13:32:31.590Z] info: Using network: testnet
[2018-02-09T13:32:31.591Z] info: Starting bitcoind
[2018-02-09T13:32:31.592Z] info: Using bitcoin config file:
/home/kiran/bchnode/data/bitcoin.conf
[2018-02-09T13:37:26.959Z] error: Failed to start services
[2018-02-09T13:37:26.960Z] error: RPCError: Bitcoin JSON-RPC: Request
Error: connect ECONNREFUSED 127.0.0.1:18332
    at Bitcoin._wrapRPCError (/usr/local/lib/node_modules/@owstack/bch-
node/lib/services/bitcoind.js:447:13)
    at /usr/local/lib/node_modules/@owstack/bch-
node/lib/services/bitcoind.js:779:28
    at newCallback (/usr/local/lib/node_modules/@owstack/bch-
node/node_modules/@owstack/bitcoind-rpc/lib/index.js:52:16)
    at ClientRequest.<anonymous>
(/usr/local/lib/node_modules/@owstack/bch-
node/node_modules/@owstack/bitcoind-rpc/lib/index.js:136:7)
    at ClientRequest.emit (events.js:160:13)
    at TLSSocket.socketErrorListener (_http_client.js:389:9)
    at TLSSocket.emit (events.js:160:13)
    at emitErrorNT (internal/streams/destroy.js:64:8)
    at process._tickCallback (internal/process/next_tick.js:152:19)
[2018-02-09T13:37:26.961Z] info: Beginning shutdown
[2018-02-09T13:37:26.961Z] info: Stopping @owstack/bch-explorer-api
(not started)
[2018-02-09T13:37:26.962Z] info: Stopping web (not started)
[2018-02-09T13:37:26.962Z] info: Stopping bitcoind
[2018-02-09T13:37:26.962Z] info: Halted

bch-node.json file

{
  "network": "testnet",
  "port": 3007,
  "services": [
    "@owstack/bch-explorer-api",
    "bitcoind",
    "web"
  ],
  "servicesConfig": {
    "bitcoind": {
      "spawn": {
        "datadir": "./data",
        "exec": "/usr/local/lib/node_modules/@owstack/bchnode/bin/bitcoind"
      }
    },
    "explorer-api": {
       "rateLimiterOptions": {
         "whitelist": ["::ffff:127.0.0.1"]
       }
     }
  }
}

bitcoin.conf file

server=1
whitelist=127.0.0.1
txindex=1
addressindex=1
timestampindex=1
spentindex=1
zmqpubrawtx=tcp://127.0.0.2:28332
zmqpubhashblock=tcp://127.0.0.2:28332
rpcallowip=127.0.0.1
rpcuser=bitcoin
rpcpassword=local321
uacomment=bch

Installation Process:

npm install -g @owstack/bch-node
bchnode create -d <bitcoin-data-dir> mynode
cd mynode
bchnode install https://github.com/owstack/bch-explorer-api.git
bchnode start

It should run "http://localhost:3007/bch-explorer-api/" but it is not returning anything and it is getting error after 5 minutes in my linux terminal.

Please help me about this error related bitcoin cash block explorer.

I am trying to configure https://bch-insight.bitpay.com this explorer in my local server If you have any reference github link then please share with me because I m not able to find it.

Can you please try replacing bch-node.json file with this:

{
  "network": "testnet",
  "port": 3007,
  "services": [
    "@owstack/bch-explorer-api",
    "bitcoind",
    "web"
  ],
  "servicesConfig": {
    "bitcoind": {
      "spawn": {
        "datadir": "./data",
        "exec": "/usr/local/lib/node_modules/@owstack/bch-node/bin/bitcoind"
      }
    },
    "explorer-api": {
       "rateLimiterOptions": {
         "whitelist": ["::ffff:127.0.0.1"]
       }
    },
    "fee": {
      "rpc": {
        "user": "bitcoin",
        "pass": "local321",
        "host": "127.0.0.1",
        "protocol": "http",
        "port": 18332
      }
    }
  }
}

Because Bitcore won't be able to connect to your node without knowing your RPC username and password.


Why does Armory rescan the block chain every time it opens? The title says it all: every time I open Armory, it appears to rescan the entire block chain (after synchronizing). Why can't it just keep a file that says if any blocks contain transactions for my wallets, or something similar?

We just release version 0.90-beta, which finally solves this issue.  Armory does not need to rescan the blockchain anymore unless you import new private keys, or Armory experiences an unclean shutdown.

With the exception of the first-time startup (to build the new databases), Armory should get into online mode within 10 seconds of Bitcoin-Qt/bitcoind finishing synchronization.


How do you calculate a reasonable transaction fee? These days transactions are taking a very long time to confirm. Higher transaction fees could be a possible solution. I want to know how to calculate a reasonable transaction fee, which is not so expensive and results in less time until confirmation (within 10-15min). Could you advice me on how to implement it?

See https://bitcoinfees.21.co/ for mempool size and tx fee. This will suggest fee in satoshi/byte depending on current network conditions.

If you are looking to exact fee in BTC for spending from wallet, you can try  https://github.com/shivaenigma/btxfees.


Trouble with getting litecoins in my give-me-coins account I started mining litecoins yesterday on cgminer (been mining for about an hour) and so far I have got nothing in my account.
What am I doing wrong ?

Here are two screenshots one is of cgminer, the other is of my give-me-coins account:

http://gyazo.com/2fb18a76dedb71eb80c8a19126ab231f
http://gyazo.com/89ca55239de31a6da4bca25072096b4e

You need to launch cgminer with --scrypt at the command line, you will see instead of Mh/s you should be getting Kh/s.


Future risk of computer farms generating addresses for previous balance? I understand how difficult it would be to brute force a specific bitcoin address' private key.

I'm wondering out of curiosity though, with bitcoin being adopted so rapidly, will there ever be computer farms where it is more profitable to continuously and rapidly create addresses and checking their balance in hopes of someone out there sharing it?

Or will the amount of power usage generated from such an idea be more profitable simply going to mining?

I think the way to reason about this is to think about the incentives and rewards of such actions.

Yes, I can potentially throw a lot of computational work into generating private keys and checking their balance... But is it really worth it knowing that I can throw the same amount of energy into Mining, and get a guaranteed and constant return on my computational work?

Somebody was discussing something similar in 2012 on BitcoinTalk, here's the link https://bitcointalk.org/index.php?topic=107172.0. Note that the author of the post says that "you probably have much better odds finding extraterrestrial life or winning the Powerball 5 times in a row" than randomly finding a generated BTC address with a balance in it.

EDIT: Reason for the downvotes? Why did a couple of people damage my account reputation without explaining exactly what is wrong with my answer? So sad this community is not as nice and newbie-friendly as it should be.


Do we put all the transactions in the memory pool? I wonder if orphan transactions are also stored in the memory pool? If yes, how do the Bitcoin client distinguish between the orphan and non-orphan transactions?

Bitcoin Core maintains a separate orphan pool, with transactions whose parents are missing. Its main purposes is dealing with peers that send us groups of independent transactions in the wrong order, so this pool does not need to be large.

Since Bitcoin Core v0.13.0, all transactions sent to peers are sent in batches, and within those batches in dependency order. This massively reduced the average size of orphan pools on the network (from hundreds to typically just a few).


getblockchaininfo returning excessive "soft fork" info The blockchaininfo command is now returning a lot of "softfork" information.

Is there a way I can get other fields without the softfork blob?

You can use the jq shell command to filter out the unwanted keys.

$ ./bitcoin-cli getblockchaininfo | jq 'del (.softforks)' | jq 'del (.bip9_softforks)'

with as output:

{
  "chain": "main",
  "blocks": 485623,
  "headers": 485623,
  "bestblockhash": "000000000000000000772fa60c075c57b8ba2db277a84454e1f8e27c3c307b10",
  "difficulty": 922724699725.9628,
  "mediantime": 1505593445,
  "verificationprogress": 0.9999959396017668,
  "chainwork": "0000000000000000000000000000000000000000008aeb8bb8310a6b50e24bb0",
  "pruned": false
}


Which wallets support Bitcoin Cash? I'm looking for a big list of wallets that support Bitcoin Cash. What are the wallets that have Bitcoin Cash support?

If you don't want to read the whole list, and just want to choose a Bitcoin Cash wallet...
(SPV = Simplified Payment Verification, does not depend on a server so it's a more decentralized.)
Sorted by various things
For PC/MAC

Electron Cash (a.k.a Electrum for Bitcoin Cash)

For Android

CoPay (SPV)

BTC.com

UnitWallet (SPV)

For iOS

CoPay (SPV)

Bitcoin.com (SPV) (updated rarely)

BTC.com

*CoPay uses a different address format. Not to be confused, please read this
Major Full Nodes

Bitcoin Unlimited Cash Edition

One of the most used cash full node wallet softwares. It has XThin support that saves bandwith while downloading new blocks and uses Parallel Validation to validate blocks faster and safer.
Website: www.bitcoinunlimited.info
Download Cash Release: www.bitcoinunlimited.info/download

Bitcoin ABC

First Bitcoin Cash full node wallet software. The most popular Bitcoin Cash node as it's the first.
Website: bitcoinabc.org
Download: download.bitcoinabc.org

Bitcoin XT

First Bitcoin scaling software - first version released in 8/2015. It supports XThin, and it supports XThin's alternative Compact Blocks too - making it (theoretically) faster and bandwidth-cheaper while downloading new blocks than other clients. It's the least used Bitcoin Cash full node, for no reason.
Website: bitcoinxt.software
Download: https://github.com/bitcoinxt/bitcoinxt/releases/latest
If you want to run one of the full-nodes but don't want to store the blockchain (140 GB)
You can use pruning, by pruning you can choose how much space allocate to these full node softwares. It supports both Bitcoin and Bitcoin Cash.
Other Major/Semi Major Wallets

Electron Cash (lightweight wallet)

The only major talented lightweight wallet - doesn't store the entire blockchain on your computer. It's a changed version of Electrum, one of the most used Bitcoin wallets.
Website & Download: electroncash.org
WARNING: There are fake Electron Cash wallets that steal your money. It is safe if and only if you're downloading it from www.electroncash.org!

BTC.com Wallet (online wallet - mobile)

The most used online wallet Bitcoin Cash & one of the best mobile Bitcoin Cash wallets
Use it here: bcc-wallet.btc.com
Google Play: https://play.google.com/store/apps/details?id=com.blocktrail.mywallet
App Store: https://itunes.apple.com/us/app/btc-com-bitcoin-wallet/id1019614423

Blockchain.info (online - mobile)

One of the major online wallets (most used?) that completely supports Bitcoin Cash. https://cointelegraph.com/news/blockchaininfo-releases-full-bitcoin-cash-support-users-receive-coins
Note: that for anyone opening a new wallet or for anyone who didn't have BTC before 1st August in their wallet, you cannot use it for storing BCH. https://support.blockchain.com/hc/en-us/articles/115005180866-Can-I-use-bitcoin-cash-BCH-in-a-new-or-existing-wallet-

Coinbase (online - mobile)*

One of the major online wallets. They are going to add option to withdraw all of your Bitcoin Cash on 1 January 2018.
Announcement: https://support.coinbase.com/customer/portal/articles/2853600-bitcoin-cash---frequently-asked-questions

Bread [former name: Breadwallet] (mobile)

Breadwallet is the safest iOS Bitcoin wallet with Bitcoin Cash one-time-withdrawal support. It doesn't use a server, instead it connects to three peers, making it more decentralized. There is a rumour that they are going to add an option to switch to Bitcoin Cash and use it like the normal Bitcoin wallet. [noref]
Announcement: https://breadwallet.com/blog/breadwallet-plan-bitcoin-cash-bch/

CoPay - BitPay (mobile - lightweight - Chrome extension - desktop)

Bitcoin Cash full support has been released, but it uses a new address format.
Announcement: https://blog.bitpay.com/bitcoin-cash-wallet/

 Coinomi (mobile)

Coinomi is one of the most known Bitcoin Cash wallets (actually it supports over 70 cryptocurrencies), however it may not be a good idea to have more than 50$, as it went closed source last year. Their developers say on its website that the private keys don't leave your device.
Android: https://play.google.com/store/apps/details?id=com.coinomi.wallet
iOS: Coming in future

Armory

One of the good Bitcoin software. Allows you to withdraw BCC (BCH, Bcash on Armory). You should read instructions below.
If further hard forks happen on BCC, its developers won't update Armory to be compatible with it. (Source)
Instructions: https://bitcointalk.org/index.php?topic=2070058.0

Mycelium

Actually Mycelium can't do anything about your Bitcoin Cash, but you can use BTC.com's tool to claim it
https://blog.btc.com/how-to-recover-your-trapped-bitcoin-cash-from-other-wallets-24b929543f26
Or you can claim it using Coinomi
https://steemit.com/btc/@libert/step-by-step-guide-on-claiming-bitcoincash-from-mycellium-wallet-201783t112141477z

Bitcoin.com wallet (mobile - desktop - Chrome extension)

A good option as a wallet. It's changed version of CoPay that fully supports Bitcoin Cash and runs on Windows, Mac, Linux, iOS, Android.
Download: www.bitcoin.com/choose-your-wallet/bitcoin-com-wallet

Jaxx (mobile, Chrome extension)

Jaxx has full Bitcoin Cash support (Android and Chrome extension).
Announcement: https://www.reddit.com/r/btc/comments/7bu6yo/jaxxio_now_supports_bitcoin_cash/

TSBW (online)

It's an open source wallet that can be used without opening an account. The easiest software to use with paper wallets.
WARNING: Developer accused of stealing funds. More info 1 More info 2
Bitcoin Cash: https://tsbw.io/bcc/

BitcoinCashTribe (online)

Works similar to TSBW.
Website: https://bitcoincashtribe.com/index.php

BitPie & Bither

They have full Bitcoin Cash support.
BitPie announcement: http://docs.bitpie.com/en/latest/bitpiebcc/index.html
Bither announcement: http://docs.bitpie.com/en/latest/bitherbcc/index.html

Exodus (lightweight)

One of the popular wallets that support Bitcoin Cash 100%.
Announcement: https://redd.it/766ojz
Download: https://www.exodus.io/releases/

Xapo (mobile)

You can withdraw all of your BCH at once before December 14th, or convert your BCH to BTC by one-click.
Announcement: https://blog.xapo.com/time-to-convert-your-bitcoin-cash-bch/

BitGo (online - Chrome extension)

BitGo supports Bitcoin Cash.
Announcement: https://blog.bitgo.com/bch-availability-c252727ea1be

StrongCoin (online)

StrongCoin supports Bitcoin Cash.
Announcement: https://strongcoin.com/blog/bitcoin_cash_is_now_supported_in_strongcoin_wallet

Parity Bitcoin (full node + lightweight)

Parity Bitcoin is a high performance wallet that can be run as a full node or a lightweight client. (Warning: Don't be confused with Parity! Parity Bitcoin is the Bitcoin/Bitcoin Cash version of Parity Ethereum client.)
Announcement: https://blog.parity.io/parity-bitcoin-is-now-supporting-segwit-segwit2x-and-bitcoin-cash/

Bitcore (full node)*

The 5.0 version which is coming soon, supports Bitcoin Cash if pointed to a Bitcoin Cash node. Doesn't have a user interface, not the best choice for a user. Useful APIs. (This is not a wallet for users! This is for developers!)
Announcement: https://news.bitcoin.com/now-bitcore-nodes-can-switch-to-any-bitcoin-implementation-even-forks/

Bitcoin Cash wallet (by Chris Pacia)

Changed version of OpenBazaar's SPVWallet for Bitcoin Cash. It has both GUI and command line support.
Downloads (Windows & Linux): https://github.com/cpacia/BitcoinCash-Wallet/releases/latest

Bitcoin Cash wallet (by HashEngineering) (Android)

Changed version of Andreas Schildbach's Bitcoin Wallet for Bitcoin Cash.
Announcement: https://www.reddit.com/r/btc/comments/72xost/beta_for_bitcoin_cash_wallet_for_android_recover/

StashWallet

A new HD Android wallet that fully supports Bitcoin Cash.
Website: https://stashcrypto.com

Freewallet (mobile)

A Bitcoin Cash Android wallet. WARNING: READ THIS
Website: https://freewallet.org
Google Play: https://play.google.com/store/apps/details?id=bcc.org.freewallet.app

 UnitWallet (mobile)

One of the Bitcoin-Cash-only wallets, fork of bread[wallet].
Website: https://www.unitwallet.co
Google Play: https://play.google.com/store/apps/details?id=com.unitwallet
Hardware Wallets

bitWallet (iOS)

A new Bitcoin wallet with Bitcoin Cash and a few altcoins support. It's good to keep in mind that it's not open source.
Website: http://www.sollico.com/bitwallet/
Download: https://itunes.apple.com/us/app/bitwallet/id777634714

Trezor

One of the major hardware wallets. Allows you to claim your Bitcoin Cash (They call it Bcash) if it's updated to latest firmware (1.5.1+). Fully supports Bitcoin Cash.
Trezor Guide: https://blog.trezor.io/claim-bcash-bitcoin-cash-bch-bcc-trezor-wallet-f0a810d5864a

KeepKey

One of the major hardware wallets + fully functioning Bitcoin Cash wallet.
https://coingeek.com/keepkey-wallets-now-support-bitcoin-cash/

Ledger

One of the major hardware wallets. Supports Bitcoin Cash if you update your firmware to latest version.
Guide: http://support.ledgerwallet.com/knowledge_base/topics/bitcoin-cash

Digital Bitbox

Its firmware supports Bitcoin Cash, but the desktop client doesn't. You can claim your Bitcoin Cash by sending all of them to your Bitcoin Cash wallet.
Cannot be used as a Bitcoin Cash hardware wallet.
Guide: https://digitalbitbox.com/bitcoincash

Paper Wallet

The safest Bitcoin/Bitcoin Cash hardware wallet. You can claim your Bitcoin Cash by importing to a Bitcoin Cash software.
You can create a paper wallet on cashaddress.org or bitaddress.org or bitcoin.com
All Bitcoin paper wallets are compatible to Bitcoin Cash as they both use the same private keys/addresses.

TODO: Add description:

https://mobi.me

https://www.wmtransfer.com/

https://bitcoin-india.org/

https://www.melis.io/

https://www.coin.space/

The wallets that don't support Bitcoin Cash aren't on the list.
List is sorted by various things.
*: Description will be updated.


What is meant by "relaxed standards" for P2SH redeem scripts in Bitcoin Core 0.10.0? From the Bitcoin Core 0.10.0 release notes:

  Standard script rules relaxed for P2SH addresses

  The IsStandard() rules have been almost completely removed for P2SH
  redemption scripts, allowing applications to make use of any valid
  script type, such as "n-of-m OR y", hash-locked oracle addresses, etc.
  While the Bitcoin protocol has always supported these types of script,
  actually using them on mainnet has been previously inconvenient as
  standard Bitcoin Core nodes wouldn't relay them to miners, nor would
  most miners include them in blocks they mined.

So essentially the core software will now relay more intricate P2SH Txns which would previously be deemed non-standards transactions.

What are the specific changes which have been made (ie relaxed standards)? Does it only apply to P2SH Txns? Finally, "n-of-m OR y" and hash-locked oracle addresses are mentioned as examples: what does this refer to exactly?

What are the specific changes which have been made (ie relaxed standards)?

Gavin Andresen made this pull request proposing the change, as well as this rationale document describing why he supported the change.

  Does it only apply to P2SH Txns?

It applies only to P2SH redeem scripts, which is the script that is run to see if you have the data required to spend an output sent to a P2SH address.

  Finally, "n-of-m OR y" and hash-locked oracle addresses are mentioned as examples: what does this refer to exactly?

n-of-m OR y refers to a script that checks for multiple signatures from a set of keys OR a single signature from another key.  For example, if Alice owns a business and Bob and Charlie are her employees, she can allow Bob and Charlie to work together to spend her bitcoins (2-of-2) or Alice ("y") can spend her bitcoins on her own.
hash-locked oracle means, generally, that you can create a transaction that can only be spent when the hash of some data is provided.  For example, this PDF (page 24) describes a hash-locked contract with three parties: Alice, Bob, and Charlie.

Alice wants to pay 1.00 BTC to Charlie through Bob.
Charlie randomly generates a large number r and then hashes (HASH160) that number to produce h.  The value r is the oracle and the value h is the hash lock.
Charlie gives hash h to Alice.
(Transaction 1) Alice gets Bob's pubkey and pays him 1.01 BTC in an output with a script like: <Bob's pubkey> CHECKSIGVERIFY HASH160 <hash h> EQUAL
(Transaction 2) Bob can't spend that output without the number r that generated hash h, but he knows Charlie has the number r so Bob gets Charlie's address and pays him 1.00 BTC with a script like: <Charlie's pubkey> CHECKSIGVERIFY HASH160 <hash h> EQUAL
(Transaction 3) Charlie spends the output from transaction 2 by creating the signature script: <number r> <Charlie's signature>  This means r is revealed on the block chain.
(Transaction 4) Bob sees r on the block chain and uses it at some point to spend the output from transaction 1: <number r> <Bob's signature>

The example above seems overly contrived, but the PDF linked above uses it as part of a micropayment channel that allows settling transactions off the block chain in a distributed and low-trust manner, possibly allowing Bitcoin to scale much better than it does without such a system.


Importaddress taking a long time to run / does not work When I try to run importaddress using the core client it takes a long time to execute, over 10 minutes, even though I have supplied a "false" argument for rescanning. For example:

bitcoin-cli importaddress "32jdC23ABv86M2ptiqMzFzCaufBtE2NCdN" false

When I run this, it takes so long to compute that it times out with "unable to connect to server error". If it is not rescanning, what is it doing? Why is it taking so long just to add an address to the wallet?

(note that adding a label field makes no difference, it still hangs)

Use Bitcoin Core 0.14 (or higher) and the new importmulti RPC call.

importaddress does always a complete rescan (back to the genesis block) which can take serval hours. Very inefficient if you import multiple addresses.

where importmulti can import multiple keys/addresses at once only requiring a single rescan.
You can also set the according address birthday timestamp to avoid rescanning the complete chain from the genesis block.


Do miners have to start over whenever a block is found? If I understand correctly, each miner selects a set of pending transactions, puts them in a block, and then tries to sign that block. Pooled miners do the same, but the specific set of transactions is selected by the pool server.

Since each block must link to the previous one, does it mean that whenever a new block is found (by another miner) the whole process must start over?

In a sense, yes.

However as the mining process is essentially guessing the right number from a very large set of possibilities it's misleading to say you start the process again as you're just as likely to guess the next block first try as you are to have guessed the previous block. You basically start the process each "guess" anyway, whether you try again on the same block or start trying a new one is of little consequence.

You could very well find a new block the very second after you accept a block. In that case, you wouldn't have found a block if you had kept mining on the old block.


How does mining process takes Approximately 10 minutes? I don't think that I fully understood the "difficulty" topic in blockchain, and therefore I don't understand how mining process takes close to 10 minutes.

If I have "Target" value (some hash value, which each block's value must be lower or equal to this Target), Why does it take 10 minutes to find hash value for the block? Maybe when the Nonce=2 the value of the block will be <= Target, maybe when the Nonce = 100000000 the value will be <= Target.

But if Nonce = 2 , then the time of the mining is couple of seconds, and if the Nonce = 100000000 , the time of mining is couple of minutes..

So it's a matter of luck or something, but the time of the mining can change.. So what is the principle in the blockchain \ What does miners do, in order to make the mining process in a 10 minutes average?

I'm new to this technology so i would appreciate simple answers
Thanks in advance

To make it simple:

Mining consist on finding a specific block that once hashed gives a value bellow a certain threshold (the target).

The target is recalculated every fixed amount of blocks (2016), so that it is refreshed every two weeks (at 1 block per 10 minutes rate).

When recalculated, the total network hash rate is taken into account, so that according to that value a block will be mined every ten minutes on average. Notice that this is purely probabilistic.

How does it work?

The target is a 256-bit value that is reset periodically. When a block is mined, the SHA-256 hash is performed over the block and the result is compared with the target.

Now, if the target is a huge 256-bit number, the hash of the block will be easily smaller than the target, and the block will be considered valid. However, if the target value is really small, finding a valid block will be way harder. Here is where the network hashrate comes into play. The bigger the hashrate, the lower the target. So, once 2016 block have been published since the last update the target will be recalculated, making it higher or lower depending on how the total network hashrate has evolved.

Notice that it could happen indeed that a block is found in less, or more, than the 10 minutes, but the odds are more likely to be around the mark.

How is it calculated?

If you want to know exactly how it is calculated, here you have a Python code that does so:

max_tgt = int("00000000FFFF0000000000000000000000000000000000000000000000000000", 16)  # Around 2^224

current_diff = 440779902287

current_tgt = max_tgt / current_diff  # current_diff = max_tgt/current_tgt

hash_rate = 3310469378 * pow(10, 9)  # GHash/s to Hash/s

print current_tgt/float(pow(2, 256)) * hash_rate * 600

By dividing the current target by the maximum number of possible hashes (2^256) you get the odds of finding a valid hash. If you multiply this by the hash rate you get how many correct hashes will be get in a second. Finally, by multiplying it by 10 minutes (600 seconds) you get how many valid hashes, on average, you will get in ten minutes.

What gives you:

1.04920216926

Data such as maximum target (max_tgt), current difficulty (current_diff) and hash rate (hash_rate) has been obtained from bitcoinwisdom, and matches with the current network data. There you can also find some charts about how the hashrate and the difficulty has evolved in the last months.

For those wondering how the network hashrate is actually computed, you can check it in this answer.


How do you leverage your bitcoins? I was previously putting my bitcoins into btcjam, but as there are no longer any secured loans I was thinking about moving my bitcoins into something else that will generate some profit over time while keeping the bitcoins in circulation. Coinlenders.com looked promising except for

 This is a demo instance of the CoinLenders Bitcoin Bank Script. While this demo is fully functional, nothing is real, and nothing is an investment.

What have you been doing with your bitcoins other than spending them?

I would like something that is low effort, low risk. Low return is fine; I was planning on sitting on most of my bitcoins anyways.

I co-founded Bitbond.net for purposes like yours. It's a peer to peer lending website where you can earn interest on your Bitcoins. However, the loans are unsecured and you need to decide which projects you like to lend to.

One of the reasons we had and still have a financial crisis is because many people did not really care what other people were doing with their money. Then they found out that some of the banks they trusted put their money to work in products the bankers didn't even understand themselves.

Low effort is always a double-edged sword as it might create much more work later.


Bitcoin-cli how to get balance of a wallet on different node? I am making a bitcoin mobile application, and I an trying to get the balance of a wallet that is on the mobile phone, from a daemon that is running on a separate node. The mobile wallet is connected to this node and can use any of the CLI commands such as getinfo getbalance etc.

What CLI commands do I pass to the daemon to give me the balance of the wallet on my mobile application?

You cannot because Bitcoin Core does not store such information. Bitcoin Core does not store all information for all addresses, it only stores information for its own addresses and the lower level information needed for verifying transactions (addresses are a higher level abstraction). There are no commands that allow you to get the balances or transactions for a given address not in the Bitcoin Core wallet because such information is not available.


createrawtransaction, multiple outputs, single input? following the manual on https://bitcointalk.org/index.php?topic=101525.0 , i would like to merge multiple fractions of BTC from multiple addresses i own, to another single address i own(reassemble, sort of, organize stuff). how will my approach look like? i still don't get what does "vout" value mean in the createrawtransaction? i think it's about this:

# assume i would like to merge transactions "aaaa..." and "bbbb..." to address "1mainaddr..."
# "aaaa..." has 0.01  btc unspent
# "bbbb..." has 0.0105 btc unspent
# "1mainaddr..." is emtpy
# i would like to pay 0.0005 btc as a fee

createrawtransaction [{txid:aaaa...,vout=0},{txid:bbbb...,vout=1}] {1mainaddr...=0.02}

is that correct?
i would like to first test this on testnet but still waiting on block confirmations. i'd appreciate 1-2 testnet BTC on moBHB5euzHyKtcabpD3UND9PYB994cisqb and will return it to you once block 101602 is confirmed.

ok, i figured it out. the correct answer to the following example will look this way:

# get your unspent transactions
listunspent
# select the ones you want to pour BTC from, please also note their 'vout', it is an output of a transaction you own a private key to and therefore able to spend.
createrawtransaction '[{"txid":"aaaa...","vout":0},{"txid":"bbbb...","vout":0}]' '{"1mainaddr...":0.02}'
# explained: you are using two outputs, of total 0.0205 BTC. you give away 0.0005 fee and you keep 0.02 at your 1mainaddr...
# you can dump the resulting transaction draft to see how it'll look like
decoderawtransaction <...result_from_createrawtransaction...>
# sign it with your private keys
signrawtransaction <...result_from_createrawtransaction...>
# if it returns you a hex with "complete" : true, you can now send it off to network
# if it returns "complete" : false, you either don't have a private key for signing, or you might have specified invalid 'vout'. google for more possible problems, those were two i experienced.
sendrawtransaction <...result_from_signrawtransaction_hex...>

references:

people.xiph.org/~greg/signdemo.txt
bitcointalk.org/index.php?topic=101525.0

thanks:

@Murch

this is a manual for original satoshi client.


Can*t call chainActive.Tip()->nHeight in core.cpp I want to call chainActive.Tip()->nHeight in core.cpp. It is not possible, I am interested in every idea.

https://github.com/LIMXTEC/BitSend/blob/DEV-joshafest/src/core.cpp

Here is an example :

bool GetH()
{
    int nBlockHeight = chainActive.Tip()->nHeight;
    if(nBlockHeight < FORKX17_Main_Net )
        return true;
    else
        return false;
    }
}

uint256 CBlockHeader::GetHash() const
{
    if (GetH())
    {
        return HashX11(BEGIN(nVersion), END(nNonce));
    }
    else
    {
       return HashX17(BEGIN(nVersion), END(nNonce));
    }
}

Also that is not possible:

CBlockIndex* pindexPrev = chainActive.Tip();
if (pindexPrev->nHeight <= FORKX17_Main_Net)

As SajithP commented:

  modify the makefile to include the object of the class which has the chainActive as a member. e.g 'x.o' where chainActive is a member of class 'x'