Chapter 3 コントラクトのmain関数
main()
前のチャプタでは、モジュール構築の仕方を学びました。そして、このチャプタではモジュールをベースにしてコントラクトを完成させましょう。
私たちは、コントラクト内に「トランザクションスクリプト」と呼ばれる、他のどのコードからもコールされない様な、ワンタイム実行コードを埋め込むことができます。トランザクションスクリプトはscript:
の記述から始まります。
main()
はトランザクションスクリプトを実行するための開始箇所です。main()
の様なコードブロックは「プロシージャ」と言います。後のチャプタでこれらのコンセプトについては解説します。main()
は特にスペシャルなプロシージャです。
main()
を含む、全てのプロシージャはreturn
で終わることに注意してください。Moveコンパイラはreturn
がなかったらそれを自動で補う様な、如何なる処理も行うことなくダイレクトに変換する、その名の通りの(単純な)コンパイラです。
Moveのコントラクトを書くとき、私たちはmain()
を含む普通のプロシージャにおいて、いつも全ての操作を記述し、それをモジュールに配置します。最終的に、スクリプトセクションでモジュールをインポートし、そして、一連の操作実行のために、モジュールのプロシージャ群を開始ポイントのmain()
と共に呼び出します。概要を次の図で示します。
モジュール内で他のモジュールをインポートする必要があるとき、インポートの記述は、例えばモジュール名の記述の次の行に書くなど、モジュールの最初に書く必要がありますので注意してください。
そして、スクリプト部分で、モジュールをインポートする必要がある場合も、インポート記述はセクションの最初の行である必要があります。例えば、script:
の次の行やmain()
の1行目などです。
まとめに、基本的な空白のコントラクトのサンプルをお見せします。
modules:
module Contract {
}
script:
import Transaction.Contract;
main() {
return;
}
実習
城を作るために、まずBuildCastle
という名前のモジュールやmain()
を含んだ、空のコントラクトを作る必要があります。
- 最初に
modules:
とscript:
を追加します: main()
をscript:
の次の行に加えます。return
をmain()
内につけることを忘れないでください。- スクリプトセクションにmoduleをインポートします(
main()
の前の行に)。