如何通过getTransaction来确认交易成功
博客专区 > wmzsonic 的博客 > 博客详情
如何通过getTransaction来确认交易成功
wmzsonic 发表于3个月前
如何通过getTransaction来确认交易成功
  • 发表于 3个月前
  • 阅读 4
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 还要考虑是否存在out of gas的情况

当通过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的存在,如果有说明实际是失败了

共有 人打赏支持
粉丝 5
博文 28
码字总数 5678
×
wmzsonic
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: