Wallets

乙太坊中的私鑰是從哪個 HD 錢包節點生成的?

  • February 25, 2018

我知道如何生成有效的助記詞和與該助記詞關聯的有效地址。但是我不確定如何在乙太坊中生成私鑰。在比特幣中,主節點是你獲取私鑰的地方(有時稱為主私鑰)

然而,在乙太坊中,似乎生成非常​​直接(路徑是標準的“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

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