es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo mostrar NFTs utilizando Nextjs y Solidity

Recientemente comencé a estudiar cómo desarrollar aplicaciones descentralizadas (dapps) basadas en web3 y estoy construyendo un mercado de NFT.
He seguido algunos tutoriales utilizando solidity y web3/ethers y logré mostrar los NFTs de la cartera conectada actualmente.

Mi siguiente paso es mostrar los NFTs de cualquier dirección determinada (no de la cartera conectada) como en una galería. Estoy intentando construir esta galería a partir del código que muestra los NFTs de la cartera conectada, pero no entiendo completamente el código, por lo que no sé cómo/o qué cambiar.

Esta es la función para cargar los NFTs en la página de la cartera conectada:

async function loadNFTs() {
    const web3Modal = new Web3Modal({
      network: "mainnet",
      cacheProvider: true,
    });

const connection = await web3Modal.connect()
const provider = new ethers.providers.Web3Provider(connection)
const signer = provider.getSigner()

const marketContract = new ethers.Contract(nftmarketaddress, Market.abi, signer)
const tokenContract = new ethers.Contract(nftaddress, NFT.abi, provider)
const data = await marketContract.fetchMyNFTs()

const items = await Promise.all(data.map(async i => {
  const tokenUri = await tokenContract.tokenURI(i.tokenId)
  const meta = await axios.get(tokenUri)
  let price = Web3.utils.fromWei(i.price.toString(), 'ether');
  let item = {
    price,
    tokenId: i.tokenId.toNumber(),
    seller: i.seller,
    owner: i.owner,
    image: meta.data.image,
  }
  return item
}))
setNfts(items)
}

“nfts” tendrá todos los metadatos de los NFTs.

La función “fetchMyNFTs”, definida en el contrato inteligente, es la siguiente:

function fetchMyNFTs() public view returns (MarketItem[] memory) {
    uint totalItemCount = _itemIds.current();
    uint itemCount = 0;
    uint currentIndex = 0;

for (uint i = 0; i < totalItemCount; i++) {
  if (idToMarketItem[i + 1].owner == msg.sender) {
    itemCount += 1;
  }
}

MarketItem[] memory items = new MarketItem[](itemCount);
for (uint i = 0; i < totalItemCount; i++) {
  if (idToMarketItem[i + 1].owner == msg.sender) {
    uint currentId = idToMarketItem[i + 1].itemId;
    MarketItem storage currentItem = idToMarketItem[currentId];
    items[currentIndex] = currentItem;
    currentIndex += 1;
  }
}

return items;
}

Entonces, supongo que tengo dos preguntas:
– ¿Siempre necesitamos utilizar el contrato inteligente al obtener los metadatos de los NFTs?
– ¿Cómo podemos mostrar los NFTs de cualquier cuenta determinada, como zapper.fi o context.app?

Entiendo que esta puede ser una pregunta muy amplia, pero cualquier ayuda o dirección hacia tutoriales sería genial!

¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Respuestas:

    1. ¿Siempre necesitamos usar el smart contract al recuperar los metadatos de los NFTs?

    Sí, por razones de seguridad y para garantizar la autenticidad de los NFTs, es necesario usar el smart contract para acceder a los metadatos de los NFTs.

    1. ¿Cómo podemos mostrar los NFTs de cualquier cuenta dada, como zapper.fi o context.app?

    Para mostrar los NFTs de cualquier cuenta dada, es necesario modificar el código para recuperar los NFTs de la cuenta dada en lugar de la billetera conectada actualmente. Esto se puede lograr modificando la función fetchMyNFTs en el smart contract para aceptar una dirección como argumento y devolver los NFTs que posee esa dirección. Por ejemplo:

    “` function fetchMyNFTs(address _address) public view returns (MarketItem[] memory) {
    uint totalItemCount = _itemIds.current();
    uint itemCount = 0;
    uint currentIndex = 0;

    for (uint i = 0; i < totalItemCount; i++) {
      if (idToMarketItem[i + 1].owner == _address) {
        itemCount += 1;
      }
    }
    
    MarketItem[] memory items = new MarketItem[](itemCount);
    for (uint i = 0; i < totalItemCount; i++) {
      if (idToMarketItem[i + 1].owner == _address) {
        uint currentId = idToMarketItem[i + 1].itemId;
        MarketItem storage currentItem = idToMarketItem[currentId];
        items[currentIndex] = currentItem;
        currentIndex += 1;
      }
    }
    
    return items;
    

    }
    “`

    Luego, en su función loadNFTs, sería necesario modificar la línea que recupera los NFTs para recuperar los NFTs de la dirección dada en lugar de la billetera conectada actualmente:

    const data = await marketContract.fetchMyNFTs(address);

    Puede obtener la dirección desde la entrada del usuario o desde una base de datos, dependiendo de cómo desee implementarlo.

    Una vez que tenga los metadatos de los NFT, puede mostrarlos en una galería o lista, similar a cómo se está haciendo para los NFT de la billetera conectada.

    Hay muchos tutoriales y recursos disponibles en línea para aprender más sobre cómo construir mercados NFT y aplicaciones web3. Algunas plataformas populares para aprender incluyen Ethereum.org, documentación de Solidity y OpenZeppelin. Además, hay comunidades y foros activos como Reddit y Discord donde los desarrolladores pueden discutir y compartir sus proyectos y obtener ayuda de otros en la comunidad.

Comments are closed.