使用 Truffle 遷移契約時出錯
我在將契約遷移到私有區塊鏈時遇到問題。該區塊鏈位於 CentOS VirtualMachine 實例中。通過 Geth 控制台,我連接到區塊鏈並解鎖了一個帳戶。
然後我打開一個新終端並打開 Truffle 控制台。首先我編譯程式碼(compile –reset),然後我遷移合約(migrate –reset)。但是 Truffle 控制台回答了我以下問題:
遇到錯誤,放棄。網路狀態未知。手動查看成功的交易。錯誤:需要身份驗證:密碼或在 Object.InvalidResponse 解鎖(C:\Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:~\web3\lib\web3\errors.js:38:1 ) 在 C:\Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:~\web3\lib\web3\requestmanager.js:86:1 在 C:\Users\emendez\AppData\Roaming \npm\node_modules\truffle\build\webpack:\packages\truffle-migrate\index.js:225:1 在 C:\Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\ truffle-provider\wrapper.js:134:1 在 XMLHttpRequest.request.onreadystatechange (C:\Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:~\web3\lib\web3\httpprovider. js:128:1) 在 XMLHttpRequestEventTarget。dispatchEvent (C:\Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:~\xhr2\lib\xhr2.js:64:1) 在 XMLHttpRequest._setReadyState (C:\Users\emendez\ AppData\Roaming\npm\node_modules\truffle\build\webpack:~\xhr2\lib\xhr2.js:354:1) 在 XMLHttpRequest._onHttpResponseEnd (C:\Users\emendez\AppData\Roaming\npm\node_modules\truffle \build\webpack:~\xhr2\lib\xhr2.js:509:1) 在 IncomingMessage。(C:\Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:~\xhr2\lib\xhr2.js:469:1) 在 IncomingMessage.emit (events.js:187:15)在 IncomingMessage.EventEmitter.emit (domain.js:460:23) 在 endReadableNT (_stream_readable.js:1094:12) 在 process._tickCallback (internal/process/next_tick.js:63:19) 1) 在 XMLHttpRequest._setReadyState (C:\Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:~\xhr2\lib\xhr2.js:354:1) 在 XMLHttpRequest._onHttpResponseEnd (C: \Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:~\xhr2\lib\xhr2.js:509:1) 在 IncomingMessage。(C:\Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:~\xhr2\lib\xhr2.js:469:1) 在 IncomingMessage.emit (events.js:187:15)在 IncomingMessage.EventEmitter.emit (domain.js:460:23) 在 endReadableNT (_stream_readable.js:1094:12) 在 process._tickCallback (internal/process/next_tick.js:63:19) 1) 在 XMLHttpRequest._setReadyState (C:\Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:~\xhr2\lib\xhr2.js:354:1) 在 XMLHttpRequest._onHttpResponseEnd (C: \Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:~\xhr2\lib\xhr2.js:509:1) 在 IncomingMessage。(C:\Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:~\xhr2\lib\xhr2.js:469:1) 在 IncomingMessage.emit (events.js:187:15)在 IncomingMessage.EventEmitter.emit (domain.js:460:23) 在 endReadableNT (_stream_readable.js:1094:12) 在 process._tickCallback (internal/process/next_tick.js:63:19) \Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:~\xhr2\lib\xhr2.js:509:1) 在 IncomingMessage。(C:\Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:~\xhr2\lib\xhr2.js:469:1) 在 IncomingMessage.emit (events.js:187:15)在 IncomingMessage.EventEmitter.emit (domain.js:460:23) 在 endReadableNT (_stream_readable.js:1094:12) 在 process._tickCallback (internal/process/next_tick.js:63:19) \Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:~\xhr2\lib\xhr2.js:509:1) 在 IncomingMessage。(C:\Users\emendez\AppData\Roaming\npm\node_modules\truffle\build\webpack:~\xhr2\lib\xhr2.js:469:1) 在 IncomingMessage.emit (events.js:187:15)在 IncomingMessage.EventEmitter.emit (domain.js:460:23) 在 endReadableNT (_stream_readable.js:1094:12) 在 process._tickCallback (internal/process/next_tick.js:63:19)
我的松露遷移 js 文件:
var Migrations = artifacts.require("./Migrations.sol"); var Strings = artifacts.require("./lib/Strings.sol"); var DateTime = artifacts.require("./lib/DateTime.sol"); var Travel = artifacts.require("./Travel.sol"); module.exports = function (deployer) { deployer.deploy(Migrations); deployer.deploy(Strings); deployer.deploy(DateTime); deployer.deploy(Travel); };
所有文件都有效,因為使用 Ganache 證明是有效的,現在我已經將測試環境更改為具有私有實現區塊鏈的虛擬主機,我遇到了這個問題。
我還更改了松露配置參數:
module.exports = { networks: { development: { host: "127.0.0.1", port: 22000, network_id: "*" // Match any network id } }, compilers: { solc: { version: "0.4.24" } } };
我查看了許多具有相同錯誤響應的文章,但我仍然遇到問題。所以我發這個文章來嘗試解決這個問題。
編輯
我在 geth 控制台中執行此命令,但仍然遇到同樣的問題。
eth.defaultAccount = eth.accounts[4] miner.setEtherbase(eth.accounts[4]) personal.unlockAccount(eth.accounts[4], "blockchain")
這裡可能會發生多件事,但您用來部署的帳戶可能不是您要解鎖的帳戶。
如果您不指定,預設情況下,truffle 使用 eth.accounts
$$ 0 $$, 未解鎖,因此失敗。 您可以嘗試通過將其添加到開發對象內的松露配置中來在配置文件中指定部署者帳戶
from: '0xYourAddress'
或者,您可以按照以下結構在部署期間指定它:
deployer.deploy(Strings, {from: "0xYourAddress"});