Hi Guest

More contents, please log on!

Bitmere.com 区块链技术 Content

以太坊中ERC20交易的检测

李悔之2015
31 0 0
开发中遇到了token交易的检测问题,之前的做法是依靠交易中的input字段,如果有支持erc20标准的token交易,则input字段必然会有transfer函数的消息;如下图;根据input字段判断之后,在获取交易的Receipt,根据log字段进行进一步解析。后来发现这么搞会有问题,会遗漏erc20的交易。

    为什么会有遗漏呢,主要是因为构建交易的时候,to地址是一个合约,而且这个合约不是erc20的合约,而是一个普通合约,这个合约地址会去调用erc20的合约;这用导致input字段的函数不是transfer了,而是普通合约的函数,如下图;

    那应该如何检测erc20标准的token交易呢,根据erc20标准可知,有交易发生必然会触发Transfer事件,所以,我们去监测transfer事件,如何监测呢,这个在receipt的logs中,topics[0]都是事件的keccka的hash结果;topics[1]topics[2]分别是from和to;address是合约地址;data是交易额;rre

    最后记录一下erc20的标准吧;

    以太坊的出现使得大家可以很方便的以太坊上发行自己的代币,这些代币都遵循ERC20协议(现已有ERC23协议)。智能合约编程支持合约的继承(类似面向对象语言中类的继承和接口的实现),因此ERC20协议可以定义为一个接口。

  1. contract ERC20 {
  2.         function totalSupply() constant returns (uint totalSupply);         //获取总的发行量
  3.         function balanceOf(address _owner) constant returns (uint balance); //查询账户余额
  4.         function transfer(address _to, uint _value)returns(bool success); // 发送Token到某个地址(转账)
  5.         function transferFrom(address _from, address _to, uint _value) returns (bool success); //从地址from 发送token到to地址
  6.         function approve(address _spender, uint _value)returns(bool success);//允许_spender从你的账户转出token
  7.         function allowance(address _owner, address _spender) constant returns (uint remaining);//查询允许spender转移的Token数量
  8.         event Transfer(address indexed _from, address indexed _to, uint _value);//transfer方法调用时的通知事件
  9.         event Approval(address indexed _owner, address indexed _spender, uint _value); //approve方法调用时的通知事件
  10. }
Copy the Code
BitMere.com is Information release platform,just provides information storage space services.
The opinions expressed are solely those of the author,Does not constitute advice, please treat with caution.
You have to log in before you can reply Login | 立即注册

Points Rules

Write the first review

李悔之2015 初中生
  • Follow

    1

  • Following

    0

  • Articles

    13

币圈江左盟
Promoted