文档章节

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

wmzsonic
 wmzsonic
发布于 2017/09/10 08:17
字数 356
阅读 120
收藏 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
博文 62
码字总数 12044
作品 0
南京
CTO(技术副总裁)
私信 提问
使用OmniCore在Unix系统上构建USDT钱包

USDT是由Tether公司发行的基于比特币区块链的一种去中心化数字货币,作为当前数字货币市场的主流锚定货币之一,其官方承诺将严格遵守与美元1:1的比例准备保证金。在技术层面,USDT是基于Omn...

一叶行知
09/20
0
0
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
深入理解Plasma(三)Plasma MVP

这一系列文章将围绕以太坊的二层扩容框架 Plasma,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等。本篇文章主要介绍 Plasma 的一个最小实现 Plasma MVP(Minima Viable P...

深入浅出区块链
11/03
0
0
如何使用编程语言如php来开发比特币?

什么是比特币 当我们谈到比特币时,其实在不同的场景下有不同的指代。 比特币首先是一种数字加密货币,用户可以通过比特币网络进行 比特币转账或商品结算,就和传统的货币一样: 不过比特币是...

geek12345
09/27
0
0
深入理解Plasma(3):Plasma MVP

这一系列文章将围绕以太坊的二层扩容框架,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等。本篇文章主要介绍 Plasma 的一个最小实现 Plasma MVP(Minima Viable Plasma)...

HiBlock
10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS 安装PHP5和PHP7

安装PHP5 下载解压二进制包 [root@test-a src]# cd /usr/local/src/[root@test-a src]# wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2[root@test-a src]# tar jxvf php-5.6......

野雪球
55分钟前
3
0
windows上类似dnsmasq的软件Dual DHCP DNS Server

官网地址:http://dhcp-dns-server.sourceforge.net/官网定向的下载地址:https://sourceforge.net/projects/dhcp-dns-server/files/ 设置参考地址:http://blog.51cto.com/zhukeqiang/18264......

xueyuse0012
今天
3
0
LinkedHashMap源码解析

前言 HashMap中的元素时无序的,也就是说遍历HashMap的时候,顺序和放入的顺序是不一样的。 如果需要有序的Map,就可以采用LinkedHashMap. LinkedHashMap通过维护一个包含所有元素的双向链表,...

grace_233
今天
3
0
初识flask

文档 0.10.1版本 http://www.pythondoc.com/flask/index.html 1.0.2版本 https://dormousehole.readthedocs.io/en/latest/ 安装flask $ pip3 install flaskCollecting flask Downloading......

yimingkeji
昨天
5
0
Akka系统《sixteen》译

Actor是一个封装状态(state)和行为(behavior)的对象,它们只通过交换消息通信(放入收件人邮箱的邮件)。从某种意义上说,Actor是最严格的面向对象编程形式,但它更适合将他们视为人:在与Act...

woshixin
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部