5 - 2 用 RBF 重送交易
如果交易卡住了,我們可以用 RBF 重送,Bitcoin-Core 0.16 以前不是預設值, 0.16 以後每筆交易都是預設值
設定方法是在交易裡多放入一個 sequence
變數
$ rawtxhex=$(bitcoin-cli -named createrawtransaction inputs='''[ { "txid": "'$utxo_txid'", "vout": '$utxo_vout', "sequence": 1 } ]''' outputs='''{ "'$recipient'": 0.1, "'$changeaddress'": 0.9 }''')
sign, deliver
$ signedtx=$(bitcoin-cli -named signrawtransaction hexstring=$rawtxhex | jq -r '.hex')
$ bitcoin-cli -named sendrawtransaction hexstring=$signedtx
7218b78ad4853eb957b610033b8e1ef48b01d948e0ec5dbf79f12caebc2b17e2
現在看這筆交易可以看到 bit125-replacebale
是 yes
$ bitcoin-cli -named gettransaction txid=7218b78ad4853eb957b610033b8e1ef48b01d948e0ec5dbf79f12caebc2b17e2
{
"amount": -0.10000000,
"fee": 0.00000000,
"confirmations": 0,
"trusted": true,
"txid": "7218b78ad4853eb957b610033b8e1ef48b01d948e0ec5dbf79f12caebc2b17e2",
"walletconflicts": [
],
"time": 1491603320,
"timereceived": 1491603320,
"bip125-replaceable": "yes",
"details": [
{
"account": "",
"address": "n2eMqTT929pb1RDNuqEnxdaLau1rxy3efi",
"category": "send",
"amount": -0.10000000,
"vout": 0,
"fee": 0.00000000,
"abandoned": false
}
],
"hex": "02000000014e843e22cb8ee522fbf4d8a0967a733685d2ad92697e63f52ce41bec8f7c8ac0010000006b483045022100834731cd64efcc078d6c3e59cf0963599ffbc44722b7851b0404bb68e4a1fec70220759a0887ea791592c8119bbe61842eb3850a20cdf8433b4ba00d4ead752facfe012103456575f59a127a4c3e79c23f185899fa0a9ccd40162d05617fb112fa31bd14e5010000000280969800000000001976a914e7c1345fc8f87c68170b3aa798a956c2fe6a9eff88ac804a5d05000000001976a914c101d8c34de7b8d83b3f8d75416ffaea871d664988ac00000000"
}
直到這筆交易有確認之後,bit125-replaceble 才會是 false
我們應該相信 0-confirmation 交易嗎? 答案是永遠別相信,因為會有 double-spent ,雖然目前尚未有這種問題出現
但是為了交易安全我們要做到最強防護,也就是不要相信 0-confirmation
了解 RBF
RBF 是 BIP 125 的功能
原理是如果我們要替換某筆交易,我們就要發出 double-spent 交易,要在網路上製造 conflict,讓礦工打包手續費高的那個
什麼是 double-spent? 就是一筆錢我們可以花兩次,想像一下在比特幣出現之前的 e-cash 系統,我們不知道那些 e-coin 在某地
用過之後是不是又拿去別的地方用,比特幣則是用了「區塊鏈」來解決這個問題,
當一筆交易在經過多個確認之後,如果我們又重新發送該筆交易,礦工們將不會驗證該筆交易是有效的
因此當交易沒有確認之前,我們都不應該相信該筆交易
手動使用 RBF
- 替換那個沒被確認的交易,加入 RBF 參數
- 重用那筆交易的 UTXO
- 增加手續費
手動使用 RBF 在檢視交易可以看到
$ bitcoin-cli -named gettransaction txid=7218b78ad4853eb957b610033b8e1ef48b01d948e0ec5dbf79f12caebc2b17e2
{
"amount": -0.10000000,
"fee": 0.00000000,
"confirmations": -5,
"trusted": false,
"txid": "7218b78ad4853eb957b610033b8e1ef48b01d948e0ec5dbf79f12caebc2b17e2",
"walletconflicts": [
"959b0b0f4c8350e9038279dfe0f5ae7b165660cc1281e37bea08d0bd084edb39"
],
"time": 1491603320,
"timereceived": 1491603320,
"bip125-replaceable": "yes",
"details": [
{
"account": "",
"address": "n2eMqTT929pb1RDNuqEnxdaLau1rxy3efi",
"category": "send",
"amount": -0.10000000,
"vout": 0,
"fee": 0.00000000,
"abandoned": false
}
],
"hex": "02000000014e843e22cb8ee522fbf4d8a0967a733685d2ad92697e63f52ce41bec8f7c8ac0010000006b483045022100834731cd64efcc078d6c3e59cf0963599ffbc44722b7851b0404bb68e4a1fec70220759a0887ea791592c8119bbe61842eb3850a20cdf8433b4ba00d4ead752facfe012103456575f59a127a4c3e79c23f185899fa0a9ccd40162d05617fb112fa31bd14e5010000000280969800000000001976a914e7c1345fc8f87c68170b3aa798a956c2fe6a9eff88ac804a5d05000000001976a914c101d8c34de7b8d83b3f8d75416ffaea871d664988ac00000000"
}
walletconflicts
裡面有了值,表示這個交易與之前的交易有衝突,確認數也變成負數,
代表自從 double-spent 以來有了多少確認
新的交易則是
$ bitcoin-cli -named gettransaction txid=959b0b0f4c8350e9038279dfe0f5ae7b165660cc1281e37bea08d0bd084edb39
{
"amount": -0.10000000,
"fee": -0.01000000,
"confirmations": 5,
"blockhash": "00000000000006eeb468791e5ee0d86613c03acd871ef7d89c25fd28474754d5",
"blockindex": 20,
"blocktime": 1491603862,
"txid": "959b0b0f4c8350e9038279dfe0f5ae7b165660cc1281e37bea08d0bd084edb39",
"walletconflicts": [
"7218b78ad4853eb957b610033b8e1ef48b01d948e0ec5dbf79f12caebc2b17e2"
],
"time": 1491603673,
"timereceived": 1491603673,
"bip125-replaceable": "no",
"details": [
{
"account": "",
"address": "n2eMqTT929pb1RDNuqEnxdaLau1rxy3efi",
"category": "send",
"amount": -0.10000000,
"vout": 0,
"fee": -0.01000000,
"abandoned": false
}
],
"hex": "02000000014e843e22cb8ee522fbf4d8a0967a733685d2ad92697e63f52ce41bec8f7c8ac0010000006a47304402207fea4a11db8576257b9d9e104aa07cb3d3ae6a42e38dd7126111276ca5b45daa0220594a3553cc278c43fd015b35029d5b9596d4ac9f36d3d20fb1a8c9efface5c50012103456575f59a127a4c3e79c23f185899fa0a9ccd40162d05617fb112fa31bd14e5020000000280969800000000001976a914e7c1345fc8f87c68170b3aa798a956c2fe6a9eff88ac40084e05000000001976a914c101d8c34de7b8d83b3f8d75416ffaea871d664988ac00000000"
}
使用 Bumpfee
bitocind 提供一個簡便的方法直接將手續費提高,提高的值是在 bitcoin.conf 裡面決定的
$ bitcoin-cli -named bumpfee txid=4460175e8276d5a1935f6136e36868a0a3561532d44ddffb09b7cb878f76f927
{
"txid": "75208c5c8cbd83081a0085cd050fc7a4064d87c7d73176ad9a7e3aee5e70095f",
"origfee": 0.00000000,
"fee": 0.00022600,
"errors": [
]
}