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

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
- Inicia Geth
- En otra terminal:
geth attach

- Luego:
personal.unlockAccount('0x6db7f74b66403832fc2cfa40d6ee79f1b6915e37', 'your_password');
- Vuelve a ejecutar la migración:
truffle migrate --network geth

¡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