No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

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 鈥渄eployed鈥 en vez de hacer referencia al deployed.addres para obtener la direccion deben hacer deployed.target, pues la propiedad address que tiene el objeto 鈥渄eploed鈥 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()