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

前回、クラウドファンディング用のスマートコントラクトに対して、キャンペーンが成功するケースの動作確認ができました。

ただ、オーナーアカウントでマイニングをしていたために、キャンペーンが成功していくらetherが増えたのかを確認できませんでした。

今回は、オーナーと投資家以外のアカウントを使ってマイニングを行い、キャンペーン成功でどのくらいetherが増えたのかを確認します。

デプロイ時の設定

デプロイ時(コンストラクタのコール時)の設定値は前回と同様です。

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

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

アカウントごとの役割

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

今回は3つのアカウントとは別にマイニングするアカウント(ACCOUNT3)を用意しました。

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

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

これまではgethコンソールを使って動作確認していましたが、今回は試しに全ての操作をMist Walletを使って行ってみます。

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

[コンストラクト]

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


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

[残高]

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

投資

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

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

[投資1]


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

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

[投資2]


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

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

[コントラクト]

キャンペーンの終了

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

(確認画面でエラーが表示されているのが気になりますが・・・・)

[キャンペーンの終了]


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

[コントラクト]

・・・だめですね。

キャンペーンが終了になっていません。(Endedが「No」でStatusが「Funding」のまま)

関数の選択(checkGoalReached)アカウントの選択(MAIN ACCOUNT)は間違っていないはずなんですが・・・・


次回はこの「キャンペーンが終了しない」問題を調査・解決したいと思います。