初心者文系主婦がブロックチェーンを学ぶブログ

IT革命のビッグウェーブに乗り遅れた主婦が、ブロックチェーン革命の波にのるべく、ブロックチェーン技術を学ぶブログです。

【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