はじめに
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のようにローカルで確認できるようにしたいですね。