Confirmaciones de Bitcoind durante la bifurcación

Estoy usando bitcoindla interfaz JSONRPC de para obtener información de transacción para mi billetera, específicamente, estoy ejecutando un pequeño script cada vez que se transmite un bloque (usando -blocknotify) que llama al getrawtransactionmétodo para obtener la transacción sin procesar analizada.

Entre los campos devueltos por getrawtransactiontenemos confirmations, pero ¿qué contiene este campo durante una bifurcación? Es decir. si uno llamara al getrawtransactionmétodo cuando hay dos bloques "actuales", ¿qué contendría este campo? (Tenga en cuenta que, en el caso de una bifurcación, uno de los dos bloques "actuales" puede incluir una transacción, mientras que el otro no).

Respuestas (2)

Toda la información proporcionada por Bitcoin Core se aplica solo a la cadena que actualmente cree que es la mejor cadena de bloques. Cualquier bloque que no sea parte de esa cadena no cuenta para el puntaje de confirmación.

Si está utilizando Bitcoin Core en una aplicación comercial, probablemente debería probar lo que sucede durante las bifurcaciones de varias longitudes. Puede hacer esto usando el modo de prueba de regresión (regtest) . Por ejemplo (no he probado esto):

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

De particular utilidad, probablemente desee configurar el -alertnotifycomando, que puede advertirle sobre bifurcaciones más largas y permitirle apagar automáticamente su sistema de procesamiento de pagos hasta que se resuelva la bifurcación o usted intervenga manualmente. También es posible que desee ver el listsinceblockRPC que puede funcionar en conjunto -blocknotifypara decirle qué ha cambiado en el bloque aceptado más recientemente.

si uno llamara al método getrawtransaction cuando hay dos bloques "actuales", ¿qué contendría este campo? (Tenga en cuenta que en el caso de una bifurcación, uno de los dos bloques "actuales" puede incluir una transacción, mientras que el otro no).

Esencialmente, su cliente hace un desempate para averiguar cuál considerará real. El bloque que llegó primero gana.

La parte importante de esto es que diferentes nodos en la red podrían haber visto los bloques en un orden diferente.

Esta es la razón por la cual las confirmaciones no necesariamente aumentan con el tiempo.