Параметр listsinceblock: целевые подтверждения

listsinceblock helpвозвращает:

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

Я отправил монету на свой кошелек и через несколько секунд выполнил listsinceblock 1. Моя транзакция только что транслировалась, поэтому, как и ожидалось, у нее было 0 подтверждений. Обратите внимание на target-confirmationsпараметр выше, который должен быть больше 0, несмотря ни на что.

Итак, для моего теста я выполнил bitcoin-cli listsinceblock 0000000008eb5d53efbb39d2cb9f595e5bd567c295936de5c2282bbb8ef46cf0 1, который вернул:

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

Обратите внимание, что вышеуказанная транзакция имеет 0 подтверждений, однако предполагается, что listsinceblock работает после 1 подтверждения (что странно, поскольку я опрашиваю listsinceblock, чтобы получить новые транзакции, которые всегда не подтверждены, после подсказки Гэвина: как узнать, что есть новая транзакция? ).

Что мне здесь не хватает?

Ответы (1)

Согласно: https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list

У нас есть,

[target-confirmations] намеренно не влияет на список возвращаемых транзакций, а влияет только на возвращаемое значение lastblock.

Что это значит? Это означает, что lastblockзапись в вашем возвращенном объекте является последним блоком, который вы видите в блокчейне (поскольку это блок, который в настоящее время имеет ровно 1 подтверждение, как указано в аргументе, который вы передали). Запись lastblock— это единственное поле, на которое вы можете повлиять, изменив target-confirmationsаргумент.

Это означает, что если вы хотите, чтобы все транзакции имели хотя бы 1 подтверждение, вам необходимо отфильтровать этот список. Возникает вопрос, почему target-confirmationsаргумент не используется для этой фильтрации?

Это связано с тем, что способ работы функции в настоящее время допускает вариант использования, в котором вы можете постоянно вызывать listsinceblockзначение lastblock, которое было возвращено в вашем последнем вызове. Сделав это, ваш transactionsсписок будет содержать транзакции, которые достигают X или более подтверждений в блокчейне ровно в одном из этих вызовов (где X в данном случае равно 1).

Как автор патча, представившего эту команду, +1. Это правильный ответ. (См. мой комментарий на GitHub , разъясняющий это обоснование.) Смысл в том, чтобы позволить вашему приложению узнавать о транзакциях ниже вашей цели подтверждения (возможно, вы отображаете их как неподтвержденные для вашего пользователя), но все же замечать, когда они достигают этой цели позже.