近期Facebook拟发行的Libra币,可以说是加密货币界和传统金融行业的一件大事,很多人都认为这次数字货币真的可能改变世界。作为程序员而言,怎样搭上这班车,相信是大家都非常关心的。我觉得我们可以从开发Libra币的智能合约入手,将现实世界中的支付场景,尤其是跨境支付场景,在Libra币的环境来实现,也许可以找到好的方向。本文就是根据libra.org中的文档,在本地运行Libra的测试网络,创建两个用户,实现两个用户之间的转账操作,为下面用Move语言来开发智能合约打下基础。
搭建Libra测试网络
由于Libra网络还没有正式运转,我们要体验Libra体系架构,可以通过测试网络来进行,这样做还有一个好处,就是不像正式网络那样,我们需要真金白银的投入资金,才有体验的资格。
根据Libra的文档,想要运行Libra测试网络,需要Linux或MacOS操作系统,所以本文以MacOS系统为例进行讲解。在MacOS中需要事先安装好git和homebrew,由于这些都是基本内容,这里就不再介绍了,读者可以参考网上的文章来进行安装配置。
下载Libra源码
Libra系统首先是一个区块链系统,所以我们先要下载Libra的源码:
git clone https://github.com/libra/libra.git
整个项目是用Rust语言编写的,代码量不算大,很快就可以下载完成。
配置Libra Core
接下来通过命令配置Libra Core:
cd libra
./scripts/dev_setup.sh
安装过程选择让安装程序自动安装依赖库,即可完成安装过程。
在安装过程中,由于要向/usr/loca/share目录写入帮助文件,可能出现权限不足的问题,可以通过如下命令将该目录所有者改为当前用户:
sudo chown -R gile /usr/local/share
再次运行即可成功安装了。
连接到测试网络
通过如下命令来编译Libra客户端并连接到Libra测试网络的验证节点:
./scripts/cli/start_cli_testnet.sh
这一步由于要下载配置的东西较多,所以会等一段时间,所以请耐心等待。运行成功后会显示类似如下所示的界面:
在最后一行的libra%就是命令提示符,表示我们可以向Libra测试网络发送命令了。
创建用户
在连接到Libra测试网络之后,我们就可以开始创建账户了。
首先确认系统连接在Libra测试网络
运行如下命令:
account
如果打出类似如下内容,则证明环境是正常可用的:
创建账户
运行如下命令:
account create
运行结果如下所示:
如上所示:#0代表我们创建的这个账户的编号为0号,后面跟的是钱包地址,在实际应用中,我们需要将这个信息记录到数据库中。
接下来我们用同样的方式创建另一个账户Bob,如下所示:
到目前为止,我们系统中的账户有:
[
{
"account_name": "Alice",
"index": 0,
"address": "71748027e46f4117523284942a6e9aede3fe188c21a44b6f9453230b6c695847"
},
{
"account_name": "Bob",
"index": 1,
"address": "c4de7185942bf3f4d65628462d6303efc51375996b5d199dd4cc9c829263d9e4"
}
]
列出当前系统账户
account list
运行结果如下所示:
由此可以看出,这些信息与我们保存的信息是完全一样的。
挖矿和发币
在某种意义上来说,区块链就是挖矿和发币,所以我们也进行挖矿和发币。在Libra测试网络中,用Facet服务来挖矿和发币。所以下面我们分别产给Alice和Bob一些初始资金,为我们后续的转账操作打下基础。
给Alice发110
运行如下命令:
account mint 0 110
运行结果如下所示:
在account mint 0 110中,0代表给编号为0的账户发币,110为发币的数量,后面的提示信息表示这个交易成功提交到Libra测试网络,目前正存在于验证节点的内存池中,只有当验证节点将该交易写入区块链中时,交易才算正式完成。我们将在后面介绍查看账户余额的方法,就是只有在写入区块链后,账户的余额才会发生改变。
接下来可以通过下面的命令给Bob发币:
account mint 1 52
查看账户余额
接下来我们查看这两个账户的余额:
query balance 0
query balance 1
运行结果如下所示:
转账操作
下面我们把Alice的10元(我们假设Libra中的单位是元)转给Bob。
查看账户的交易编号
运行如下命令:
query sequence 0
query sequence 1
运行结果如下所示:
由于这两个账户都是新账户,所以其交易号为0 。
转账
运行如下命令:
transfer 0 1 10
在上面的命令中,0代表资金转出账户编号,1代表资金转入账户编号,10代表转账金额。运行结果如下所示:
在上面的命令中,txn_acc_seq 0 0表示这个交易,第一个0代表账户的编号,第二个0代表该账户的交易编号,如果想查看交易的详细信息,可以使用如下命令:
query txn_acc_seq 0 0 true
结果如下所示:
同样,这只是将交易提交到了Libra的测试网络,保存在验证节点的内存池中,只有当该交易被验证节点实际写入区块链中时,这个交易才生效,即用户的余额才会发生变化。
查看账户余额
运行下面命令查看账户余额:
query balance 0
query balance 1
运行结果如下所示:
如图所示,我们看Alice和Bob的账户均已经被正确修改过了。
此时如果我们再来查询交易号,如下所示:
query sequence 0
query sequence 1
运行结果如下所示:
如上图所示,Alice账户发生了一个交易(有资金转出时视为发生交易),所以其交易编号就变1了。