Contract-Development
最好使用什麼 - 私鑰或助記符?
是否有使用哪一個的最佳實踐?
許多線上教程採用各種方法——舊的似乎使用助記符,而新的教程傾向於使用私鑰。
我知道助記符是它所有私鑰的父級 - 所以我可以從邏輯上看到在這個意義上使用私鑰會更好。
松露似乎暗示
mnemonic
我想這與使用
HD Wallet Provider
安全帽似乎建議
Private Key
在私鑰/助記符的情況下:
$$ 1 $$在這種情況下是否有已知的最佳實踐,它在哪裡定義? $$ 2 $$您的偏好是什麼,為什麼選擇它?
直接在程式碼中粘貼助記符或私鑰是一種做法,您應該只將其用於非關鍵內容,例如在測試網路上進行開發。一旦投入生產,您將不得不以另一種方式保護您的密鑰。教程通常不會向您展示那麼多。
也就是說,有兩種方法可以為你的 dapp 處理密鑰(我假設你正在談論 dapp 開發給定你提到的工具):
- 讓使用者處理密鑰(元遮罩、硬體錢包……),並且只有在連接了錢包的情況下才讓你的 dapp 工作。這確實是首選方式,您不必持有任何密鑰,只需使用 API(請參閱metamask JS API)。它適用於使用者是密鑰持有者的大多數案例(也提供了最分散的架構)。
- 在您身邊處理密鑰,例如在您的本地電腦上部署您的智能合約和 dapp 或在伺服器端(託管架構)。我不喜歡託管架構,但有時它可能有意義(例如在中心化交易所中)。在這些情況下,您有責任保護密鑰。您應該確保正確隱藏持有密鑰的電腦以及任何試圖破解您系統的人。使用 Truffle 的合約部署應該使用硬體錢包進行簽名(所以你甚至不知道私鑰,並且只有在紙上安全地隱藏在某處的備份助記詞)。對於線上託管應用程序,傾向於使用簽名代理(例如搜尋 Ethsigner)並使用HSM 或 Vault獲取密鑰所以私鑰不會離開安全飛地。任何其他設置都是危險的,會導致黑客攻擊和資產損失以及使用者的信心。
披露:如我的個人資料中所示,我在 Consensys 工作,它是開源 Apache 2.0 簽名者 Ethsigner 和開源錢包 Metamask 的作者。
就個人而言,我認為這取決於應用程序。例如,我最近在開發一個 flash 機器人,我發現我需要在使用不同數量的 ETH 的不同錢包之間切換,並且能夠在生產中盡快在錢包之間切換。自然地,我決定使用 HD 錢包種子,因為它可以訪問無限數量的錢包,而我需要在錢包之間切換的只是提供不同的錢包索引作為生產環境變數。