前のパートに戻る 完了して次のパートへ  

  1-4:名簿を作ってみよう

1.4 名簿を作ってみよう


 名前とEmailアドレスを記録する名簿を作りましょう。mappingによるデータ構造と関数のアクセス制限について学びます。

① コントラクトオーナーのアドレス

Ethereumではアカウントやスマートコントラクトをアドレスと呼ばれる固有の文字列で識別します。

アドレスの例
0xca35b7d915458ef540ade6068dfe2f44e8fa733c

Ethアドレスを保存するための変数はaddress型で宣言します。

② 登録情報を保存するデータ構造体

まずは名前とEmailアドレスをメンバに持つuserInfoという構造体を宣言します。mappingはkeyと値を組み合わせたデータ構造です。ここではuint型のkeyとuserInfo型の値を持つaccountsというデータ構造体を宣言しています。accountsには例えば以下の様にデータを保存します。

③ コンストラクタ

 コンストラクタはスマートコントラクトをデプロイした際に自動的に呼び出される関数です。msg.senderは関数を呼び出したアカウントのアドレスを取得します。コンストラクタの中ではmsg.senderはスマートコントラクトをデプロイしたアドレスを示します。登録件数の初期化もコンストラクタで行っています。

④ アクセス制限の実装

 modifierは関数に付与する修飾子を定義します。modifierが付与された関数は,関数が呼び出されるとmodifierの処理が先に実行されます。requireは条件を満たさなかった場合,処理を止めます。ここでは関数の呼び出したEthアドレスとスマートコントラクトをデプロイしたEthアドレスownerが一致しなければ後の処理を行いません。修飾子はmodifierによって自由に定義できますが,代表的な予約語として以下があります。

・payable
 送金を伴う関数に必要な修飾子です。payableを付与しない関数はEthの授受ができないため,誤った送金を防ぐことができます。
・view
 変数の変化を伴わない関数に付与する修飾子です。
・pure
 変数の変化を伴わないことに加え,変数の参照もしない関数に付与する修飾子です。
・event
 トランザクションへログを出力する際に使用します。

⑤ modifierを関数に付与する

 setInfoaccountsに名前とEmailアドレスを登録するための関数です。情報が登録される度にnumUserが1だけ増加します。getInfoaccountsのゲッターです。accountsのkeyを指定するためにuint型の引数_numUserを持ちます。これらの関数はonlyOwnerが付与されているため,スマートコントラクトをデプロイしたアドレスからのみ実行できます。

1.1と同じやり方で名簿スマートコントラクトをデプロイし,いくつか名前とEmailアドレスを入力してみましょう。

次にアカウントを変更してコントラクトを実行してみて下さい。modifierが働き処理が実行されないことが確認できます。

お疲れさまでした!次の章ではいよいよフリマアプリのスマートコントラクトを実装して行きます。

議論

2 質問

このコースの評価は?