Signing a bitcoin transaction OFFLINE fails
I know this subject has been discussed quite a lot, but after several days looking for this to work, I give up.
I want to create a transaction on a view-only wallet which is connected to the internet and synced, then sign this transaction on a "cold" offline machine that has the private key, then send this transaction on the view-only wallet.
View-only wallet will be [VOW]
Offline cold wallet will be [OCW]
Some other bitcoin wallet will be [SOW] (on another 3rd machine, that will play the peer)
First let's simulate the nodes, with one node on each machine:
[VOW] bitcoind -regtest -wallet=/path/daemon1.dat -datadir=/path/.bitcoin1 -rpcport=18334 -port=18434 -addnode=127.0.0.1:18435 [SOW] bitcoind -regtest -wallet=/path/daemon2.dat -datadir=/path/.bitcoin2 -rpcport=18335 -port=18435 -addnode=127.0.0.1:18434 [OCW] bitcoind -regtest -datadir=/path2/.bitcoin -wallet=/path2/wallet -rpcport=18336 -port=18436
With these aliases to call the bitcoin-cli:
alias BITVOW='bitcoin-cli -regtest -datadir=/path/.bitcoin1 -rpcport=18334' alias BITSOW='bitcoin-cli -regtest -datadir=/path/.bitcoin2 -rpcport=18335' alias BITOCW='bitcoin-cli -regtest -rpcport=18336'
So the two [VOW] and [SCW] connect to each other, no problem with that (they form a small 2 nodes network).
On the offline machine, I do this:
$ BITOCW getnewaddress 2Mz6H8BU3Gg4Nmrv1LyZPm4KcaKj8EjZXxL $ BITOCW dumpprivkey 2Mz6H8BU3Gg4Nmrv1LyZPm4KcaKj8EjZXxL cQgMpjZKVnYon1cfKaMuSpAsNQS3rw49BKUmmWV3n3UbEc1ywcQj
I want to send 500 BTC to 2Mz6H8BU3Gg4Nmrv1LyZPm4KcaKj8EjZXxL, so I generate funds to the "other" wallet, to pay my wallet, with a generate to validate the transaction:
$ BITSOW generate X $ BITSOW getbalance 550.00000000 $ BITSOW sendtoaddress 2Mz6H8BU3Gg4Nmrv1LyZPm4KcaKj8EjZXxL 500 33f30a3efd7d9b14be28b727f61884cba22bfd69a6fa1b1a475d384fbe2db5f1 $ BITSOW generate 1 $ BITSOW getnewaddress 2NF64kzg5R4wdA3bjJAtVyvKmvgbo1FJ8SM
I will use this address 2NF64kzg5R4wdA3bjJAtVyvKmvgbo1FJ8SM to receive funds from my main wallet with an offline signature.
I import the bitcoin address on a wallet-view wallet, and check the balance:
$ BITVOW importaddress 2Mz6H8BU3Gg4Nmrv1LyZPm4KcaKj8EjZXxL $ BITVOW getbalance "*" 0 true 500.00000000
Perfect. Now comes the part where I want to send thoses 500 back to 2NF64kzg5R4wdA3bjJAtVyvKmvgbo1FJ8SM using an offline transaction signing.
First let's identify the TX that can be used:
$ BITVOW listunspent 1 99999999 '["2Mz6H8BU3Gg4Nmrv1LyZPm4KcaKj8EjZXxL"]'
[
{
"txid":
"33f30a3efd7d9b14be28b727f61884cba22bfd69a6fa1b1a475d384fbe2db5f1",
"vout": 0,
"address": "2Mz6H8BU3Gg4Nmrv1LyZPm4KcaKj8EjZXxL",
"label": "",
"scriptPubKey": "a9144b17c1384ded51b51a60915fa56be6cc7d00212087",
"amount": 500.00000000,
"confirmations": 1,
"spendable": false,
"solvable": false,
"safe": true
}
]
$ BITVOW createrawtransaction '[{"txid":"33f30a3efd7d9b14be28b727f61884cba22bfd69a6fa1b1a475d384fbe2db5f1","vout":0,"scriptPubKey":"a9144b17c1384ded51b51a60915fa56be6cc7d00212087"}]' '{"2Mz6H8BU3Gg4Nmrv1LyZPm4KcaKj8EjZXxL":499.9999}'
This gets as a raw transaction (that I put in $RAW_TRANSACTION for example):
0200000001f1b52dbe4f385d471a1bfaa669fd2ba2cb8418f627b728be149b7dfd3e0af3330000000000ffffffff01f04c3ba40b00000017a9144b17c1384ded51b51a60915fa56be6cc7d0021208700000000
Then, on the offline machine, I want to sign this using the private key:
$ BITOCW signrawtransactionwithwallet $RAW_TRANSACTION
{
"hex": "0200000001f1b52dbe4f385d471a1bfaa669fd2ba2cb8418f627b728be149b7dfd3e0af3330000000000ffffffff01f04c3ba40b00000017a9144b17c1384ded51b51a60915fa56be6cc7d0021208700000000",
"complete": false,
"errors": [
{
"txid": "33f30a3efd7d9b14be28b727f61884cba22bfd69a6fa1b1a475d384fbe2db5f1",
"vout": 0,
"witness": [
],
"scriptSig": "",
"sequence": 4294967295,
"error": "Input not found or already spent"
}
]
}
Thank you very much for your help!
https://ift.tt/2JgN5G3
Comments
Post a Comment