AlphaWallet / AlphaWallet/alpha-wallet-android

Use ERC721Enumerable Interface if available

オープン
#2,560 コメント 2 件 リアクション 0 件 担当者 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 を短くまとめたダイジェスト。