https://developers.libra.org/docs/my-first-transaction

GitHub地址

https://github.com/libra/libra

 

本文档将指导您完成在Libra区块链上的第一笔交易。在执行执行第一笔交易的步骤之前,建议您阅读以下文档,以熟悉Libra生态系统和Libra协议的关键方面:

我们提供了一个命令行界面(CLI)客户端来与区块链进行交互。

假设条件

本文档中的所有命令均假定:

  • 您正在Linux(基于Red Hat或Debian的)或macOS系统上运行。
  • 您的互联网连接稳定。
  • git 已安装在您的系统上。
  • Homebrew安装在macOS系统上。
  • yum或apt-get已安装在Linux系统上。

提交交易的步骤

在此示例中,我们将下载必要的Libra组件并在两个用户之间进行事务:Alice和Bob。

执行以下步骤,将事务提交到Libra testnet上的验证者节点:

  1. 克隆并构建Libra Core
  2. 构建Libra CLI客户端并连接到testnet
  3. 创建爱丽丝和鲍勃的帐户
  4. 铸造硬币并添加到爱丽丝和鲍勃的帐户中
  5. 提交交易

克隆并构建Libra Core

克隆天秤座核心存储库

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

结帐testnet分支

git checkout testnet

安装依赖项

要设置Libra Core,请转到libra目录并运行安装脚本以安装依赖项,如下所示:

cd libra ./scripts/dev_setup.sh

安装脚本执行以下操作:

  • 安装rustup-rustup是Rust编程语言的安装程序,在其中实现了Libra Core。
  • 安装所需版本的rust-toolchain。
  • 安装CMake-管理构建过程。
  • 安装protoc-用于协议缓冲区的编译器。
  • 安装Go —用于构建协议缓冲区。

如果安装失败,请参阅故障排除

构建Libra CLI客户端并连接到Testnet

要连接到在Libra testnet上运行的验证器节点,请如下所示运行客户端。

./scripts/cli/start_cli_testnet.sh

该命令使用货物(Rust的包裹管理器)构建并运行客户端,并将客户端连接到测试网上的验证者节点。

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

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%

如果您在构建客户端和连接到测试网时遇到问题,请参阅故障排除

注意:如果要在系统上本地运行验证器节点,请按照“ 运行本地验证器节点”中的说明进行操作。创建帐户,铸造硬币和执行交易的说明与testnet上节点的说明相同。

创建爱丽丝和鲍勃的帐户

一旦客户端连接到测试网,就可以运行CLI命令来创建新帐户。我们将引导您为两个用户创建帐户(我们将其称为Alice和Bob)。

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

一个天秤座%的命令行提示符表明您天秤座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步:创建爱丽丝的帐户

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

要创建爱丽丝的帐户,请输入以下命令:

libra% account create

成功样例输出:

>> Creating/retrieving next account from wallet Created/retrieved account #0 address 3ed8e5fafae4147b2a105a0be2f81972883441cfaaadf93fc0868e7a0253c4a8

0是Alice帐户的索引,十六进制字符串是Alice帐户的地址。索引只是引用爱丽丝帐户的一种方式。帐户索引是本地CLI索引,可以在其他CLI命令中使用,以使用户方便地参考他们创建的帐户。该索引对区块链没有意义。仅当通过铸造将钱添加到Alice的帐户中或者通过其他用户的转账将资金转移到Alice的帐户中时,才会在区块链上创建Alice的帐户。请注意,您也可以在CLI命令中使用十六进制地址。帐户索引只是帐户地址周围的便利包装。

步骤3:建立Bob的帐户

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

libra% account create

成功样例输出:

>> Creating/retrieving next account from wallet Created/retrieved account #1 address 8337aac709a41fe6be03cad8878a0d4209740b1608f8a81566c9a7d4b95a2ec7

1是Bob帐户的索引,十六进制字符串是Bob帐户的地址。有关索引的更多详细信息,请参阅创建爱丽丝的帐户。

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

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

libra% account list

成功样例输出:

User account index: 0, address: 3ed8e5fafae4147b2a105a0be2f81972883441cfaaadf93fc0868e7a0253c4a8, sequence number: 0 User account index: 1, address: 8337aac709a41fe6be03cad8878a0d4209740b1608f8a81566c9a7d4b95a2ec7, sequence number: 0

帐户的序列号指示已从该帐户发送的交易数量。每次执行从该帐户发送的交易并将其存储在区块链中时,它都会增加。要了解更多信息,请参阅序列号

将天秤座硬币添加到爱丽丝和鲍勃的帐户中

铸造硬币并将硬币添加到测试网上的帐户是通过Faucet完成的。龙头是与测试网一起运行的服务。此服务只存在,以促进testnet铸币硬币,不会对存在mainnet。它创建的天秤座没有现实价值。假设您已经分别创建了索引为0和索引1的Alice和Bob的帐户,则可以按照以下步骤将Libra添加到这两个帐户中。

步骤1:将110 LBR添加到爱丽丝的帐户

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

libra% account mint 0 110

  • 0是爱丽丝帐户的索引。
  • 110是天秤座要添加到Alice帐户的数量。

成功的帐户造币厂命令还将在区块链上创建爱丽丝的帐户。

成功样例输出:

>> Minting coins Mint request submitted

请注意,提交请求后,这意味着已将其成功添加到(测试网中验证者节点的)内存池中。它不一定意味着它将成功完成。稍后,我们将查询帐户余额以确认铸造是否成功。

如果您的帐户mint命令未能成功提交您的请求,请参阅 故障排除

第2步:将52个LBR添加到Bob的帐户中

要铸造天秤座并添加到Bob的帐户,请输入以下命令:

libra% account mint 1 52

  • 1是鲍勃帐户的索引。
  • 52是天秤座要添加到Bob帐户的数量。
  • 成功的帐户造币厂命令还将在区块链上创建Bob的帐户。在区块链上创建Bob账户的另一种方法是将资金从Alice账户转移到Bob账户。

成功样例输出:

>> Minting coins Mint request submitted

如果您的帐户mint命令未能成功提交您的请求,请参阅 故障排除

步骤3:检查余额

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

libra% query balance 0

成功样例输出:

Balance is: 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是爱丽丝帐户的索引。爱丽丝和鲍勃的帐户的序列号均为0表示到目前为止,尚未从爱丽丝或鲍勃的帐户执行任何交易。

划款

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

libra% transfer 0 1 10

  • 0是爱丽丝帐户的索引。
  • 1是鲍勃帐户的索引。
  • 10是从Alice的帐户转移到Bob的帐户的天秤座数。

成功样例输出:

>> Transferring Transaction submitted to validator To query for transaction status, run: query txn_acc_seq 0 0 <fetch_events=true|false>

您可以使用命令query txn_acc_seq 0 0 true(按帐户和序列号进行交易)来检索有关刚提交的交易的信息。第一个参数是发送者帐户的本地索引,第二个参数是帐户的序列号。要查看此命令的样本输出,请参阅样本输出

你只需提交您的交易的验证节点上testnet,它被包含在内存池验证的。这不一定意味着您的交易已执行。从理论上讲,如果系统运行缓慢或过载,则需要花费一些时间才能看到结果,并且您可能必须通过查询帐户进行多次检查。要查询索引为0的帐户,可以使用以下命令: query account_state 0.“预期输出”显示在“ 样本输出”部分中

要对传输命令进行故障排除,请参阅故障排除

阻止传输命令:您可以使用transferb命令(如下所示)代替transfer命令。transferb仅在将交易提交到区块链后才提交交易并返回到客户端提示。一个例子如下所示:

libra% transferb 0 1 10

请参阅事务的生命周期,以了解从提交到执行和存储的事务生命周期。

传输后查询序号

libra% query sequence 0 >> Getting current sequence number Sequence number is: 1 libra% query sequence 1 >> Getting current sequence number Sequence number is: 0

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

转账后检查两个账户的余额

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

libra% query balance 0 Balance is: 100 libra% query balance 1 Balance is: 62

恭喜你!

您已成功在Libra测试网上执行了交易,并将10 LBR从Alice的帐户转移到Bob的帐户!

故障排除

设定

  • 更新Rust:
    • rustup update从您的libra目录运行。
  • 更新协议:
    • 更新protoc到3.6.0或更高版本。
  • 从您的libra目录中重新运行安装脚本:
    • ./scripts/dev_setup.sh

客户端构建和运行

如果遇到构建失败,请尝试从libra目录中删除cargo lock文件:

  • rm Cargo.lock

如果您的客户端未连接到测试网:

  • 检查您的互联网连接。
  • 确保您使用的是最新版本的客户端。拉出最新的Libra Core并重新运行客户端:
    • ./scripts/cli/start_cli_testnet.sh

造币并向帐户添加资金

  • 如果您在testnet上连接的验证器节点不可用,您将收到“服务器不可用”消息,如下所示:

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验证器节点(您的客户端已连接)不可用,或者您与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

解决传输错误:

  • 检查与testnet的连接。
  • 查询发送者帐户以确保它存在。对索引为0的帐户使用以下命令:
    • query account_state 0
  • 您可以尝试使用quit或退出客户端q!,然后重新运行以下命令以连接到测试网:
    • ./scripts/cli/start_cli_testnet.sh 从天秤目录

附加查询命令的样本输出