SCamlによるTezosプログラミング#1 準備

Tezos ブロックチェーン のためのスマートコントラクト記述言語 SCaml、チュートリアルの第1回目です。(この内容は 2020-03-21 にやった SCaml ハンズオンの資料を手直ししたものです。)

今回は演習の準備です。

必要スキル

  • 基本的な Unix (Linux) 操作
  • 基本的な git
  • 基本的な OCaml プログラミング

SCaml は OCaml のサブセットなので、プログラミング言語としての SCaml は OCaml の入門書(例えばOCaml爆速入門)を参照してください。SCaml は OCaml の基礎的な機能しかつかいません。次の事ができる人であれば OCaml の復習をする必要はないでしょう:

  • ヴァリアントやレコード型の使い方
  • リストの使い方、例えば List.fold_left
  • .mli ファイルの読み方

準備

  • Webブラウザ
  • お好きなエディタ (OCaml のハイライター、インデンターが入っているとなお吉)
  • sh
  • git
  • Docker
  • ハードディスク空き容量。多くても 1GB くらい

準備は大事です。

Webブラウザ

標準的なブラウザで結構です。

お好きなエディタ

特にエディタを限定しませんので使い慣れたものを使ってください。

SCaml は OCaml と互換性がある文法なので、 OCaml のシンタックスハイライターやインデンターがあると捗ります。必須ではないので各自可能ならばインストールしてみてください。

sh

Unixシェルを使います。OS として Linux か Mac OS X をお勧めします。Windows は WSL で使えるかもしれませんが、保証しません。未確認です。

git

git コマンドで使用するスクリプトをダウンロードしますので git をインストールしてください。

Docker

ツールは Docker イメージとして配布しますので、 Docker が必須です。

  • Linux と Mac OS X で動作確認しています。
  • Windows は未確認です。WSL から Docker を入れて動くかもしれませんし動かないかもしれません。VMWare や VirtualPC から Ubuntu を入れ、その中で作業すれば動きます。

ターミナルから以下のコマンドを実行して Docker の動作を確認してください:

$ docker info

もし permission denied などと言われた場合は sudo なしで docker コマンドが動くように設定してください。(これを敢えて行わない場合は、実習で使うコマンドで Docker を呼び出すものは全て permission denied で失敗することになり、sudo をコマンドの前につけなくてはいけなくなります。)

ターミナルでコマンドを実行する、がわからない方はこの実習では対象としていません。ごめんなさい。

使用するスクリプト類

https://gitlab.com/dailambda/docker-tezos-hands-on/ にあります。 git でまとめて落としてください。 GitHub ではありません。 GitLab です。ターミナルで次のコマンドを実行してください:

$ git clone https://gitlab.com/dailambda/docker-tezos-hands-on

繰り返しますが GitHub ではない。

実習は docker-tezos-hands-on ディレクトリで行います:

$ cd docker-tezos-hands-on
$ ls
README-jp.md    check       scamlc      tezos-client

動作確認と設定

./check スクリプトを使ってください。

$ ./check
(以下は出力例です)
Checking network connectivity inside Docker... Ok
Finding an accessible public Tezos RPC server...
Checking https://ithacanet.smartpy.io: Ok
Using --endpoint https://ithacanet.smartpy.io
Updated the config of ./tezos-client:
{ "base_dir": "/root/.tezos-client",
  "endpoint": "https://ithacanet.smartpy.io", "web_port": 8080,
  "confirmations": 0 }

Ok

Docker イメージをダウンロードしたうえで、Docker 内部から外部ネットワークにアクセスできるかチェックします。 一番初めの Checking network connectivity inside Docker… で Error になった場合は:

  • コンピュータのネットワーク接続
  • Docker のネットワーク設定

を確認修正してください。これは Docker 内部で curl http://www.w3.org を行っているだけです。

これが Ok だったにも関わらず、最終的に Error: None of the pubic Tezos RPC servers was accessible. と言われる場合は:

  • check が古すぎて、新しいテストネットに対応していない。git pull して check を更新してみてください。
  • git pull しても失敗する場合、Tezos テストネットのパブリックノードが今現在全て落ちていると思われるます。しばらくたってまた試してみてください

準備完了

おめでとうございます。check が最終的に Ok と返すなら、準備はほぼ完了です。