Web3js

遠端使用者創建乙太坊帳戶的 Web 應用程序

  • July 8, 2020

假設一台機器正在執行一個乙太坊客戶端(geth 或 Parity),並且它還有一個 Web 應用程序(例如作為 NodeJS 伺服器執行)為使用者提供前端並使用來自的 web3 呼叫與本地乙太坊節點通信在其 Javascript 程式碼中。如果 Web 應用程序想要為使用者提供在乙太坊上創建帳戶的功能,它可以向使用者提供一個表單來執行此操作,並通過呼叫web3.personal.newAccount(<password>),使用本地乙太坊節點上的 IPC 來實現它。但是,密鑰將在乙太坊節點上生成,並且必須由 Web 應用程序管理。

是否有另一種方法可以做到這一點,以便在使用者的機器上生成密鑰對,以便私鑰獨占使用者?一種方法是使用 MetaMask,它(我已經讀過)是一個 Chrome 擴展,可以“將 web3”“注入”到瀏覽器中。這樣就可以在使用者的機器上生成密鑰。使用者稍後還需要 MetaMask 來發送簽名交易,因為簽名必須在使用者端完成。這是否也意味著簽名的交易將通過呼叫web3.eth.sendRawTransaction(...)web3由 MetaMask 提供)直接從瀏覽器發送到乙太坊節點,而不是通過 Web 應用程序作為代理?

但是這一切都會迫使使用者使用 Chrome 瀏覽器並安裝 MetaMask 擴展。有沒有辦法消除這個限制?或者,允許遠端使用者創建乙太坊帳戶的 Web 應用程序(即在集中式伺服器上執行)是否必須自己管理密鑰?

MetaMask、Mist 和 Parity 等 web3 瀏覽器之所以存在,是因為它們直接解決了區塊鏈的安全模型:所有交易都是從“外部賬戶”發送的,這些賬戶由私鑰控制。

如果您的使用者沒有可以管理私鑰的瀏覽器,那麼他們將被迫使用他們的私鑰信任您的站點,從而恢復到更加“集中”的安全架構。

MetaMask 將所有“正常”呼叫(期望目前 RPC 被解鎖)轉換為sendTransaction,並在將它們轉發到 RPC 之前對其進行簽名sendRawTransaction,因此您對它的工作方式是正確的。

MetaMask 目前已向 Firefox 送出,甚至正在使用 Brave 瀏覽器最終在其中工作,因此它並不總是需要 Chrome。如果您不介意安裝自己的擴展程序,一些瀏覽器已經提供了可用的建構

還有一些關於不需要擴展的 MetaMask 版本的討論,而是依賴於腳本標籤,但目前還不能用於開發。

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