MimbleWimble コイン「Grin」をコンパイル&実行してみた

みなさんこんにちは。フレセッツ代表の日向です。

今回は2019年1月15日の深夜(日本時間)にリリースされたばかりの MimbleWimble コイン「Grin」をコンパイルして実行し、コインを受け取るまでの手順を解説します。なお、本記事では利用する OS として Ubuntu Bionic 18.04 を前提としますが、違うバージョンの Ubuntu や Mac OS でも同様な手順でできるようですので、これら OS をお使いの方は適当に読み替えて実行していただければと思います。ただし Windows には対応していないようなので、あしからず。

  1. 事前セットアップ

まずはじめに、Grin をビルドするのに必要なパッケージをインストールします。下記のコマンドをターミナルから実行することで、一括でインストールすることができます。

$ sudo apt install build-essential cmake git libgit2-dev clang libncurses5-dev libncursesw5-dev zlib1g-dev pkg-config libssl-dev llvm

Grin は Rust で書かれており、 Rust のコンパイル環境を作成する必要があります。下記のコマンドを実行すると、自動的にお使いのマシンのホームディレクトリ以下に Rust のコンパイル環境がインストールされます。

$ curl https://sh.rustup.rs -sSf | sh

インストールにはそれなりの時間がかかりますので、コーヒー☕でも飲みながらじっくりと待ちましょう。

インストールが完了すると、ターミナル起動時に Rust の実行に必要な設定が自動的に読み込まれるように ~/.profile ファイルが編集されますので、一度ターミナルを再起動し、設定が読み込まれるようにするか

$ source ~/.cargo/env

により設定を読み込んでください。

2. ソースコードのダウンロード

Grin の最新版のソースコードを GitHub から取得しましょう。下記のコマンドを実行します。

$ git clone https://github.com/mimblewimble/grin.git

3. コンパイル&ビルド

ソースコードのダウンロードができましたら下記のコマンドを実行します。

$ cd grin
$ cargo build --release

Grin に依存する Rust パッケージのダウンロードおよびビルドが自動的に始まります。実行完了までかなり時間がかかりますので、他の作業をするなりランチ🍝に行くなりして終了するのを待ちましょう。

4. 実行

コンパイル&ビルドが終わったらさっそく Grin を起動してみましょう。

$ ./target/release/grin

すると下のスクリーンショットのような少しリッチな CUI 画面が立ち上がります。起動すると自動的にピアを探しに行き、ブロックチェーンデータの同期が始まります。「Basic Status」内の「Current Status」が「Running」になったらブロックチェーンの同期は完了です。「Chain Height」が現在の同期済みブロック数となります。

Grin の起動画面

5. ウォレットを作る

Grin コインを受け取るためのウォレットを作ってみましょう。

$ ./target/release/grin wallet init

設定したいパスワードを二回聞かれますので、同じパスワードを入力してください。ウォレット作成自体は瞬時に終了し、バックアップ用のニーモニック(24個の英単語)が表示されます。このニーモニックは、PC が壊れたときなどにウォレットを復活させるために必要な情報となりますので、安全な場所にしっかりと保管しておきましょう。

6. Grinコインを受け取る

Grin のコインを受け取るには二通りの方法があります。一つは Grin をウォレット・サーバ・モードで起動し、送金者にそのサーバの IP アドレスを渡すことで通信を行いトランザクションを完成させる方法です。もう一つは、送金者に送金トランザクションの(JSON)ファイルを作ってもらい、そのデータに対して受取手続きを行うことで受取人の情報を付加し、送金者にレスポンスデータを返却することでトランザクションを完成させる方法です。

6-a. ウォレット・サーバ

まずはじめに、外部マシンからの入金リクエストに答えられるように、ウォレットサーバがリッスンする IP アドレスを 127.0.0.1 から 0.0.0.0 に変更します。

$ editor ~/.grin/main/grin-wallet.toml
$cat ~/.grin/main/grin-wallet.toml
(…snip…)
#host IP for wallet listener, change to “0.0.0.0” to receive grins
api_listen_interface = “0.0.0.0”
(…snip…)

ウォレットサーバを起動するには下記コマンドを実行します。

$ ./target/release/grin wallet listen

起動時にウォレットのパスワードを聞かれますので、先程設定したパスワードを入力してエンターキーを押しましょう。

これで待ち受けポート 3415 番でウォレットサーバが起動します。ただし、お使いの PC が NAT 内にいる場合には(ローカルネットからは入金を受け付けられますが)インターネットからの入金リクエストに答えることができません。お使いのルータの説明書を参考にポートフォワーディングの設定(いわゆる「ポート開放」)を行ってください。

6-b. ファイルベース

ファイルベースで入金を受け付けるには、まずはじめに送金者に送金トランザクションの JSON ファイルを作ってもらう必要があります。多くのサービスでは、送金トランザクションファイルをメールで受け取ったりブラウザから直接ダウンロードする手段が提供されておりますので、お使いのサービスの説明に従い入金用の送金トランザクションをダウンロードしてください(以下の説明ではこのファイル名は「grin-tx.json」であるとします)。

$ ./target/release/grin wallet receive -i grin-tx.json

上記のコマンドを実行することで「grin-tx.json.response」というファイルができます。このファイルを送金者側に渡してファイナライズしてもらうことでトランザクションは完成します。

おわりに

以上で駆け足ながら Grin をソースコードからビルドし、入金を行うまでの手順を示しました。メインネットがローンチしてからあまり時間も立っておらず、取り扱う取引所も少なく入手がしづらいコインではありますが、MimbleWimble の実装として非常に有望なプロジェクトだと思いますので、引き続き開発状況はウォッチしていきたいと思います。

お知らせ

■ブロックチェーンエンジニア集中講座開講中!
HashHubではブロックチェーンエンジニアを育成するための短期集中講座を開講しています。お申込み、詳細は下記のページをご覧ください。
ブロックチェーンエンジニア集中講座:https://www.blockchain-edu.jp/

■フレセッツ株式会社では仮想通貨の事業者向け BtoB ウォレットの開発をしていただけるエンジニアを募集しています!詳しくはこちら→https://fressets.com/career/

■HashHubでは入居者募集中です!
HashHubは、ブロックチェーン業界で働いている人のためのコワーキングスペースを運営しています。ご利用をご検討の方は、下記のWEBサイトからお問い合わせください。また、最新情報はTwitterで発信中です。
HashHub:https://hashhub.tokyo/
Twitter:https://twitter.com/HashHub_Tokyo