Libra转账好简单

LeverLibis · · 1058 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

准备

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

  • 你运行的是Linux(基于Red Hat或Debian)或macOS系统。
  • 你可以稳定地连接到互联网。
  • 你的系统已经安装 git
  • 如果使用 Mac,请确定已经安装好 Homebrew。
  • 如果使用 Linux,请确定已经安装好 yum 或者 apt-get。

提交交易的步骤

在这个例子中,我们将下载必要的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

 


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1058 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传