ブロックのタイムスタンプに依存した処理(Timestamp Dependence)を行うと脆弱性となる可能性があります。
抽選を行うスマートコントラクトを作成し、この問題を検証してみます。
実装
抽選を行うサンプルソースは次の通りです。
[ソースコード]
1 | pragma solidity ^0.4.11; |
処理のポイントを解説します。
- enter関数(23行目)
抽選に申し込む関数です。
申し込みができるのは3人までとします。 - hold関数(35行目)
抽選を行い当選者を決める関数です。
当選者はタイムスタンプを3で割った余りのインデックスの応募者とします。
非常にシンプルな処理ですが、当選者がタイムスタンプに依存していることが脆弱性となりえます。
次回は、このスマートコントラクトの動作確認を行います。