pet*_*169 8 node.js ethereum web3js
我是区块链新手。
我做了一些研究,以下是我使用 web3.js 获取某个钱包拥有的 NFT 列表的步骤
balance = ERC721.methods.balanceOf(walletAddress).call();
objects = [];
for (i = 0; i < balance; i++) {
tokens.push(await ERC721.methods.tokenOfOwnerByIndex(walletAddress, i).call());
}
for(i = 0; i < tokens.length; i++){
objects.push(await ERC721.methods.tokenURI(tokenIdList[i]).call());
}
Run Code Online (Sandbox Code Playgroud)
我可以使用上述方法获取 ERC721 令牌 URI 列表,但性能非常差。我想知道 OpenSeas 如何在相同功能上以光速性能实现这一目标。
与大多数情况一样,存储或缓存数据会缩短加载时间。
您可以将objects
值存储在数据库(例如 MongoDB)中并定期更新 - 如果您有可管理的walletAddress
项目数量,或者只是一些高优先级项目。
您甚至可以订阅Transfer
代币合约上的事件日志(在您的情况下为事件),而不必轮询更改。(也许轮询只是作为订阅失败时的后备措施。)
对于其余walletAddress
项目(优先级较低),您可以将它们缓存在临时存储(例如 Redis)中。因此,第一次加载会很慢(因为它将从外部资源加载 - 正如您当前的代码片段所做的那样),而其他加载(直到 TTL 过期)只会从缓存加载,而不是命中外部资源。
归档时间: |
|
查看次数: |
15453 次 |
最近记录: |