Can I always use single public key (addr1) for all my transactions and when I spend every time protect it with different scripts / keys (key2, key3, etc.), so that spending requires at least two keys ('key1', and 'key-n') but addr1 remains the same for receiving bitcoins.


(transaction, output script): (input address, amount) --> (output 1); (output 2)
(trxn1, script1): (addr1, 10 BTC) --> (addr2,  5 BTC); (addr1,  5 BTC)
(trxn2, script2): (addr1,  5 BTC) --> (addr3,  1 BTC); (addr1,  4 BTC)
(trxn3, script3): (addr1,  4 BTC) --> (addr4,  1 BTC); (addr1,  3 BTC)
(trxn4, script4): (addr5, 12 BTC) --> (addr1, 10 BTC); (addr5,  2 BTC)
(trxn5, script5): (addr1, 13 BTC) --> (addr6,  2 BTC); (addr1, 11 BTC)

Is it possible to make script 1, 2, 3 and 5 would require different keys (at least 2; key1 and key-n) to spend bitcoin from this address?

Is it possible with Script? Is there any other ways in which I can keep single address for all my transactions?

addr1 is my address; transactions 1, 2, 3, 5 are my spends and transaction 4 is receiving transaction.

Motivation: To use same address for all my transactions. Reason is, I own firstbits address '1vijay', and I don't want to loose in case of my private key compromised. I am looking for any solution that would solve my problem, particularly scripts.

pseudo-script would be something like,

scriptPubKey: <pubKey1> OP_DROP <pubKey2> OP_CHECKSIG
scriptSig: <sig>

I would like to use 'pubKey1' as my receiving address always, but my spending would depend on private key corresponding to 'pubKey2'.

  • Looks like, it is too tricky, and not for everyone. It would be better if different addresses used every time.
    – vi.su.
    Mar 8, 2013 at 5:01
  • 1
    If you can't spend your bitcoins with just key1, then you're not really receiving bitcoins with that address, are you? I suspect you could do something similar to your question using key splitting.
    – Nick ODell
    Mar 8, 2013 at 16:03
  • No, looks like, key splitting is about private keys. But, split keys are going to be the same always..
    – vi.su.
    Mar 8, 2013 at 16:44

3 Answers 3


If you are to receive a transaction with address A, you need A's private key in order to spend it and nothing more.

If you want to require two or more addresses to be used to spend money you receive, you would need to use a multisig address. After that, you would need to use m-of-n private keys to spend the coins, with m and n being predefined when you create the multisig address.

There are other ways one could restrict coins from being spent - say requiring a password or allowing anyone to spend them, but they are a lot more obscure and generally not used by anyone.

  • by keeping receiving address the same with every transaction, is it possible to make spending would require private key + extra details (like, another key), through scripts?
    – vi.su.
    Mar 7, 2013 at 15:17
  • @vi.su. The way one can redeem the transaction is determined by the sender, not the receiver. They can specify what data is needed - signature or password. You could, however, just send all of your incoming transactions from one address straight into a multisig address and thus require that extra data. Asides that, there isn't much you can do.
    – ThePiachu
    Mar 7, 2013 at 20:57

I don't really understand what you're asking, but I think the answer is no.

In every such scheme, there would be two pieces of information - a secret part/key, and a public address. You can split the secret key to n pieces (multisig), and the implementation of this is underway, but the basic observation remains.

Now, if the private key is leaked, the bitcoins are spendable. If you need to receive bitcoins on a system without the ability to spend them, just delete the private key from that system, and only keep it elsewhere.

  • My question is, how to allow an address to receive bitcoins without worrying about primary key compromised. Through script, is it possible to prevent the spend using another key (by keeping my address same).
    – vi.su.
    Mar 5, 2013 at 13:30
  • @vi.su. - perhaps this is what you meant to ask? bitcoin.stackexchange.com/questions/8142/…
    – ripper234
    Mar 5, 2013 at 15:10
  • I have completely rephrased my question. please check.
    – vi.su.
    Mar 6, 2013 at 8:25

What you ask is impossible. The scriptPubKey determines the conditions under which the bitcoins can be accessed. For a different set of conditions (e.g. first (key1,key2), then (key1,key3)...) you need a different scriptPubKey. And a different scriptPubKey means a different address on which you receive the bitcoins.

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.