如何将TRC20交易发送到一个地址

8

我正在使用Tron Web查询一个地址的交易记录,但是它不能返回转移的代币 TRC20 到该地址的交易记录。

这不起作用。 我想获取一个地址上所有 TRX、TRC10 和 TRC20 的交易记录。

我做错了什么或者应该如何操作呢?

以下是我的代码块:

  tronWeb.setDefaultBlock("latest");
  var result = await tronGrid.account.getTransactions(address, {
    only_confirmed: true,
    only_to: true,
    limit: 10
  });
  console.log(JSON.stringify(result));
})();
3个回答

12

经过大量的研究,我发现可以轻松地按时间间隔查询合约事件,以获取该合约地址上的交易,然后可以进行过滤,以便观察您正在观察的地址,因为您无法通过您的trongrid/tronweb实现获取Webhook或Websocket。

以下是我用来实现此目的的示例文件,并且即使对于具有不同合约地址的多个地址进行监控,它也非常有效。

注意:在我的实现中,调用此节点文件的是另一个文件,并且其他物流在另一个文件中处理,但是下面您将看到我如何查询指定合约发出的转移事件。

const TronWeb = require("tronweb");
const TronGrid = require("trongrid");

const tronWeb = new TronWeb({
  fullHost: "https://api.trongrid.io"
});
const tronGrid = new TronGrid(tronWeb);
const argv = require("minimist")(process.argv.slice(2));
var contractAddress = argv.address;
var min_timestamp = Number(argv.last_timestamp) + 1; //this is stored for the last time i ran the query
(async function() {
  tronWeb.setDefaultBlock("latest");
  tronWeb.setAddress("ANY TRON ADDRESS"); // maybe being the one making the query not necessarily the addresses for which you need the transactions

  var result = await tronGrid.contract.getEvents(contractAddress, {
    only_confirmed: true,
    event_name: "Transfer",
    limit: 100,
    min_timestamp: min_timestamp,
    order_by: "timestamp,asc"
  });
  result.data = result.data.map(tx => {
    tx.result.to_address = tronWeb.address.fromHex(tx.result.to); // this makes it easy for me to check the address at the other end
    return tx;
  });
  console.log(JSON.stringify(result));
})();

你可以自由定制传递给tronGrid.contract.getEvents方法的配置数据。根据你监控的合约上交易频率不同,你应该DYOR(自己去了解)以知道哪个间隔对你最好,你应该传递什么限制值。

有关详细信息,请参阅https://developers.tron.network/docs/trongridjs


有没有一种方法可以获取TRC20(例如USDT)的所有转账事件,而不仅仅是针对一个特定用户(地址)? - s k
1
这正是这个答案所解释的。tronGrid.contract.getEvents(contractAddress, {...})获取事件。 - Oluwatumbi

0

0
var request = require('request');
var contract = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"; //usdt
var wallet = "TQiC7LJUtnagUcwzcc6ULRmXiHipf4Tbou"; //publicKey
var url = "https://api.trongrid.io/v1/accounts/" + wallet + "/transactions/trc20?limit=100&contract_address=" + contract;
request({
    headers: {
        "TRON-PRO-API-KEY": '63d4cba8-xxx-ab8d4c91834e'
    },
    uri: url,
    method: 'GET'
}, function (err, res, body) {
        var transcol = JSON.parse(body).data;//list of last 100 wallet usdt transactions
        var sentArray = transcol.filter(function (el) {
            return el.to == wallet
        });//list of last recived usdt transactions in to wallet

        var lastReciveValue = (parseInt(sentArray[0].value) / 1000000);
        var lastReciveTransid = sentArray[0].transaction_id;

        console.log('last transaction: ' + lastReciveValue + ' USDT');
        console.log("https://tronscan.org/#/transaction/" + lastReciveTransid);
});
  • transcol:最新的100个与钱包相关的usdt交易列表
  • sentArray:最新的收到usdt交易列表,发送到钱包
  • limit=100:您可以删除此项以获取与钱包相关的所有交易,或将其更改为自定义值。
  • contract_address=:您可以删除它以获取所有类型货币的交易。
  • lastReciveValue:发送到钱包的最后一个usdt值
  • lastReciveTransid:发送usdt到钱包的最后一个交易ID

返回JSON对象示例:

"transaction_id":"b02049daa9a0de0e10187dfa4d1ce560c3e8dd23625e92d2adfcf242e1af5891",
"token_info":{
"symbol":"USDT",
"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"decimals":6,
"name":"Tether USD"
},
"block_timestamp":1689029211000,
"from":"TQiC7LJUtnagUcwzcc6ULRmXiHipf4Tbou",
"to":"TAiZ8qT2ggJDCRf6xutDKSnEjiCnFDm22K",
"type":"Transfer",
"value":"5000000"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接