Меня озадачивает получение защищенного ключа от кошелька BIP44, предназначенного только для просмотра.
Позвольте мне сначала объяснить, что я пытаюсь сделать.
ts для создания адресов и скриптов
Вот что я сделал до сих пор:
m/44'/0'/0'
для защищенных ключей, потому что для кошелька Bcoin требуются защищенные ключи BIP44.xpub
.Код выглядит следующим образом:
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 из 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.
Теперь мне нужна помощь в понимании .
receivingAddress
в коде выше), и они работают. Кошелек получает монеты.xprv
в кошелек.m/44'/0'/0'
? Является ли код receivingAddress
, который я создаю в приведенном выше коде, не закаленным? Это означает, что если кто-то сможет найти дочерние закрытые ключи одного пользователя и xpub
, он сможет получить все закрытые ключи Чили?Мои извинения за длинный вопрос. Я немного смущен тем, как кошельки могут создавать дочерние открытые ключи, не имея приватного ключа в кошельке.
Спасибо.
Вы не получаете защищенные дочерние ключи. Вы не можете получить защищенные ключи от xpub. То, что сам xpub усилен, не означает, что его потомки защищены.
Эндрю Чоу
маду
Эндрю Чоу
маду
createAddress()
? Разве он не генерирует дочерний ключ? Каждый раз, когда я звоню,createAddress()
он генерирует новый дочерний адрес с определенным индексом. Что я тут недопонимаю.Эндрю Чоу
createAddress()
создается новый адрес. Если это так, он не получает защищенные адреса, особенно если вы дали ему только xpub.