たのしい工学

プログラミングを学んで、モノをつくりたいひと、効率的に仕事をしたい人のための硬派なブログになりました

【Ethereum開発】コントラクトの生成

   

関数の書き方

以下、getMessage()関数の記述です。

https://gyazo.com/869908a7a5770f91a7fe17545df272bc

関数名、関数型、返り値の型の順に関数を記述します。

関数型は以下のように記述できます。

https://gyazo.com/5264de5e73b4dcbb9d3a35a9fa27099a

冒頭の関数では、public viewとしているので、コントラクトのデータを返すだけで、コントラクトのデータ自体にはなにも変更を加えないことを意味します。

viewと似たものに、pureという関数型もあります。これは、関数がコントラクトのデータに対して、アクセスと変更の両方をおこなわないことを宣言するものです。

payableは、外部からコントラクトを呼び出すと、コントラクトに送金する可能性があることを宣言するものです。

https://gyazo.com/cc1b60487d8bf83d4166d5b58d4b9a25

ポイントは、関数がコントラクトの状態を変更することを意図している場合、関数は値を返しません。

テストネットワークにコントラクトソースを展開する

流れは、下図のようにあらわされます。

1.リミックスエディターでsolidityをつかったコントラクトソースを記述

2.それをコンパイルしてバイトコード(バイナリ)に変換

3.ネットワークにデプロイ。いまの場合、Inboxインスタンスを生成します。

https://gyazo.com/0d19d87d1c6aebcbf4e42590c5339560

下図を見てください。
コンストラクタで指定している、initialMessageに”Hi there”と入れて、
transactボタンを押すと、

https://gyazo.com/b1f5a43863d794755446a2b6d13cc3e1
In-Browser Fake NetworkにInboxインスタンスが生成されます。そして、薄青色の「getMessage」と「message」というボタンが生成されます。これらは、クラスの概念でいうところのメソッドに相当するものです。getMessageを押すと、さきほどconstructorのinitalMessageで設定した「Hi there!」が出力されます。これはgetMessageメソッドを利用して、コントラクトのデータを取得したことに相当します。ちなみに、このメソッドはコントラクトの状態を変更するものではないので、returnをもつものです。

https://gyazo.com/047805cd359b813098dffc4a4f0e12fb

一方、setMessageメソッドをみてみましょう。こちらのインターフェースはstring newMessageというテキストボックスになっています。ここに、適当なstring型の値("Test")を入力して、setMessageボタンを押すと、一見するとなにも変化はおきません。先ほど説明したように、これはコントラクトの状態を変更する関数なので、値を返さないのです。

では、ふたたびgetMessageボタンを押してみましょう。さきほどsetMessageで設定した値が出力されることがわかるとおもいます。

https://gyazo.com/5530149ea8953636a6dc4c2419c6e819

メッセージ変数は、ネットワーク上の誰でも呼び出すことができるgetまたはsetメッセージ関数のいずれかによって、変更、またはアクセスできます。このようにコントラクトは、ネットワーク上のだれもが読める簡単なメッセージを保存しているのです。

https://gyazo.com/4fc8102a2015bbec9afeda3b0c6621f8

今日はここまでです。

ちなみに、ここからじぶんで開発を学んでいきたいひとは、
世界最大級のオンライン学習サイトUdemyから「Ethereum and Solidity: The Complete Developer's Guide」を探してみてください。

続きは随時アップしていく予定です。

ではでは!

 - BlockChain, テクノロジー