Bitcoind
分叉期間的比特幣確認
我正在使用
bitcoind
JSONRPC 介面來獲取我的錢包的交易資訊,具體來說,每次廣播(使用-blocknotify
)一個塊時我都會執行一個小腳本,它呼叫該getrawtransaction
方法來獲取已解析的原始交易。在
getrawtransaction
we have返回的欄位confirmations
中,這個欄位在分叉*期間包含什麼?*IE。getrawtransaction
如果在有兩個“目前”塊時呼叫該方法,該欄位將包含什麼?(請記住,在分叉的情況下,兩個“目前”塊中的一個可能包含交易,而另一個可能不包含)。
Bitcoin Core 提供的所有資訊僅適用於它目前認為是最好的區塊鏈的鏈。任何不屬於該鏈的塊都不計入確認分數。
如果您在商家應用程序中使用比特幣核心,您可能應該測試在不同長度的分叉期間會發生什麼。您可以使用回歸測試 (regtest) 模式來執行此操作。例如(我沒有測試過這個):
nodeA_options="-regtest -rpcpassword=foo" nodeB_options="-regtest -rpcpassword=foo -datadir=/tmp/regtest -port=9999 -rpcport=10000" ## start node A bitcoind -daemon $nodeA_options ## Create a block to get its coinbase in your wallet (unspendable for 100 blocks) bitcoin-cli $nodeA_options setgenerate true 1 ## start node B and connect it to node A; it'll sync the block bitcoind -daemon $nodeB_options -connect=localhost ## stop node A to break the connection bitcoin-cli $nodeA_options stop ## generate a block on node B bitcoin-cli $nodeB_options setgenerate true 1 ## Restart node A and generate a block bitcoind -daemon $nodeA_options bitcoin-cli $nodeA_options setgenerate true 1 ## Stop and restart node B with a connection to node A ## At this point, both nodes have a different block #2 so you can see ## what a fork looks like to the nodes bitcoin-cli $nodeB_options stop bitcoind -daemon $nodeB_options -connect=localhost
特別有用的是,您可能需要設置
-alertnotify
命令,該命令可以警告您分叉較長,並允許您自動關閉支付處理系統,直到分叉解決或您手動干預。您可能還想查看listsinceblock
RPC,它可以與它一起工作,-blocknotify
以告訴您最近接受的塊中發生了什麼變化。
如果在有兩個“目前”塊時呼叫 getrawtransaction 方法,該欄位將包含什麼?(請記住,在分叉的情況下,兩個“目前”塊中的一個可能包含交易,而另一個可能不包含)。
從本質上講,您的客戶會進行決勝局決定,以確定哪個是真實的。先到達的方塊獲勝。
關於這一點的重要部分是網路上的不同節點可能以不同的順序看到塊。
這就是為什麼確認不一定會隨著時間的推移而上升。