文档章节

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

wmzsonic
 wmzsonic
发布于 2017/09/10 08:17
字数 356
阅读 156
收藏 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
博文 68
码字总数 14337
作品 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
深入理解Plasma(三)Plasma MVP

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

深入浅出区块链
2018/11/03
0
0
使用OmniCore在Unix系统上构建USDT钱包

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

一叶行知
2018/09/20
0
0
如何使用编程语言如php来开发比特币?

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

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

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

HiBlock
2018/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

脚本配置java开发环境

@echo off&setlocal enabledelayedexpansion cls @echo "This script is used to registe envionment variables......" @echo. @echo. @echo. set var=%~dp0 set var=%var:~,-1% @echo "regi......

默克鱼
31分钟前
1
0
c++中友元函数理解与使用

在学习c++这一块,关于友元函数和友元类,感觉还是不好理解,但是井下心来,理解,需要把我一下几点。 首先讲友元函数。 (1)友元函数: 1)C++中引入友元函数,是为在该类中提供一个对外(除...

天王盖地虎626
今天
2
0
OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
808
11
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
5
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部