Как получить подтверждение транзакции с помощью JSON RPC

Как получить подтверждения блока для конкретной транзакции с помощью JSON RPC?

Это информация, которая приходит в транзакцию JSON в биткойнах, но, похоже, ее нет в эфириуме.

Что мне не хватает?

Ответы (2)

Когда вы отправляете транзакцию, вы получаете обратно хэш транзакции.

Используйте команду getTransactionByHash({хэш транзакции}) для получения сведений о транзакции. Ваш blockNumber не должен быть нулевым, если транзакция была добыта и включена в блок.

Вызов задокументирован в https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_gettransactionbyhash со следующим примером:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'

// Result
{
  "id":1,
  "jsonrpc":"2.0",
  "result": {
    "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b",
    "nonce":"0x",
    "blockHash": "0xbeab0aa2411b7ab17f30a99d3cb9c6ef2fc5426d6ad6fd9e2a26a6aed1d1055b",
    "blockNumber": "0x15df", // 5599
    "transactionIndex":  "0x1", // 1
    "from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1",
    "to":"0x85h43d8a49eeb85d32cf465507dd71d507100c1",
    "value":"0x7f110" // 520464
    "gas": "0x7f110" // 520464
    "gasPrice":"0x09184e72a000",
    "input":"0x603880600c6000396000f300603880600c6000396000f3603880600c6000396000f360",
  }
}

Затем вызовите eth_blockNumber ( https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_blocknumber ), чтобы получить текущую высоту блока. Ваше количество подтверждений равно результату eth_blockNumber за вычетом результата eth_getTransaction blockNumber.

Хорошо, но как это перевести на подтверждения? Как номер блока связан с подтверждениями транзакции?
Я понимаю, но как это связано с подтверждениями? @BokkyPooBah
См. eth_blockNumber и вычисление разницы в обновленном ответе.
Итак, когда транзакция впервые включается в блок, есть ли у нее одно подтверждение? Или подтверждения засчитываются только со следующего блока?

Ответ, данный BokkyPooBah, идеален, и что касается того, как это связано с подтверждениями, я поднял тот же вопрос здесь: как (текущий номер блока - номер блока данной транзакции) дает количество подтверждений? .

Вы также можете обратиться к комментариям к вопросу: Покрытие подтверждения транзакций в сети Ethereum . Идея состоит в том, что если ваша транзакция была включена в блок номер 100 (только предположим), а текущий номер блока равен 160, это означает, что 60 случайных майнеров приняли блок 100 как действительный и добавили в эту цепочку, и поэтому вы можете сказать, что у вас есть 60 подтверждений. Все дело в консенсусе.

Итак, когда транзакция впервые включается в блок, есть ли у нее одно подтверждение? Или подтверждения засчитываются со следующего блока?
@SlavaFominII Когда транзакция впервые включается в блок (скажем, X), это нельзя считать первым подтверждением. Насколько вам известно, я мог пытаться разорвать цепь. Если другой майнер размещает блок над X, то это является подтверждением того, что X может быть правильным, и вы можете сказать, что транзакция имеет одно подтверждение.