No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

15 Días
4 Hrs
4 Min
48 Seg

Implementación del ERC721 de Open Zeppellin

14/24
Recursos

Aportes 14

Preguntas 18

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

scripts/deploy.js

Script comentado

// deplaoy es una función asincrona
const deploy = async () => {
  // getSigners() trae la información que traemos desde nuestra llave privada
  // deployer es un objeto que nos permite desplegar contratos a la red que tengamos configurada
  const [deployer] = await ethers.getSigners();

  console.log("Deploying contract with the account:", deployer.address);

  // Definimos PlatziPunks en el contexto
  const PlatziPunks = await ethers.getContractFactory("PlatziPunks");
  // Instancia del contracto desplegado
  const deployed = await PlatziPunks.deploy();

  console.log("Platzi Punks is deployed at:", deployed.address);
};

// Llamando la función deploy()
deploy()
  .then(() => process.exit(0))
  .catch((error) => {
    console.log(error);
    process.exit(1);
  });

Tenia un error el cual me decia que la funcion getSigners no es una funcion

cambie el require de ethers a hardhat y funciono !!!

{ethers} = require("hardhat)

Un pequeño test para la instancia de Platzi Punks, lo que no pude lograr fue testear que la
instancia efectivamente sea de tipo ERC721

const { expect } = require("chai");
const { ethers } = require("hardhat");

describe("PlatziPunks", function () {
  it("Should init contract with name and symbol", async function () {
    const PlatziPunks = await ethers.getContractFactory("PlatziPunks");
    const platzi_punks = await PlatziPunks.deploy();
    await platzi_punks.deployed();

    expect(await platzi_punks.name()).to.equal("PlatziPunks");
    expect(await platzi_punks.symbol()).to.equal("PLPKS");
  });
});

Junio 2023:

Ahora para mostrar la dirección del contrato se tiene que hacer con target en vez de address

console.log("PlatziPunks deployed to:", deployed.target);

En caso les de un error HH702 a mi me funcionó borrar la cache escribiéndo ésto en la consola:

npx hardhat clean ; npx hardhat compile

Si te da undefined el address usa:

const [account] = await ethers.getSigners();
console.log(
  "Deploying contract with the account", 
  account.address
);

si alguien esta cursando este curso en 2023 hay ciertas actualizaciones al curso que deben hacer con respecto a esta clase, en la linea 11 donde se hace le console.log para indicar la direcion de la constante “deployed” en vez de hacer referencia al deployed.addres para obtener la direccion deben hacer deployed.target, pues la propiedad address que tiene el objeto “deploed” esta dentro de runner y hace referencia es la cuenta de despliega

0:35 Es muy importante que estos no puedan se Hackeados.

Creo que eso aplica en general en el desarrollo de soluciones de software y sistemas.

PlatziPunks.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

contract PlatziPunks is ERC721 {
  // El constructor necesita dos parámetros, el nombre y la sigla del NFT.
  constructor() ERC721("PlatziPunks", "PLPKS") {}
}

Hice una pequeña refactorización del script deploy.js:

(async function deploy() {
    const contractName = "PlatziPunks";
    try {
        const [account] = await ethers.getSigners();
        console.log("Deploying contract with the account:", account.address);
        const contractFactor = await ethers.getContractFactory(contractName);
        const contract = await contractFactory.deploy();
        console.log(`${contractName} has been deployed at: ${contract.address}`)
        process.exit(0);
    } catch (error) {
        console.log("Error: ",`An error occurred, the contract ${contractName} could not be deployed \n ${error.stack}`);
        process.exit(1);
    }
})()
Aca les dejo algo un poco mas actualizado: ```js const hre = require("hardhat"); const deploy = async () => { const [deployer] = await hre.ethers.getSigners(); console.log("Deploying contracts with the account:", deployer.address); const Mik3sPunks = await hre.ethers.getContractFactory("Mik3sPunks"); const deployedMik3sPunks = await Mik3sPunks.deploy(); const address = await deployedMik3sPunks.getAddress(); console.log("Mik3sPunks deployed to:", address); }; deploy() .then(() => { console.log("Deploy complete"); process.exit(0); }) .catch((error) => { console.error(error); process.exit(1); }); ```const hre = require("hardhat"); const deploy = async () => { const \[deployer] = await hre.ethers.getSigners(); console.log("Deploying contracts with the account:", deployer.address); const Mik3sPunks = await hre.ethers.getContractFactory("Mik3sPunks"); const deployedMik3sPunks = await Mik3sPunks.deploy(); const address = await deployedMik3sPunks.getAddress(); console.log("Mik3sPunks deployed to:", address);}; deploy() .then(() => { console.log("Deploy complete"); process.exit(0); }) .catch((*error*) => { console.error(*error*); process.exit(1); });

Para hacer el deploy tienen que abrir primero una terminal corriendo hardhat

npx hardhat node

Y en otra terminal correr:

npx hardhat run --network sepolia scripts/deploy.ts

Si les da error H700 revisen que dentro del contrato tambien tenga el mismo nombre.

Documentación para profundizar en los scripts usados en deploy.js 1.- process.exit(0) & process.exit(1) 2.- la función hh.ethers.getSigners() 3.- la función hh.ethers.getContractFactory('cotractFileName') 4.- el metodo X.getContractFactory('contracto').deploy()