代码之家  ›  专栏  ›  技术社区  ›  Gntem

nodejs上的Dogecoin地址验证

  •  1
  • Gntem  · 技术社区  · 12 年前

    我正在尝试使用node.jsjavascript验证dogecoin地址。

    但我仍在努力理解算法。

    我当前的node.js版本是 版本0.10.22

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

    所以我试着做以下事情

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

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

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

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

    那么,有解决办法吗? 不依赖于第三方api调用


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

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

    2 回复  |  直到 12 年前
        1
  •  3
  •   JP Richardson    12 年前

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

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

        2
  •  0
  •   alex    12 年前

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

    所以不,它和比特币一样,代码样本是 here .

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