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-replacebaleyes

$ 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

  1. 替換那個沒被確認的交易,加入 RBF 參數
  2. 重用那筆交易的 UTXO
  3. 增加手續費

手動使用 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": [
  ]
}

results matching ""

    No results matching ""