2021今回は、緊急停止機能のあるスマートコントラクトの動作確認を行います。アカウントごとの役割アカウントの役割は次の通りです。(eth.accounts[0])コンストラクトの生成者。(eth.accounts[1])メッセージの変更を行うユーザ。(eth.accounts[2])マイナー。(eth.accounts[3])メッセージの変更を行うユーザ。デプロイまずはデプロイを行います。Breakerコントラクトになります。[デプロイ時のイメージ]デプロイ後のコントラクトの状態を確認します。[コントラクト状態]StoppedステートがNo(=false)となっているので、コントラクトが有効であることが分かります。ACCOUNTで、Messageが初期状態の0x00000000000000000000000000000000であることも確認できます。Message関数をコールして、メッセージを変更します。アカウント1から、メッセージ“0x616263”(=abc)を設定します。[メッセージ変更]コントラクトの状態を確認します。[コントラクト状態]メッセージが“0x616263”に変更されていることが確認できます。緊急停止オーナーアドレスから緊急停止を行います。Circuit関数を指定し、stoppedステートのYesチェックボックスを選択し、EXECUTEボタンをクリックします。[緊急停止]コントラクトの状態を確認します。[コントラクト状態]StoppedステートがYESに変更され、緊急停止状態になっていることが確認できます。Message関数をコールして、メッセージを変更します。アカウント3から、メッセージ“0x646566”(=def)を設定します。weiを指定しました。(EXECUTEボタン押下後のダイアログ画面にて)[メッセージ変更]コントラクトの状態を確認します。[コントラクト状態]メッセージが変更されずに“0x616263”のままとなっています。トランザクションも確認します。weiとなっており、手数料が最大で消費されているのでこのトランザクションが失敗したことを確認できます。まとめスマートコントラクトは、リリース前に脆弱性をできる限りなくすことが重要ですが、どんなにテストを行ったとしてもリリース後に脆弱性が見つかる可能性があります。そのため、緊急停止を行う機能はセキュリティを考慮して必ず実装しておくべきです。