使用web3获取token的交易记录

以太坊中的事件(Events)和日志(Logs)是两个比较让人困惑的概念,基本上算是同一个概念。
Solidity和web3.js中称为Events,以太坊黄皮书中称为Logs。以太坊通过Logs实现Events(事件)功能。智能合约代码通过Events将日志写入区块链中。
因此,我们可以通过以太坊的日志,查询token中某一地址的所有交易记录。
具体代码如下:

var Web3 = require('web3');
var request = require("request");
console.log(Web3.version);
var web3 = new Web3("https://mainnet.infura.io");
var abi = require("./rnt.json");
var address = "0xff603f43946a3a28df5e6a73172555d8c8b02386";
var contract = new web3.eth.Contract(abi,address); //合约实例
//查询合约名称
contract.methods.name().call().then(
        function(result){
            console.log(result);
        }
    );
//查询某一地址交易记录
contract.getPastEvents('Transfer', {
    filter: {_from: '0x6cc5f688a315f3dc28a7781717a9a798a59fda7b'},
    fromBlock: 230813,
    toBlock: 'latest'
}, (error, events) => { console.log(events); });

示例代码我是以RNT这个token为例,RNT的合约信息可见:
https://etherscan.io/address/0xff603f43946a3a28df5e6a73172555d8c8b02386

  • rnt.json是合约的abi信息
  • 0xff603f43946a3a28df5e6a73172555d8c8b02386地址是合约地址
  • 0x6cc5f688a315f3dc28a7781717a9a798a59fda7b地址是示例的交易地址
  • 230813是区块的高度,要查询所有交易记录区块高度应该是0

示例代码使用了web3的getPastEvents方法,方法详情见:
https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#getpastevents

代码运行:

 node tokenRecord.js

运行结果如下图:


运行结果

你可能感兴趣的:(使用web3获取token的交易记录)