Go-Ethereum

使用松露部署契約時無法解鎖帳戶

  • June 20, 2020

我正在嘗試使用 geth 建立一個私有區塊鏈,使用 truffle 為其部署智能合約。我的目標是讓一個私有區塊鏈執行多個賬戶,部署一些合約並連接一些對等點。應該是學習鍛煉。

我在跑步:

  • geth 1.9.15
  • 松露 5.1.30
  • Ubuntu 18.04

以下是我設置私有區塊鏈的步驟:

  1. 創建 5 個帳戶:geth account new --datadir private-chain --password pw.txt
  2. 初始化區塊鏈:geth --datadir private-chain init private-chain/genesis-block.json
  3. 啟動控制台:geth --datadir private-chain --http --http.addr 127.0.0.1 --http.port 8545 --http.api eth,net,web3,personal --networkid 3456 console 2> private-chain/private-chain.log

我的 genesis-block.json 文件為每個新賬戶提供了 120 個乙太幣。

當我嘗試使用 truffle 部署合約時,我得到的是:

Starting migrations...
======================
> Network name:    'geth'
> Network id:      3456
> Block gas limit: 2000000 (0x1e8480)


1_initial_migration.js
======================

  Deploying 'Migrations'
  ----------------------

Error:  *** Deployment Failed ***

"Migrations" -- Returned error: authentication needed: password or unlock.

所以我嘗試通過將 1_initial_migration.js 更改為以下內容來解鎖帳戶:

const web3_lib = require ("web3");
const Migrations = artifacts.require ("Migrations.sol");

module.exports = function (deployer, network, addresses)
{
   const web3 = new web3_lib (new web3_lib.providers.HttpProvider ('http://127.0.0.1:8545'));
   console.log ('>>>>> Attempting to unlock account');
   console.log ('>>>>> Using password ' + process.env.GETH_PW);
   web3.eth.personal.unlockAccount ('0x1234567890abcdef1234567890abcdef12345678', 'my-pw', 36000).then (console.log ('Account unlocked!'));

   console.log ('>>>>> Deploying migration');
   deployer.deploy (Migrations);
};

“帳戶已解鎖!” 消息被列印到螢幕上,但我得到了和以前一樣的錯誤。

然後我去了 geth 控制台並嘗試從那裡解鎖帳戶,結果如下:

> web3.personal.unlockAccount ("0x1234567890abcdef1234567890abcdef12345678", "my-pw", 36000)
GoError: Error: account unlock with HTTP access is forbidden at web3.js:6347:37(47)
   at native
   at <eval>:1:91(6)

這甚至可能嗎?有什麼我忘記了,或者不了解這應該如何工作嗎?做我想做的事情的正確方法是什麼?

正如 MajdTL 所說,從安全形度來看,解鎖帳戶並不是一個好主意。

通常的做法是創建一個助記賬戶並使用@truffle/hdwallet-provider來簽署交易,而無需解鎖它。

如果您只是在練習,則必須使用額外的參數啟動 geth--allow-insecure-unlock以指示您將使用解鎖功能。要獲得更多 geth 的參數,請查看他們的文件

引用自:https://ethereum.stackexchange.com/questions/84373