<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ blockchain - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ blockchain - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Wed, 03 Jun 2026 21:24:05 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/tag/blockchain/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Cómo hacer un NFT en 14 líneas de código ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por: Nico [https://www.freecodecamp.org/news/author/nicoinmeatworld/]  Artículo original: How to Make an NFT in 14 Lines of Code [https://www.freecodecamp.org/news/how-to-make-an-nft/] Traducido y adaptado por: Michael Liendo [https://michaelliendo.com] Si eres un desarrollador interesado en el desarrollo de Blockchain, debes saber algo sobre los NFT o tokens no fungibles. Entonces, en este ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-hacer-una-nft-en-14-lineas-de-codigo/</link>
                <guid isPermaLink="false">6250dd339a87f708bdd1097e</guid>
                
                    <category>
                        <![CDATA[ blockchain ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Michael M. Liendo ]]>
                </dc:creator>
                <pubDate>Wed, 27 Apr 2022 02:04:05 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/04/Como-hacer-un-NFT-en.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong>Artículo original escrito por:</strong> <a href="https://www.freecodecamp.org/news/author/nicoinmeatworld/">Nico</a> <br><strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-make-an-nft/">How to Make an NFT in 14 Lines of Code</a><br><strong>Traducido y adaptado por:</strong> <a href="https://michaelliendo.com">Michael Liendo</a></p><p>Si eres un desarrollador interesado en el desarrollo de Blockchain, debes saber algo sobre los NFT o tokens no fungibles. Entonces, en este artículo, aprenderemos sobre la ingeniería detrás de ellos para que puedas comenzar a construir el tuyo propio.</p><p>Al final del proyecto, tendras tu propia billetera Ethereum con un nuevo NFT. Este tutorial es apto para principiantes y no requiere ningún conocimiento previo de la red Ethereum o contratos inteligentes.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-46.png" class="kg-image" alt="image-46" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/04/image-46.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2022/04/image-46.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-46.png 1112w" width="1112" height="884" loading="lazy"><figcaption>El contrato NFT solo tiene 14 líneas de código</figcaption></figure><h2 id="-qu-es-un-nft">¿Qué es un NFT?</h2><p><strong>NFT </strong>significa <strong>t</strong>oken <strong>n</strong>o-<strong>f</strong>ungible. Está cita de <a href="https://ethereum.org/en/nft/">ethereum.org</a> explica esto:</p><!--kg-card-begin: markdown--><blockquote>
<p>Los NFTs son tokens que podemos usar para representar la propiedad de varios articulos únicos.<br>
Ellos nos dejan tokenisar arte, coleccionables, incluso bienes raíces.<br>
Ellos pueden tener un solo dueño a la vez, y está asegurado por la blockchain de Ethereum.<br>
Nadie puede modificar el registro del dueño o copiar/pegar un nuevo NFT para que exista.</p>
</blockquote>
<!--kg-card-end: markdown--><h2 id="-qu-es-un-est-ndar-de-un-nft-o-erc-721">¿Qué es un estándar de un NFT o ERC-721?</h2><p>El ERC-721 es el estándar NFT más común. Si tu contrato inteligente implementa ciertos métodos API estandarizados, puede denominarse contrato de token no fungible ERC-721.</p><p>Estos métodos se especifican en el EIP-721. Los proyectos de código abierto como OpenZeppelin han simplificado el proceso de desarrollo al implementar los estándares ERC más comunes como una biblioteca reutilizable.</p><h2 id="-qu-es-minar-un-nft">¿Qué es minar un NFT?</h2><p>Al acuñar un NFT, publica un token único en una cadena de bloques. Este token es una instancia de su contrato inteligente.</p><p>Cada token tiene un tokenURI único, que contiene metadatos de su activo en un archivo JSON que se ajusta a cierto esquema. Los metadatos es donde almacena información sobre su NFT, como nombre, imagen, descripción y otros atributos.</p><p>Un ejemplo del archivo JSON para el "Esquema de metadatos ERC721" se ve así:</p><!--kg-card-begin: markdown--><pre><code class="language-js">{
	"attributes": [
		{
			"trait_type": "Shape",
			"value": "Circle"
		},
		{
			"trait_type": "Mood",
			"value": "Sad"
		}
	],
	"description": "A sad circle.",
	"image": "https://i.imgur.com/Qkw9N0A.jpeg",
	"name": "Sad Circle"
}
</code></pre>
<!--kg-card-end: markdown--><h2 id="-c-mo-almaceno-los-metadatos-de-mi-nft">¿Cómo almaceno los metadatos de mi NFT?</h2><p>Hay tres maneras para almacenar los metadatos del NFT</p><p>Primero, puedes almacenar la información en la cadena. En otras palabras, puedes ampliar su ERC-721 y almacenar los metadatos en la cadena de bloques, lo que puede resultar costoso.</p><p>El segundo método es usar IPFS. &nbsp;</p><p>Y la tercera forma es simplemente hacer que tu API devuelva el archivo JSON.</p><p>Por lo general, se prefieren los métodos primero y segundo, ya que no puedes modificar el archivo JSON subyacente. &nbsp;Para el alcance de este proyecto, optaremos por el tercer método.</p><h2 id="lo-que-estaremos-construyendo">Lo que estaremos construyendo</h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/04/nft.png" class="kg-image" alt="nft" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/04/nft.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/04/nft.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="1438" loading="lazy"></figure><p>En este tutorial, crearemos y acuñaremos nuestro propio NFT. &nbsp;Es apto para principiantes y no requiere ningún conocimiento previo de la red Ethereum o contratos inteligentes. &nbsp;Aún así, tener una buena comprensión de esos conceptos lo ayudará a comprender lo que sucede detrás de escena.</p><p>En un próximo tutorial, crearemos una aplicación web React completamente funcional donde puede mostrar y vender sus NFT.</p><p>Este proyecto está escrito intencionalmente con un código fácilmente comprensible y no es adecuado para su uso en producción.</p><h2 id="requisitos-previos">Requisitos Previos</h2><h3 id="metamask">MetaMask </h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/04/image.png" class="kg-image" alt="image" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/04/image.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/04/image.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="685" loading="lazy"></figure><p>Necesitamos una dirección de Ethereum para interactuar con nuestro contrato inteligente. &nbsp;Usaremos <a href="https://metamask.io/">Metamask</a> como nuestra billetera. &nbsp;Es una billetera virtual gratuita que administra sus direcciones de Ethereum. Lo necesitaremos para enviar y recibir transacciones (lea más sobre eso <a href="https://ethereum.org/en/developers/docs/transactions/">aquí</a>). &nbsp;Por ejemplo, acuñar un NFT es una transacción. </p><p>Descarga su extensión de Chrome y su aplicación móvil. &nbsp;Necesitaremos ambos ya que la extensión de Chrome no muestra sus NFT.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-1.png" class="kg-image" alt="image-1" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/04/image-1.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-1.png 680w" width="680" height="712" loading="lazy"></figure><p>Asegúrate de cambiar la red a "Ropsten Test Network" para fines de desarrollo. &nbsp;Necesitarás algo de Eth para cubrir las tarifas de implementación y acuñación de tu NFT. &nbsp;Dirígete a <a href="https://faucet.ropsten.be/">Ropsten Ethereum Faucet</a> e ingresa tu dirección. &nbsp;Pronto deberías ver algunos Eth de prueba en tu cuenta de Metamask.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-2.png" class="kg-image" alt="image-2" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/04/image-2.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-2.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="277" loading="lazy"></figure><h3 id="alchemy">Alchemy</h3><p>Para interactuar con la red Ethereum, deberás estar conectado a un nodo Ethereum. </p><p>Ejecutar tu propio Nodo y mantener la infraestructura es un proyecto en sí mismo. Afortunadamente, existen proveedores de nodos como servicio que alojan la infraestructura por usted. &nbsp;Hay muchas opciones como Infura, BlockDaemon y Moralis. &nbsp;Usaremos <a href="https://www.alchemy.com/">Alchemy</a> como nuestro proveedor de nodos. </p><p>Dirígete a su sitio web, crea una cuenta, elige Ethereum como tu red y crea tu aplicación. &nbsp;Elige Ropsten como tu red.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-3.png" class="kg-image" alt="image-3" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/04/image-3.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-3.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="506" loading="lazy"></figure><p>En su tablero, haz clic en "ver detalles" en su aplicación, luego haz clic en "ver clave". &nbsp;Guarda tu clave http en algún lugar, ya que la necesitaremos más adelante.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-4.png" class="kg-image" alt="image-4" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/04/image-4.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-4.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="321" loading="lazy"></figure><h3 id="nodejs-npm">NodeJS/NPM</h3><p>Nosotros usaremos Node.js para este proyecto. Si no lo tienes instalado sigue este <a href="https://www.freecodecamp.org/news/how-to-install-node-in-your-machines-macos-linux-windows/">simple tutorial de freeCodeCamp</a></p><h2 id="iniciamos-el-proyecto">Iniciamos el proyecto</h2><p>En tu terminal, ejecuta este comando para crear un nuevo directorio para tu proyecto</p><pre><code>mkdir nft-project
cd nft-project</code></pre><p>Ahora, haremos otro directorio, <code>ethereum/</code>, dentro de <code>nft-project/</code>, y inicializamos con <a href="https://hardhat.org/getting-started/">Hardhat</a>. Hardhat es una herramienta de desarrollo que facilita la implementación y prueba de su software Ethereum.</p><pre><code>mkdir ethereum
cd ethereum
npm init
</code></pre><p>Contesta las preguntas como quieras. &nbsp;Luego, ejecuta esos comandos para hacer un proyecto Hardhat:</p><pre><code>npm install --save-dev hardhat
npx hardhat</code></pre><p>Verás este mensaje:</p><pre><code>888    888                      888 888               888
888    888                      888 888               888
888    888                      888 888               888
8888888888  8888b.  888d888 .d88888 88888b.   8888b.  888888
888    888     "88b 888P"  d88" 888 888 "88b     "88b 888
888    888 .d888888 888    888  888 888  888 .d888888 888
888    888 888  888 888    Y88b 888 888  888 888  888 Y88b.
888    888 "Y888888 888     "Y88888 888  888 "Y888888  "Y888

Welcome to Hardhat v2.0.8

? What do you want to do? …
  Create a sample project
❯ Create an empty hardhat.config.js
  Quit</code></pre><p>Selecciona crear un hardhat.config.js vacío. &nbsp;Esto generará un archivo hardhat.config.js vacío que luego actualizaremos.</p><p>Para la aplicación web, usaremos <a href="https://nextjs.org/docs/getting-started">Next.js</a> para inicializar una aplicación web completamente funcional. &nbsp;Vuelve al directorio raíz <code>nft-project/</code> e inicializa una aplicación estándar de Next.js llamada web:</p><pre><code>cd ..
mkdir web
cd web
npx create-next-app@latest</code></pre><p>Tu proyecto ahora se ve así:</p><pre><code>nft-project/
	ethereum/
	web/</code></pre><p>¡Impresionante! &nbsp;Estamos listos para sumergirnos en la codificación real.</p><h2 id="c-mo-definir-nuestras-variables-env">Cómo definir nuestras variables .env</h2><p>¿Recuerdas la clave de Alchemy que tomamos de nuestro proyecto de prueba anterior? &nbsp;Lo usaremos junto con las claves públicas y privadas de nuestra cuenta Metamask para interactuar con la cadena de bloques.</p><p>Ejecuta los siguientes comandos, crea un archivo llamado <code>.env</code> dentro de tu directorio `/ethereum` instala <a href="https://www.npmjs.com/package/dotenv">dotenv</a>. &nbsp;Los usaremos más tarde</p><pre><code>cd ..
cd ethereum
touch .env
npm install dotenv --save</code></pre><p>Para tu archivo <code>.env</code>, ingresa la clave que has exportado de Alchemy y sigue estas instrucciones para obtener la clave privada de tu Metamask.</p><p>Aquí está tu archivo <code>.env</code>:</p><pre><code>DEV_API_URL = YOUR_ALCHEMY_KEY
PRIVATE_KEY = YOUR_METAMASK_PRIVATE_KEY
PUBLIC_KEY = YOUR_METAMASK_ADDRESS</code></pre><h2 id="el-contrato-inteligente-para-nft">El contrato inteligente para NFT</h2><p>Ve a la <code>ethereum/</code>carpeta y crea dos directorios más: contratos y scripts. <a href="https://hardhat.org/guides/project-setup.html">Un proyecto de casco simple </a>contiene esas carpetas.</p><ul><li><code>contracts/</code>contiene los archivos fuente de sus contratos</li><li><code>scripts/</code>contiene los scripts para implementar y acuñar nuestros NFT</li></ul><pre><code>mkdir contracts
mkdir scripts
</code></pre><p>Luego, instala OpenZeppelin. <a href="https://docs.openzeppelin.com/contracts/4.x/">OpenZeppelin Contract </a>es una biblioteca de código abierto con código reutilizable probado previamente para facilitar el desarrollo de contratos inteligentes.</p><pre><code>npm install @openzeppelin/contracts</code></pre><p>Finalmente, escribiremos el contrato inteligente para nuestro NFT. &nbsp;Navega a tu directorio de contratos y cree un archivo titulado <code>EmotionalShapes.sol</code>. &nbsp;Puedes nombrar tus NFT como mejor le parezca.</p><p>Los <code>.sol</code>La extensión hace referencia al lenguaje Solidity, que es el que usaremos para programar nuestro Smart Contract. &nbsp;Solo escribiremos 14 líneas de código con Solidity, así que no te preocupes si no lo has visto antes.</p><p>Comienza con <a href="https://ethereum.org/en/developers/docs/smart-contracts/languages/">este artículo </a>para obtener más información sobre los lenguajes de contratos inteligentes. También puedes saltar directamente a esta <a href="https://reference.auditless.com/cheatsheet/">hoja de trucos de </a>que contiene la sintaxis principal.</p><pre><code>cd contracts
touch EmotionalShapes.sol</code></pre><p>Este es nuestro contrato inteligente:</p><pre><code class="language-solidity">// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract EmotionalShapes is ERC721 {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIdCounter;

    constructor() ERC721("EmotionalShapes", "ESS") {}

    function _baseURI() internal pure override returns (string memory) {
        return "YOUR_API_URL/api/erc721/";
    }

    function mint(address to)
        public returns (uint256)
    {
        require(_tokenIdCounter.current() &lt; 3); 
        _tokenIdCounter.increment();
        _safeMint(to, _tokenIdCounter.current());

        return _tokenIdCounter.current();
    }
}
</code></pre><p>Repasemos el código y entendamos lo que está pasando. </p><ol><li>En la parte superior del archivo, especificamos qué módulo de OpenZeppelin importar. &nbsp;Necesitamos el contrato ERC721 ya que es la 'base' de nuestro contrato inteligente. &nbsp;Ya ha implementado todos los métodos especificados en EIP-721 para que podamos usarlo de manera segura.</li><li>Un contador es útil para generar identificadores incrementales para nuestros NFT. &nbsp;Nombramos la variable <code>_tokenIdCounter</code></li><li>En el constructor, inicializamos nuestro ERC721 con su nombre y su símbolo. &nbsp;Elegí EmotionalShapes y ESS.</li><li>Anulamos la función <code>_baseURI</code> predeterminada al devolver la nuestra. Llegaremos a construir eso en un segundo. &nbsp;En resumen, es la URL que se agregará como 'prefijo' a todos nuestros tokenURI. &nbsp;En el ejemplo anterior, los metadatos de nuestras NFT vivirán en un archivo JSON en <code><a href="https://e110-99-121-58-31.ngrok.io/api/erc721/">YOUR_API_URL/api/erc721/1</a></code>.</li><li>Implementamos la función 'mint'. Es la función que le permite publicar una instancia de este contrato inteligente en la cadena de bloques. &nbsp;Requiero el <code>_tokenIdCounter</code>variable sea inferior a 3, ya que solo crearé tres instancias de mi NFT. &nbsp;Puede eliminar eso si desea acuñar más.</li><li>Finalmente, dentro de la función mint, incrementamos el <code>_tokenIdCounter</code>variable por 1, por lo que nuestro id será 1, seguido de 2, seguido de 3. Luego, llamamos a la función proporcionada por OpenZeppelin <code>_safeMint</code>para publicar el token.</li></ol><p>No te preocupes si te sientes perdido. &nbsp;Puedes asistir a un taller dirigido por voluntarios de freeCodeCamp, donde invitamos a desarrolladores de niveles de habilidad similares para construir cosas juntos, incluido este proyecto NFT.</p><p>Los eventos son gratuitos y a distancia, por lo que puedes consultar cualquier duda directamente. Puedes registrarte <a href="https://equia.io">aquí </a>. Los asientos son limitados, por lo que se te invitará a los próximos eventos disponibles.</p><h2 id="c-mo-construir-los-metadatos-para-nuestro-nft">Cómo construir los metadatos para nuestro NFT</h2><p>Como se mencionó anteriormente, hay tres formas principales de almacenar su tokenURI. &nbsp;Construiremos un punto final de API simple que se resolverá en la información de nuestro NFT como JSON.</p><p>Nuestro proyecto Next.js nos brinda una forma práctica de desarrollar rutas de API. &nbsp;Ve a la <code>web/</code>carpeta, busque la <code>api/</code> carpeta dentro de la <code>pages/</code>carpeta, y hacer nuestra dinámica <code>[id].js</code>ruta en un <code>erc721/</code> carpeta (lee más sobre el enrutamiento <a href="https://www.freecodecamp.org/news/p/18513919-9e93-4ab3-9f52-2448aafa8835/develop%20API%20routes">aquí </a>):</p><pre><code class="language-javascript">// web/pages/api/erc721/[id].js

const metadata = {
  1: {
    attributes: [
      {
        trait_type: "Shape",
        value: "Circle",
      },
      {
        trait_type: "Mood",
        value: "Sad",
      },
    ],
    description: "A sad circle.",
    image: "https://i.imgur.com/Qkw9N0A.jpeg",
    name: "Sad Circle",
  },
  2: {
    attributes: [
      {
        trait_type: "Shape",
        value: "Rectangle",
      },
      {
        trait_type: "Mood",
        value: "Angry",
      },
    ],
    description: "An angry rectangle.",
    image: "https://i.imgur.com/SMneO6k.jpeg",
    name: "Angry Rectangle",
  },
  3: {
    attributes: [
      {
        trait_type: "Shape",
        value: "Triangle",
      },
      {
        trait_type: "Mood",
        value: "Bored",
      },
    ],
    description: "An bored triangle.",
    image: "https://i.imgur.com/hMVRFoJ.jpeg",
    name: "Bored Triangle",
  },
};

export default function handler(req, res) {
  res.status(200).json(metadata[req.query.id] || {});
}</code></pre><p>Por el bien de este proyecto, hice que el código fuera lo más comprensible posible. &nbsp;Esto definitivamente no es adecuado para la producción (no use una URL de Imgur para su NFT). &nbsp;Asegúrese de definir los metadatos para todos los NFT que pretende acuñar.</p><p>Ahora, vaya al directorio web e inicie su aplicación Next.js con este comando:</p><pre><code>npm run dev</code></pre><p>Tu aplicación debería estar ejecutándose en localhost:3000. Para asegurarse de que nuestro punto final funcione, vaya a <a href="http://localhost:3000/api/erc721/1">http://localhost:3000/api/erc721/1 </a>y debería resolverse con un objeto JSON de los metadatos de su primer NFT.</p><h2 id="c-mo-exponer-los-metadatos-para-nuestro-nft">Cómo exponer los metadatos para nuestro NFT</h2><p>Dado que tu aplicación está alojada localmente, otras aplicaciones no pueden acceder a ella. Usando una herramienta como <a href="https://ngrok.com/">ngrok </a>, podemos exponer nuestro host local a una URL de acceso público.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-39.png" class="kg-image" alt="imagen-39" width="600" height="400" loading="lazy"></figure><ol><li>Ve a <a href="https://ngrok.com/">ngrok.com </a>y complete el proceso de registro</li><li>Descomprimir el paquete descargado</li><li>En tu terminal, asegúrete de ingresar a la carpeta donde descomprimió su paquete ngrok</li><li>Sigue las instrucciones en tu tablero y ejecuta</li></ol><pre><code>./ngrok authtoken YOUR_AUTH_TOKEN</code></pre><p>5. Luego, ejecuta este comando para crear un túnel a tu aplicación web alojada en localhost:3000</p><pre><code>./ngrok http 3000</code></pre><p>6. ¡Ya casi llegas! &nbsp;En tu terminal, deberías ver algo como esto:</p><pre><code>ngrok by @inconshreveable                                                                            (Ctrl+C to quit)
                                                                                                                     
Session Status                online                                                                                 
Account                       YOUR_ACCOUNT (Plan: Free)                                                                       
Version                       2.3.40                                                                                 
Region                        United States (us)                                                                     
Web Interface                 http://127.0.0.1:4040                                                                  
Forwarding                    http://YOUR_NGROK_ADDRESS -&gt; http://localhost:3000                             
Forwarding                    https://YOUR_NGROK_ADDRESS -&gt; http://localhost:3000                             </code></pre><p>Ir a <code>YOUR_NGROK_ADDRESS/api/erc721/1</code>para asegurarse de que su terminal funcione correctamente.</p><h2 id="c-mo-implementar-nuestro-nft">Cómo implementar nuestro NFT</h2><p>Ahora que hemos hecho todo el trabajo preliminar (oof), volvamos a nuestro <code>ethereum/</code>carpeta y prepárate para implementar nuestro NFT.</p><p>Cambiar el <code>_baseURI</code>funcionar en su <code>ethreum/contracts/YOUR_NFT_NAME.sol</code>archivo <em> </em>para devolver su dirección ngrok.</p><pre><code>// ethereum/conrtacts/EmotionalShapes.sol

contract EmotionalShapes is ERC721 {
...
	function _baseURI() internal pure override returns (string memory) {
		return "https://YOUR_NGROK_ADDRESS/api/erc721/";
	}
...
}</code></pre><p>Para implementar nuestro NFT, primero necesitaremos <a href="https://hardhat.org/guides/compile-contracts.html">compilarlo usando Hardhat </a>. Para facilitar el proceso, instalaremos <a href="https://docs.ethers.io/v5/">ethers.js </a>.</p><pre><code>npm install @nomiclabs/hardhat-ethers --save-dev</code></pre><p>Actualicemos nuestro hardhat.config.js:</p><pre><code>require("dotenv").config();
require("@nomiclabs/hardhat-ethers");

module.exports = {
  solidity: "0.8.0",
  defaultNetwork: "ropsten",
  networks: {
    hardhat: {},
    ropsten: {
      url: process.env.DEV_API_URL,
      accounts: [`0x${process.env.PRIVATE_KEY}`],
    },
  },
};
</code></pre><p>Para obtener más información sobre el archivo de configuración del casco, consulte su <a href="https://hardhat.org/config/">documentación</a>. Hemos configurado la red ropsten con nuestra URL de Alchemy y le hemos proporcionado la clave privada de su cuenta metamask.</p><p>Finalmente, ejecuta:</p><pre><code>npx hardhat compile</code></pre><p>Esto permite que hardhat genere dos archivos por contrato compilado. &nbsp;Deberíamos ver una recién creada <code>artifacts/</code> carpeta que contiene sus contratos compilados en el <code>contracts/</code>carpeta. Para obtener más información sobre cómo funciona, lea <a href="https://hardhat.org/guides/compile-contracts.html">este tutorial </a>del equipo de Hardhat.</p><p>Ahora, escribamos un script para implementar finalmente nuestro NFT en la red de prueba. &nbsp;En tus <code>scripts/</code>carpeta, cree un archivo llamado <code>deploy.js</code>.</p><pre><code class="language-javascript">// ethereum/scripts/deploy.js

async function main() {
  const EmotionalShapes = await ethers.getContractFactory("EmotionalShapes");
  const emotionalShapes = await EmotionalShapes.deploy();

  console.log("EmotionalShapes deployed:", emotionalShapes.address);
}

main()
  .then(() =&gt; process.exit(0))
  .catch((error) =&gt; {
    console.error(error);
    process.exit(1);
  });
</code></pre><p>Este código está inspirado en <a href="https://hardhat.org/guides/deploying.html">el tutorial de implementación </a>.</p><blockquote>A <code>ContractFactory</code>en ethers.js es una abstracción utilizada para implementar nuevos contratos inteligentes, por lo que <code>EmotionalShapes</code>aquí hay una fábrica para instancias de nuestro contrato de token. &nbsp;Vocación <code>deploy()</code>en un <code>ContractFactory</code>comenzará la implementación y devolverá un <code>Promise</code>que se resuelve en un <code>Contract</code>. &nbsp;Este es el objeto que tiene un método para cada una de sus funciones de contrato inteligente.</blockquote><h3 id="c-mo-ver-el-nft-en-la-cadena-de-bloques">Cómo ver el NFT en la cadena de bloques</h3><p>Ejecute el script de implementación:</p><pre><code>node ./scripts/deploy.js</code></pre><p>Debes ver en tu terminal <code>EmotionalShapes deployed: SOME_ADDRESS</code>. &nbsp;Esta es la dirección donde se implementa su contrato inteligente en la red de prueba de ropsten.</p><p>Si te diriges a <code>https://ropsten.etherscan.io/address/SOME_ADDRESS</code>, debes ver tu NFT recién implementado. &nbsp;¡Sí! &nbsp;¡Lo hiciste!</p><h2 id="c-mo-acu-ar-su-nft">Cómo acuñar su NFT</h2><p>Ahora que has implementado su NFT, ¡es hora de acuñarlo tu mismo! &nbsp;Crear un nuevo archivo llamado <code>mint.js</code>en tu carpeta scripts/. &nbsp;Usaremos ethers.js para ayudarnos.</p><p>Comience agregando el <code>ethers.js</code>paquete:</p><pre><code>npm install --save ethers</code></pre><p>Luego, llena el <code>mint.js</code>expediente:</p><pre><code class="language-javascript">require("dotenv").config();
const { ethers } = require("ethers");

const contract = require("../artifacts/contracts/EmotionalShapes.sol/EmotionalShapes.json");
const contractInterface = contract.abi;

// https://docs.ethers.io/v5/api/providers
const provider = ethers.getDefaultProvider("ropsten", {
  alchemy: process.env.DEV_API_URL,
});

// https://docs.ethers.io/v5/api/signer/#Wallet
const wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider);

//https://docs.ethers.io/v5/api/contract/contract
const emotionalShapes = new ethers.Contract(
  YOUR_NFT_ADDRESS,
  contractInterface,
  wallet
);

const main = () =&gt; {
  emotionalShapes
    .mint(process.env.PUBLIC_KEY)
    .then((transaction) =&gt; console.log(transaction))
    .catch((e) =&gt; console.log("something went wrong", e));
};

main();
</code></pre><p>He dejado comentarios donde puedes encontrar más información sobre los diferentes métodos. &nbsp;Primero tomamos la interfaz del contrato (ABI). &nbsp;De ethereum.org:</p><blockquote>Una interfaz binaria de aplicación, o ABI, es la forma estándar de interactuar con <a href="https://ethereum.org/en/glossary/#contract-account">contratos </a>en el ecosistema Ethereum, tanto desde fuera de la cadena de bloques como para interacciones de contrato a contrato.</blockquote><p>Tu ABI define cómo otros interactúan con tu contrato. &nbsp;Luego, creamos nuestro proveedor con Alchemy (recuerda el nodo como servicio). Finalmente, inicializamos nuestra billetera con nuestra clave privada.</p><p>los <code>main()</code> función llama a la <code>mint</code>método en el contrato inteligente que acabábamos de implementar. &nbsp;Él <code>mint</code> método toma sólo un parámetro, <code>to</code>, que indican el receptor del token. &nbsp;Como estamos acuñando para nosotros mismos, ponemos la dirección pública de nuestra cuenta de Metamask.</p><p>Si todo va bien, deberías ver la transacción registrada en tu terminal. &nbsp;Toma el <code>hash</code> propiedad e ir a <code>https://ropsten.etherscan.io/tx/YOUR_HASH</code>. &nbsp;¡Deberías ver la transacción de acuñación allí!</p><h2 id="c-mo-ver-el-nft-en-su-billetera-metamask">Cómo ver el NFT en su billetera Metamask</h2><p>Debes comenzar descargando la versión móvil de Metamask. &nbsp;Luego, inicie sesión en su cuenta.</p><p>Deberías ver una pestaña de NFT junto con un botón para agregar NFT. &nbsp;Has clic en el botón e ingresa la dirección de tu contrato inteligente junto con las identificaciones que has acuñado. &nbsp;Si has seguido el tutorial, debes comenzar con una identificación de <code>1</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/10/IMG_0376.jpeg" class="kg-image" alt="IMG_0376" width="600" height="400" loading="lazy"><figcaption><font style="vertical-align: inherit;">Ver NFT en su billetera Metamask </font></figcaption></figure><h2 id="conclusi-n">Conclusión</h2><p>¡Felicidades! Acabas de acuñar tu propio NFT. &nbsp;En la siguiente parte del proyecto, construiremos la aplicación React front-end para interactuar con nuestro contrato. &nbsp;El objetivo final es crear una aplicación web completamente funcional en la que pueda vender sus propios NFT.</p><p>Por último, puedes <a href="https://equia.io">unirse a nuestros talleres en vivo </a>con voluntarios de freeCodeCamp donde construiremos este proyecto junto con otros desarrolladores.</p><p>Los eventos son gratuitos para todos en todo el mundo y las invitaciones se envían por orden de llegada. Si deseas dirigir los talleres, envíeme <a href="https://twitter.com/aly4alyssa">en Twitter </a>, ¡nos encantaría contar con usted! También organizamos otro tipo de eventos como ferias de contratación y encuentros sociales.</p><p>Déjame saber lo que quieres construir. &nbsp;Los NFT aún están en pañales y las ideas novedosas son más que bienvenidas. &nbsp;¡No puedo esperar a ver qué loca idea tienes!</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
