Libra区块链之初体验
Facebook的数字货币Libra的技术白皮书已经发布了将近1个月了,其测试网络(testnet)已经同步发布,一群开发爱好者已经完成了16万笔测试交易。
有人搭好了libra区块浏览器网站:
https://librabrowser.io/
甚至有团队开发出了libra的钱包软件:
https://wallet.libravista.com
作为一名程序员,一定要抢鲜体验一下这个将来可能改变世界的新技术,先按照官网上的说明构建出第一笔交易,参考的文档是:
https://developers.libra.org/docs/my-first-transaction
由于当前的Libra只支持Linux和MacOS,我以前的旧Macbook笔记本又派上了用场。
1. 先把libra从github克隆一份。
git clone https://github.com/libra/libra.git
2. 安装程序依赖项
cd libra
./scripts/dev_setup.sh
这里要构建 Libra Core,Libra Core是Facebook实现的Libra协议的一个开源版本,它用到了Rust编程语言,还需要CMake、protobuf和go之类的依赖库。
程序全自动安装,但在安装某个依赖库时一直失败,看了一下整个过程的警告信息,提示操作系统版本太低。
Warning: You are using macOS 10.10.
We (and Apple) do not provide support for this old version.
You will encounter build failures with some formulae.
用了1个小时把操作系统的版本更新到10.13,Libra环境才得以顺利安装。
3. 启动并连接到测试网络
下面命令构建出Libra CLI并启动。
./scripts/cli/start_cli_testnet.sh
如果一切顺利,会出现 libra% 提示符,熟悉以太坊开发的程序员,知道这里就是一些命令的交互界面。
4. 创建Alice和Bob账户
运行两次account create,生成两个账户,账户索引分别为0和1,地址是32字节的二进制,账户索引只能在CLI界面中使用,在区块链中必须使用32字节的账户地址。
libra% account create
>> Creating/retrieving next account from wallet
Created/retrieved account #0 address 5d5a1c2d8b9a3b341f414465abefdb170a4f8596cb326ed56df709e0af18ff4f
libra% account create
>> Creating/retrieving next account from wallet
Created/retrieved account #1 address 20053b6cdc84b7993b9398135e9cf4fcd5488917ef97e7ff48050b0392cd9e83
可以用account list命令确认账户已经建好。
libra% account list
User account index: 0, address: 5d5a1c2d8b9a3b341f414465abefdb170a4f8596cb326ed56df709e0af18ff4f, sequence number: 0, status: Local
User account index: 1, address: 20053b6cdc84b7993b9398135e9cf4fcd5488917ef97e7ff48050b0392cd9e83, sequence number: 0, status: Local
5. 从水管里取些Libra币
Alice和Bob现在都身无分文,无法进行任何转账的测试,各种区块链的测试网络都提供了免费的水管(Faucet)服务,你向它发出请求,它转给你一些测试币,当然这些币也一文不值,也肯定无法用于将来的正式网络中。
给Alice(账号索引0)取110个Libra。
给Bob(账号索引1)取52个Libra。
libra% account mint 0 110
>> Minting coins
Mint request submitted
libra% account mint 1 52
>> Minting coins
Mint request submitted
查询一下余额,发现秒到,看来这个测试网络运转得还不错。
libra% query balance 0
Balance is: 110.000000
libra% query balance 1
Balance is: 52.000000
题外话:如果2020年Libra正式上线,这个币从哪买?按照Libra的白皮书,铸币权由Libra协会掌握,肯定有大量的交易所提供各种兑换服务,将Libra与BTC/ETH等打通,这也就是BTC上涨的一个原因。
6. 转帐
忙活了半天,终于要转账了。先注意一个顺序号(sequence number)的概念,每个账户对外转账后,这个顺序号都要增1。
在交易之前,两个账户的顺序号都为0。
libra% query sequence 0
>> Getting current sequence number
Sequence number is: 0
libra% query sequence 1
>> Getting current sequence number
Sequence number is: 0
转账的命令就是一条:
transfer 0 1 10
表示Alice(账户索引0)给Bob(账户索引1)转10个Libra。
libra% transfer 0 1 10
>> Transferring
Transaction submitted to validator
To query for transaction status, run: query txn_acc_seq 0 0 <fetch_events=true|false>
现在再看一下顺序号有何变化,Alice发起了转账交易,所以她的顺序号增加1,而Bob的保持不变。
libra% query sequence 0
>> Getting current sequence number
Sequence number is: 1
libra% query sequence 1
>> Getting current sequence number
Sequence number is: 0
再查一下余额。
libra% query balance 0
Balance is: 100.000000
libra% query balance 1
Balance is: 62.000000
Alice给Bob转10块钱,看上去挺麻烦,但与微信支付/支付宝的区别在于,这笔交易不是由一家中介机构进行确认,而是由Libra协会中的100个成员机构(验证者)来确认,全部公开可查。
7. 完成
你也可以到 https://librabrowser.io 网站上输入你的转账地址,确认刚才的转账交易。下面的界面中显示了Alice的两笔交易:一开始从水管拿到的110个Libra,然后转出去10个,最后的余额为100。
未来已来,只是尚未流行。
--- END ---
- 黑科技:程序员如何打造属于自己的分体键盘
- Go语言实现socket实例
- go语言实现sqrt的方法
- Go语言实现set
- Docker新手入门实战教程
- Python远程控制模块paramiko遇到的问题及解决记录
- Windows下bat批处理脚本使用telnet批量检测远程端口小记
- WordPress集成PHP缩略图,并开启Nginx缓存的方法
- 分享几个WordPress本地缓存gravatar评论头像的方案
- Linux下的mongodb服务脚本,以备不时之需
- WordPress发布文章主动推送到百度,加快收录保护原创
- Nginx开启fastcgi_cache缓存加速,支持html伪静态页面
- Go-指针、传值与传引用、垃圾回收
- SEO分享:彻底禁止搜索引擎抓取/收录动态页面或指定路径的方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 使用View Binding的方法详解
- CentOS一键安装Resilio Sync脚本
- Python从URL获取图片、读取图片格式并保存到本地
- Linux一键屏蔽指定国家所有的IP访问
- React基础(9)-React中发送Ajax请求以及Mock数据
- 一个快速引入CDN的workflow
- 在Ryzen平台上安装macOS High Sierra苹果系统
- v-selectpage 基于Vue2的高清重制版
- Android Studio3.6中的View Binding初探及用法区别
- Android日志文件的读写工具类
- <Go语言学习笔记>【数组与切片】
- Android Studio 3.6 新特性一览(推荐)
- 03 Linux下的SVN服务器搭建
- Android openGl 绘制简单图形的实现示例
- 解决Android studio 3.6.1 出现Cause: unable to find valid certification path to requested target 报错的问题