AlphaWallet / AlphaWallet/alpha-wallet-android

Use ERC721Enumerable Interface if available

Ouverte
#2,560 2 commentaires 0 réactions 1 personne assignée Réclamée par @asif-finimble Voir sur GitHub
Langage dominant
Java
Étoiles
646
Forks
579
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

- 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.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.