Настройка частной сети с Geth, не удается разблокировать учетную запись и развернуть контракты

Я настроил частную сеть с Geth с помощью следующей команды:

geth --datadir="PathToDatadir" --mine -minerthreads 2 -verbosity 3 -maxpeers 5 --ipcapi "admin,debug,eth,miner,net,personal,shh,txpool,web3" --ipcpath "geth.ipc" --port 30301 --rpc --rpcport 8101 --rpcapi eth,web3,personal --etherbase "e04fe31f4133f25ef3e5bfb39146edcf28724acd" --networkid 9990

Все идет нормально.

Я разработал систему контрактов, используя truffle и testrpc, и теперь пытаюсь развернуть ее на нескольких узлах. При запуске трюфельной миграции у меня возникают проблемы:

Выполнение миграции: 1_initial_migration.js Замена миграций... Произошла ошибка, спасение. Состояние сети неизвестно. Просмотрите успешные транзакции вручную. Ошибка: учетная запись заблокирована

Я настроил трюфель на отправку с нужного мне адреса (того же, который определен как etherbase), но учетная запись заблокирована. Есть несколько способов разблокировать учетную запись с помощью Geth. Единственный способ, которым это работает для меня, - это разблокировать учетную запись следующим образом:

geth --unlock "e04fe31f4133f25ef3e5bfb39146edcf28724acd" --password "fullPathtoTxtPasswordfile"

Остается ли учетная запись разблокированной для будущих вызовов Geth? Разблокировка через personal.unlockAccount("address","fullPathtoTxtPasswordfile") в консоли тоже не работает. web3.accounts также не определен.

Итак, мне, кажется, удалось разблокировать учетные записи, но миграция трюфелей по-прежнему выдает ошибку блокировки учетной записи. Я обнаружил похожие проблемы с разблокировкой учетной записи, но не нашел решения для своей конкретной проблемы.

Похоже, моя проблема была вызвана тем, что я не определил сеть для использования при запуске трюфельной миграции.

Ответы (1)

personal.unlockAccountне принимает путь к файлу, он принимает пароль. См.: https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console#personalunlockaccount

В командной строке попробуйте использовать это:

geth --unlock 0 --password "fullpathtofile"- аргумент разблокировки принимает индекс. Вы можете увидеть индексы, запустив geth account list.

Если вы хотите убедиться, что это не проблема с файлом, вы также можете сделать это:

geth --unlock 0 --password <(echo "PASSWORD_HERE")

Форма <(command)выполняет команду внутри круглых скобок и создает именованный канал, который передается программе, действуя как файл с содержимым этого вывода. Вы можете использовать это как тест для неконфиденциальных тестовых учетных записей.

Спасибо за полезную информацию. Я уже смог разблокировать учетную запись, указав адрес в скобках в качестве параметра. Однако, если я предваряю или добавляю флаги разблокировки и пароля к более крупной команде Geth, я получаю следующее сообщение: Неустранимая ошибка: не удалось перечислить учетные записи: индекс учетной записи 0 вне диапазона [0, -1] трюфельная миграция по-прежнему считает, что аккаунт заблокирован, а я разблокировал его в Geth.