Libraに関するセミナーのご依頼、その他ブロックチェーンに関するコンサルティングのお問い合わせはこちらからお願いいたします。(ページ右下の「サポート」をクリック)
連載全5回のインデックスはこちら。
実践的なプログラムの作成①
今回は実践的なプログラムとして、Libraブロックチェーンが提供する標準のコイン(Libraコイン)を送金するプログラムを作成してみます。標準ライブラリについて
Moveにはいくつかの標準ライブラリが提供されており、libra/language/stdlib/modules
にソースコードが配置されています。今回はこの中でも、「LibraAccount」モジュールを使って、二者間で送金するプログラムを作成します。
LibraAccountモジュールには、withdraw_from_sender関数(コインの引出し)やbalance関数(残高確認)など、アカウントに対する操作を行う機能が提供されています。
送金プログラム
import 0x0.LibraAccount;
main() {
let alice_address: address;
let bob_address: address;
let alice_initial_balance: u64;
let alice_balance: u64;
let bob_balance: u64;
alice_address = get_txn_sender();
bob_address = 0xb0b;
alice_initial_balance = LibraAccount.balance(copy(alice_address));
LibraAccount.pay_from_sender(copy(bob_address), 100);
alice_balance = LibraAccount.balance(copy(alice_address));
bob_balance = LibraAccount.balance(copy(bob_address));
assert(copy(alice_balance) == copy(alice_initial_balance) - 100, 99);
assert(copy(bob_balance) == 100, 99);
return;
}
送金はアリスからボブに行うという想定で、アリスのアドレスはこのトランザクションの実行者として、get_txn_sender()関数を用いて取得を行っています。送金元のアリスの最初の残高を変数 alice_initial_balance に保存しておき、pay_from_sender()関数で、ボブに対して100Libraコインを送金します。
送金後の残高を取得して、アリスは100Libraコインが減っていること、ボブは100Libraコイン増えていることを確認しています。
このプログラムのテストを実行すると、
test functional_tests::libra_coin_transfer/libra_coin_transfer.mvir ... ok
となり、送金処理が行われていることが確認できました。
まとめ
実践的なプログラムということで、Libraコインを送金するプログラムを作成してみました。標準ライブラリを使うと、モジュールを独自に用意しなくてもトランザクションスクリプトのみで、送金処理を実行することができました。
次回はより実践的なプログラムの作成として、EthereumのERC20のようなプログラムを作成することができるかどうか挑戦してみます。