【CryptZombies】レッスン5チャプター11:SafeMathパート3
winCountやlossCount(uint16)、level(uint32)については、これらの引数でSafeMathのaddメソッドを使用すると、これらのタイプはuint256に変換されるのでオーバーフローを防げません。
function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } // If we call `.add` on a `uint8`, it gets converted to a `uint256`. // So then it won't overflow at 2^8, since 256 is a valid `uint256`.
つまりuint16とuint32でオーバーフロー/アンダーフローを回避するには、さらに2つのライブラリを実装することが必要です。それらライブラリを、SafeMath16、SafeMath32と呼ぶことにします。
このコードは、uint256の全インスタンスがuint32やuint16で置きかえられること以外SafeMathと全く同じとなります。
テストの実行
①uint32にSafeMath32を使用することを宣言せよ。
using SafeMath32 for uint32;
②uint16にSafeMath16を使用することを宣言せよ。
using SafeMath32 for uint32;
③ZombieFactoryには、SafeMathメソッドを使うべき箇所がもう1行ある。どこかわかるようにコメントしておいたからな。
ownerZombieCount[msg.sender] = ownerZombieCount[msg.sender].add(1);
お疲れさまでした!
<参考>
CryptoZombies - イーサリアム上でゲームを開発する方法を学習。Powered by Loom Network