8

Say, for security reasons, that a bitcoin business has an online wallet (aka hot wallet) with enough coins for day-to-day operations. The rest of the funds are in an offline wallet (aka cold wallet or cold storage).

How can the online servers detect when coins are sent to the offline wallet?

Can this be (easily?) done with bitcoind or is another bitcoin client needed?

Technical details may be interesting, but I think more important is how a merchant can achieve this sort of functionality.

3

2 Answers 2

3

Since version 0.10.0 bitcoind has support for watch-only addresses.

Here is the text from the release notes:

Watch-only wallet support

The wallet can now track transactions to and from wallets for which you know all addresses (or scripts), even without the private keys.

This can be used to track payments without needing the private keys online on a possibly vulnerable system. In addition, it can help for (manual) construction of multisig transactions where you are only one of the signers.

One new RPC, importaddress, is added which functions similarly to importprivkey, but instead takes an address or script (in hexadecimal) as argument. After using it, outputs credited to this address or script are considered to be received, and transactions consuming these outputs will be considered to be sent.

The following RPCs have optional support for watch-only: getbalance, listreceivedbyaddress, listreceivedbyaccount, listtransactions, listaccounts, listsinceblock, gettransaction. See the RPC documentation for those methods for more information.

Compared to using getrawtransaction, this mechanism does not require -txindex, scales better, integrates better with the wallet, and is compatible with future block chain pruning functionality. It does mean that all relevant addresses need to added to the wallet before the payment, though.

Try bitcoin-cli help importaddress (and the help texts for the other relevant commands listed above) for the details.

2

Every bitcoin client knows about every account. You don't need the keys that control the funds in an address to monitor it.

1) Give your online server a list of your cold storage addresses.

2) Periodically check the balance of those addresses, perhaps using the command bitcoind getbalance [account]

API reference

Edit: Unfortunately, I was using the command I posted incorrectly. I think this functionality might not be in bitcoind. However, there is an open-source tool called Abe that's worth looking into.

2
  • 1
    Please don't confuse Addresses with Accounts (en.bitcoin.it/wiki/Accounts_explained). Information about addresses are included in Bitcoin Blocks, information about accounts are not. They are specific to a client instance.
    – ThePiachu
    Commented Nov 26, 2012 at 7:52
  • 1
    @ThePiachu, you are correct and I have edited my answer.
    – Nick ODell
    Commented Nov 26, 2012 at 9:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.