Bitcoin-Core

計算不屬於我的本地比特幣核心伺服器的外部地址的交易費用?

  • December 31, 2019

我正在使用第三方庫在本地比特幣核心伺服器之外創建的地址上進行交易。我有它的私鑰/公鑰。我可以使用“createrawtransaction”創建原始交易,還可以使用“signrawtransactionwithkey”和“sendrawtransaction”簽名和發送 txn,但是當我嘗試計算 txn 費用並使用“fundrawtransaction”或“walletcreatefundedpsbt”添加更改地址時,我收到“資金不足”的錯誤,但我的地址上有足夠的未使用的比特幣。那麼我們如何在為外部地址簽名和發送 txn 之前計算 txn 費用呢?

“fundrawtransaction”和“walletcreatefundedpsbt”是錢包RPC。他們從您的錢包中添加輸入並更改輸出,以針對交易的特定費用。

這些操作本質上需要相關的錢包。找零地址由發送者的錢包生成,輸入必須來自發送者的錢包。如果你沒有那個錢包,你就無法訪問該資訊。

除了在實際上可以訪問相關錢包的比特幣核心實例上執行這些 RPC 之外,我不知道給你什麼建議。

如果您完全手動執行操作,則費用是交易輸入和輸出之間的差額。如果您所擁有的交易的費用價值不理想,您將需要創建一個不同的交易,使用不同的輸入,或者通過自己將零錢添加回您自己的錢包。

那麼我們如何在為外部地址簽名和發送 txn 之前計算 txn 費用呢?

作為參考:

          P2PKH   P2SH-P2WPKH  P2WPKH
       -------------------------------
Input :  592 WU     364 WU     272 WU
Output :  136 WU     128 WU     124 WU

所有交易預設包含 40 WU。如果您的交易花費了 P2SH-P2WPKH 或 P2WPKH 輸出,您將需要額外添加 2 WU。要將重量單位轉換為虛擬大小,請除以 4 並向上取整。

  • 對於花費 P2PKH 輸入並具有 2 個 P2PKH 輸出的標準交易,權重為 40+592+136+136 = 904 WU。一個標準的 P2PKH 交易是 904/4 = 226 vB
  • 對於花費 P2SH-P2WPKH 輸入並具有 2 個 P2SH-P2WPKH 輸出的標準交易,權重為 40+2+364+128+128 = 662 WU。一個標準的 P2SH-P2WPKH 交易是 662/4 = 166 vB
  • 對於花費 P2WPKH 輸入並具有 2 個 P2WPKH 輸出的標準交易,權重為 40+2+272+124+124 = 562 WU。一個標準的 P2WPKH 交易是 562/4 = 141 vB

這些數量是根據大小為 4 WU/字節的預隔離數據和大小為 1 WU/字節的隔離見證數據計算的。最好假設簽名將是最大的(72 個字節),因為它們的大小可能相差 1 個字節。我們高估了 vB 的大小,因此 1 sat/vB 的費用就足夠了,以防簽名實際上大 1 個字節。

P2PKH 地址

   INPUT (592 WU)
Outpoint   (144 WU): [32-byte txhash] [4-byte txindex]
ScriptLength (4 WU): 0x6b
ScriptSig  (428 WU): OP_PUSHBYTES_72 [71-byte signature] SIGHASH_TYPE OP_PUSHBYTES_33 [33-byte pubkey]
Sequence    (16 WU): [4-byte value]

   OUTPUT (136 WU)
Value         (32 WU): [8-byte value]
ScriptLength   (4 WU): 0x19
ScriptPubKey (100 WU): OP_DUP OP_HASH160 OP_PUSHBYTES_20 [20-byte pubkey] OP_EQUALVERIFY OP_CHECKSIG

P2SH-P2WPKH 地址

   INPUT (364 WU)
Outpoint     (144 WU): [32-byte txhash] [4-byte txindex]
ScriptLength   (4 WU): 0x17
ScriptSig     (92 WU): OP_PUSHBYTES_22 [22-byte redeemscript]
Sequence      (16 WU): [4-byte value]
Witness Data (108 WU): NUM_PUSHES_2 DATA_PUSH_72 [71-byte signature] SIGHASH_TYPE DATA_PUSH_33 [33-byte pubkey]

   OUTPUT (128 WU)
Value        (32 WU): [8-byte value]
ScriptLength  (4 WU): 0x17
ScriptPubKey (92 WU): OP_HASH160 OP_PUSHBYTES_20 [20-byte scripthash] OP_EQUAL

P2WPKH 地址

   INPUT (272 WU)
Outpoint     (144 WU): [32-byte txhash] [4-byte txindex]
ScriptLength   (4 WU): 0x00
ScriptSig      (0 WU): N/A
Sequence      (16 WU): [4-byte value]
Witness Data (108 WU): NUM_PUSHES_2 DATA_PUSH_72 [71-byte signature] SIGHASH_TYPE DATA_PUSH_33 [33-byte pubkey]

   OUTPUT (124 WU)
Value        (32 WU): [8-byte value]
ScriptLength  (4 WU): 0x16
ScriptPubKey (88 WU): OP_0 OP_PUSHBYTES_20 [20-byte pubkeyhash]

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