diff --git a/contracts/utils/EnumerableSet.sol b/contracts/utils/EnumerableSet.sol index 8917cccaf17..3f158e4511b 100644 --- a/contracts/utils/EnumerableSet.sol +++ b/contracts/utils/EnumerableSet.sol @@ -53,21 +53,10 @@ library EnumerableSet { */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { - - uint256 last; - assembly { - let p := sload(0x40) - mstore(p, set.slot) - let blk := keccak256(p, 0x20) - // push new value - last := sload(set.slot) - sstore(add(blk, last), value) - // update array length - last := add(last, 1) - sstore(set.slot, last) - } - set._indexes[value] = last; - + set._values.push(value); + // The value is stored at length-1, but we add 1 to all indexes + // and use 0 as a sentinel value + set._indexes[value] = set._values.length; return true; } else { return false;