Как создать адрес биткойн? - PullRequest
1 голос
/ 20 сентября 2019

Я создаю криптовалюту.

Я последовал примеру HD-кошелька, и в этом примере не хватает кода.Я заполнил этот пробел и создал недопустимый биткойн-адрес. Вывод консоли выглядит нормально, и, насколько я могу судить, этот адрес действителен, и процесс воссоздания того же ключа из начального числа также работает.Я действительно не знаю, что работает не так, как должно.

    /// DEPENDECIES
    const bip39 = require('bip39');
    const hdkey = require('hdkey');
    const createHash = require('create-hash/browser');
    const Buffer = require('buffer').Buffer;
    const bs58check = require('bs58');

    /// BIP39 SEED
    /// https://www.npmjs.com/package/bip39

    const mnemonic = bip39.generateMnemonic();
    const seed =  bip39.mnemonicToSeedSync(mnemonic);

    console.log('Mnemonic : ',mnemonic);

    /// HDKEY
    /// https://www.npmjs.com/package/hdkey

    const root = hdkey.fromMasterSeed(seed);
    const masterPrivateKey = root.privateKey.toString('hex');

    console.log('Master Private : ' , masterPrivateKey);

    /// COIN REGISTRATION
    /// https://github.com/satoshilabs/docs/blob/bdd9fd92386827bfa031a88c10e3e6fd834d56e3/slips/slip-0044.rst


    /// BITCOIN ADRESS TYPE
    const addrnode = root.derive("m/44'/0'/0'/0/0");  

    //console.log('Bitcoin Node Address : ' ,addrnode);

    /// Private and Public Key
    const rawPbK = addrnode._publicKey; 
    const rawPvK = addrnode._privateKey; 

    /// Hashing the raw publiv key
    const hash1pbk = createHash('sha256').update(rawPbK).digest();
    const hash1rmd = createHash('rmd160').update(hash1pbk).digest();

    console.log('Raw Public Key : ' ,rawPbK.toString('hex'));

    // Space allocation
    var pubAddr = Buffer.allocUnsafe(21);

    // Adding testnet prefix
    pubAddr.writeUInt8(0x6f, 0);

    // Copying the public adress tafter the prefix?
    hash1rmd.copy(pubAddr, 1); 

    console.log('Address Buffer : ' ,pubAddr.toString('hex')); 

    const hash2 = createHash('sha256').update(hash1rmd).digest();
    const hash3 = createHash('sha256').update(hash2).digest();

    console.log('Hash 3 : ' ,hash3.toString('hex'));

     // 4 first byte of the last hash for checksum
    const chksum = hash3.slice(0,3); 

    console.log('4 first bytes Checksum : ' ,chksum.toString('hex'));


    /// Adding checksum to prefix Adress
    const address = Buffer.concat([pubAddr,chksum]); 

    console.log('Public Adress : ' ,address.toString('hex'));

    /// BASE 58
    /// https://www.npmjs.com/package/bs58

    const pbAddr = bs58check.encode(address);

    console.log('BASE58 ADDRESS : ' ,pbAddr);

Выводы консоли - это все, что должно быть, но ключ не проходит проверку.

Mnemonic :  tag observe slush wheel verb uncover evolve old refuse shoot swarm camera
Seed :  f550bc2bc355998e74cd2116a104fdd8a1fe0d0b7e64826b5d14a470e6d1e2be2b991fd2607cd8dfc3ca435f351b346586faac8b20e945326f823c3ef5c60859
Master Private :  14ab6a6abed95d30420a1b9eb9ab7f6f7447b5255ca3d46c099d7b325fa7f1f3
Raw Public Key :  03b30574120027d4f51edb1cfc323d197aba3fe5e86c85cbbfc8946a4dbf55fa2b
Address Buffer :  003683f0d40e5cfb112e9055f792204e58614815f4
Hash 3 :  1b80d052329097dfb65beb34b2cf9fb5f00bd558ad3379e3428536ded1940cc3
4 first bytes Checksum :  1b80d052
Public Adress :  003683f0d40e5cfb112e9055f792204e58614815f41b80d052
BASE58 ADDRESS :  15yFYmBx7cWYhsjNh7EMDM5tw2JnzBNYtZ

ОБНОВЛЕНИЕ Я не получаю ошибку от своего кодирования, но когда я пытаюсь подтвердить адрес, я получаю

Invalid Bitcoin Address: Format error - Bad digest

При попытке подтвердить с помощью;https://awebanalysis.com/en/bitcoin-address-validate/

ОБНОВЛЕНИЕ-2 Также найдено этот сайт , который сообщает, что у меня неверная контрольная сумма. Не вводите любую реальную информацию о том, что сайт не защищен.

UPDATE-3

Обнаружено, что первоначальный открытый ключ недостаточно длинный.С этот инструмент , который проверяет каждый шаг.Так что, как я подозревал, модуль hdkey проблематичен.теперь я ищу новый модуль javascript, который создаст пару ключей ec из семени bip39.

...