【Ethereum開発】コントラクトの生成
関数の書き方
以下、getMessage()関数の記述です。
関数名、関数型、返り値の型の順に関数を記述します。
関数型は以下のように記述できます。
冒頭の関数では、public viewとしているので、コントラクトのデータを返すだけで、コントラクトのデータ自体にはなにも変更を加えないことを意味します。
viewと似たものに、pureという関数型もあります。これは、関数がコントラクトのデータに対して、アクセスと変更の両方をおこなわないことを宣言するものです。
payableは、外部からコントラクトを呼び出すと、コントラクトに送金する可能性があることを宣言するものです。
ポイントは、関数がコントラクトの状態を変更することを意図している場合、関数は値を返しません。
テストネットワークにコントラクトソースを展開する
流れは、下図のようにあらわされます。
1.リミックスエディターでsolidityをつかったコントラクトソースを記述
2.それをコンパイルしてバイトコード(バイナリ)に変換
3.ネットワークにデプロイ。いまの場合、Inboxインスタンスを生成します。
下図を見てください。
コンストラクタで指定している、initialMessageに”Hi there”と入れて、
transactボタンを押すと、
In-Browser Fake NetworkにInboxインスタンスが生成されます。そして、薄青色の「getMessage」と「message」というボタンが生成されます。これらは、クラスの概念でいうところのメソッドに相当するものです。getMessageを押すと、さきほどconstructorのinitalMessageで設定した「Hi there!」が出力されます。これはgetMessageメソッドを利用して、コントラクトのデータを取得したことに相当します。ちなみに、このメソッドはコントラクトの状態を変更するものではないので、returnをもつものです。
一方、setMessageメソッドをみてみましょう。こちらのインターフェースはstring newMessageというテキストボックスになっています。ここに、適当なstring型の値("Test")を入力して、setMessageボタンを押すと、一見するとなにも変化はおきません。先ほど説明したように、これはコントラクトの状態を変更する関数なので、値を返さないのです。
では、ふたたびgetMessageボタンを押してみましょう。さきほどsetMessageで設定した値が出力されることがわかるとおもいます。
メッセージ変数は、ネットワーク上の誰でも呼び出すことができるgetまたはsetメッセージ関数のいずれかによって、変更、またはアクセスできます。このようにコントラクトは、ネットワーク上のだれもが読める簡単なメッセージを保存しているのです。
今日はここまでです。
ちなみに、ここからじぶんで開発を学んでいきたいひとは、
世界最大級のオンライン学習サイトUdemyから「Ethereum and Solidity: The Complete Developer's Guide」を探してみてください。
続きは随時アップしていく予定です。
ではでは!