文档章节

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

wmzsonic
 wmzsonic
发布于 2017/09/10 08:17
字数 356
阅读 41
收藏 0
点赞 0
评论 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
粉丝 5
博文 52
码字总数 10664
作品 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
莱特币相对于比特币的前景如何?

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

未来财经
2017/11/28
0
0
支付宝非普通集成问题,支付宝官网没有此功能

公司正在做一个平台网站,平台有2个支付宝帐号,收款帐号和付款帐号。大概流程是这样的: 1.用户购买商品,通过支付宝将货款支付给收款帐号; 2.收款帐号确认收到货款,而后另外一个付款帐号...

合抱之木-生于毫末
2014/06/30
300
6
mybatis-spring事务处理机制分析

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

fifadxj
2016/11/10
414
0
比特币入门教程

原文出处:阮一峰 比特币(bitcoin)诞生于2008年的一篇论文。 一个署名为中本聪的人,提出了革命性的构想:让我们创造一种不受政府或其他任何人控制的货币!这个想法堪称疯狂:一串数字,背...

阮一峰
01/04
0
0
疯狂暴涨曾破 2 万美元的比特币,到底是怎么一回事?

(点击上方公众号,可快速关注) 2017 年对比特币来说,是极为疯狂的一年。年初,一枚比特币的价格不到 1,000 美元。在 11 月价格持续突破 8,000、9,000 和 10,000 美元大关。 在 12 月 17 日...

Python开发者
01/12
0
0
阮一峰:比特币入门教程

阮一峰:比特币入门教程 程序师2018-01-070 阅读 业界观察 比特币(bitcoin)诞生于2008年的一篇 论文 。 一个署名为中本聪的人,提出了革命性的构想:让我们创造一种不受政府或其他任何人控...

程序师
01/07
0
0
为什么说基于比特币现金的0确认是必要的?

关于0确认的讨论总会时不时的出现,问题总是围绕着:0确认真的安全吗?开发人员是否应该做些事情让它们变得更安全?这些0确认交易会不会造成双花从而骗取商家等等? 0确认是什么? 对于BCE和...

lpy411
06/21
0
0
北京云栖大会Tech Insight Workshop:《使用微服务框架快速构建一个分布式交易系统》篇

背景介绍 本篇是北京云栖大会Tech Insight Workshop金融云主体《使用SOFA来快速构建金融级分布式交易系统》中的一个组成部分,用来介绍如何通过SOFA Boot来快速构建一个分布式微服务系统,以...

chiehchu
2017/12/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Dubbo 源码解读 —— 可支持序列化及自定义扩展

一、概述 从源码中,我们可以看出来。目前,Dubbo 内部提供了 5 种序列化的方式,分别为 fastjson、Hessian2、Kryo、fst 及 Java原生支持的方式 。 针对不同的序列化方式,对比内容如下: 名...

Ryan-瑞恩
8分钟前
0
0
MySQL内存设置—— MySQL server has gone away

set global max_allowed_packet=268435456

一梦心草
17分钟前
0
0
推导式

列表、集合和字典推导式 列表推导式是Python最受喜爱的特性之一。它允许用户方便的从一个集合过滤元素,形成列表,在传递参数的过程中还可以修改元素。形式如下: [expr for val in collect...

火力全開
22分钟前
0
0
maven配置文件settings.xml详解

settings.xml有什么用? 如果在Eclipse中使用过Maven插件,想必会有这个经验:配置settings.xml文件的路径。 settings.xml文件是干什么的,为什么要配置它呢? 从settings.xml的文件名就可以...

浮躁的码农
27分钟前
0
0
MakeCode图形化编程语言学习笔记:micro:bit编程练习题[图]

MakeCode图形化编程语言学习笔记:micro:bit编程练习题[图]: 基础训练题: Q1:摇晃micro:bit编程板,随机出现7个小动物图标中的一个,并且前后相邻两次出现的小动物不重复。 注:七个小动物...

原创小博客
27分钟前
0
0
Redis 压力测试说明

Redis 压力测试说明 redis压力测试 2014-03-24 21:41:07| 分类: 默认分类 | 标签:redis |举报|字号 订阅 这几天对比测试mongodb、redis、pg的性能,主要是在消息队列、消息处理、用户经纬度...

舒文joven
28分钟前
0
0
拉姆达表达式 追加 条件判断 Expression>

public static class PredicateBuilder {   /// <summary>   /// 机关函数应用True时:单个AND有效,多个AND有效;单个OR无效,多个OR无效;混应时写在AND后的OR有效   /// </summary...

Lytf
40分钟前
0
0
【HAVENT原创】Spring Boot + Kafka 消息日志开发

最近因为部门需要将服务程序的各种日志发送给 Kafka 进行分析,所以写一个 Kafka 消息日志操作类,主要用来保存日志到 Kafka 以便查询。 一、pom.xml 增加配置 <!-- HH: 引入 kafka 模块 ...

HAVENT
41分钟前
0
0
7、Git命令解析

1、创建版本库 cd E:mkdir myRepositorypwdls -ah======git init 2、添加文件到仓库 添加git add readme.txt提交git commit -m "i wrote a readme file"【为什么Git添加...

丑陋的皮囊
41分钟前
0
0
ImageMagick批量压缩图片

#!/bin/shfor img in `find ./image -name "*.jpg"`; donewimg=`basename $img` convert -quality 75% $img ./ok/$newimg echo ./ok/$newimgdone...

dworry
41分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部