NEOはブロックチェーンプロジェクトの1つです。
今回はスマートコントラクトを実行してみます。
スマートコントラクト実行フロー
スマートコントラクトを実行するフローは次のようになります。
- pythonでコードを書く。
- buildコマンドでpyファイルをコンパイルし、avmファイルを作成する。
- sc deployコマンドでコントラクト(avmファイル)をネットワークにデプロイする。
- sc invokeコマンドでコントラクトのメソッドをコールする。
1. コーディング
所定のディレクトリに移動し、pythonファイルを作成します。
[コマンド]
1 | cd ./neo-local/smart-contracts |
[ソース]
1 | def Main(): |
“Hello World”と表示するだけの簡単な処理となります。
2. コンパイル
neo-localを起動し、neo-pythonプロンプト起動します。
[コマンド]
1 | cd .. |
スマートコントラクトのログを表示する設定を行います。
[コマンド]
1 | config sc-events on |
[結果]
1 | Smart contract event logging is now enabled |
pyファイルをコンパイルします。
[コマンド]
1 | sc build /smart-contracts/test1.py |
[結果]
1 | Saved output to /smart-contracts/test1.avm |
正常にコンパイルできるとsmart-contractsディレクトリ配下にtest1.avmが作成されます。
3. デプロイ
デプロイを行うためにはウォレットが必要となりますので、ウォレットを開いておきます。
パスワードはcozです。
[コマンド]
1 | wallet open neo-privnet.wallet |
[結果]
1 | [password]> *** |
deployコマンドを使ってavmファイルをデプロイします。
いくつか入力を求められますが、[contract name]にはtest1を指定し、そのほかは何も入力しないでエンターを押します。
パスワードはcozです。
[コマンド]
1 | sc deploy /smart-contracts/test1.avm True False False 07 05 |
引数の意味は、順番に次の通りです。
- True コントラクトがストレージを使うかどうか(needs_storage)
- False 他のコントラクトを参照するかどうか(needs_dynamic_invoke)
- False コントラクト内でNEOやNEOGas、他のトークンとの換金が行われるか(is_payable)
- 07 inputがstring型である
- 05 outputがbyte型がである
[結果]
1 | Please fill out the following contract details: |
ネットワークにコンストラクトが反映されるまで少し時間が必要となりますので、少々待ちます。
デプロイしたコントラクトを確認します。
引数にはデプロイ時に指定した[contract name] test1を指定します。
[コマンド]
1 | search contract test1 |
[結果]
1 | Found 1 results for test1 |
4行目の”hash”は、コンストラクトを実行するときに必要となります。
4. 実行
デプロイしたコントラクトを実行します。
引数にはsearchコマンドで表示したhashを指定します。
パスワードはcozです。
[コマンド]
1 | sc invoke 0x5f21886e9c5674ef65f3ba787c45c7a4957621cd |
[結果]
1 | neo> sc invoke 0x5f21886e9c5674ef65f3ba787c45c7a4957621cd |
結果に’Hello World’(2行目)が表示されていることが確認できます。
また4行目の「Used 0.016 Gas 」よりGasが0.016消費されたことが分かります。








































































