Libraの環境構築をしてMovでHelloWorldしようとしてみた

Facebookが先日公開した金融基盤Libra。

libra.org

Facebookという世界中のユーザーを抱えるプラットフォームを用いて、流通する仮想通貨ができるのではと、今界隈で話題のようです。

そのLibraで使用されるスマートコントラクトなどを実装する新しいプログラミング言語Moveをちょっと触ってみました。

Rustを基盤に作られているみたく、知見者の情報を検索してみてもRustを知っていれば問題ないとのこと。

ただ自身はRustを触ったことがないので、まだまだ慣れない感じですね。

環境構築

まずGitHubのページへ行き、READMEを読んでみると、どうやらこのコード内にコンパイラとかライブラリとかすべて入っているみたい。

github.com  

なので、ひとまずこのまま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

このスクリプトコンパイルを行うみたく、ここでも数分時間がかかりました。

基本的にプログラムを実行する場合は、 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で書かれているプログラムもテストコードしか見当たらなかった。

テストコードもバイトコードを扱うものが多かったが、徐々に増えていくのだろうと思われる。

今後もウォッチしていきたい。