Ethereum(14) - クラウドファンディング用のスマートコントラクト(キャンペーン成功・4回目)

前回、Mist Walletを使って、キャンペーンが成功するケースの動作確認を行いました。

ほとんどうまくいったのですが、最後にキャンペーンが終了できないという問題にぶつかりました。

キャンペーンが終了できない原因

キャンペーンが終了できない原因ですが、とても単純なことでした。

コンストラクトをデプロイする時にMain AccountではなくAccount2を間違って指定していたのです。

キャンペーンの終了は、オーナー(デプロイしたアカウント)だけが行えるようにコーディングしているので、それ以外のユーザではエラーになっていたという訳です。

凡ミスですね。

これまで発生した問題まとめ

これまでにつまづいた問題と対応は以下の通りです。

  • 終了期限の単位を勘違い
    (対策)分単位ではなく秒単位で指定する。
  • マイニングしてしまって残高の増減が分からなくなった
    (対策)オーナー、投資家以外のアカウントでマイニングを行う。
  • コンストラクタのデプロイユーザ間違い
    (対策)デプロイ時のFROMにMain Accountを指定する。

以上、3点に気を付けながらもう一度、キャンペーン成功のケースを実行していきます。

デプロイ時の設定

デプロイ時(コンストラクタのコール時)の設定値は下記のようになります。

各処理を実行してブロックに取り込まれるまでに意外と時間がかかるので、期限(duration)を15分に増やしました。

  • FROM
    Main Accountを選択
  • SELECT CONTRACT TO DEPLOY
    ‘Crowd Funding’を選択。
  • _duration
    テスト用に15分とする。秒指定のため 900 を設定。
  • _goal amount
    目標額を20etherとする。
    Mist Walletで設定する場合はwei表記のため 20000000000000000000 を設定。

[デプロイ時の設定値イメージ]

アカウントごとの役割

4つのアカウントの役割は前回同様です。

  • MAIN ACCOUNT (eth.accounts[0])
    オーナー
  • ACCOUNT1 (eth.accounts[1])
    投資家1
  • ACCOUNT2 (eth.accounts[2])
    投資家2
  • ACCOUNT3 (eth.accounts[3])
    マイナー(マイニングするアカウント)

キャンペーンに成功するケース(4回目)

Mist Walletを使って全ての操作と確認を行っていきます。

まずコントラクトの状態を確認します。

[コンストラクト]

まだ投資総額(Total Amount)が0であることや、キャンペーンが終了していないことが確認できます。


次に、アカウントの残高を確認します。

[残高]

赤枠で囲まれたアカウントが今回使用するアドレスです。

投資

投資家1から、fund関数を選択しコントラクトに10ether投資します。

確認画面ではパスワードを入力します。

[投資1]


投資家2からは、fund関数を選択しコントラクトに20ether投資します。

確認画面ではパスワードを入力します。

[投資2]

コントラクタの状態確認

コントラクトの状態を確認します。

投資総額(Total Amount)が30etherになっていることと、まだ締め切り期限になっていないことが分かります。

[コントラクト]

キャンペーンの終了

締め切り期限が過ぎるのを待って、オーナーからcheckGoalReached関数を呼び出しキャンペーンを終了させます。

[キャンペーンの終了]


コントラクトの状態を確認します。

[コントラクト]

キャンペーンが終了しており、statusからキャンペーンが成功していることを確認できます。


最後に各アカウントの残高を確認します。

[残高]

投資家1のアカウントからは投資した額の10etherが減り、投資家2のアカウントからは投資した額の20etherが減っています。

オーナーの残高にはクラウドファンディングで成功した額(30ether)が増えていることが分かります。

今回は無事にキャンペーンを成功させることができました😅


Mist Walletを使って全ての操作を行いましたが、gethコマンドを使うより操作が簡単ですし、情報をまとめて見れるので便利だと思いました。


次回は、キャンペーンに失敗するケースを試したいと思います。