Bitcoin-Core

如何從沒有同步餘額的離線比特幣核心發送比特幣?

  • March 23, 2022

我正在設置一個冷錢包。如何從控制一些比特幣的比特幣核心錢包生成簽名的原始交易?

getnewaddressPS:我使用來自 bitcoin-qt GUI 的控制台生成了錢包

最簡單的方法是將您在離線比特幣核心客戶端上生成的地址導入線上完全同步的比特幣核心。命令是:bitcoin-cli importaddress <address>. 將此地址導入同步的比特幣核心機器的好處是,您可以將其用作僅限觀看的地址,這將允許您查看與其相關的所有 UTXO。然後,您可以使用該命令bitcoin-cli listunspent向您顯示所有 UTXO,然後您可以使用與相關地址相關的那些。

注:以下txids 及金額均為補編

現在,使用輸出中顯示的 UTXO,您可以使用命令listunspent在線上客戶端上創建交易。createrawtransaction我特意使用了兩個 UTXO 來展示如何為多個 UTXO 完成此操作,並展示如果輸入中的一個輸出點屬於舊地址而另一個輸出點屬於 P2SH-P2WPKH 地址時其他命令的外觀。

bitcoin-cli createrawtransaction '[{"txid":"27893ad827ddd94c442c561b1d3bf3d0f60571d6518e4941698e5778b25e1991","vout":0},{"txid":"776be22ff789a86283b247f99f7b2c6f7f53185cb765570bc65c6e6bb7ed8558","vout":1}]' '{"12WJykFa1hqJUJ65QbFB8dS5XNJaR22w2S":0.1}' 

這將為您提供以下十六進製字元串,您可以將其複製到離線機器上。

output: 020000000291195eb278578e6941498e51d67105f6d0f33b1d1b562c444cd9dd27d83a89270000000000ffffffff5885edb76b6e5cc60b5765b75c18537f6f2c7b9ff947b28362a889f72fe26b770100000000ffffffff0180969800000000001976a9141083323e89f0f734c448cd16d5a5513afb841b1788ac00000000

在離線機器上複製該輸出以簽署交易。Nowsignrawtransaction命令在 v0.17 中被棄用,並在 v0.18 之後被刪除。取而代之的是我們現在有signrawtransactionwithwalletand signrawtransactionwithkey。當您想使用屬於您的比特幣核心錢包的密鑰簽署交易時,您將使用前者,而當您想通過將私鑰與命令一起傳遞來使用不在您錢包中的密鑰簽​​署交易時,您將使用後者。

由於您的地址是從錢包中的密鑰生成的,我們將使用第一個命令。複製createrawtransaction我們在線上客戶端上獲得的命令輸出後,我們還需要提供sciptPubKeyand redeemScript。這樣做是為了讓離線客戶端知道什麼是外點的鎖定腳本以及它需要使用哪個密鑰,因為它無權訪問事務(因為它是離線的)。

現在,使用命令:

bitcoin-cli signrawtransactionwithwallet "020000000291195eb278578e6941498e51d67105f6d0f33b1d1b562c444cd9dd27d83a89270000000000ffffffff5885edb76b6e5cc60b5765b75c18537f6f2c7b9ff947b28362a889f72fe26b770100000000ffffffff0180969800000000001976a9141083323e89f0f734c448cd16d5a5513afb841b1788ac00000000" 
'[{"txid":"27893ad827ddd94c442c561b1d3bf3d0f60571d6518e4941698e5778b25e1991","vout":0,"scriptPubKey":"76a914623ff66fb88ff802fe1b8eaff666ba52307eecb088ac","amount":0.09},
{"txid":"776be22ff789a86283b247f99f7b2c6f7f53185cb765570bc65c6e6bb7ed8558","vout":1, "scriptPubKey":"a914de7dad83bb2d6e9638d347dcb3c53fe238773c9387","redeemScript":"0014df7bcc159ade813e6bd6290d97ed0bc8987dc084", "amount":0.011}]' 
"ALL"

這會給你一個簽名的交易作為輸出。讓我們稱之為hexoutput。有幾點需要注意。如果您密切注意,您會看到輸入中使用的第二個 outpoint 包含redeemScript. 這是因為它屬於 P2SH-P2WPKH 事務,因此您需要在欄位redeemScript旁邊提供下一個。scriptPubKey有關更多資訊,您可以參考此處的文件。

現在將其複製hexoutput到您的線上比特幣核心客戶端並使用以下命令通過網路中繼它。

bitcoin-cli sendrawtransaction hexoutput

這將為您提供txid一筆交易作為輸出,您可以使用它來監控您的交易。

引用自:https://bitcoin.stackexchange.com/questions/89962