Xpub

使用 Coinb.in 錢包從我自己的擴展公鑰生成隨機比特幣地址

  • May 26, 2022

我正在自定義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 發送資金可能永遠不會被錢包找到,除非你有一個知道的自定義錢包看這裡。

引用自:https://bitcoin.stackexchange.com/questions/113882