Chapter 2 スマートコントラクトとモジュール
スマートコントラクトはブロックチェーン上で動作するプログラムです。私たちは「送金」や「お買い物」といった一連の操作をブロックチェーン上で行うためにコントラクトを使います。
Moveのコントラクトのコードは、次の二つのパートに分けられます。
- 「modules:」で始まるモジュールセクション
- 「script:」で始まる
main()
このチャプタではモジュール部について説明し、次のチャプタでスクリプト部について説明します。
モジュール
モジュール部はコントラクトに必要なモジュール群を含んでいます。モジュールはMoveコントラクトの基本パッケージ単位です。そして、全てのLibraに配置されたモジュールはグローバルです。
モジュール内では、後のチャプタで説明するStructure
(構造体)、Resource
(リソース)、Procedure
(プロシージャ)を定義できます。
モジュールはEthereumにおけるスマートコントラクトや、あるいはJavaにおけるクラスにも似ています。モジュールは、モジュール内の情報にアクセスするインターフェースを使う特定の関数を持つコードブロックと見なせます。
例えば、Libraコインを定義し、コインの転送やチャージを処理するLibraCoin
モジュールはLibraによって公式にリリースされています。開発者がモジュールを紹介した後は、インターフェースを関連機能の実装に使うことができます。
モジュールの作りかた
module_name { }
の形式でモジュールを作れます。
モジュールのインポートの仕方
javaにおけるpackage name + class name
の様に、Moveはaddress + module name
をモジュールをインポートするのに使います。例えば次の様に。
import 0x0.LibraCoin
ここでLibraCoin
はモジュール名で、0x0
がモジュールを公開したアカウントのアドレスです。各ユーザは自分のモジュールをブロックチェーンに公開するか、ほかの人がこの様に公開したモジュールをインポートすることができます。リブラによって公開されたモジュールのアドレスは全て0x0
です。
同一のファイルからそこにあるモジュールをインポートする時にはimport Transaction.module name
を利用できます。次の様にです。
import Transaction.LibraCoin
実習
城を作るにあたって、段階的に一連の築のクリエイト機能を実装するBuildCastle
モジュールを作るところからスタートしましょう。
- 中身が空っぽの
BuildCastle
モジュールを作ってください。