开源项目 写了一个 Libra 的客户端库

ylt · 2019年10月19日 · 最后由 ylt 回复于 2019年10月23日 · 4501 次阅读

Libra 是 facebook 推出的一种数字货币,和实际的法币挂钩,在我看来是 ‘真实’ 的货币,应该可以算是 M0。最近几个月尝试给 Libra 项目写一个 ruby 的客户端,最终形成了两个开源项目'casoer-ruby''libra_client_ruby'

casoer-ruby : LCS 的 ruby 实现

A Ruby implementation of the LCS(Libra Canonical Serialization)

LCS(Libra Canonical Serialization) 是 Libra 中采用的规范序列化协议。它可确保内存里的数据结构在序列化的时候保证字节一致性。它适用于双方想要有效比较他们独立维护的数据结构。在共识协议中,独立验证者需要就他们独立计算的状态达成一致。共识双方比较的是序列化数据的加密散列。要实现这一点,在计算时,相同数据结构的序列化必须相同。而独立验证器可能由不同的语言编写,有不同的实现代码,但是都遵循同一个规范。

libra_client_ruby : 访问 Libra 网络的 Ruby 语言 API

Cient APIs for the Libra network

Libra 网络采用的是 protobuf+grpc 的接口协议, 'libra_client_ruby'主要是对该协议的封装。安装方式很简单,标准的 gem 命令:

gem install libra_client

要访问 Libra 网络,参考下面的代码:

require 'libra_client'
client = Libra::Client.new(:testnet)
state = client.get_account_state("000000000000000000000000000000000000000000000000000000000a550c18")
state.balance           #the balance of the account
state.sequence_number   #the sequence_number of the account

在写这个库的过程中,碰到了一个难题。Ruby 目前不支持 SHA3 系列散列算法,包括 SHA3_224, SHA3_256, SHA3_384 and SHA3_512。但是 Libra 中使用的 Hash 算法是 SHA3_256。 我尝试自己实现了 Openssl 中 SHA3 系列函数的 Ruby 移植,但是pull request没有通过,最后放弃了。

Libra 客户端库的 Python 实现

由于 python 和 ruby 语法类似,且支持 SHA3_256,所以我尝试用 python 重写了一遍上面的两个库。而且 python 的版本支持完整的客户端功能,比如交易和钱包。

A Python implementation of the LCS(Libra Canonical Serialization)

Python Language APIs for the Libra network

等 ruby 支持了 SHA3, 也许考虑升级一些 ruby 的客户端。

afly 回复

最后更新是 4 年前,和最新的 sha3 标准不兼容。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册