Ethereumjs

建構我自己的乙太坊錢包(BIP44 HD)的最簡單/最安全的方法是什麼

  • July 17, 2021

我想建立自己的 BIP-44 分層確定性錢包來儲存我的乙太幣並進行交易(接收/發送)。我對使用錢包應用程序不感興趣。我不在乎語言,我只是在尋找更安全和最簡單的方法:我不擅長程式,但我可以做到。

  1. 如果 Ethereumjs 是要走的路,我應該使用哪個 ethereumjs 包?

我從ethereum.org網站上找到了 ethereumjs 團隊。但是有幾種方法可以用它們建構錢包,例如,本教程中解釋了一種方法,基於單個ethereumjs 儲存庫(已移至ethereumjs-monorepo),另一種方法是使用ethereumjs-wallet。哪種方式最安全?

編輯:ethereumjs-wallet 不支持簽署交易,因此它只為 ethereumjs-team 留下 ethereumjs-monorepo。但它仍然留下了第二個問題。 2. 還是有另一種比 ethereumjs 更安全的方式/包/程式語言?

經過大量研究,我選擇了ethereumjs-utilbip39hdkey

安裝

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,然後執行類似的命令Bnpm 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

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