Parámetro ListSinceBlock: confirmaciones de destino

listsinceblock helpdevoluciones:

listsinceblock ( "blockhash" target-confirmations )

Get all transactions in blocks since block [blockhash], or all transactions if omitted

Arguments:
1. "blockhash"   (string, optional) The block hash to list transactions since
2. target-confirmations:    (numeric, optional) The confirmations required, must be 1 or more

Envié una moneda a mi billetera y unos segundos después ejecuté listsinceblock 1. Mi transacción se acaba de transmitir, por lo que tuvo 0 confirmaciones, como se esperaba. Tenga en cuenta el target-confirmationsparámetro anterior que debe ser mayor que 0 pase lo que pase.

Entonces, para mi prueba, ejecuté bitcoin-cli listsinceblock 0000000008eb5d53efbb39d2cb9f595e5bd567c295936de5c2282bbb8ef46cf0 1lo que devolvió:

{
    "transactions" : [
        {
            "account" : "",
            "address" : "mzE6DJMHPghYpVg4GCurMbxSSXBfW1KCFH",
            "category" : "receive",
            "amount" : 1.00000000,
            "confirmations" : 0,
            "txid" : "917248d57293a7fd3a88aa3a26026d2e4d6a1d4eef898519b20419f2339c265c",
            "walletconflicts" : [
            ],
            "time" : 1399200157,
            "timereceived" : 1399200157
        }
    ],
    "lastblock" : "0000000004ba22e9f8cea2e843b34f7eeaa2c3b7004ddcf19bfd8af0215fc0cc"
}

Tenga en cuenta que la transacción anterior tiene 0 confirmaciones, sin embargo, se supone que listsinceblock funciona más allá de 1 confirmación (lo cual es extraño, ya que estoy sondeando listsinceblockpara obtener nuevas transacciones que siempre están sin confirmar, después del consejo de Gavin sobre: ​​¿Cómo saber si hay una nueva transacción? ).

¿Que me estoy perdiendo aqui?

Respuestas (1)

Según: https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list

Tenemos,

[target-confirmations] intencionalmente no afecta la lista de transacciones devueltas, sino que solo afecta el valor de 'último bloque' devuelto.

¿Qué significa esto? Significa que la lastblockentrada en su objeto devuelto es el último bloque que puede ver en la cadena de bloques (ya que es el bloque que actualmente tiene exactamente 1 confirmación como lo indica el argumento que pasó). La lastblockentrada es el único campo que puede afectar cambiando el target-confirmationsargumento.

Esto significa que si desea todas las transacciones con al menos 1 confirmación, debe filtrar esta lista. Esto plantea la pregunta, ¿por qué no target-confirmationsse usa el argumento para hacer este filtrado?

Esto se debe a que la forma en que funciona la función actualmente permite un caso de uso en el que puede llamar constantemente listsinceblockcon el valor lastblockque se devolvió en su última llamada. Al hacer esto, su transactionslista contendrá transacciones que alcancen X o más confirmaciones en la cadena de bloques exactamente en una de esas llamadas (donde X en este caso es 1).

Como autor del parche que introdujo este comando, +1. Esta es la respuesta correcta. (Vea mi comentario sobre GitHub que aclara la razón). El punto es permitir que su aplicación se dé cuenta de las transacciones por debajo de su objetivo de confirmación (tal vez las muestre como no confirmadas para su usuario) pero aún notar cuando alcanzan ese objetivo más tarde.