今回は、クラウドファンディング用のスマートコントラクトを作成します。
クラウドファンディングの仕様
スマートコントラクトの仕様は次の通りです。
- etherで資金を募る。
- 投資家はスマートコントラクトに対してetherを伴う形でトランザクションを発生させて投資する。
- スマートコントラクトはキャンペーンの締め切りと目標額を設定する。
- 締め切りを迎えた時点で目標額に達していたら、オーナーに集めたetherを送金する。
- 締め切りを迎えた時点で目標額に満たなければ、各投資家に返金する。
クラウドファンディングのソース
クラウドファンディングのソースは以下のようになります。
[ソース]
1 | pragma solidity ^0.4.11; |
- struct(4-7行目)
構造体です。
複数の変数をまとめて宣言することができます。 - mapping(16行目)
キーとバリューをとるデータ構造を表現します。
キーには投資額(uint型)、バリューには投資家(Investor型)を宣言しています。 - コンストラクタ(24-36行目)
締め切り(deadline)、目標額(goalAmount)などの初期値を設定します。 - fund関数(39-47行目)
投資するときに呼び出される関数で、etherの送金を伴う形で呼び出されます。
キャンペーンが終了していなければ、Investorを生成してマップに登録し、投資総額を更新します。
etherを受け取る関数のためpayableを付与しています。 - checkGoalReached(51-78行目)
キャンペーン終了時にオーナーによってのみ呼び出される関数です。
キャンペーンが終了し、目標額に達している場合はオーナーに集められた投資額が送金されます。
目標額に満たなかった場合は、投資家にetherが返金されます。
デプロイ
Mist Walletでスマートコントラクトをデプロイします。
デプロイの手順は下記の記事をご参照ください。
デプロイの参考記事 - Ethereum(8) - スマートコントラクト①
次回は、キャンペーンに成功するケースで処理を実行してみます。