← Volver al blog

Desplegando smart contracts en Geth usando Truffle

Publicado el
2 min de lectura
--- vistas

Usar Truffle con Geth en lugar de Ganache

Así que, como desarrollador de blockchain de verdad, es posible que quieras probar tu smart contract no solo en Ganache (un emulador de blockchain en memoria), sino también en un entorno que se parezca mucho más a una blockchain real. En este caso, vas a usar Go Ethereum (Geth) y muy probablemente Truffle para escribir, probar y desplegar tus contratos.

Usar Ganache + Truffle es fácil — parecen hechos el uno para el otro. Pero combinar Truffle + Geth suele traer problemas. En esta publicación te guiaré para resolver los problemas que encontré.

Configuración del entorno

  • Versión de Go Ethereum (geth): 1.10.19-stable (para ARM64)
  • Versión de Truffle: 5.5.18
  • Objetivo: Desplegar smart contracts a través de Truffle en Geth y poder interactuar con ellos.

Comando de Geth

geth --networkid 4224 --mine --miner.threads 1 --datadir "./private" --nodiscover -port "30303" --nat "any" \
  --http --http.api personal,eth,net,web3 \
  --ws --ws.api personal,eth,net,web3 \
  --password ./private/password.sec --ipcpath "~/Library/Ethereum/geth.ipc"

Fíjate en el flag --password — apunta a un archivo de contraseña para desbloquear la cuenta de forma segura.

Configuración de Truffle (truffle-config.js)

geth: {
  host: "127.0.0.1",
  port: 8545,
  network_id: 4224,
  from: '0x6db7f74b66403832fc2cfa40d6ee79f1b6915e37',
}

Crea esta cuenta usando:

geth --datadir . account new

Puedes omitir el prompt de contraseña o usar un archivo.

El problema

Al ejecutar:

truffle migrate --network geth
Truffle error

Se produce un error de autenticación.

Solución: desbloquear la cuenta

Añade --allow-insecure-unlock a tu comando de Geth:

geth ... --allow-insecure-unlock

Modificar el script de migración de Truffle

Actualiza migrations/1_initial_migration.js:

const Migrations = artifacts.require('Migrations');
const TruffleConfig = require('../truffle-config');
const Web3 = require('web3');

module.exports = function (deployer, network, accounts) {
  const config = TruffleConfig.networks[network];
  if (process.env.ACCOUNT_PASSWORD) {
    const web3 = new Web3(new Web3.providers.HttpProvider(`http://\${config.host}:\${config.port}`));
    web3.eth.personal.getAccounts().then((accounts) => {
      const defaultAccount = accounts[0];
      console.log(`[x] Unlocking account \${defaultAccount}`);
      web3.eth.personal.unlockAccount(defaultAccount, process.env.ACCOUNT_PASSWORD);
    });
  }
  console.log('[x] Making migrations');
  deployer.deploy(Migrations);
};

Opción 2: desbloquear en la consola de Geth

  1. Inicia Geth
  2. En otra terminal:
geth attach
Geth attach
  1. Luego:
personal.unlockAccount('0x6db7f74b66403832fc2cfa40d6ee79f1b6915e37', 'your_password');
  1. Vuelve a ejecutar la migración:
truffle migrate --network geth
Truffle migrate

¡Listo!

Disponible para colaboración por contrato

Estoy disponible para colaborar por contrato. Si tiene una idea de proyecto interesante, reserve una llamada por Calendly.

Agenda una llamada de 30 min