Как я могу узнать, сколько раз транзакция RSK была подтверждена в блокчейне RSK?

Было бы хорошо знать, сколько раз транзакция была подтверждена в блокчейне RSK, чтобы, когда один пользователь отправляет RIF в другой кошелек или, например, в обменный кошелек, мы могли видеть, сколько подтверждений произошло.

4 ответа

У транзакций нет счетчика подтверждений как такового, но блоки, частью которых они являются, действительно имеют счетчики подтверждений. Таким образом, решение заключается в «сравнении» номера блока конкретной транзакции.

Использование curl

Есть несколько способов сделать это, и самый простой из них - eth_getTransactionByHash Метод JSON-RPC:

      curl \
  -X POST \
  -H "Content-Type:application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0xf1ebb8076ad289fbaef4406bb0488be0c5605a58cfa2a6d11540b1f9b0d7ef98"],"id":1}' \
  https://public-node.testnet.rsk.co

Приведенная выше команда cURL предназначена для транзакции 0xf1ebb8076ad289fbaef4406bb0488be0c5605a58cfa2a6d11540b1f9b0d7ef98в тестовой сети RSK. Ответ скопирован ниже:

      {
   "result" : {
      "input" : "0xcbf8...(redacted)",
      "nonce" : "0xda62",
      "blockNumber" : "0x17fe5c",
      "gasPrice" : "0x3938700",
      "hash" : "0xf1ebb8076ad289fbaef4406bb0488be0c5605a58cfa2a6d11540b1f9b0d7ef98",
      "blockHash" : "0xede9aa2ff4939482186d4e6bd269582352a923db13ef90ad7def0d0dec17a239",
      "r" : "0x8c98a16250d157db1fb11e1304684943796710e3f1292a4fb60a0711692f2b8f",
      "value" : "0x0",
      "s" : "0x49cdc35f66dbea2ba88e3c52dc3f4c68498b844dd79eebafc326803e7163f7fc",
      "transactionIndex" : "0x0",
      "gas" : "0x17c65",
      "from" : "0xd761cc1ceb991631d431f6dde54f07828f2e61d2",
      "to" : "0x8bf2f24afbb9dbe4f2a54fd72748fc797bb91f81",
      "v" : "0x1c"
   },
   "jsonrpc" : "2.0",
   "id" : 1
}

Из "blockNumber" : "0x17fe5c" мы знаем, что номер этого конкретного блока 1572444.

Следующим шагом является сравнение этого номера блока этой транзакции с последним номером блока. Для этого нам нужно использовать другой запрос JSON-RPC.

      curl \
  -X POST \
  -H "Content-Type:application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
  https://public-node.testnet.rsk.co
      {
   "id" : 1,
   "result" : "0x180208",
   "jsonrpc" : "2.0"
}

Из "result" : "0x180208" мы знаем, что номер самого последнего блока 1573384.

      node -e "console.log(0x180208 - 0x17fe5c);"
940

Мы вычитаем номер блока транзакции из последнего номера блока, что дает ответ: 940 в данном случае - количество подтверждений.

Использование web3

Вы можете сделать то же самое с помощью web3 (другой хеш в примере, mainnet):

      web3.eth.getTransaction("0x9117f2fab63c89676b6538a317d0b9ec74cc4ac8f375c80c0f2b57223cbd6bb2")
      { hash: '0x9117f2fab63c89676b6538a317d0b9ec74cc4ac8f375c80c0f2b57223cbd6bb2',
  nonce: 118329,
  blockHash: '0x02c40394a7ed66bc50a0f1853220a395efd1e3cfebea5e0ff36dd5a0a12b2aeb',
  blockNumber: 3089723,
  transactionIndex: 1,
  from: '0x64DCC3BCbeaE8ce586CaBDef79104986bEAFcaD6',
  to: '0xBEd51D83CC4676660e3fc3819dfAD8238549B975',
  gas: 2000000,
  gasPrice: '60000000',
  value: '0',
  input: '0x5a686699000000000000000000000000000000000000000000000000032d5284006bf8730000000000000000000000000000000000000000000000000000000060214e2a000000000000000000000000504efcadfb020d6bbaec8a5c5bb21453719d0e00',
  v: '0x1b',
  r: '0x2faaa315b1b3cd7421db1dc5fa243ddfae906282872c2bd9207e7e2dfed8286e',
  s: '0x571fa5a28a48755bdf93aacd28d8d7d8986b1e2db0f5450e2355e7f3c91db30b' }

В этом случае вы получите 3089723 из blockNumber

Теперь вы запрашиваете текущий лучший блок:

      web3.eth.getBlockNumber(console.log)
      3089747

И, следовательно, у вас есть 3089747 - 3089723 = 24 подтверждения.

Вы также можете сделать это с помощью web3.js. Как функция

      const getTxConfirmations = (txHash) => Promise.all([
    web3.eth.getTransaction(txHash).then(tx => tx.blockNumber),
    web3.eth.getBlockNumber()
]).then(([blockNumber, currentBlockNumber]) => (currentBlockNumber - blockNumber))

А с консолью Truffle:

      truffle(develop)> web3.eth.getTransaction('0x7a28a121c41085ef52d449f64120dbc422ec70b4d324c076c8d89222cf7188c8').then(tx => tx.blockNumber)
1
truffle(develop)> web3.eth.getBlockNumber()
5
truffle(develop)> const getTxConfirmations = (txHash) => Promise.all([web3.eth.getTransaction(txHash).then(tx => tx.blockNumber), web3.eth.getBlockNumber()]).then(([blockNumber, currentBlockNumber]) => (currentBlockNumber - blockNumber))
undefined
truffle(develop)> getTxConfirmations('0x7a28a121c41085ef52d449f64120dbc422ec70b4d324c076c8d89222cf7188c8')
4

Я не уверен, что мой ответ будет лучшим, но это вариант, который я найду.

Я обычно ищу в explorer.rsk.co

  • Сначала вы можете проверить номер блока, на котором была добыта ваша транзакция.
  • После вы можете просмотреть последний добытый блок.
  • Разница между номерами блоков - это количество подтверждений

Надеюсь, он вам пригодится :)

Вы можете сделать то же самое с помощью web3 (другой хеш в примере, mainnet):

      web3.eth.getTransaction("0x9117f2fab63c89676b6538a317d0b9ec74cc4ac8f375c80c0f2b57223cbd6bb2")
      { hash: '0x9117f2fab63c89676b6538a317d0b9ec74cc4ac8f375c80c0f2b57223cbd6bb2',
  nonce: 118329,
  blockHash: '0x02c40394a7ed66bc50a0f1853220a395efd1e3cfebea5e0ff36dd5a0a12b2aeb',
  blockNumber: 3089723,
  transactionIndex: 1,
  from: '0x64DCC3BCbeaE8ce586CaBDef79104986bEAFcaD6',
  to: '0xBEd51D83CC4676660e3fc3819dfAD8238549B975',
  gas: 2000000,
  gasPrice: '60000000',
  value: '0',
  input: '0x5a686699000000000000000000000000000000000000000000000000032d5284006bf8730000000000000000000000000000000000000000000000000000000060214e2a000000000000000000000000504efcadfb020d6bbaec8a5c5bb21453719d0e00',
  v: '0x1b',
  r: '0x2faaa315b1b3cd7421db1dc5fa243ddfae906282872c2bd9207e7e2dfed8286e',
  s: '0x571fa5a28a48755bdf93aacd28d8d7d8986b1e2db0f5450e2355e7f3c91db30b' }

В этом случае вы получите 3089723 из blockNumber

Теперь вы запрашиваете текущий лучший блок:

      web3.eth.getBlockNumber(console.log)
      3089747

И, следовательно, у вас есть 3089747 - 3089723 = 24 подтверждения.

Другие вопросы по тегам