Soy nuevo en blockchain.
Investigué un poco y estos son mis pasos para obtener una lista de NFT propiedad de cierta billetera con web3.js
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()); }Puedo obtener una lista de URI de token ERC721 con los métodos anteriores, pero el rendimiento es realmente bajo. Me pregunto cómo OpenSeas puede lograr eso con un rendimiento a la velocidad de la luz en la misma característica.
Como en la mayoría de los casos, almacenar o almacenar en caché los datos reduce el tiempo de carga.
Puede almacenar el valor de los objects en la base de datos (como MongoDB) y actualizarlo regularmente, si tiene una cantidad manejable de elementos de walletAddress , o solo para algunos elementos de alta prioridad.
Incluso puede suscribirse a registros de eventos (en su caso, el evento de Transfer ) en los contratos de token y no tener que sondear los cambios. (Tal vez la encuesta sea solo como una alternativa en caso de que falle su suscripción).
Para el resto de elementos de walletAddress (los de menor prioridad), puede almacenarlos en caché en un almacenamiento temporal (como Redis). Entonces, la primera carga será lenta (porque se cargará desde el recurso externo, como lo está haciendo su fragmento actual), y las otras cargas (hasta que expire el TTL) solo se cargarán desde el caché, sin presionar el recurso externo.
esto devolverá todos los tokens propiedad de esta billetera en una matriz sin tener que hacer un bucle:
await ERC721.methods.userOwnedTokens.call(walletAddress)¡buena suerte! espero que esto haya ayudado