Проверка адреса Dogecoin на nodejs

Я пытаюсь проверить адрес Dogecoin с помощью node.js javascript.

Но я все еще пытаюсь понять алгоритм.

моя текущая версия node.js v0.10.22

из того, что я смог понять (поправьте меня, если я ошибаюсь), его адрес dogecoin ничем не отличается от адреса bitcoin.

Поэтому я пытаюсь сделать следующее

  1. Base58 расшифровать адрес
  2. вычислить sha256 возвращенного результата sha256 декодированного адреса (два раза sha256)
  3. сделать сравнение первых 4 байтов результата sha256 с последними 4 байтами декодированного адреса (я думаю, что я здесь ошибаюсь ) ..

когда я пытался записать это в javascript, декодированный результат base58 верен, когда я пытаюсь создать буфер из декодированного значения, он выдает ошибку, указывающую, что значение неверно

var decodedHex = new Buffer(decodedBase58Result,'hex')

выше выдает ошибку, если я делаю decodedBase58Result.toString() который укажет число, которое продолжит скрипт, но не вернет ожидаемого результата.

Итак, есть ли решение для этого? вне зависимости от сторонних звонков API


Обновление: я много исследовал, и я нашел валидатор на стороне клиента, с небольшим фрагментом кода, я сделал пакет npm

который проверяет адрес, не полагаясь на какие-либо сторонние вызовы API / сервисов.

2 ответа

Решение

decodedBase58Result за DBKh7QAP9gkXncVK32jtfae4QXChPwsyKH было бы 1e43d1c5e88853622efe39e7a838cebf01cf3029589a614274,

crypto.createHash('sha256').update(crypto.createHash('sha256').update((new Buffer('1e43d1c5e88853622efe39e7a838cebf01cf3029589a614274', 'hex')).slice(0,21)).digest('buffer')).digest('buffer')
<SlowBuffer 9a 61 42 74 97 0b 64 ae 2e 7f d6 f8 b1 81 90 12 f3 5e 3a 0b a1 f4 f2 c2 47 fe 20 7e 4f a1 27 25>

Сравните последние 4 байта с адреса - ...9a614274 - с полученным хешем - 9a614274..., если вы получили совпадение, адрес действителен.

Так что нет, это то же самое, что и биткойн, примеры кода здесь.

5.868133917508844e+59 адрес, декодированный как целое число Проблема в том, что javascript использует 52 бита для представления целых чисел, но у вас есть 200-битный адрес. Таким образом, используемый вами декодер не будет работать.

Я написал модуль ( Coinstring) для этого. Это часть проекта CryptoCoinJS, в которой есть много компонентов, которые вы можете использовать. Это очень просто в использовании:

npm install --save coinstring@0.2.0

Пример:

var coinstring = require('coinstring');

//0x1E => for public Dogecoin addresses
var isValid = coinstring.validate(0x1E, 'DBKh7QAP9gkXncVK32jtfae4QXChPwsyKH');
console.log(isValid); // => true

Это работает и в браузере. Надеюсь это поможет.

Другие вопросы по тегам