Деплой смарт-контрактов в Geth с помощью Truffle
- Опубликовано
- • 2 мин чтения•--- просмотров
Используем Truffle с Geth вместо Ganache
Итак, как настоящий блокчейн-разработчик, ты можешь захотеть протестировать свой смарт-контракт не только на Ganache (эмуляторе блокчейна в памяти), но и в окружении, максимально близком к реальному блокчейну. В этом случае ты будешь использовать Go Ethereum (Geth) и, скорее всего, Truffle для написания, тестирования и деплоя своих контрактов.
Использовать Ganache + Truffle легко — кажется, будто они созданы друг для друга. Но связка Truffle + Geth часто приносит проблемы. В этом посте я расскажу, как решить проблемы, с которыми я столкнулся.
Настройка окружения
- Версия Go Ethereum (geth):
1.10.19-stable(для ARM64) - Версия Truffle:
5.5.18 - Цель: задеплоить смарт-контракты через Truffle в Geth и иметь возможность взаимодействовать с ними.
Команда 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"
Обрати внимание на флаг --password — он указывает на файл с паролем для безопасной разблокировки аккаунта.
Конфигурация Truffle (truffle-config.js)
geth: {
host: "127.0.0.1",
port: 8545,
network_id: 4224,
from: '0x6db7f74b66403832fc2cfa40d6ee79f1b6915e37',
}
Создай этот аккаунт с помощью:
geth --datadir . account new
Ты можешь пропустить запрос пароля или использовать файл.
Проблема
Запусти:
truffle migrate --network geth

Приводит к ошибке аутентификации.
Решение: разблокировать аккаунт
Добавь --allow-insecure-unlock в свою команду Geth:
geth ... --allow-insecure-unlock
Изменение скрипта миграции Truffle
Обнови 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);
};
Вариант 2: разблокировка в консоли Geth
- Запусти Geth
- В другом терминале:
geth attach

- Затем:
personal.unlockAccount('0x6db7f74b66403832fc2cfa40d6ee79f1b6915e37', 'your_password');
- Запусти миграцию заново:
truffle migrate --network geth

Готово, можно работать!
Открыт для работы по контракту
Я доступен для работы по контракту. Если у вас есть интересная идея проекта — запишитесь на звонок через Calendly.
Записаться на 30-минутный звонок