AlphaWallet / AlphaWallet/alpha-wallet-android

Use ERC721Enumerable Interface if available

未關閉
#2,560 2 則留言 0 個 reaction 已指派 1 人 已被 @asif-finimble 認領 在 GitHub 檢視
主要語言
Java
星號
646
分支
579
PR 合併指標
30 天內沒有已合併 PR

描述

- Create a new ERC721 type, ERC721_Enumerable (in ```ContractType```).
- Check if the ERC721 contract has the Enumerable interface (```TokenRepository```, find the correct value for ```INTERFACE_ERC721ENUMERABLE```). ```bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;```
- Label the ERC721 which we now know is an Enumerable as ERC721_Enumerable, when we do the ```determineCommonType()```
- ~~Inherit the ```ERC721Token``` class and override the ```updateBalance``` method to create the class.~~

Instead of needing to trawl event history we can fetch full TokenId balance with only two calls.

First calling the ```balanceOf(address)``` - which is already done by the default ERC721 balance update before ```updateBalance``` is called, then crawling the indices {0 -> balance count} up to the balance count by calling the contract function:

```uint256 tokenOfOwnerByIndex({wallet address}, index)```

This function returns the TokenId at the index eg.

Balance of NFT is 3 tokens, check tokenOfOwnerByIndex for 0,1,2 ->

0 -> 2556
1 -> 3456
2 -> 4431

Then we have all the TokenIds owned by the wallet without needing to trawl the event list, in only 1 extra call.

貢獻指南

這個儲存庫沒有索引到貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。