如何處理組織級乙太坊錢包和賬戶
我們計劃為外部使用者提供一些智能合約功能,但前提是他們通過我們的網站訪問。(最終,它們將可以通過直接在區塊鏈上的正常合約呼叫來訪問)。所以工作流程是這樣的 -> 使用者登錄到我們的網站 - 提供一些我們可以針對外部資源進行驗證的資訊 - 一旦驗證,我們從後端呼叫相應的智能合約功能。
雖然我可以使用 web3.js 從我的網站呼叫區塊鏈,但我的帳戶/錢包究竟如何由網站本身保護?例如,如果我們的網站託管在 aws 上,我們是否應該將密鑰儲存在我們的數據庫中並使用它來簽署我們對區塊鏈的呼叫?或者,是使用本地安全電腦中的霧/元遮罩來呼叫合約上受限的外部函式的唯一選擇嗎?
如果有人做過類似的事情,如果你能分享你用來保護的工具列表和你用來訪問區塊鏈的工具列表,那就太好了。
任何關於多人組織如何有效和安全地處理對智能合約的訪問的想法也值得讚賞。
這取決於您使用的信任模型。
通常,乙太坊應用程序背後的想法是,使用者不必信任開發合約的人,他們可以完全控制自己的數據。在此模型中,通常沒有受信任的伺服器端程式碼,也沒有持有傳統使用者名和密碼憑據的特權方。這就是為什麼我們有像 MetaMask 這樣的東西,它讓使用者控制他們自己的憑據,並要求他們批准應用程序認為它應該使用它們提出的請求。這些通常是僅限客戶端的應用程序,使用者在其中使用您的靜態 html/js 程式碼,並且沒有伺服器端程式碼。
如果您的使用者必須信任您來儲存他們的使用者名和密碼,您可以在伺服器上保留一個密鑰並將其用於所有使用者。您的使用者可以與您的伺服器端應用程序互動,而不是使用 MetaMask,該應用程序通過從您的伺服器向您的節點的 JSON-RPC 介面發出請求來向區塊鏈發送請求。契約將被設計為依賴(受信任的)呼叫者來提供已登錄到您的伺服器的使用者的 ID 作為參數。儘管這在技術上很容易設置,但通常表明您可能只想考慮使用普通數據庫而不是區塊鏈,因為您的使用者已經必須信任您,並且您或任何入侵您伺服器的人將負責他們的資產和數據。普通數據庫更簡單、更便宜、更高效。
如果模型是使用者可以直接與區塊鏈互動,但您也允許他們使用您的網站以方便起見,那麼您可能希望設計合約以期望每個使用者擁有自己的密鑰,並保留每個使用者的密鑰。伺服器上的使用者密鑰。顯而易見的方法是在您的乙太坊節點上保留許多不同的帳戶。