LoginSignup
5
7

More than 3 years have passed since last update.

Facebookの仮想通貨 Libraを動かしてみたよ

Last updated at Posted at 2019-06-19

はじめに

Facebookが独自の暗号通貨「Libra」を発表しました。

VisaやMastercardなどのクレジット会社、UberやSpotifyなど流行りの会社、Coinbaseなど30社程度がパートナーとして参加されているようです。Libraは、法定通貨と一定比率で交換可能なStable Coin として使われるので、ビットコインなどと比べて、価格の安定化も見込めます。

Facebookを使っている(いた)人も多いので、ユーザに馴染みが出て来そうですね。

2020年に開始するようで、今はテストネットが公開されました。
Developerサイトを確認して、Transactionを生成してみました。(下記のサイトを参考)
https://developers.libra.org/docs/my-first-transaction

1. Libra Coreのclone作成と構築

Libra Coreリポジトリをcloneする

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

Libra Coreセットアップ

Libra Coreをセットアップします。
ディレクトリに移動し、セットアップスクリプトを実行して依存関係をインストールします。

cd libra
./scripts/dev_setup.sh

セットアップスクリプトは次のことを行います。

  • rustupをインストールする - rustupは、Libra Coreが実装されているRustプログラミング言語のインストーラーです。
  • 必要なバージョンのrust-toolchainをインストールします。
  • CMakeをインストールします - ビルドプロセスを管理します。
  • プロトコルバッファ用のコンパイラprotocをインストールします。
  • プロトコルバッファを構築するためにGoをインストールします。

2. Libra CLIクライアントを構築してテストネットに接続する

Libraテストネットで実行されている validator node に接続するには、以下に示すようにクライアントを実行します。

./scripts/cli/start_cli_testnet.sh

10分くらいすると、ここで下記のようなエラーが出ました。

     Running `target/debug/client --host ac.testnet.libra.org --port 80 -s ./scripts/cli/trusted_peers.config.toml`
Not able to connect to validator at ac.testnet.libra.org:80, error RpcFailure(RpcStatus { status: Unavailable, details: Some("OS Error") })

     Running `target/debug/client --host ac.testnet.libra.org --port 80 -s ./scripts/cli/trusted_peers.config.toml`
Not able to connect to validator at ac.testnet.libra.org:80, error RpcFailure(RpcStatus { status: DeadlineExceeded, details: Some("Deadline Exceeded") })

テストネットに繋がらず困ってしまいましたが、しばらくしたら直りました><
考えても仕方ないので、次へ進みます。(知っている方、教えてくださいm(_ _)m)

このコマンドは、cargo(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%

3. アカウントを作成する

アリスとボブのアカウントを作成して、Transactionを生成してみます。

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

アカウントを作成する。

account createで作成できます。
2回コマンドを打って、アリス、ボブ用のアドレスを作りましょう。

libra% account create
>> Creating/retrieving next account from wallet
Created/retrieved account #0 address 700909c0e5fca4df3cc2389f939962d00018d9f55ca43d7d0882ebfbbdefe3ce

libra% account create
>> Creating/retrieving next account from wallet
Created/retrieved account #1 address de8b923d3ef98dc0561cf7dc231b63b1d55d3742406e53421b02d2f2769be00c

16進数の文字列がアリス、ボブのアドレスになります。
一覧を表示したい場合はaccount listでできます。

4. Libraコインをmint、残高確認する

Libraコインをmintする

アリスとボブに、Libraコインをmintしてみます。

//account mint インデックス番号 Libraコインの量

//アリス
libra% account mint 0 110
>> Minting coins
Mint request submitted

//ボブ
libra% account mint 1 52
>> Minting coins
Mint request submitted

Libraコインの残高確認

アリスとボブの残高確認は、下記のようにできます。

//query balance インデックス番号

//アリス
libra% query balance 0
Balance is: 110

//ボブ
libra% query balance 1
Balance is: 52

5. Transactionを送信する。

アカウントのシーケンス番号を確認する

Transactionを送信する前に、アカウントのシーケンス番号を確認します。

//query sequence インデックス番号

//アリス
libra% query sequence 0
>> Getting current sequence number
Sequence number is: 0

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

送金

アリスからボブへ10Libraコイン送金します。

//transfer fromインデックス番号 toインデックス番号 Libraコインの量

libra% transfer 0 1 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 fromインデックス番号 シーケンス番号

libra% query txn_acc_seq 0 0

送金後のシーケンス番号の確認

アリスのアカウントのシーケンス番号が1になっていることがわかります。

//query sequence インデックス番号

//アリス
libra% query sequence 0
>> Getting current sequence number
Sequence number is: 1

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

送金後のアドレスの残高を確認

アリスの残高が10減り、ボブの残高が10増えていることがわかります。

//query balance インデックス番号

//アリス
libra% query balance 0
Balance is: 100

//ボブ
libra% query balance 1
Balance is: 62

おわりに

Libraを使って、送金できることを確認できました。

毎回テストネットに繋ぐのは確認が大変なので、EthereumのGethのようにローカルで確認できるようにしたいですね。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7