Bip32-Hd-Wallets

使用帶有 xpub 的 BIP44 僅手錶錢包生成強化地址

  • July 25, 2019

我對僅手錶 BIP44 錢包的硬化密鑰派生感到困惑。

讓我先解釋一下我要做什麼。

  • 我正在實施 2-of-3 多重簽名方案
  • 我正在使用 Bcoin 節點和錢包
  • 所有 3 個密鑰都是外部生成的
  • 我想使用 Bcoin 手錶專用錢包

ts 創建地址和腳本

這是我到目前為止所做的:

  1. 在此處使用此工具創建了 3 個 xprv 密鑰和 xpubs 密鑰
  2. 我使用自定義路徑m/44'/0'/0'來獲得強化密鑰,因為 Bcoin 錢包需要 BIP44 強化密鑰
  3. 我使用密鑰創建了 3個僅限手錶的錢包。xpub
  4. 然後我將每個密鑰作為共享密鑰添加到彼此(我只需要為一個錢包這樣做)

程式碼如下:

const HSM_accountKey = "xpub_HSM...."
const IC_accountKey = "xpub_IC..."
const Paper_accountKey = "xpub_Paper..."

const result_wallet_HSM = await walletClient.createWallet('wallet_HSM', options_wallet);
const result_wallet_IC = await walletClient.createWallet('wallet_IC', options_wallet);
const result_wallet_Paper = await walletClient.createWallet('wallet_Paper', options_wallet);


const wallet_IC_account = await wallet_IC.getAccount('default');
const wallet_Paper_account = await wallet_Paper.getAccount('default');
const result_addkey1 = await wallet_HSM.addSharedKey('default', wallet_IC_account.accountKey);
const result_addkey2 = await wallet_HSM.addSharedKey('default', wallet_Paper_account.accountKey);

現在我已經創建了一個僅限手錶的 2-of-3 多重簽名錢包。我現在要做的是創建地址。我不想派生更多的子擴展鍵。我只需要一個派生級別。現在我想為我的使用者創建多重簽名地址。

// Create addresses from each wallet
const wallet_HSM_address = await wallet_HSM.createAddress('default');
const wallet_IC_address = await wallet_IC.createAddress('default');
const wallet_Paper_address = await wallet_Paper.createAddress('default');

// Keyrings for script generation
const keyring_HSM = KeyRing.fromJSON(wallet_HSM_address);
const keyring_IC = KeyRing.fromJSON(wallet_IC_address);
const keyring_Paper = KeyRing.fromJSON(wallet_Paper_address);

//Get the pubkeys from each wallet
const pubKeys = [keyring_HSM.publicKey, keyring_HSM.publicKey, keyring_Paper.publicKey];

const multiSigScript = Script.fromMultisig(m, n, pubKeys);
const receivingAddress = multiSigScript.getAddress().toBase58(network); 

我有一種感覺,我正在以一種迂迴的方式進行這一步,但你得到了我想要做的事情。

重申一下,我現在要做的是為我的使用者和相應的 P2SH 腳本創建單獨的接收地址。

現在,這是我需要幫助理解的。

  • 根據 BIP32,您不能使用 CDKpub 派生強化公鑰。您需要 xprv 來派生子密鑰。
  • 但是,根據我所做的,我可以派生子公鑰。我已將 tesetnet 硬幣發送到這些地址(receivingAddress在上面的程式碼中)並且它們可以工作。錢包收到硬幣。
  • 那麼,僅限手錶的錢包如何能夠創建強化的子公鑰?我沒有輸入xprv錢包。
  • 或者,是不是我在使用路徑時沒有創建強化的子公鑰m/44'/0'/0'?我receivingAddress在上面的程式碼中創建的不是硬化的嗎?這意味著如果有人能夠找到一個使用者的子私鑰和xpub,他們將能夠派生所有智利私鑰?

我為這個冗長的問題道歉。我對錢包如何在錢包中沒有任何私鑰的情況下創建子公鑰感到有點困惑。

謝謝你。

您沒有派生強化的子密鑰。您不能從 xpub 派生強化密鑰。僅僅因為 xpub 本身是硬化的並不意味著它的孩子是硬化的。

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