Facebook Libra最近很是吸引眼球,作为看好Libra的区块链应用开发者,自然是要尝试着做些什么了。本文记录了开发一个Libra钱包的具体过程,采用RPC调用方案和链做交互。过程描述较为仔细,请视情况跳过已了解的内容。最后附上了Libra钱包源码的Github仓库地址,欢迎clone。

1.安装Libra、编译客户端、连接测试网

安装

git clone https://github.com/libra/libra.git && cd libra
./scripts/dev_setup.sh

编译客户端

cargo build

如果遇到 google/protobuf/wrappers.proto: File not found (macos环境),则在cargo build之前执行

export PATH="/usr/local/opt/protobuf/bin:$PATH"

看到下图则表示完成,预计5分钟时间

连接测试网

./scripts/cli/start_cli_testnet.sh

进入交互终端

2.体验:创建账户、充值、发起交易、查询交易

创建账户

account create

执行

account list

列举刚刚创建的两个账号

给#0账号充值

account mint 0 10000

然后查询余额

query balance 0

结果为 Balance is: 10000

发起交易

transfer 0 1 2

之后查询交易

query txn_acc_seq 0 0 true

返回包括Committed transaction和Events和两部分。通过amount可以看出数额最多保留到小数点后6位,这对于稳定币而言足矣。

此时尝试退出后重新进入,执行account list返回为空,看似数据被清除了。但当你执行account create以后创建的账户还和之前的一样,再查询余额,之前充值的影响还在,其实数据已经上了测试网络。

3.本地运行节点

体验过Libra的基本操作后,接下来我们需要自己在本地跑一个认证节点。

cargo run -p libra_swarm -- -s

(注意:请提前关闭本地的代理,否则会报错)

如果执行顺利,会和上文执行./scripts/cli/start_cli_testnet.sh一样进入交互终端。

可以看到运行在本地的节点,数据是和测试环境独立的,并且退出后数据会重置。

4.调用链的API实现

由于Libra提供了rpc调用方式,我们能够很方便的选择语言进行开发。这里我基于nodejs开发了一个npm包libra-weight,用于封装rpc方法提供前端调用的基本api。

libra-weight在实现接口前做了这些事:

复制rust源码中的proto文件到项目中,然后执行以下代码:

protoc --proto_path=./ --proto_path=/usr/local/Cellar/protobuf/3.7.1/include/ --js_out=import
_style=commonjs,binary:. *.proto

每个.proto文件都会得到编译后的*.pb.js:

搜索proto中的request,只实现了这几个接口:

做了接口接下来就是在钱包应用中调用了,此时就把libra-weight发布完放一边,进入Libra-wallet,代码结构以及调用的实现如下:

然后前往浏览器中调用接口,就能看到账户的交易信息了

示例使用了官方测试网络地址,当然你完全可以如前文中所写,在本地自行搭建验证节点,并且运行示例代码直观感受一番。至于钱包前端已经有不少人做了,可以先去 https://github.com/learndapp/awesome-libra#open-source-wallets 看看钱包的部分。

创建账户可以在Libra终端内进行,因为Libra没有挖矿,可以认为充值属于特殊的一种转账交易,也可以在终端中完成。如果你现在就要做到在钱包应用中创建账户,不妨看看这个案例 https://medium.com/kulapofficial/the-first-libra-wallet-poc-building-your-own-wallet-and-apis-3cb578c0bd52 ,当然这种实现方式只是用于演示,创建账户的操作交由他人或经过网络传输都是不安全的。合理的方案是本地环境创建账户+api调用进行转账交易的广播。

后话

Libra项目有很多可以探索的地方。比方说用Move编写的mvir后缀文件,如同以太坊Solidity的sol后缀一样,可以称之为Libra中的智能合约。目前在应用端做尝试的也不少,比如区块浏览器,可以去 https://github.com/learndapp/awesome-libra#blockchain-explorers 的区块链浏览器部分查看。接下来我也会做更多实践,有新发现会持续分享。

文中提到的钱包源码:https://github.com/learndapp/Libra-wallet

本文已整理至仓库:https://github.com/learndapp/LearnDapp

记得顺手点个Star,这是对我最好的支持。有任何问题也欢迎随时联系我的微信公众号「区块链瓦工」。

参考连接

官方文档:

https://developers.libra.org/docs/my-first-transaction
https://developers.libra.org/docs/move-overview
https://developers.libra.org/docs/crates/ir-to-bytecode
https://developers.libra.org/docs/reference/libra-cli

Libra区块链钱包开发实录附源码 - LearnDapp系列相关推荐

  1. 区块链钱包开发(Android篇)

    区块链钱包开发(Android篇) 2018年10月27日 23:07:08 a526247082 阅读数 6309 简介 本文主要内容为区块链钱包移动端(Android)开发,介绍比特币钱包和以太坊 ...

  2. 区块链钱包开发架构的简单介绍

    随着国内区块链数字货币交易平台的逐步完善,区块链钱包的使用会越来越频繁和重要,在使用区块链钱包时,有几个名词必须深刻理解,不然就有可能造成区块链资产的损失,这几个名词为私钥.助记词.keystore. ...

  3. 基于Java的Android区块链钱包开发(ETH篇)

    基于Java的Android区块链钱包开发-ETH篇 引言 使用的库 具体代码如下 生成公私钥.地址 查余额.签名转账 引言 首先要生成12个助记词,区块链开发之生成12个助记词 使用的库 imple ...

  4. JAVA计算机毕业设计校园便利店信息系统开发(附源码、数据库)

    JAVA计算机毕业设计校园便利店信息系统开发(附源码.数据库) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclis ...

  5. 区块链开发指南_区块链钱包开发

    开发钱包之前,我们需要有以下的预备知识. 第一,什么是钱包,以及相关的分类. 本文站在开发者的角度,给读者讲解下怎么样和钱包进行交互,以及如何开发一个钱包. 我们怎么样理解钱包呢?简单讲它是连接区块链 ...

  6. 区块链钱包开发的前景

    在开发钱包之前,咱们需求具有以下开端常识 首先,什么是钱包,以及相关的分类. 本文从开发者的角度,向读者论述了怎么与钱包进行交互,以及怎么开发一个钱包. 咱们怎么理解钱包?简略地说,它是区块链的入口. ...

  7. nodejs+mysql+node基于vue框架的游戏商城设计及开发 毕业设计-附源码262127

    Node.js<夜幕>游戏商城的开发 摘  要 现今人们的生活方式逐渐丰富,电脑和网络已经融入了人们生活中的滴滴点点,无时不刻的影响着我们的日常生活,网络游戏已经进入到了大多数人的生活之中 ...

  8. PHP源码1001PHP源码,某区块链养殖系统平台PHP源码无加密完整版,带充值接口+完整会员系统 可封装APP可二开...

    站长评测:对接的应该是码支付,源码没啥问题,有些功能还没开发完,适合二开,需要的朋友看看! 1.只需用330元注册狗狗集市的一个游戏账户,就可以加入我们的大家庭了并可以获得戏猪的称号.第二天才会有收益 ...

  9. 一个web图片热点生成工具(winform开发) 附源码

    给图片加热点是web开发中经常用到的一个功能.这方面的工具也不少. 为了更好的满足自己的需求,写了一个winform程序. 可以方便的给图片加热点,更方便灵活! 源码下载 http://downloa ...

最新文章

  1. 数字拆分问题算法回溯_回溯算法:求子集问题!
  2. matlab中卡尔曼滤波,卡尔曼滤波器和matlab代码.doc
  3. 学习虚幻4需要储备的知识(2D游戏开发者向)
  4. [xUnit]尝试单元测试
  5. SrpingCloud 之SrpingCloud config分布式配置中心实时刷新
  6. Qt之程序发布以及打包成exe安装包
  7. 设计师要懂布局(一)
  8. linux on win原理,linux on win10 上手体验
  9. 苹果抄袭豌豆射手实锤!AirPods Pro又被玩坏了...
  10. tp3.2中怎么访问分类及子分类下面的文章
  11. AppScan漏洞“已解密的登陆请求”修复解决方案
  12. 九度教程第28题-堆栈的的使用(栈的使用)
  13. 经典SQL练习题(MySQL版)
  14. STM8S003F3控制LED
  15. ORA-12162: TNS:net service name is incorrectly specified 错误解决
  16. 华为机试:身高体重排序
  17. Apache访问控制和Web虚拟主机
  18. 任务栏没有计算机快捷方式,电脑程序在运行但是任务栏没有图标怎么处理 电脑程序在运行但是任务栏没有图标如何处理...
  19. 外卖领券CPS的可玩性探索
  20. 【CVPR2022】Detecting Camouflaged Object in Frequency Domain

热门文章

  1. 编程定义一个汽车类Car
  2. html和css中的奇淫巧技:
  3. C语言 | 学习使用递增运算符
  4. PTA大幅增仓创新高,白糖认购翻倍,玻璃09-01反弹2022.5.31
  5. 『季末私语』留给我一地落花..是你的笑
  6. 还不会识别手写文字吗?这几款手写识别软件不可错过
  7. Prometheus 报警规则配置
  8. 图像处理与机器视觉_第二篇
  9. js判断某个变量是否等于undefined
  10. arcgis更改图层坐标系_【干货】ArcGIS之shp文件坐标系互转