hd кошелек bip44 в js - как создать адрес для цепочки, отличной от биткойна?

У меня есть небольшой скрипт, взятый в основном из этого тестового скрипта в bitcoinjs-lib

      function getAddress(node) {
    const bitcoin = require('bitcoinjs-lib');
    return bitcoin.payments.p2pkh({ pubkey: node.publicKey }).address;
}

function BIP44() {
    /* create a BIP44, rvn, account 0, external address */
    const bip32 = require('bip32');
    const root = bip32.fromSeed(
        Buffer.from(
        'dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd',
        'hex',
        ),
    );
    const childAuto = root.derivePath("m/44'/175'/0'/0/0");
    const childManual = root
        .deriveHardened(44)
        .deriveHardened(175)
        .deriveHardened(0)
        .derive(0)
        .derive(0);
    return getAddress(childAuto);
}
console.log(BIP44());

Он отлично работает для получения адреса биткойна (путь получения "m/44'/0'/0'/0/0"), но при попытке получить любой другой адрес это, похоже, не работает. Результат такой:

      16CzcgCURH83h3cLQ91ZpavDjXSfuNru4c

Этот адрес начинается с 1, тогда как адреса RVN начинаются с R.

Я ошибочно предположил, что просто изменив путь деривации, чтобы он соответствовал RVN ( 175) он будет генерировать адреса Raven, но должно быть что-то еще, что мне не хватает.

Можете ли вы помочь мне понять, в чем я ошибаюсь?

Другие ресурсы, которые я изучил:

1 ответ

просматривая https://github.com/iancoleman/bip39, я обнаружил, что мне нужно указать правильные спецификации сети ravencoin (на самом деле не понимаю, что означает этот объект), но как только я это сделал, он работал отлично.

      function getAddress(node, network) {
    const bitcoin = require('bitcoinjs-lib');
    return bitcoin.payments.p2pkh({ pubkey: node.publicKey, network }).address;
}

function getNetwork() {
    /* https://github.com/iancoleman/bip39/blob/c4f0c2908faab1452937e50a7d3a400fed42a0a8/src/js/bitcoinjs-extensions.js */
    return {
        messagePrefix: '\x16Raven Signed Message:\n',
        bip32: {
          public: 0x0488B21E,
          private: 0x0488ADE4,
        },
        pubKeyHash: 0x3c,
        scriptHash: 0x7a,
        wif: 0x80,
    };
}


function BIP44() {
    /* create a BIP44, rvn, account 0, external address */
    const bip32 = require('bip32');
    const root = bip32.fromSeed(
        Buffer.from(
        'dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd',
        'hex',
        ),
    );
    const childAuto = root.derivePath("m/44'/175'/0'/0/0");
    const childManual = root
        .deriveHardened(44)
        .deriveHardened(175)
        .deriveHardened(0)
        .derive(0)
        .derive(0);
    return getAddress(childAuto, getNetwork());
    
}
console.log(BIP44());
Другие вопросы по тегам