Javascript 节点上的Dogecoin地址验证

Javascript 节点上的Dogecoin地址验证,javascript,node.js,cryptography,bitcoin,dogecoin-api,Javascript,Node.js,Cryptography,Bitcoin,Dogecoin Api,我正在尝试使用node.js javascript验证dogecoin地址 但我仍在努力理解算法 我当前的node.js版本是v0.10.22 据我所知(如果我错了,请纠正我),dogecoin地址与比特币地址没有区别 所以我试着做以下几点 Base58解码地址 计算解码地址的sha256返回结果的sha256(两次sha256) 将sha256结果的前4个字节与解码地址的最后4个字节进行比较(我认为我在这里犯了一个错误) 当我尝试将其写入javascript时,base58解码结果是正确的,当

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

但我仍在努力理解算法

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

据我所知(如果我错了,请纠正我),dogecoin地址与比特币地址没有区别

所以我试着做以下几点

  • Base58解码地址
  • 计算解码地址的sha256返回结果的sha256(两次sha256)
  • 将sha256结果的前4个字节与解码地址的最后4个字节进行比较(我认为我在这里犯了一个错误)
  • 当我尝试将其写入javascript时,base58解码结果是正确的,当我尝试从解码值创建缓冲区时,它抛出错误,指出值不正确

    var decodedHex=新缓冲区(decodedBase58Result,'hex')

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

    那么,有解决办法吗不依赖第三方api调用
    更新: 我做了很多研究,找到了一个客户端验证器,用一小段代码制作了一个npm包


    它在不依赖任何第三方api/服务调用的情况下验证地址。
    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>
    
    crypto.createHash('sha256')。更新(crypto.createHash('sha256')。更新((新缓冲区('1e43d1c5e88853622efe39e7a838cebf01cf3029589a614274','hex'))。切片(0,21))。摘要('Buffer')。摘要('Buffer')。摘要('Buffer'))
    
    将地址-
    …9a614274
    -中的最后4个字节与生成的哈希-
    9a614274…
    进行比较,如果找到匹配项,则地址有效

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


    5.868133917508844e+59
    是解码为整数的地址。问题是javascript使用52位来表示整数,但您有200位地址。因此,您正在使用的解码器在这里不起作用。
    DBKh7QAP9gkXncVK32jtfae4QXChPwsyKH
    的解码数据库58result将是
    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>
    
    crypto.createHash('sha256')。更新(crypto.createHash('sha256')。更新((新缓冲区('1e43d1c5e88853622efe39e7a838cebf01cf3029589a614274','hex'))。切片(0,21))。摘要('Buffer')。摘要('Buffer')。摘要('Buffer'))
    
    将地址-
    …9a614274
    -中的最后4个字节与生成的哈希-
    9a614274…
    进行比较,如果找到匹配项,则地址有效

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

    5.868133917508844e+59
    是解码为整数的地址。问题是javascript使用52位来表示整数,但您有200位地址。因此,您正在使用的解码器在这里无法工作。

    我编写了一个模块()来实现这一点。它是项目的一部分,有很多组件可以使用。它的使用非常简单:

    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
    
    这也适用于浏览器。希望这能有所帮助。

    我编写了一个模块()来实现这一点。它是项目的一部分,有很多组件可以使用。它的使用非常简单:

    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
    

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

    您能展示一个有效的dogecoin地址的示例吗?@alex an dogecoin地址
    DBKh7QAP9gkXncVK32jtfae4QXChPwsyKH
    及其base58解码值
    5.868133917508844e+59
    公开
    validateaddress
    命令。您可以使用它,尽管我不确定这是否算作“第三方api调用”。@jamesalardice是的,我见过这个模块,它需要一个dogecoin守护进程来执行命令,验证是我唯一想做的事情,对于这么简单的事情,似乎有很多额外的东西。你能展示一个有效的dogecoin地址的例子吗?@alex an dogecoin地址
    DBKh7QAP9gkXncVK32jtfae4QXChPwsyKH
    及其base58解码值
    5.868133917508844e+59
    公开了
    validateaddress
    命令。您可以使用它,尽管我不确定这是否算作“第三方api调用”。@jamesalardice是的,我见过这个模块,它需要一个dogecoin守护进程来执行命令,验证是我唯一想做的事情,对于这么简单的事情来说,似乎有很多额外的东西。当然,node.js中没有脚本或模块来正确执行base58解码,尽管我现在理解了这个概念,但要实现这一点很难,即使在npm中有像
    大整数
    这样的模块。python示例看起来非常简单。。无论如何,我将围绕bash示例总结一些内容。当然,node.js中没有脚本或模块来正确执行base58解码,尽管我现在理解了这一概念,但要实现这一点很难,即使在npm中使用像
    big integer
    这样的模块。python示例看起来非常简单。。无论如何,我将围绕bash示例总结一些内容。