首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在红宝石中进行base58编码?

如何在红宝石中进行base58编码?
EN

Stack Overflow用户
提问于 2013-12-31 16:54:21
回答 1查看 2.6K关注 0票数 2

我试图用原始格式编码一个原母兔钱包地址,如比特币 wiki到Base58格式中所解释的那样。

原始兔子的地址以P (版本号56)开头。

我已经给出了交易的原始地址。看起来是这样:

代码语言:javascript
复制
028401a2e512b1b91b882ee1c9291cd407c10916bf791662f7189c9c805643e51c

现在,我已经从wiki逐步地遵循了指南,我的红宝石代码看起来是这样的:

代码语言:javascript
复制
# 1 - Take the corresponding public key generated with it (65 bytes, 1 byte 0x04, 32 bytes corresponding to X coordinate, 32 bytes corresponding to Y coordinate)
  sender = '028401a2e512b1b91b882ee1c9291cd407c10916bf791662f7189c9c805643e51c'
# 2 - Perform SHA-256 hashing on the public key 
  sender = Digest::SHA256.new.update(sender)
# 3 - Perform RIPEMD-160 hashing on the result of SHA-256
  sender = Digest::RMD160.new.update(sender.to_s)
# 4 - Add version byte in front of RIPEMD-160 hash (0x00 for Main Network) 
  sender = '00' + sender.to_s
# 5 - Perform SHA-256 hash on the extended RIPEMD-160 result 
  checksum = Digest::SHA256.new.update(sender.to_s)
# 6 - Perform SHA-256 hash on the result of the previous SHA-256 hash 
  checksum = Digest::SHA256.new.update(checksum.to_s)
# 7 - Take the first 4 bytes of the second SHA-256 hash. This is the address checksum 
  checksum = checksum.to_s[0,8]
# 8 - Add the 4 checksum bytes from point 7 at the end of extended RIPEMD-160 hash from point 4. This is the 25-byte binary Bitcoin Address. 
  sender += checksum

到目前为止,这似乎效果很好。我目前的结果如下:

代码语言:javascript
复制
0073eb40b21b02c08e93f6ef1bec5828763ac89e456c2f6fec

但现在我被困住了。我正在使用杜格尔的base58宝石并试图最终对地址进行编码:

代码语言:javascript
复制
# 9 - Convert the result from a byte string into a base58 string using Base58Check encoding. This is the most commonly used Bitcoin Address format 
  sender = Base58.encode(sender)

但我得到了以下问题:

代码语言:javascript
复制
/path/to/base58.rb:23:in `int_to_base58': Value passed is not an Integer. (ArgumentError)

当然不是整数。我是不是搞砸了这里的数据类型?该怎么做才能让这件事正常运作?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-31 17:51:35

在我看来,就像一个十六进制数字卡在一个字符串中,让它成为一个数字:

代码语言:javascript
复制
2.0.0p247 :001 > require 'base58'
 => true 
2.0.0p247 :002 > x = '0073eb40b21b02c08e93f6ef1bec5828763ac89e456c2f6fec'
 => "0073eb40b21b02c08e93f6ef1bec5828763ac89e456c2f6fec" 
2.0.0p247 :003 > Base58.encode(x.to_i(16))
 => "byVwGWzMZZ7HwsufSQx6T2pRapGZWdkAL" 

不确定你的预期输出是什么,但这会执行.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20860641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档