Etherscan

如何通過 etherscan API 事務獲取 ERC721 令牌的 TokenID?例如 CryptoKitty TokenID

  • April 7, 2021

我希望能夠找到正在出售的 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。

您可以使用此 API: https ://api.etherscan.io/api?module=logs&action=getLogs&address=0x06012c8cf97bead5deae237070f9587f8e7a266d&topic0=0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4dfKeyefToken3Yourapi

它將提供所有最新交易。您可以根據您的特定交易對其進行排序。

享受 :)

我得到了使用 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

引用自:https://ethereum.stackexchange.com/questions/92712