Go-Ethereum

使用 MetaMask 到私有網路的 RPC 連接可以工作,但使用 geth、mist 或 solidity 瀏覽器不能

  • April 3, 2020

我正在嘗試按照本教程在 Azure 中創建一個專用網路聯盟:

https://github.com/Azure/azure-quickstart-templates/tree/master/ethereum-consortium-blockchain-network

問題 1 - solidity 無法連接到專用網路

使用 MetaMask 連接到網路工作正常,因此我可以創建帳戶並將餘額從一個帳戶轉移到另一個帳戶。但是,由於 https->http 問題,我無法使用solidity 瀏覽器連接到我的網路(因此我無法部署合約)。從本地主機執行solidity 也不起作用。它說帳戶被鎖定。這裡的目標是輕鬆地將我自己的合約部署到這個專用網路

問題 2 - 從本地主機的 geth 或 Mist 連接不起作用

由於solidity瀏覽器不起作用,我嘗試了另一種方法來連接到網路並部署我的合約。使用 Mist 的問題是:

方法personal_newAccount 不存在/不可用

其他執行緒告訴我開始使用, --rpcapi="db,eth,net,web3,personal,web3" 但為什麼它與 MetaMask 一起工作呢?

問題是 Azure 市場託管的是不支持EIP 155 重放保護的舊版本 Geth ,而最新版本的 MetaMask 支持。

解決方案是:

  • 使用不同的客戶端進行測試(如 TestRPC)。
  • 讓 Azure 更新其託管的 Geth 版本。
  • MetaMask 可以增加支持舊交易簽名格式的能力,這需要解決這個問題

作為 MetaMask 團隊的成員,如果我們不必支持像這樣的舊的、更危險的乙太坊客戶端,我會很高興,並且如果 Azure 剛剛更新了他們的 Geth 版本,我會非常喜歡。

最後,您可以執行舊版本的 MetaMask。3.5.2 版本是最後一個沒有實現 EIP155 重放保護的版本: https ://github.com/MetaMask/metamask-plugin/releases/tag/v3.5.2

但為什麼它與 MetaMask 一起工作呢?Metamask 使用一種稱為 Brainwallet 的東西,基本上是一種“即時”身份驗證,無需創建任何密鑰文件。

當然,您需要在使用之前解鎖您的帳戶,或者您可以使用啟動參數永久解鎖它(=直到您關閉/重新啟動 geth)--unlock 0。對於多個帳戶,請使用--unlock 0,1,2,3,4. 當它們解鎖啟用 rpc ( --rpc --rpcport 8545 --rpcaddr 0.0.0.0 --rpccorsdomain "*" --rpcapi "eth,web3,debug" for example, please look up what these parameters mean) 時,您只需在瀏覽器 solidity / remix 中將 https 更改為 http,然後連接到您的節點。

solidity 無法連接到專用網路

Solidity 只是一種程式語言,你的意思可能是別的嗎?祝你好運 !

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