こんにちは、バレットグループ シニアアーキテクトの菊山 (id:syl-k) です。 今回は、Facebookが先日公開した金融基盤Libraについて調べてみました。
Facebookという世界中のユーザーを抱えるプラットフォームを用いて、流通する仮想通貨ができるのではと、今界隈で話題のようです。
そのLibraで使用されるスマートコントラクトなどを実装する新しいプログラミング言語Moveをちょっと触ってみました。
Rustを基盤に作られているみたく、知見者の情報を検索してみてもRustを知っていれば問題ないとのこと。
ただ自身はRustを触ったことがないので、まだまだ慣れない感じですね。
環境構築
まずGitHubのページへ行き、READMEを読んでみると、どうやらこのコード内にコンパイラとかライブラリとかすべて入っているようです。
なので、ひとまずこのままcloneしてみます。
ただこの時、PCのホームディレクトリ( $HOME )にcloneしないと、下記で実行するスクリプトが実行できないので注意が必要。
$ git clone https://github.com/libra/libra.git $ cd libra $ ./scripts/dev_setup.sh
このあたりはLibraのリファレンスにも書かれてますね。
$ ./scripts/dev_setup.sh Welcome to Libra! This script will download and install the necessary dependencies needed to build Libra Core. This includes: * Rust (and the necessary components, e.g. rust-fmt, clippy) * CMake, protobuf, go (for building protobuf) If you'd prefer to install these dependencies yourself, please exit this script now with Ctrl-C. Proceed with installing necessary dependencies? (y/N) > y ... Finished installing all dependencies. You should now be able to build the project by running: source ~/.cargo/env cargo build
私の環境ではRustなどがインストールされていなかったので、完了までに数分かかりました。
その後、Libraのtestnetへの接続をやってみます。
$ ./scripts/cli/start_cli_testnet.sh
このスクリプトはコンパイルを行うみたく、ここでも数分時間がかかりました。
Move 含む依存管理として cargo を用いているため、プログラム実行は cargo を通します。
Rustと同じですね。
今回は軽くHello Worldだけ出してみようかと思います。
ただMoveでの文字列出力はできない(?)ようなので、結局Rust書いているのと同じことになりました。
ひとまずその方法が下記となります。
まず下記ディレクトリに helloworld.mvir ファイルを作成します (* 拡張子はどうやら .mvir)
$ touch ~/libra/language/functional_tests/helloworld.mvir
本来ならテストコードを書くディレクトリだが、一旦ここで作業します。
そしてプログラムを記述
fn main() { println!("hello world"); return; }
その後、どう階層にある Cargo.toml ファイルの一番下に追記します。
[[bin]] name = "helloworld" path = "helloworld.mvir"
これで作業完了
そしたらターミナルからlibraのディレクトリに移動し、下記コマンドを実行
$ cargo run -p functional_tests --bin helloworld
そうするとターミナルに Hello World が表示されます。
そもそもこの下記から自体がRustであり、Libraではprintする必要がないのかもしれないが、printをするのに半日かけてあれこれソースコードを確認することができました。
本当に基本的なところはまだRustで書かれており、Moveで書かれているプログラムもテストコードしか見当たりませんでした。
テストコードもバイトコードを扱うものが多かったが、徐々に増えていくだろうと思われるので、今後もアップデートに期待してきたいです。