AlphaWallet / AlphaWallet/alpha-wallet-android

Use ERC721Enumerable Interface if available

Abierto
#2,560 2 comentarios 0 reacciones 1 asignado Reclamado por @asif-finimble Ver en GitHub
Lenguaje dominante
Java
Estrellas
646
Forks
579
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.