如何查明 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 区块链上被确认的次数?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 RSKj regtest 区块链节点的测试账户发送 web3 交易
如何在 RSK 上获取诸如 ERC20 代币符号之类的信息?