文档章节

如何通过getTransaction来确认交易成功

wmzsonic
 wmzsonic
发布于 2017/09/10 08:17
字数 356
阅读 82
收藏 0

当通过sendTransaction发出交易之后,transaction并没有立即上链,所以要先通过txpool.status.pending来看看如果大于0,说明你的结点中有pending的transaction。(或者通过eth.getBlock("pending")来查看你的交易是否在pending块中)

当然如果没有上链,这个交易是在你的结点中发出的,可以直接通过getTransaction来获取交易,返回的结果中blockHash为零,blockNumber为null:

{ blockHash: '0x0000000000000000000000000000000000000000000000000000000000000000',
  blockNumber: null,
  from: '0xdfb1b9b8693366eb9044ffd8c00058abc904558b',
  gas: 90000,
  gasPrice: ...,
  hash: '0x0b4f742149fc3018a168950b56786846da99675913dbc043971cbe25ac7792ac',
  input: '0x48656c6c6f20576f726c64',
  nonce: 2,
  to: null,
  transactionIndex: null,
  value: ...

但是他奶奶的,如果有一种情况,交易成功了,但是out of gas,之前的逻辑都是成功了,也上链了,但是交易却没有成功,我在转erc20币的时候遇到不少这种情况,这怎搞?

通过debug_traceTransaction来看看这笔交易有没有error。

首先你的结点rpc必须是开放debug的:

geth --rpc --rpcapi "eth,net,web3,debug" console

然后调用debug_traceTransaction:

curl localhost:8545 -X POST --header 'Content-type: application/json' --data '{"jsonrpc":"2.0", "method":"debug_traceTransaction", "params":["0x3684f071b34da1116282ee88a106a8f2a266d273ef7d8964957f65128fb58d77", {}], "id":1}'

结果类似这样:

{
  gas: 85301,
  returnValue: "",
  structLogs: [{
      depth: 1,
      error: "",
      gas: 162106,
      gasCost: 3,
      memory: null,
      op: "PUSH1",
      pc: 0,
      stack: [],
      storage: {}
  },
    /* snip */
  {
      depth: 1,
      error: "",
      gas: 100000,
      gasCost: 0,
      memory: ["0000000000000000000000000000000000000000000000000000000000000006", "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000060"],
      op: "STOP",
      pc: 120,
      stack: ["00000000000000000000000000000000000000000000000000000000d67cbec9"],
      storage: {
        0000000000000000000000000000000000000000000000000000000000000004: "8241fa522772837f0d05511f20caa6da1d5a3209000000000000000400000001",
        0000000000000000000000000000000000000000000000000000000000000006: "0000000000000000000000000000000000000000000000000000000000000001",
        f652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f: "00000000000000000000000002e816afc1b5c0f39852131959d946eb3b07b5ad"
      }
  }]

从structLogs中一个个看是否有error非null的存在,如果有说明实际是失败了

© 著作权归作者所有

共有 人打赏支持
wmzsonic
粉丝 6
博文 54
码字总数 10861
作品 0
南京
CTO(技术副总裁)
js 分页

<!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <link type="text/css" rel="stylesheet" href="css/Q.css" /> <link type="text/css" rel="stylesheet" ......

_______-
2016/08/31
1
0
财会行业遇见区块链 激碰出了哪些火花?

  区块链是一种会计技术。它关心的是资产所有权的转移,以及保存准确财务信息的分类帐。会计界广泛关注财务信息的衡量和交流,以及对信息的分析。很多专业都关注财产的权利和义务,或者计划...

it168网站
05/31
0
0
mybatis-spring事务处理机制分析

Spring官方并没有提供对MyBatis的集成方案,于是MyBatis项目组自己写了一个项目mybatis-spring专门用于在spring中使用MyBatis。 mybatis-spring的实现很大程度上依赖spring jdbc的事务管理,...

fifadxj
2016/11/10
414
0
莱特币相对于比特币的前景如何?

比特币是出现最早目前最热门和价格最高的虚拟货币,由中本聪提出依靠特定的算法、通过大量计算产生。将货币发行在开源软件以及建构其上的P2P网络,打造一个去中心化的支付系统。 莱特币Litec...

未来财经
2017/11/28
0
0
Fomo3D 游戏的第一轮是如何结束的

以太坊网络上备受瞩目的游戏 Fomo3D(Fomo3D:Long)其第一轮在昨天(北京时间 8 月 22 日下午 3 点左右)结束了。最终,地址为 0xa169... 的玩家获得了 10469.66 Eth 的奖金,其取款交易被记...

风静縠纹平
08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么Java大神,都在看Spring Boot和Spring Cloud的书?

如果你是一名Java开发人员,并且最近正打算学习Spring Boot和Spring Cloud框架并寻找一些关于它们的最好的书籍,那么,你今天就来对地方了。 本文,我们将讨论一些学习Spring Boot和Spring ...

Java小铺
20分钟前
7
0
springboot logback日志配置

springboot 如果不使用外部tomcat的话,日志是需要自己配置的,不然的话就只有控制台的日志,但是日志又是我们在项目上了生产环境,出问题时,检查问题的唯一途径,所以我们要配置详细的日志...

曾大大胖
20分钟前
2
0
Linux服务器集体篡改时间的方法

Red Hat 虚拟化课程RH318,中小型公司使用的话,感觉可以匹敌OpenStack。手头上有一个VMware的映像,RHEV 3.5版的,只能把系统时间调整到2016年才能使用。Red Hat的RHEV已经更新到4.1版,不过...

大别阿郎
21分钟前
1
0
Tomcat启动异常:java.lang.ClassNotFoundException

警告: Name = mysqlDataSource Property maxActive is not used in DBCP2, use maxTotal instead. maxTotal default value is 8. You have set value of "100" for "maxActive" property, wh......

hengbao5
22分钟前
1
0
GO错误的一些处理(defer,recover,panic)

package main import("fmt""errors")func main() {num := 10fmt.Printf("num的类型%T, num的值%v, num的地址%v\n", num, num, &num)num2 := new(int) //返回一个指针//num...

汤汤圆圆
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部