Bitcoind

分叉期間的比特幣確認

  • November 22, 2014

我正在使用bitcoindJSONRPC 介面來獲取我的錢包的交易資訊,具體來說,每次廣播(使用-blocknotify)一個塊時我都會執行一個小腳本,它呼叫該getrawtransaction方法來獲取已解析的原始交易。

getrawtransactionwe 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命令,該命令可以警告您分叉較長,並允許您自動關閉支付處理系統,直到分叉解決或您手動干預。您可能還想查看listsinceblockRPC,它可以與它一起工作,-blocknotify以告訴您最近接受的塊中發生了什麼變化。

如果在有兩個“目前”塊時呼叫 getrawtransaction 方法,該欄位將包含什麼?(請記住,在分叉的情況下,兩個“目前”塊中的一個可能包含交易,而另一個可能不包含)。

從本質上講,您的客戶會進行決勝局決定,以確定哪個是真實的。先到達的方塊獲勝。

關於這一點的重要部分是網路上的不同節點可能以不同的順序看到塊。

這就是為什麼確認不一定會隨著時間的推移而上升。

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