Addresses
為什麼 HD 錢包實例在 Root 和 HDKey 中返回兩個 xpub-xpriv 密鑰對?
我已經使用 HDWallet 實現了地址生成,如下面的片段所示:
let Seed = generateMnemonic(); const wallet = EthHdWallet.fromMnemonic(Seed); console.log("Wallet" + JSON.stringify(wallet)); console.log(typeof wallet); let address = wallet.generateAddresses(3); console.log("Wallet after address generation: " + JSON.stringify(wallet)); console.log("Address generated: " + address);
錢包提供了一個對象,其中包含:
_hdKey
(有參數_hdKey
,還有兩個參數xpriv
&xpub
)_root
(也有參數_hdKey
,該參數還有兩個參數xpriv
,與xpub
hd 鍵的參數值不同)_children
(使用自己的私鑰和公鑰對生成的地址)難點:
- 那兩個密鑰對錶示什麼?
_hdKey
我們在and下得到它_root
?- 如何僅使用 privateKey 恢復我的地址?
我建議檢查BIP 32 文件,您正在查看的對象可以追溯到規範中的概念。
下劃線可能表示它們是 EthHdWallet 的實現細節,因此要獲得詳細答案,必須查看原始碼。
從EthHdWallet 的建構子中我們可以判斷出含義:
constructor (xPrivKey) { this._hdKey = fromExtendedKey(xPrivKey) this._root = this._hdKey.derivePath(BIP44_PATH) this._children = [] }
- _hdKey是HD錢包的主節點
- _root是乙太坊派生路徑上的節點
m/44'/60'/0'/0
- _children從 _root 派生的子鍵
可以從私鑰計算地址(參見例如 https://ethereum.stackexchange.com/a/27187>),但它涉及一些低級計算。更簡單的解決方案是使用<https://github.com/ethereumjs/ethereumjs-wallet之類的庫,並將私鑰導入錢包並獲取地址。
const wallet = HDWallet.fromPrivateKey(privateKeyBuffer) const address = wallet.getChecksumAddressString()