如何在 ruby​​ 中进行 base58 编码?

2024-03-19

我正在尝试编码原型股 http://protoshares.net/原始格式的钱包地址,如中所述Bitcoin https://en.bitcoin.it/wiki/Technical_background_of_Bitcoin_addresseswiki 转换为 Base58 格式。

Protoshares 地址以 P 开头(版本号56 https://en.bitcoin.it/wiki/List_of_address_prefixes).

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

028401a2e512b1b91b882ee1c9291cd407c10916bf791662f7189c9c805643e51c

现在我已经按照 wiki 中的指南一步一步进行操作,我的 ruby​​ 代码如下所示:

# 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

到目前为止,这似乎运作良好。我当前的结果如下所示:

0073eb40b21b02c08e93f6ef1bec5828763ac89e456c2f6fec

但现在我被困住了。我正在使用dougal 的 base58 宝石 https://github.com/dougal/base58并尝试最终对地址进行编码:

# 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)

但我遇到以下问题:

/path/to/base58.rb:23:in `int_to_base58': Value passed is not an Integer. (ArgumentError)

当然它不是一个整数。我在这里搞砸了数据类型吗?怎样做才能使其正常工作?

Thanks!


对我来说,看起来像是一个十六进制数字卡在字符串中,将其设为数字​​:

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" 

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 ruby​​ 中进行 base58 编码? 的相关文章

  • 使用 utf-8 的 Java BufferedWriter 对象

    我有以下代码 我想让输出流使用 utf 8 基本上我有这样的角色 显示为 233 所以看起来像是编码问题 我见过很多使用 的例子 OutputStreamWriter out new OutputStreamWriter new FileO
  • Rails 控制台无法运行

    rbenv 红宝石版本 2 6 6 导轨版本 5 1 4 我正在较旧的代码库中工作 ruby 2 6 6 rails 5 4 1 这是我每天使用的代码库 我必须通过 rbenv 下载一个新的 ruby 版本作为单独的存储库 这样做在我的旧代
  • ruby 中的 #encode 和 #force_encoding 有什么区别?

    我真的不明白之间的区别 encode and force encoding在 Ruby 中String班级 我明白那个 kam force encoding UTF 8 将迫使 kam 是UTF 8编码 但是怎么样 encode encod
  • 多重要求和允许强参数rails 4

    在下面的情况下 我尝试使用强参数 我想要求email address password并允许remember me fields 但像下面这样使用它只允许最后一行在方法示例中 在下面的情况下 它只需要params permit rememb
  • “rmagick”gem 安装问题

    我在尝试在 centos 上安装 rmagick gem 时遇到问题 以下是我得到的输出 谁能帮我识别一下我缺少什么包裹 我已经安装了所有提到的另一个堆栈溢出线程 RMagick安装错误 https stackoverflow com qu
  • Windows-1252 编码 - 显示不正确的字符

    我有一个缓冲区 其中包含以 Windows 1252 编码的字符 然而 当我使用适当的编码创建一个新的字符串时 我经常得到询问标记 而不是预期的结果 例如 byte tmps new byte byte 0xfb System out pr
  • 用户未定义的方法 attr_accessible 错误

    我正在尝试创建某种登录 我创建了一个用户脚手架并将此代码放在我的 user rb 中 class User lt ActiveRecord Base attr accessible name password digest password
  • ruby从1.8.7升级到1.9.2(使用Rails 3.1.1)后本地服务器错误

    我刚刚安装了rvm并使用rvm将ruby从1 8 7升级到1 9 2 我在我的应用程序上运行了捆绑安装 它重新安装了我的 gems 当我在本地运行 Rails 服务器并将浏览器导航到 localhost 3000 时 服务器日志中显示以下错
  • 红宝石接球和效率

    catch在 Ruby 中意味着跳出深度嵌套的代码 在 Java 中 例如用Java也可以达到同样的效果try catch用于处理异常 但它被认为是糟糕的解决方案 而且效率非常低 在 Ruby 中 我们有处理异常的方法begin raise
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • 经典的asp字符编码

    我在经典 asp 网站中遇到西班牙字符问题 用户可以在 aspx 页面上的表单中提交他们的姓名 地址 然后 aspx 页面将 ajax post 发送到经典的 asp 页面 它所做的所有操作都存储在我们的 Sql 2008 DB 中 我可以
  • 使用哈希参数进行 DRY Ruby 初始化

    我发现自己经常在构造函数中使用哈希参数 尤其是在为配置或最终用户将接触到的其他 API 编写 DSL 时 我最终做的是类似以下的事情 class Example PROPERTIES name age PROPERTIES each p a
  • 超类与类SpecificationPolicy不匹配

    我得到了一个superclass mismatch for class SpecificationPolicy尝试安装或升级某些brew 软件包时出错 例如 更新安装 supabase CLI 时 brew install supabase
  • 如何纠正 data.frame 上的字符编码

    我有一个像这样的数据框 data names lt data frame DATA c 1 5 rownames data names lt c IV xc1N JOS xc9 LUC xcdA RAM xd3N TO xd1O data
  • 这个巨大的正则表达式是如何工作的?

    我最近在我的一个目录中的一个名为的文件中找到了下面的代码doc php 文件功能或链接到文件管理器 做得非常好 基本上 它列出了当前目录中的所有文件 并且允许您更改目录 它可以访问我的所有文件 添加 重命名 信息 删除 我不记得安装过它 我
  • 如何声明依赖于参数化任务的 Rake 任务?

    我见过一些任务具有参数和依赖项任务的示例 例如 task name first name last name gt pre name do t args args with defaults first name gt John last
  • 如何使用 ruby​​ 和命令行工具在 mavericks 中正确安装 cocoapod?

    这是我的设置 小牛队10 9 1 Xcode 5 0 2 哪个红宝石返回这个 Users quique123 rvm rubies ruby 1 9 3 p194 bin ruby 但 dvm install ruby 返回 Already
  • 从logstash中的文件名获取事件的时间戳

    我们有一个将事件写入文件的进程 没有时间戳 文件名本身带有时间戳后缀 该时间戳应用于文件中的所有事件 现在 我尝试使用logstash的输入文件插件来解析该文件 有没有一种方法可以将文件名获取到字段 以便我可以使用 gsub 过滤器提取时间
  • 在 Rails 中本地化嵌套虚拟属性

    怎么可能本地化嵌套虚拟属性在 Rails 中 该模型 class User lt ActiveRecord Base attr accessor company information This is used in callbacks e
  • sqlite3-ruby gem:无法构建 gem 本机扩展

    Update 看看这个后续问题 Windows 上的 Gem 更新 它坏了吗 https stackoverflow com questions 134581 gem update on windows is it broken 在 Win

随机推荐

  • 如何在语义保证下使用 React.memo 或 useMemo?

    的文档useMemo says 您可以依赖 useMemo 作为性能优化 而不是作为语义保证 未来 React 可能会选择 忘记 一些 先前记忆的值并在下次渲染时重新计算它们 例如 为屏外组件释放内存 编写你的代码 以便它 没有 useMe
  • 代理 Firebase 函数的跨域状态 cookie 问题

    我使用开发了一个oAuth登录这个例子 https github com firebase functions samples tree master linkedin auth 遇到的第一个问题是如果浏览器中禁用第三方 cookie 现在
  • 如何将 Xml 属性绑定到 Treeview 节点,同时将 XDocument 数据绑定到 WPF Treeview

    我有一个 XML 需要将数据绑定到WPF 树视图 这里 XML 可以有不同的结构 TreeView 应该是数据绑定通用的 足以加载层次结构的任何排列 然而X属性在节点上 称为Title 应该数据绑定到 TreeViewItem 的标题文本
  • 在双屏环境上运行应用程序[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 C 中找到应用程序正在哪个屏幕上运行 https stackoverflow com questions 549751 how do i find what screen the applic
  • 模拟用户脚本中的 Enter 键 tampermonkey [重复]

    这个问题在这里已经有答案了 我正在尝试编写一个用户脚本 在类名 chat input 的输入标记中键入一些内容并按 Enter 键 到目前为止 用户脚本仅键入 Hello 在聊天输入中 但不模拟回车键 知道为什么吗 var msg Hell
  • 将文本和容器置于圆圈内

    我这里有一个 Bootply http www bootply com XLGE6Vpjov http www bootply com XLGE6Vpjov 我需要将 3 个圆圈置于容器中 然后将其中的文本水平和垂直居中 如何使文本垂直居中
  • 获取模型或控制器中消化的 asset_path

    我有一个Article模型 它有一个字段svg path I use fabricjs绘制可以包含多篇文章且可修改的画布 我目前所做的是生成一个json包含文章的所有必需字段 包括svg path 当我尝试使用asset path帮手 ht
  • 如何使用 python boto3 将 s3 对象从一个存储桶复制到另一个存储桶

    我想将文件从一个 s3 存储桶复制到另一个 我收到以下错误 s3 meta client copy 源 目标 类型错误 copy 至少需要 4 个参数 给定 3 个 我无法通过阅读文档找到解决方案 这是我的代码 usr bin env py
  • madvise() 中 MADV_USERFAULT 标志的状态是什么?

    已经有一些讨论在 madvise 中使用新标志来告诉内核不要处理某些内存范围内的页面错误 lwn net 1 https lwn net Articles 615086 lwn net 2 https lwn net Articles 54
  • Google Drive SDK iOS 示例

    我按照Google Drive sdk的iOS示例教程中的步骤进行操作 https developers google com drive ios quickstart https developers google com drive i
  • paxos 与 raft 进行领导者选举

    读完paxos和raft paper后 我有以下困惑 paxos论文仅描述了单个日志条目的共识 相当于raft算法中的领导者选举部分 在raft的leader选举中 paxos的方式相对于简单的随机超时方式有什么优势呢 一个常见的误解是原始
  • 在 Eclipse 控制台中对日志进行着色

    有没有办法在 Eclipse 控制台中对部分日志进行着色 我知道我可以发送到错误和标准流并对它们进行不同的着色 但我更喜欢在 ANSI 转义代码 或任何其他 HTML 行中查找一些内容 我可以在字符串中嵌入颜色以使其在字符串中着色日志 它肯
  • 强制表单文本为小写

    我如何强制 用户名 文本中的文本input无论用户类型如何都小写 div class register div
  • 当区域控制器加载时,为什么我的 BaseController.User 值 == null ? [复制]

    这个问题在这里已经有答案了 我正在编写一个 Asp Net 核心应用程序 并且在获得导航访问权限之前让用户通过 Google 进行身份验证 当用户导航到我的 WorldBuilder 区域并点击 WorldController 时 Base
  • 两个具有相同名称和不同私钥的 iOS 分发证书的问题[已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们有两个 iOS 发行版证书 我在签名时遇到一些问题 因为两个分发证书具有相同的名称 如果我添加两个证书并尝试使用其中一个证书进行签名
  • sqlite 选择日期条件

    我有一个带有出生日期的 sqlite 表 我想执行一个查询来选择年龄超过 30 岁的记录 我已经尝试过以下方法 但它不起作用 select from mytable where dob gt 1 Jan 1980 select from m
  • Django Rest Framework 在序列化之前更新数据

    我希望任何用户都可以使用我的 RESTful API 创建自己的产品 为此 我创建了一个继承ListCreateAPIView的视图 问题是用户应该只创建他 她拥有的产品 因此当创建 Product 模型的实例时 我希望字段 Owner 对
  • 如何为iMessage Sticker App网格贴纸提供不同尺寸

    我创建了一个 iOS iMessage 贴纸应用程序 根据苹果文档 我应该能够以三种不同尺寸之一显示贴纸 但是 无论我将贴纸图像设置为什么尺寸 300px x 300px 408px x 408px 618px x 618px 它们仅显示为
  • Golang 中的函数声明

    在 Golang 中声明函数似乎有两种不同的方式 如下所示 package main import fmt var someFunc func arg string fmt Println arg func main someFunc He
  • 如何在 ruby​​ 中进行 base58 编码?

    我正在尝试编码原型股 http protoshares net 原始格式的钱包地址 如中所述Bitcoin https en bitcoin it wiki Technical background of Bitcoin addresses