Ethereum(20) - IoTで利用するスイッチを制御するコントラクト(実行編)

IoTで利用するスイッチを制御するコントラクトを実行していきます。

アカウントごとの役割

アカウントの役割は次の通りです。

  • MAIN ACCOUNT (eth.accounts[0]) “0xec3b01f36b44182746ca109230567c4915512e35”
    オーナー
  • ACCOUNT1 (eth.accounts[1]) “0x63f25b9bbd974fdfa07477cb99c60d2073cfe560”
    IoTスイッチ
  • ACCOUNT2 (eth.accounts[2]) “0xd5adf1e9fbc1ed869ed4c7372961238fddc760a5”
    利用者
  • ACCOUNT3 (eth.accounts[3])
    マイナー

デプロイ

まずはデプロイを行います。

デプロイアカウントはMAIN ACCOUNTで、IoTのアドレスとしてaccounts[1]のアドレスを設定します。

[デプロイ時のイメージ]


デプロイ直後のコントラクトの状態を確認します。

[デプロイ時のイメージ]

IoTステートのアドレスにAccount1が設定され、OwnerステートのアドレスにMain accountが設定されていることを確認できます。

利用登録

利用者のアドレス(Acctount 2)からpayToSwitch関数を使って、1etherを送金します。

[利用登録]


コントラクタを開いて、スイッチの状態を確認します。

[スイッチの状態確認]

支払回数(Num paid)が1となり、スイッチの状態(Switches)にAccount2が支払いをしたことや、利用できる状態であること(Status=YES)、利用終了時間(End Time)が4分後であることが確認できます。

????

前回のコンストラクトの確認では、構造体の情報(ステート)がMist Walletから確認できなかったのですが、なぜか今回は確認できています。

少々困惑しておりますが、「Mist Walletでステートが確認できればそれでOK。ダメな時はgethコンソールから確認してみる」ということにしておきたいと思います。

利用ステータスの変更

利用終了時刻(利用登録から5分後)になったら、IoTスイッチ(Account 1)よりupdateStatus関数を呼び出して、statusをfalseに変更します。

[利用ステータスの変更]


変更したステータスを確認します。

[ステータスの確認]

利用状況が不可(Status=NO)になっていることが分かります。

etherの回収

利用料の1etherをオーナーアドレスから回収します。

回収前のオーナーの残高を確認しておきます。

[オーナーの残高(回収前)]


回収処理のwithdrawFunds関数を、オーナーアドレスからコールします。

[利用料の回収]


回収後のオーナーの残高を確認します。

[オーナーの残高(回収後)]

オーナーの残高が1ether増えていることが確認できました。

IoTで利用するスイッチを制御するコントラクトの動作確認は問題なく終了できました。