Skip to content

Pokemon Factory: contrato inteligente de Ethereum para generar Pokemones, con sus habilidades, tipos y debilidades. Desarrollado mediante el lenguaje Solidity.

Notifications You must be signed in to change notification settings

tomkat-cr/solidity-eth-challenge

 
 

Repository files navigation

solidity-eth-challenge

Pokemon Factory Smart Contract

Mediante el lenguaje Solidity, crear un contrato inteligente de Ethereum para generar Pokemones, con sus habilidades, tipos y debilidades.

Dedicatoria

Este reto se lo dedico a mi hermano Luis Enrique Ramirez (QEPD), el niño eterno, quien fue alto fan de la saga, y me enseñó el término Entrenamiento Pokemón. Su Pokemón favorito siempre fué Pikachu.

Pikachu

Recursos

Estos recursos suministran datos para crear los Pokemones en el contrato inteligente.

Para los datos tipo (_type) y debilidad (_weakness) en cada Pokemón, utilizar los valores numéricos de la sigiente tabla:

  0 = No Weakness
  1 = Normal
  2 = Fire
  3 = Water
  4 = Grass
  5 = Electric
  6 = Ice
  7 = Fighting
  8 = Poison
  9 = Ground
 10 = Flying
 11 = Psychic
 12 = Bug
 13 = Rock
 14 = Ghost
 15 = Dark
 16 = Dragon
 17 = Steel
 18 = Fairy

Retos

  1. Hacer el curso de Desarrollo de Smart Contracts de Platzi
  2. Hacer fork del repositorio original
  3. Analizar bien los requerimientos
  4. Crear estructura de habilidades
  5. Crear tipos de pokemones con enum
  6. Agregar habilidades, debilidades y tipo a las variables de estado Pokemon
  7. Investigar sobre events y agregar el event al crear los Pokemones
  8. Investigar sobre require y agregar validaciones al crear los Pokemones
  9. Investigar cómo eliminar elementos de arrays
  10. Verificar si es posible hacer return de estructuras
  11. Si no es posible hacer return de estructuras, verificar return de multiples valores
  12. Traer los archivos locales a Remix con el remixd daemon
  13. Cargar el contrato en Remix
  14. Compilar y hacer Deploy del contrato en Remix
  15. Cargar el primer Pokemón en el contrato
  16. Deployment en una Testnet

Cargar el primer Pokemón

  • Cargar el contrato en Remix.
  • Ir a la pestaña SOLIDITY COMPILER y hacer clic en el botón Compile PokemonFactory.sol.
  • Ir a la pestaña DEPLOY & RUN TRANSACTIONS y hacer clic en el botón Deploy.
  • Bajar a la sección Deployed Contracts, abrir el elemento POKEMONFACTORY AT ....
  • Buscar el elemento createPokemon y abrirlo.
  • Especificar los siguientes datos:
  • Hacer clic en el botón Transact.
  • En la franja inferior derecha de la pantalla, hacer clic en el botón Debug, abrirlo haciendo clic en / y verificar la información de la transacción.
  • Enjoy!

Deployment en una Testnet

  • Seguir las instrucciones de la clase de Deploy Cómo desplegar nuestro contrato en Ropsten en el curso Desarrollo de Smart Contracts de Platzi.
  • Básicamente se resume a:
    • Crear una Wallet en Metamask.
    • Crear una cuenta en alguna Testnet:
    • Copiar y pegar la direccion de la Wallet de Metamask en la cuenta de la Faucet.
    • Esperar los fondos.
    • Compilar el contrato en Remix (se puede hacer presionando Ctrl-S u Option-S).
    • Conectar Remix con la Wallet. En este blog de Paul McAviney hay unas instrucciones interesantes para realizar este paso en una red Ropsten, y en este otro enlace para hacerlo en Celo.
    • Confirmar la conexión de Remix en la Wallet Metamask.
    • Hacer clic en el botoón Deploy.
    • Confirmar la operación de Despliegue en la Wallet Metamask.
    • El resto del seguimiento de las transacciones se puede hacer en Metamask.
    • Alli estarán los enlaces para ver el contrato en Etherscan. Al entrar en el contrato se podrá ver sus datos y la transacción que le dió origen.
    • Si se desea poder ver el código fuente del contrato en Etherscan, es necesario:
      • Anotar la versión exacta que se usó en la compilación del contrato en Remix (pestaña SOLIDITY COMPILER, sección COMPILER). En mi caso fué la 0.8.7+commit.e28d00a7.
      • Anotar la Licencia utilizada en el contrato. En mi caso fué GPL-3.0 porque puse la línea // SPDX-License-Identifier: GPL-3.0 al principio del archivo PokemonFactory.sol.
      • Ir al registro del contrato en Etherscan.
      • Seguir las instrucciones para confirmar el byte code.
      • Si todos los datos concuerdan (version del compilador, licencia y código fuente exacto que se usó), al cabo de un rato se podrá ver el código fuente en Etherscan.
    • Para ejecutar las funciones públicas del contrato, hacer clic en la pestaña Contract y luego clic en el botón Write Contract.
    • Para consultar las variables de estado públicas del contrato, hacer clic en la pestaña Contract y luego clic en el botón Read Contract.

La versión post-Merge fué desplegada en en la Goerli Testnet Network. Lo puedes ver haciendo clic aquí.

La primera versión de este contrato fué desplegada en en la Rosten Testnet Network. Lo puedes ver haciendo clic aquí.

Actualizacion de Diciembre 2022

Luego implementé el deploy (despliegue) con Hardhat.

Algunos comandos de Hardhat:

npx hardhat help
npx hardhat test
REPORT_GAS=true npx hardhat test
npx hardhat node
npx hardhat run scripts/deploy.js

Inicializando el proyecto con Hardhat

Para agregar Hardhat a un proyecto web3 que no lo tenga:

Instalar dependencias e inicializar el proyecto Hardhat

npm init
npm install -D hardhat dotenv
npx hardhat

Crear el archivo hardhat.config.js

En el directorio raíz del proyecto, crear el archivo hardhat.config.js:

require("@nomicfoundation/hardhat-toolbox");
require("@nomiclabs/hardhat-ethers");
require('dotenv').config({ path: __dirname + '/.env' });

const GOERLI_RPC_URL = process.env.GOERLI_RPC_URL;
const PRIVATE_KEY = process.env.PRIVATE_KEY;
const ETHERSCAN_KEY = process.env.ETHERSCAN_KEY;

/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
    solidity: "0.8.17",
  defaultNetwork: "hardhat",
  networks: {
      localhost: {
          chainId: 31337,
    },
    goerli: {
        url: GOERLI_RPC_URL,
      accounts: PRIVATE_KEY ? [PRIVATE_KEY] : [],
      chainId: 5,
    },
  },
  etherscan: {
      apiKey: ETHERSCAN_KEY,
  },
};

Modificar el archivo deploy.js

En el directorio scripts, modificar el archivo deploy.js con el siguiente contenido:

// We require the Hardhat Runtime Environment explicitly here. This is optional
// but useful for running the script in a standalone fashion through `node <script>`.
//
// You can also run a script with `npx hardhat run <script>`. If you do that, Hardhat
// will compile your contracts, add the Hardhat Runtime Environment's members to the
// global scope, and execute the script.
const hre = require("hardhat");

async function main() {
  const PokemonFactory = await hre.ethers.getContractFactory("PokemonFactory");
  const pokemonFactory = await PokemonFactory.deploy();

  await pokemonFactory.deployed();

  console.log(
    `PokemonFactory deployed to ${pokemonFactory.address}`
  );
}

// We recommend this pattern to be able to use async/await everywhere
// and properly handle errors.
main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

¿Cómo ejecutar este código?

1.- Clonar o descargar el repositorio:

git clone https://github.com/tomkat-cr/solidity-eth-challenge.git

2.- Cambiarse al directorio:

cd solidity-eth-challenge

3.- Ejecutar el comando:

npm install

Configuración

Para configurar los parámetros:

1.- GOERLI_RPC_URL: será necesario crear una cuenta en Infura, Alchemy u otro Web3 Development Platform.

2.- PRIVATE_KEY: será necesario crear una Wallet y obtener su llave privada, por ejemplo en Metamask

3.- ETHERSCAN_KEY: será necesario crear una cuenta en Etherscan y una API Key en My API Keys

Luego:

4.- Crear el archivo .env copiando desde el modelo con el comando:

cp .env.example .env

5.- Asignar los valores a los parámetros en el archivo .env:

vi .env

Test

Para ejecutar las pruebas:

1.- Ejecute el nodo local:

npm run node

o

npx hardhat node

2.- Ejecutar los tests:

npm run test

o

npx hardhat test

Deploy del contrato

1.- Para hacer el deploy en la Testnet Goerli, usar el comando:

npm run deploy

1.- Para hacer el deploy en la Testnet Local, usar el comando:

npm run dev:deploy

About

Pokemon Factory: contrato inteligente de Ethereum para generar Pokemones, con sus habilidades, tipos y debilidades. Desarrollado mediante el lenguaje Solidity.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 81.4%
  • Solidity 18.4%
  • Shell 0.2%