今回はuintの最大値に関する動作を確認していきます。
ソースコード
最大値のチェックを行うためのソースコードは下記の通りです。
[ソースコード]
1 | pragma solidity ^0.4.11; |
17行目で初期の在庫数を100から0に変更しています。
これは在庫の追加数としてuintの最大値を設定できるかどうかをテストするためです。
デプロイ
上記ソースのデプロイを行います。
[デプロイ]
デプロイ後のコントラクトの状態を確認します。
[コントラクト状態]
初期の在庫数(Stock quantity)が0であることが確認できます。
在庫の追加(最大値)
Add Stcok関数を使って、uintの最大値を設定します。
uintの最大値は115792089237316195423570985008687907853269984665640564039457584007913129639935です。
[在庫数を追加]
追加後の在庫数を確認します。
[在庫数を確認]
問題なくuintの最大値が在庫数(Stock quantity)に設定されていることが分かります。
また画像一番下のイベント情報より正しい数値(uintの最大値)が引数として渡されていることも分かります。
在庫の追加(最大値+1)
次に、uintの最大値を超える数値を設定してみます。
[uintの最大値]+1の数値は115792089237316195423570985008687907853269984665640564039457584007913129639936になります。
[在庫数を追加]
[EXECUTE]ボタンを押すと、トランザクションを発行するための画面が表示されます。
ここでパスワードを入力し、[SEND TRANSACTION]ボタンを押したところ次のようなメッセージが表示されました。
[トランザクション実行画面]
どうやら256バイトを超える値は設定できないようです。
uint8の場合は、それを超える数値を設定できたので、データ型の制限ではなくSolidityの引数の制限だと思われます。(ただの推測です)
以上で、オーバーフローに関する動作確認とその対策に関する記事は終わりにします。