前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >梁雁鸣:Libra环境搭建与第一笔交易

梁雁鸣:Libra环境搭建与第一笔交易

作者头像
辉哥
发布2019-07-26 11:12:11
1.1K2
发布2019-07-26 11:12:11
举报
文章被收录于专栏:区块链入门区块链入门

准备工作:

ü 服务器Linux (Red Hat或Debian-based)或者macOS

ü 可稳定连接到互联网

ü 安装git

ü 若服务器操作系统属macOS,请安装Homebrew

ü 若是服务器操作系统属Linux系,请安装yum或者apt-get

操作步骤:

在本示例中,我们将下载必要的Libra组件,然后执行一笔Alice与Bob间的交易。

执行以下步骤,用以提交交易到Libra测试网络的验证节点。

  1. 下载并构建libra核心源码
  2. 构建libra CLI客户端,然后连接到测试网络
  3. 创建Alice和Bob的账户
  4. 增发一定数量的libra到Alice和Bob的账户
  5. 提交一笔交易到测试网络

下载Libra core

git clone https://github.com/libra/libra.git

启动libra核心

为了启动libra核心,你需要切换到libra目录,运行脚本以安装依赖,命令如下所示:

**cd libra**

**./scripts/dev_setup.sh**

启动脚本执行如下动作:

ü 安装rustup - rustup是Rust编程语言的安装程序,实现了Libra Core

ü 安装所需版本的Rust工具链

ü 安装CMake - 管理构建过程

ü 安装protoc - 协议缓冲区的编译器

ü 安装Go - 用于构建协议缓冲区

构建Libra CLI客户端并连接到测试网络

执行如下命令,用以连接到Libra测试网络的验证节点(视网络情况,此步骤用时或较久)

**./scripts/cli/start_cli_testnet.sh**

此命令用来构建和运行客户端的utilizing cargo(Rust的包管理器),并将客户端连接到testnet上的验证器节点。

客户端连接到testnet上的节点后,您将看到以下输出。要随时退出客户端,请使用quit命令。

**Connected to validator at: ac.testnet.libra.org:8000**

**usage: <command> <args>**

**Use the following commands:**

**account | a**

**Account operations**

**query | q**

**Query operations**

**transfer | transferb | t | tb**

**<sender_account_address>|<sender_account_ref_id> <receiver_account_address>|<receiver_account_ref_id> <number_of_coins> [gas_unit_price (default=0)] [max_gas_amount (default 10000)] Suffix 'b' is for blocking.**

**Transfer coins from account to another.**

**help | h**

**Prints this help**

**quit | q!**

**Exit this client**

**Please, input commands:**

**libra%**

创建Alice与Bob的账户

将客户端连接到testnet后,可以运行CLI命令来创建新帐户。我们将引导您为两个用户创建帐户(让我们称他们为Alice和Bob)。

步骤1:检查CLI客户端是否在您的系统上运行

libra%命令行提示符指示您的Libra CLI客户端正在运行。要查看帐户命令的帮助信息,请输入“account”,如下所示:

**libra% account**

**usage: account <arg>**

**Use the following args for this command:**

**create | c**

**Create an account. Returns reference ID to use in other operations**

**list | la**

**Print all accounts that were created or loaded**

**recover | r <file path>**

**Recover Libra wallet from the file path**

**write | w <file name>**

**Save Libra wallet mnemonic recovery seed to disk**

**mint | mintb | m | mb <receiver account> <number of coins>**

**Mint coins to the account. Suffix 'b' is for blocking**

第2步:创建Alice账户

请注意,使用CLI创建帐户不会更新区块链,只会创建本地密钥对。

要创建Alice的帐户,请输入以下命令:

**libra% account create**

成功输出示例:

**>> Creating/retrieving next account from wallet**

**Created/retrieved account #0 address**

**3ed8e5fafae4147b2a105a0be2f81972883441cfaaadf93fc0868e7a0253c4a8**

#0是Alice帐户的索引,十六进制字符串是Alice帐户的地址。索引只是引用Alice帐户的一种方式。帐户索引是本地CLI索引,可以在其他CLI命令中使用,以便用户方便地引用他们创建的帐户。该账户索引对区块链毫无意义。只有当通过铸币将任何一笔钱添加到Alice的账户时,才会在区块链上创建Alice的账户,或者通过来自另一个用户的转账将钱转移到Alice的账户。请注意,您也可以在CLI命令中使用十六进制地址。帐户索引只是帐户地址的便利包装。

**libra% account create **

**>> Creating/retrieving next account from wallet**

**Created/retrieved account #0 address 1411d5f7afb9134b6c81ef222fe638384574962c62fdf158c76b8e00058ce414**

第3步:创建Bob的账户

要创建Bob的帐户,请重复帐户创建命令:

**libra% account create**

成功输出示例:

**>> Creating/retrieving next account from wallet**

**Created/retrieved account #1 address**``**8337aac709a41fe6be03cad8878a0d4209740b1608f8a81566c9a7d4b95a2ec7**

#1是Bob帐户的索引,十六进制字符串是Bob帐户的地址。

**libra% account create **

**>> Creating/retrieving next account from wallet**

**Created/retrieved account #1 address**``**08a754f096a64823dab5536fca4e92627dfd0d10b7299ca6e9e10e27550c9170**

步骤4(可选):列出帐户

要列出您创建的帐户,请输入以下命令:

**libra% account list**

成功输出示例:

**User account index: 0, address: 3ed8e5fafae4147b2a105a0be2f81972883441cfaaadf93fc0868e7a0253c4a8,** **sequence number: 0**

**User account index: 1, address:**``**8337aac709a41fe6be03cad8878a0d4209740b1608f8a81566c9a7d4b95a2ec7, sequence number: 0**

帐户的序列号表示从该帐户发送的交易数。每次从该帐户发送的事务被执行并存储在区块链中时,它会递增。

**libra% account list **

**User account index: 0, address: 1411d5f7afb9134b6c81ef222fe638384574962c62fdf158c76b8e00058ce414, sequence number: 0, status: Local**

**User account index: 1, address: 08a754f096a64823dab5536fca4e92627dfd0d10b7299ca6e9e10e27550c9170, sequence number: 0, status: Local**

增加****Libra Coins****到****Alice****和****Bob****的****账户

在testnet上创建和添加硬币是通过Faucet完成的。Faucet是一种与testnet一起运行的服务。此服务仅用于为testnet创建硬币,并且不存在主网。它创造了没有现实世界价值的libra。假设您已经创建了Alice和Bob的帐户,分别为索引0和索引1,您可以按照以下步骤将Libra添加到两个帐户。

第****1****步:将****110 Libra****添加到****Alice****的****帐户

要使铸币Libra并添加到Alice的帐户,请输入以下命令:

**libra% account mint 0 110**

0是Alice的帐户的索引。

110是要添加到Alice帐户的Libra数量。

一个成功的帐户mint命令也将在区块链上创建Alice的帐户。

成功输出示例:

**>> Minting coins**

**Mint request submitted**

请注意,提交请求时,这意味着它已成功添加到mempool(testnet上的验证程序节点)。它并不一定意味着它将成功完成。稍后,我们将查询帐户余额以确认铸币是否成功。

第****2****步:将****52 Libra****添加到****Bob****的****帐户

要使铸币Libra并添加到Bob的帐户,请输入以下命令:

**libra% account mint 1 52**

1是Bob的帐户索引。

代码语言:javascript
复制
52
代码语言:javascript
复制
一个成功的帐户mint命令也将在区块链上创建Bob的帐户。在区块链上创建Bob帐户的另一种方法是将钱从Alice的帐户转移到Bob的帐户。
代码语言:javascript
复制
成功输出示例

**>> Minting coins**

**Mint request submitted**

第****3****步:****检查****余****额

要检查Alice帐户中的余额,请输入以下命令:

**libra% query balance 0**

成功输出示例:

**Balance is: 110**

余额是:110

要检查Bob帐户中的余额,请输入以下命令:

**libra% query balance 1**

成功输出示例:

**Balance is: 52**

提交交易

在我们提交交易以将Libra从Alice的账户转移到Bob的账户之前,我们将查询每个账户的序列号。这将有助于我们了解执行事务如何更改每个帐户的序列号。

查询帐户的序列号

**libra% query sequence 0**

**>> Getting current sequence number**

**Sequence number is: 0**

**libra% query sequence 1**

**>> Getting current sequence number**

**Sequence number is: 0**

在query sequence 0,0是Alice的帐户的索引。 Alice和Bob的帐户的序列号为0表示到目前为止尚未执行Alice或Bob的帐户中的任何交易。

转账

要提交交易以将10个天秤座从Alice的帐户转移到Bob的帐户,请输入以下命令:

**libra% transfer 0 1 10**

0是Alice的帐户的索引。

1是Bob的帐户索引。

10是从Alice的账户转移到Bob的账户的Libra的数量。

成功输出示例:

**>> Transferring**

**Transaction submitted to validator**

您可以使用命令query txn_acc_seq 0 0 true(按帐户和序列号进行事务处理)来检索有关您刚刚提交的事务的信息。第一个参数是发件人帐户的本地索引,第二个参数是帐户的序列号。

您刚刚将您的事务提交到testnet上的验证器节点,它已包含在验证器的mempool中。这并不一定意味着您的交易已被执行。理论上,如果系统运行缓慢或过载,则需要一些时间才能看到结果,您可能需要通过查询帐户多次检查。要查询索引为0的帐户,可以使用命令query account_state 0.

阻止转账命令:您可以使用transferb命令(如下所示),而不是传输命令。 transferb将提交事务并仅在事务已提交到区块链后返回到客户端提示。一个例子如下所示:

libra% transferb 0 1 10

有关从提交到执行和存储的事务生命周期的理解,请参阅事务的Life of a Transaction

转账后查询序列号

**libra% query sequence 0**

**>> Getting current sequence number**

**Sequence number is: 1**

**libra% query sequence 1**

**>> Getting current sequence number**

**Sequence number is: 0**

Alice的帐号(索引0)的序号为1表示到目前为止已经从Alice的帐户发送了一个交易。 Bob的帐户(索引1)的序列号为0表示到目前为止尚未从Bob的帐户发送任何交易。每次从帐户发送交易时,序列号都会增加1。

转移后检查两个帐户中的余额

要检查两个帐户中的最终余额,请像在此步骤中一样,再次查询每个帐户的余额。如果您的交易(转账)成功执行,您应该在Alice的账户中看到100个Libra,在Bob的账户中看到62个Libra。

**libra% query balance 0**

**Balance is: 100**

**libra% query balance 1**

**Balance is: 62**

恭喜!

您已成功在Libra testnet上执行了您的交易,并将10个Libra从Alice的账户转移到了Bob的账户!

运行本地验证程序节点

要在您的计算机上本地启动验证程序节点并创建您自己的本地区块链网络(未连接到Libra testnet),请确保已按照Setup Libra Core中的说明运行构建脚本,切换到Libra Core存储库的根目录,并运行libra_swarm,如下所示:

**$** **cd ~/libra**

**$ cargo run -p libra_swarm -- -s**

-p libra_swarm:cargo运行libra_swarm包,该包启动由一个节点组成的本地区块链。

-s :启动本地客户端以连接到本地区块链。

要查看启动节点和连接Libra Blockchain的其他选项,请运行:

**$ cargo run -p libra_swarm -- -h**

cargo命令可能需要一些时间才能运行。如果此命令的执行完成且没有错误,则系统上正在运行Libra CLI客户端实例和Libra验证器节点。成功执行后,您应该看到包含CLI客户端菜单和libra%提示符的输出。

· 更新Rust:

· 在libra根目录中运行

**rustup update **

· 更新protoc:

**protoc **

更新到3.6.0或者更高版本.

· 在libra根目录中重新运行启动脚本

**./scripts/dev_setup.sh**

客户端构建及运行

如果你遇到构建错误,尝试删除cargo锁定文件:

**rm cargo.lock**

如果连不上testnet:

· 检查你的网络连接

· 保证你使用的是最新版本的客户端,拉取最新的libra core并重新运行客户端:

**./scripts/cli/start_cli_testnet.sh**

铸币及转账

如果连接到testnet的验证节点失效, 你会得到如下“Server unavailable”的错误提示:

**libra% account mint 0 110**

**>> Minting coins**

**[ERROR] Error minting coins: Server unavailable, please retry and/or check **if** host passed to the client is running**

· 如果你的余额在提交交易之后没有更新,等待一会儿,重新查询看,如果区块链遇到高的交易量,可能会发生更新延迟,如果你的余额仍然没有更新,请尝试重新铸币。

· 检查账户是否存在,可以查检账户状态,对于下标为0的账户,命令如下:

**libra% query account_state 0**

转账命令

如果testnet验证节点失效或连接超时,你会看到如下错误:

**libra% transfer 0 1 10**

**>> Transferring**

**[ERROR] Failed to perform transaction: Server unavailable, please retry and/or check if host passed to the client is running**

转账错误的解决方法

· 检查网络连接

· 检查账户状态,保证账户存在,如下命令:

**query account_state 0**

· 你可以通过使用quit 或者q!命令退出客户端, 重新运行

**./scripts/cli/start_cli_testnet.sh**

原文链接:https://developers.libra.org/docs/my-first-transaction

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.07.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备工作:
  • 操作步骤:
  • 下载Libra core
  • 启动libra核心
  • 构建Libra CLI客户端并连接到测试网络
    • 创建Alice与Bob的账户
      • 步骤1:检查CLI客户端是否在您的系统上运行
      • 第2步:创建Alice账户
      • 第3步:创建Bob的账户
      • 步骤4(可选):列出帐户
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档