使用 Coinb.in 錢包從我自己的擴展公鑰生成隨機比特幣地址
我正在自定義https://coinb.in/錢包。
var compressed = coinjs.compressed; coinjs.compressed = true; var coin = coinjs.newKeys(); // keys are changing... var sw = coinjs.bech32Address(coin.pubkey); var address = sw.address; coinjs.compressed = compressed; console.log(address);
這按預期工作,但由於**newKeys()**會生成新的比特幣地址。我不擁有它們。
我需要設置自己的 xpub。所以我正在嘗試這個:
var pubkey = "xpub661MyMwAqRbcFAYRXx71gFgohbagK22EwLd24pQE98PfQKvtJDP6bFWge2N6WJjhhNriBYdjHadGwtFj8HaTG6s4HnprSpNZ7x2xo9Ag4RU"; // I need set my own xpub. var b32 = coinjs.bech32Address(pubkey); addr = b32.address; console.log(addr); // bc1q9m6yz90ekwdrgum294w7z85cth7muk600gnvxh
這裡的問題是它總是給出相同的地址(bc1q9m6yz90ekwdrgum294w7z85cth7muk600gnvxh)。
我需要以某種方式始終生成新的隨機比特幣地址(來自我自己的 xpub)。
Xpubs 不會創建隨機地址。它們是分層確定性錢包結構的一部分。
Coinbin 使用他自己的庫或包裝器,因此在嘗試破解它時它可能無法正常工作。對我來說,您似乎將 xpub 輸入到公鑰中以解決轉換問題,這不是擴展公鑰 (xpub) 的使用方式。
對於 BIP84 bech32 地址,HD 派生路徑看起來像 m/84’/0’/0’/0。您問題中的範常式式碼不包含任何派生路徑說明,因此您將始終創建相同的地址。
為了確定性地從擴展公鑰創建,您需要指定在派生路徑中使用的更改和索引,即路徑中的最後兩個數字: m/84’/0’/ 0 ‘/ 0。派生路徑的 m/84’/0’ 部分已經編碼在您的 xpub/zpub 中。
例如:
鑰匙串中第一個地址的派生路徑為:m/84’/0’/0’/0
鑰匙串中第二個地址的派生路徑為:m/84’/0’/0’/1
第一次更改地址的推導路徑:m/84’/0’/1’/0 …
等等。
儘管使用從 xpub 派生的不同庫應該看起來更像下面的(source),其中需要派生路徑參數:
buidljs.fromXpub("zpub6sCAx5BGhzosvmBsLyj8P1xjQHmuwHMoFm4ykHMmeP16Zn6iKpxy4BBDsHPRj4RsU5YvXigGvnYRYo4n5sA4QH2kgZUoTgQVTmzt5XuC6qD",0,0) `{addr: "bc1qzsg5xf3kmdrd8629p29vtvj39ep82rhjwx58dh"}`
注意 fromXpub 函式的最後兩個參數傳達了我們想要的派生路徑的變化和索引,在這種情況下是鑰匙串中的第一個地址。
同樣作為警告,不要生成“隨機”派生索引。HD 錢包有前瞻缺口,只能看到大約 20 個地址,例如向 m/84’/0’/34’/251 發送資金可能永遠不會被錢包找到,除非你有一個知道的自定義錢包看這裡。