46

Libra转账好简单

 4 years ago
source link: https://www.tuicool.com/articles/jqyAVnN
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

准备

运行文档中的命令,需要满足以下条件:

git

提交交易的步骤

在这个例子中,我们将下载必要的Libra组件并在两个用户之间执行一个交易:A(Alice)和B(Bob)。

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

  1. 克隆并编译 Libra Core .
  2. 编译客户端并连接到测试网络 .
  3. 创建测试账户 .
  4. 充Libra币到测试账户中 .
  5. 发起转账 .

克隆并编译 Libra Core

在终端里找一个合适的目录下执行:

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

启动 Libra Core

然后进入 libra 目录,并运行安装脚本:

cd libra
./scripts/dev_setup.sh

安装脚本主要执行以下操作:

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

如果你安装失败,请查看 错误处理

编译客户端并连接到测试网络

要连接到Libra testnet上运行的验证者节点,请执行以下命令:

./scripts/cli/start_cli_testnet.sh

这条命令会编译客户端,并把客户端连接到 Libra 测试网络中的验证节点上。

连接成功后,会看到以下的输出信息。连接过程可以使用 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%

如果看到上面的信息,说明你的客户端运行正常,并且已经成功连接到 Libra 的测试网络上了,接着开始创建测试账户。 如果你在编译客户端和连接到testnet时遇到问题,参考 错误处理

Note: 如果要在本地运行验证者节点,请参考  运行本地验证者节点 . 创建帐户,造币和执行交易的说明与testnet上的节点相同。

创建测试账户

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

Step 1: 检查CLI客户端是否在你的系统上运行

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

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

Step 2: 创建测试账户A

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

要创建Alice的帐户,在 libra%提示符后面输入命令::

account create

创建成功后,你会看到以下信息:

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

#0 是A的账户索引, 索引是引用A帐户的一种方式,在区块链上没有意义,只是帐户地址的包装,目的是为了方便用户引用他们创建的帐户。 address后面的长字符串是A的帐户地址,你可以在CLI命令中使用十六进制地址。

当前创建的账户只是在本地,只有以下两种情况发生之后,才会真正在区块链上创建这个账户:

  • 当通过铸币(minting)将任何一笔钱添加到A的账户时。
  • 其他用户将钱转账(transfer)到A账户中时。

Step 3: 创建测试账户B

在libra% 后再次输入创建账户的命令:

account create

创建成功后,你会看到以下信息:

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

#1 是B的账户索引,address后面的长字符串是B的账户地址。 有关索引的更多详细信息,请参考 创建测试账户A

Step 4 (可选): 列出本地所有账户

使用下边的命令可以列出目前本地的所有账户:

account list

执行成功后,你会看到以下信息:

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

sequence number 表示从该帐户发送的交易数。每次从该帐户发送的事务被执行并存储在区块链中时,它会递增。要了解更多信息,请参考 sequence-number

充Libra币到测试账户中

在testnet上创建和添加硬币是通过Faucet完成的。Faucet是一种与testnet一起运行的服务。此服务仅用于为testnet创建钱,并且不存在 主网 。它只是用来测试的,在现实中并没有任何使用价值。假设你已经 创建了A和B的帐户 ,分别为索引0和索引1,你可以按照以下步骤将Libra添加到两个帐户。

Step 1: 向A账户充值110Libra币

输入以下命令,来完成充值:

account mint 0 110

  • 0 代表A账户的索引编号
  • 110 代表充值的金额

A successful account mint command will also create Alice’s account on the blockchain.

执行成功后,你会看到以下信息:

>> Minting coins
Mint request submitted

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

如果你的帐户mint命令未成功提交你的请求,请参考 错误处理

Step 2: 向B账户充值52Libra币

输入以下命令,来完成充值:

account mint 1 52

  • 1 代表B账户的索引编号
  • 52 代表充值的金额
  • 一个成功的帐户mint命令也将在区块链上创建B帐户。在区块链上创建Bob帐户的另一种方法是将钱从A的帐户转移到B的帐户。

执行成功后,你会看到以下信息:

>> Minting coins
Mint request submitted

如果你的帐户Minting命令未成功,请参考 错误处理

Step 3: 检查余额

输入以下命令,检查A的余额

query balance 0

执行成功后,你会看到以下信息:

Balance is: 110

输入以下命令,检查A的余额

query balance 1

执行成功后,你会看到以下信息:

Balance is: 52

发起转账

在我们发起转账之前,我们可以查询每个账户的sequence number ,这将有助于我们了解执行交易是如何改变每个帐户的。

查询账户的sequence number

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

query sequence 0 中, 0 是A的账户索引. Sequence number等于0,意味着没有发生任何的交易。

发起转账

输入以下命令可以实现,从A账户向B账户转10个Libra币

transfer 0 1 10

  • 0 是A的账户索引
  • 1 是B的账户索引
  • 10 是转账的金额

执行成功后,你会看到以下信息:

>> 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 来查询转账状态。第一个参数0是要查询的本地账户索引, 第二个参数0是当前此笔转账的序号,要查看此命令的示例输出,请参考  输出 .

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

如果出现问题,请参考 错误处理 .

阻止转移命令(同步转账): 你可以使用  transferb 命令替换  transfer 命令. 在使用 transferb 命令提交后,直到提交到blockchain后,才会返回提示信息。一个例子:

transferb 0 1 10

有关从提交到执行和存储的交易生命周期的理解,请参阅交易的 生命周期

查询交易次数

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

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

查询账户余额

要检查两个帐户中的最终余额,可以参考下面的命令。如果你的交易(转账)成功执行,你应该在A账户中看到100个Libra币,在B账户中看到62个Libra币。

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK