【问题标题】:How can I find out the number of times an RSK transaction has been confirmed on the RSK blockchain?如何查明 RSK 交易在 RSK 区块链上被确认的次数?
【发布时间】:2021-05-05 18:37:36
【问题描述】:

最好知道交易在 RSK 区块链上被确认了多少次,这样当一个用户将 RIF 发送到另一个钱包或交换钱包时,我们可以看到已经发生了多少次确认

【问题讨论】:

    标签: blockchain rpc rsk


    【解决方案1】:

    交易本身没有确认计数,但它们所属的区块确实有确认计数。因此,解决方案在于“比较”特定交易的区块编号

    使用卷曲

    有几种方法可以做到这一点, 最简单的方法是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 命令用于 RSK 测试网上的交易 0xf1ebb8076ad289fbaef4406bb0488be0c5605a58cfa2a6d11540b1f9b0d7ef98。 响应复制如下:

    {
       "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 来做同样的事情(示例中的不同哈希,主网):

    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' }
    

    在这种情况下,您会从blockNumber 获得3089723

    现在,您查询当前的最佳块:

    web3.eth.getBlockNumber(console.log)
    
    3089747
    

    因此,您有3089747 - 3089723 = 24 确认。

    【讨论】:

      【解决方案2】:

      您也可以使用 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
      

      【讨论】:

        【解决方案3】:

        我不确定我的回答是否是最好的,但这是一个选择。

        我一般在explorer.rsk.co搜索

        • 首先您可以检查您的交易被开采的区块号
        • 之后您可以查看最后开采的区块。
        • 区块号的区别在于确认的数量

        希望对你有用:)

        【讨论】:

          【解决方案4】:

          您可以使用 web3 执行相同的操作(示例中的哈希值不同,主网):

          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' }
          

          在这种情况下,您会从 blockNumber 获得 3089723

          现在,您查询当前最佳块:

          web3.eth.getBlockNumber(console.log)
          
          3089747
          

          因此,您有3089747 - 3089723 = 24 确认。

          【讨论】:

            猜你喜欢
            • 2021-10-04
            • 2021-09-01
            • 1970-01-01
            • 1970-01-01
            • 2021-05-27
            • 1970-01-01
            • 2013-02-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多