建構我自己的乙太坊錢包(BIP44 HD)的最簡單/最安全的方法是什麼
我想建立自己的 BIP-44 分層確定性錢包來儲存我的乙太幣並進行交易(接收/發送)。我對使用錢包應用程序不感興趣。我不在乎語言,我只是在尋找更安全和最簡單的方法:我不擅長程式,但我可以做到。
- 如果 Ethereumjs 是要走的路,我應該使用哪個 ethereumjs 包?
我從ethereum.org網站上找到了 ethereumjs 團隊。但是有幾種方法可以用它們建構錢包,例如,本教程中解釋了一種方法,基於單個ethereumjs 儲存庫(已移至ethereumjs-monorepo),另一種方法是使用ethereumjs-wallet。哪種方式最安全?
編輯:ethereumjs-wallet 不支持簽署交易,因此它只為 ethereumjs-team 留下 ethereumjs-monorepo。但它仍然留下了第二個問題。 2. 還是有另一種比 ethereumjs 更安全的方式/包/程式語言?
經過大量研究,我選擇了ethereumjs-util、bip39和hdkey。
安裝
Node.js (也需要 npm,但它包含在 node.js 中)
然後打開 CMD 並安裝軟體包:您可以通過 2 種方式進行安裝:
*方法 A:*通過
install @ethereumjs/tx
命令安裝。這將安裝軟體包C:\Users\<iuser>\node_modules\
,您可以直接在 Node 命令中訪問它們。npm install ethereumjs-util npm install bip39 npm install hdkey
方法B:通過
npm install -g @ethereumjs/tx
命令安裝。它將安裝包C:\Users\<user>\AppData\Roaming\npm\node_modules
,然後您將需要創建一個文件夾,讓我們呼叫它folder_B
並在其中命名另一個文件夾node_modules
,然後執行類似的命令B
(npm link @ethereumjs/tx
參見下面,對於每個包),之後您將能夠使用它們在節點上打開時folder_B
。npm install -g ethereumjs-util npm install -g bip39 npm install -g hdkey npm link ethereumjs-util npm link bip39 npm link hdkey
B 創建助記符
B1) 準備環境:打開一個 cmd(如果您使用方法 A,它可以在任何地方啟動,如果您使用方法 B,它應該啟動
folder_B
)鍵入node
然後按Enter
載入節點控制台後(參見消息“歡迎到節點…),輸入:bip39 = require('bip39'); ethUtil = require('ethereumjs-util'); hdkey = require('hdkey');
B2) 生成助記符
const mnemonic = bip39.generateMnemonic(256); console.log( "mnemonic: ", mnemonic)
C 從錢包中的特定路徑派生地址
C1) 如果您仍然從步驟 B 中打開節點控制台,您可以繼續步驟 C2,否則,首先執行步驟 B1 並將助記符保存在如下變數中:
const mnemonic = "replace this by your mnemonic"
C2) 從助記詞到主私鑰
const seed = bip39.mnemonicToSeedSync(mnemonic); const root = hdkey.fromMasterSeed(seed); const masterPrivateKey = root.privateKey.toString('hex');
C3) 從路徑到地址
var path = "m/44'/60'/0'/0/0" // change path var addrNode = root.derive(path); var pubKey = ethUtil.privateToPublic(addrNode._privateKey); var addr = '0x' + ethUtil.publicToAddress(pubKey).toString('hex'); var address = ethUtil.toChecksumAddress(addr); console.log( "\n", "\n", "\n","ACCOUNT ", path, "\n", "private key : 0x", addrNode._privateKey.toString('hex'), "\n", "public key : ",pubKey.toString('hex'), "\n", "address : ", address)
C4) 要獲得不同的地址,您可以每次使用不同的路徑重新執行 C3,只需更改最後一個和/或倒數第三個數字*。一些例子:
"m/44'/60'/0'/0/1" "m/44'/60'/0'/0/9" "m/44'/60'/1'/0/0" "m/44'/60'/7'/0/15"
- 這是路徑的含義(您只需更改帳戶和地址索引):
m / purpose' / coin_type' / account' / change / address_index
如果你不打算使用這個錢包來持有真實的 ETH,那麼你可以驗證地址,以及https://iancoleman.io/bip39/上的私鑰/公鑰
D 完成後,刪除 nodejs 歷史記錄:
在 CMD 中…
cd %userprofile% echo. > .node_repl_history
或刪除文件:
C:\Users\<user>\.node_repl_history