如何查明 RSK 交易在 RSK 区块链上被确认的次数?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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 确认。

【讨论】:

以上是关于如何查明 RSK 交易在 RSK 区块链上被确认的次数?的主要内容,如果未能解决你的问题,请参考以下文章

当我在 RSK Regtest 上开发时,如何提高块号?

如何从 RSKj regtest 区块链节点的测试账户发送 web3 交易

如何在 RSK 上获取诸如 ERC20 代币符号之类的信息?

如何判断 RSK 上的智能合约是不是为 NFT?

如何通过 websockets 在本地 RSK 节点上订阅“newBlockHeaders”?

如何配置 truffle 以连接到 RSK 测试网公共节点?