Wallets
乙太坊中的私鑰是從哪個 HD 錢包節點生成的?
我知道如何生成有效的助記詞和與該助記詞關聯的有效地址。但是我不確定如何在乙太坊中生成私鑰。在比特幣中,主節點是你獲取私鑰的地方(有時稱為主私鑰)
然而,在乙太坊中,似乎生成非常直接(路徑是標準的“m/44’/60’/0’/0”,似乎乙太坊錢包不會利用多個帳戶或某些案例不止一個地址。
因此,私鑰是從哪個節點生成的?路徑中的根節點和子節點有不同的擴展私鑰?
有問題的標籤,如何格式化擴展的私鑰,使其不再擴展?
根據this github issue page,答案是私鑰不是作為節點結構的一部分生成的,而是HMACing熵的前32個字節的結果。下面的一個例子
import hdkey from 'ethereumjs-wallet/hdkey'; import ethwallet from 'ethereumjs-wallet'; import ethtx from 'ethereumjs-tx'; import bip39 from 'bip39'; const mnemonic = bip39.generateMnemonic(); console.log(`Mnemonic: ${mnemonic}`); const root = hdkey.fromMasterSeed(bip39.mnemonicToSeed(mnemonic)); const derivedNode = root.derivePath("m/44'/60'/0'/0"); const address = this.generateAddress(derivedNode); console.log(`Private Key: ${root._hdkey.privateKey.toString('hex')}`);
實際的私鑰生成發生在 hdkey