在nodejs上进行狗狗币地址验证

时间:2014-02-25 12:44:09

标签: javascript node.js cryptography bitcoin dogecoin-api

我正在尝试使用node.js javascript验证一个dogecoin地址。

但我仍然试图理解算法。

我当前的node.js版本是 v0.10.22

从我能够理解的(如果我错了,纠正我)它的dogecoin地址与比特币地址没有区别。

所以我尝试做以下

  1. Base58解码地址
  2. 计算解码地址sha256返回结果的sha256(两次sha256)
  3. 比较sha256结果的前4个字节和解码地址的最后4个字节(我想我在这里犯了错误)..
  4. 当我尝试将此写入javascript时,base58解码结果是正确的,当我尝试从解码值创建缓冲区时,它会抛出错误,指出该值正确

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

    上面引发了一个错误,如果我decodedBase58Result.toString()将脚本化脚本继续但不返回预期结果。

    那么,有解决方案吗? 不依赖第三方API呼叫

    <小时/> 的更新 我研究了很多,我找到了一个客户端验证器,用一小段代码我做了一个npm包

    验证地址,而不依赖任何第三方api /服务电话。

2 个答案:

答案 0 :(得分:4)

我写了一个模块(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

这也适用于浏览器。希望这会有所帮助。

答案 1 :(得分:1)

decodedBase58Result的{​​p> DBKh7QAP9gkXncVK32jtfae4QXChPwsyKH1e43d1c5e88853622efe39e7a838cebf01cf3029589a614274

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...,如果得到匹配,则地址有效。

所以不,它与比特币相同,代码样本为here

5.868133917508844e+59是解码为整数的地址。它的问题是javascript使用52位来表示整数,但你有200位地址。所以你使用的解码器在这里不起作用。