以太坊交易确认数怎么计算?

以太坊和比特币同样,都有一个最长链的概念,所以也有一个交易确认数的概念。 当一个以太坊交易所在区块被新加入区块链时,该交易的确认数为1,以后每增长 一个区块,该交易的确认数加1。显然,一个以太坊交易的确认数越多,就意味着 该交易在区块链中埋的越深,就越不容易被篡改。那么,应该如何获取一个以太坊 交易的确认数?web

若是要快速掌握以太坊应用开发,推荐汇智网的以太坊智能合约与DApp开发入门, 基于在线编程环境完成一个投票DApp的实战开发,有问题还能够咨询助教。编程

要获取一个以太坊交易的确认数,须要使用两个RPC调用:json

首先利用eth_getTransactionReceipt调用获取指定的交易收据,例如,下面的命令获取交易0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238的收据:api

~$ curl -X POST --data '{ "jsonrpc":"2.0", "method":"eth_getTransactionReceipt", "params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"], "id":1}' http://localhost:8545 
复制代码

在结果中能够获取该交易所在区块编号:bash

{
"id":1,
"jsonrpc":"2.0",
"result": {
     ...
     blockNumber: '0xb', // 区块11
     ...
  }
}
复制代码

而后就能够在随后的任意时刻使用eth_blockNumber调用来获取当前最新块信息,例如:curl

~$ curl -X POST --data '{ "jsonrpc":"2.0", "method":"eth_blockNumber", "params":[], "id":83}' http://localhost:8545
复制代码

在结果中能够获取当前最新一个区块编号:async

{
  "id":83,
  "jsonrpc": "2.0",
  "result": "0xf" // 区块15
}
复制代码

用区块链中最后一个区块的编号,减去交易所在区块编号,再加1,就能够获得一个以太坊交易的确认数了:函数

交易确认数 = 最新区块号 - 交易所在区块号 + 1 = 15 - 11 + 1 = 5
复制代码

使用web3.js获取以太坊交易确认数

基于上面的原理,咱们很容易编写web3.js代码来获取以太坊交易确认数:区块链

async function getTxConfirms(txhash){
  const receipt = await web3.eth.getTransactionReceipt(txhash)
  //later...
  const latest =  await web3.eth.getBlockNumber()
  //confirms
  return latest - receipt.number + 1
}
复制代码

调用上面实现的getTxConfirms()函数,就能够获取指定交易当前的确认数了:ui

getTxConfirms('0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b')
  .then(confirms => console.log(confirms))
复制代码

原文连接:以太坊交易确认数如何获取 - 汇智网

相关文章
相关标签/搜索