专栏首页汇智网教程怎么计算以太坊交易确认数?

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

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

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

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

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

在结果中可以获取该交易所在区块编号:

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

然后就可以在随后的任意时刻使用eth_blockNumber调用来获取当前最新块信息,例如:

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

在结果中可以获取当前最新一个区块编号:

{
  "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()函数,就可以获取指定交易当前的确认数了:

getTxConfirms('0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b')
  .then(confirms => console.log(confirms))

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 铂链第3课 BOTTOS账户体系(密钥对/账号/钱包)的创建和管理

    通过前一课《铂链第2课 如何部署节点并加入BOTTOS测试网络?》的学习,同学们知道了如何搭建BOTTOS本地节点环境。 本课继续讲解BOTTOS账户体系中的...

    辉哥
  • 第三十四课 采用TRUFFLE框架如何创建自己的ERC721非同质化资产生物商店?

    《第三十三课 如何创建自己的ERC721非同质化资产生物商店?》讲解了如何使用REMIX本地环境搭建ERC721非同质化资产生物商店,因为合约相对复杂,采用s...

    辉哥
  • 以太坊RLP编码原理

      RLP(Recursive Length Prefix,递归的长度前缀)是一种编码规则,主要用来序列化/反序列化数据,可用于编码任意嵌套的二进制数组数据。

    JouyPub
  • 格格不入的数字货币:区块链世外桃源的终结者

    区块链为我们打开的是思考新的发展模式和发展方式大门的钥匙,借助区块链技术和区块链思维我们能够找到破解互联网行业痛点和问题的方式和方法。一些在互联网的逻辑和思维下...

    孟永辉
  • SAP HANA和区块链

    随着新技术如涨潮般的发展,从技术和商业的角度来看,这些技术通常会经历不同的成熟阶段。技术应用总是从试点项目转向新项目的方式,从理论到大胆的设想,再到颠覆性的创新...

    matinal
  • 铂链第4课 如何在BOTTOS实现最简智能合约"Hello World"?

    本文假设你已经完成了铂链本地节点部署和账户创建,没有完成的话,参考《铂链第3课 BOTTOS账户体系(密钥对/账号/钱包)的创建和管理》完成相关准备工作。 本...

    辉哥
  • 芯链第1课 如何在Ubuntu64位系统下搭建HPB开发环境

    本文详细讲解如何在Ubuntu 64位虚拟机上搭建HPB开发环境,并给出了遇到的各种问题的解决方法。主要包括: (1)下载HPB版本并编译; (2)创建账号...

    辉哥
  • 晓说区块链 | 比特币区块的产生速度为何被设定为10分钟?

    众所周知,比特币的block产生速度被设定为了10分钟,按着官方wiki所说,每一个节点需要一些时间来确认block(<10mins),但为什么是10分钟呢?和...

    维基链WICC
  • 第三十三课 如何创建自己的ERC721非同质化资产生物商店?

    从加密猫游戏开始,非同质化资产NFT的概念深入人心。不过现在社区中讲概念的多,真正落地发布自己ERC721资产的文章没有看到。辉哥这篇文章就来弥补下这个空缺。 ...

    辉哥
  • SAP Leonardo了解一下

    为什么?未来任何一个工业都会变成软件工业。盖茨是对的,因为任何工业任何行业自动化的程度会越来越高,最后你所处理的就是信息和知识。

    matinal

扫码关注云+社区

领取腾讯云代金券