0

我正在尝试使用 node.js javascript 验证狗狗币地址。

但我仍在努力理解算法。

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

据我所知(如果我错了,请纠正我)它的狗狗币地址与比特币地址没有什么不同。

所以我尝试执行以下操作

  1. Base58解码地址
  2. 计算解码地址的一个sha256的返回结果的sha256(两次sha256)
  3. 将 sha256 结果的前 4 个字节与解码地址的后 4 个字节进行比较(我认为我在这里犯了一个错误)..

当我尝试将其写入 javascript 时,base58 解码结果是正确的,当我尝试从解码值创建缓冲区时,它会抛出错误,指出该值正确

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

上面会抛出一个错误,如果我这样做decodedBase58Result.toString()会字符串化脚本继续但不返回预期结果的数字。

那么,有没有办法解决这个问题?不依赖第三方api调用


更新: 我研究了很多,我找到了一个客户端验证器,我用一小段代码制作了一个 npm 包

它在不依赖任何第三方 api/服务调用的情况下验证地址。

4

2 回答 2

3

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

这也适用于浏览器。希望这可以帮助。

于 2014-03-11T19:42:51.840 回答
0

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

所以不,它和比特币一样,代码示例在这里

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

于 2014-02-26T03:37:19.223 回答