Etherscan
如何通過 etherscan API 事務獲取 ERC721 令牌的 TokenID?例如 CryptoKitty TokenID
我希望能夠找到正在出售的 Crypto Kitty 的 TokenID。
etherscan API 返回的事務是這樣的:
{ blockNumber: '11711690', timeStamp: '1611403229', hash: '0x8f8d4e163e90c8db91672f443b0896f157d45fc32c3ccf74d131137eedbdd896', nonce: '4', blockHash: '0xbdd67604d6cc7844f151a38360753ad96fa234bd9cf199c6cf14317ebb4fd0ad', transactionIndex: '147', from: '0x65274ae6d0d4f88818b600c4b3435c868f5dad4c', to: '0xb1690c08e213a35ed9bab7b318de14420fb57d8c', value: '2527858781343926', gas: '164016', gasPrice: '43000000000', isError: '1', txreceipt_status: '0', input: '0x454a2ab3000000000000000000000000000000000000000000000000000000000005a5a3', contractAddress: '', cumulativeGasUsed: '9793966', gasUsed: '27036', confirmations: '5702' }
通過查看 etherscan 上的交易,我可以看到 TokenID 是 587058 - https://etherscan.io/tx/0xc7e09024a41841d6acb5933ab983a68bb4433a94e3167a2a893be3ea4387fad6
但是,這並沒有記錄在交易的任何地方……有什麼方法可以導出令牌 ID?或者,是否有另一種方法可以以程式方式/通過 API 找到令牌?我打算使用 TokenID 來獲取有關特定 Kitty 的更多資訊。
好簡單。
從事務雜湊中獲取 Transfer 事件。使用 tronscan api。
並從事件中找到令牌 ID。
它將提供所有最新交易。您可以根據您的特定交易對其進行排序。
享受 :)
我得到了使用 Web3 的解決方案。
完整程式碼:
var abi_ = [ {"inputs":[{"indexed":true,"name":"from","type":"address"}, {"indexed":true,"name":"to","type":"address"}, {"indexed":true,"name":"tokenId","type":"uint256"}], "name":"Transfer","type":"event"} ]; const Web3Eth = require('web3-eth') const API_KEY = "f3e2ba..." const URL = "wss://rinkeby.infura.io/ws/v3/" + API_KEY const web3Eth = new Web3Eth(Web3Eth.givenProvider || URL); const smartContractAddress = "0xab6a8c463d7fecd3ab65761769b7ccbb83ecb597" const contract = new web3Eth.Contract(abi_, smartContractAddress) contract.getPastEvents('Transfer', { fromBlock: 0, toBlock: 'latest' }, function(error, events){ if(!error){ for(var i=0;i<events.length;i++){ console.log(events[i].returnValues.tokenId) } } })
輸出:
0 1 2 3