Bitcoind-Bestätigungen während des Forks

Ich verwende bitcoinddie JSONRPC-Schnittstelle von , um Transaktionsinformationen für meine Brieftasche abzurufen, insbesondere führe ich jedes Mal, wenn ein Block gesendet wird (mit -blocknotify), ein kleines Skript aus, das die getrawtransactionMethode zum Abrufen der geparsten Rohtransaktion aufruft.

Unter den von zurückgegebenen Feldern getrawtransactionhaben wir confirmations, aber was enthält dieses Feld während eines Forks? Dh. Wenn man die getrawtransactionMethode aufrufen würde, wenn es zwei "aktuelle" Blöcke gibt, was würde dieses Feld enthalten? (Denken Sie daran, dass im Falle eines Forks einer der beiden "aktuellen" Blöcke eine Transaktion enthalten kann, der andere jedoch nicht).

Antworten (2)

Alle von Bitcoin Core bereitgestellten Informationen gelten nur für die Kette, die es derzeit für die beste Blockchain hält. Alle Blöcke, die nicht Teil dieser Kette sind, werden nicht zum Bestätigungsergebnis gezählt.

Wenn Sie Bitcoin Core in einer Händleranwendung verwenden, sollten Sie wahrscheinlich testen, was während Forks unterschiedlicher Länge passiert. Sie können dies mit dem Regressionstest-Modus (regtest) tun . Zum Beispiel (ich habe das nicht getestet):

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

Von besonderem Nutzen werden Sie wahrscheinlich den -alertnotifyBefehl setzen wollen, der Sie vor längeren Forks warnen kann und es Ihnen ermöglicht, Ihr Zahlungsverarbeitungssystem automatisch herunterzufahren, bis der Fork behoben ist oder Sie manuell eingreifen. listsinceblockVielleicht möchten Sie sich auch den RPC ansehen , der Ihnen mitteilen kann, was sich -blocknotifyim zuletzt akzeptierten Block geändert hat.

Wenn man die getrawtransaction-Methode aufrufen würde, wenn es zwei "aktuelle" Blöcke gibt, was würde dieses Feld enthalten? (Beachten Sie, dass im Falle eines Forks einer der beiden "aktuellen" Blöcke eine Transaktion enthalten kann, der andere jedoch nicht).

Im Wesentlichen führt Ihr Kunde einen Tiebreaker durch, um herauszufinden, welchen er für echt hält. Der Block, der zuerst angekommen ist, gewinnt.

Der wichtige Teil dabei ist, dass verschiedene Knoten im Netzwerk die Blöcke möglicherweise in einer anderen Reihenfolge gesehen haben.

Aus diesem Grund steigen die Bestätigungen im Laufe der Zeit nicht unbedingt.