Merge branch 'master'
This commit is contained in:
24
contracts/utils/Context.sol
Normal file
24
contracts/utils/Context.sol
Normal file
@ -0,0 +1,24 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
pragma solidity >=0.6.0 <0.8.0;
|
||||
|
||||
/*
|
||||
* @dev Provides information about the current execution context, including the
|
||||
* sender of the transaction and its data. While these are generally available
|
||||
* via msg.sender and msg.data, they should not be accessed in such a direct
|
||||
* manner, since when dealing with GSN meta-transactions the account sending and
|
||||
* paying for execution may not be the actual sender (as far as an application
|
||||
* is concerned).
|
||||
*
|
||||
* This contract is only required for intermediate, library-like contracts.
|
||||
*/
|
||||
abstract contract Context {
|
||||
function _msgSender() internal view virtual returns (address payable) {
|
||||
return msg.sender;
|
||||
}
|
||||
|
||||
function _msgData() internal view virtual returns (bytes memory) {
|
||||
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
|
||||
return msg.data;
|
||||
}
|
||||
}
|
||||
@ -54,6 +54,6 @@ library Create2 {
|
||||
bytes32 _data = keccak256(
|
||||
abi.encodePacked(bytes1(0xff), deployer, salt, bytecodeHash)
|
||||
);
|
||||
return address(uint256(_data));
|
||||
return address(uint160(uint256(_data)));
|
||||
}
|
||||
}
|
||||
|
||||
@ -143,6 +143,16 @@ library EnumerableMap {
|
||||
return (entry._key, entry._value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Tries to returns the value associated with `key`. O(1).
|
||||
* Does not revert if `key` is not in the map.
|
||||
*/
|
||||
function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {
|
||||
uint256 keyIndex = map._indexes[key];
|
||||
if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)
|
||||
return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Returns the value associated with `key`. O(1).
|
||||
*
|
||||
@ -151,11 +161,16 @@ library EnumerableMap {
|
||||
* - `key` must be in the map.
|
||||
*/
|
||||
function _get(Map storage map, bytes32 key) private view returns (bytes32) {
|
||||
return _get(map, key, "EnumerableMap: nonexistent key");
|
||||
uint256 keyIndex = map._indexes[key];
|
||||
require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key)
|
||||
return map._entries[keyIndex - 1]._value; // All indexes are 1-based
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Same as {_get}, with a custom error message when `key` is not in the map.
|
||||
*
|
||||
* CAUTION: This function is deprecated because it requires allocating memory for the error
|
||||
* message unnecessarily. For custom revert reasons use {_tryGet}.
|
||||
*/
|
||||
function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {
|
||||
uint256 keyIndex = map._indexes[key];
|
||||
@ -177,7 +192,7 @@ library EnumerableMap {
|
||||
* already present.
|
||||
*/
|
||||
function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {
|
||||
return _set(map._inner, bytes32(key), bytes32(uint256(value)));
|
||||
return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -214,7 +229,16 @@ library EnumerableMap {
|
||||
*/
|
||||
function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {
|
||||
(bytes32 key, bytes32 value) = _at(map._inner, index);
|
||||
return (uint256(key), address(uint256(value)));
|
||||
return (uint256(key), address(uint160(uint256(value))));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Tries to returns the value associated with `key`. O(1).
|
||||
* Does not revert if `key` is not in the map.
|
||||
*/
|
||||
function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {
|
||||
(bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));
|
||||
return (success, address(uint160(uint256(value))));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -225,13 +249,16 @@ library EnumerableMap {
|
||||
* - `key` must be in the map.
|
||||
*/
|
||||
function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {
|
||||
return address(uint256(_get(map._inner, bytes32(key))));
|
||||
return address(uint160(uint256(_get(map._inner, bytes32(key)))));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Same as {get}, with a custom error message when `key` is not in the map.
|
||||
*
|
||||
* CAUTION: This function is deprecated because it requires allocating memory for the error
|
||||
* message unnecessarily. For custom revert reasons use {tryGet}.
|
||||
*/
|
||||
function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {
|
||||
return address(uint256(_get(map._inner, bytes32(key), errorMessage)));
|
||||
return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));
|
||||
}
|
||||
}
|
||||
|
||||
@ -199,7 +199,7 @@ library EnumerableSet {
|
||||
* already present.
|
||||
*/
|
||||
function add(AddressSet storage set, address value) internal returns (bool) {
|
||||
return _add(set._inner, bytes32(uint256(value)));
|
||||
return _add(set._inner, bytes32(uint256(uint160(value))));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -209,14 +209,14 @@ library EnumerableSet {
|
||||
* present.
|
||||
*/
|
||||
function remove(AddressSet storage set, address value) internal returns (bool) {
|
||||
return _remove(set._inner, bytes32(uint256(value)));
|
||||
return _remove(set._inner, bytes32(uint256(uint160(value))));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Returns true if the value is in the set. O(1).
|
||||
*/
|
||||
function contains(AddressSet storage set, address value) internal view returns (bool) {
|
||||
return _contains(set._inner, bytes32(uint256(value)));
|
||||
return _contains(set._inner, bytes32(uint256(uint160(value))));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -237,7 +237,7 @@ library EnumerableSet {
|
||||
* - `index` must be strictly less than {length}.
|
||||
*/
|
||||
function at(AddressSet storage set, uint256 index) internal view returns (address) {
|
||||
return address(uint256(_at(set._inner, index)));
|
||||
return address(uint160(uint256(_at(set._inner, index))));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
pragma solidity ^0.7.0;
|
||||
|
||||
import "../GSN/Context.sol";
|
||||
import "./Context.sol";
|
||||
|
||||
/**
|
||||
* @dev Contract module which allows children to implement an emergency stop
|
||||
@ -36,7 +36,7 @@ abstract contract Pausable is Context {
|
||||
/**
|
||||
* @dev Returns true if the contract is paused, and false otherwise.
|
||||
*/
|
||||
function paused() public view returns (bool) {
|
||||
function paused() public view virtual returns (bool) {
|
||||
return _paused;
|
||||
}
|
||||
|
||||
@ -48,7 +48,7 @@ abstract contract Pausable is Context {
|
||||
* - The contract must not be paused.
|
||||
*/
|
||||
modifier whenNotPaused() {
|
||||
require(!_paused, "Pausable: paused");
|
||||
require(!paused(), "Pausable: paused");
|
||||
_;
|
||||
}
|
||||
|
||||
@ -60,7 +60,7 @@ abstract contract Pausable is Context {
|
||||
* - The contract must be paused.
|
||||
*/
|
||||
modifier whenPaused() {
|
||||
require(_paused, "Pausable: not paused");
|
||||
require(paused(), "Pausable: not paused");
|
||||
_;
|
||||
}
|
||||
|
||||
|
||||
@ -26,7 +26,7 @@ library Strings {
|
||||
uint256 index = digits - 1;
|
||||
temp = value;
|
||||
while (temp != 0) {
|
||||
buffer[index--] = byte(uint8(48 + temp % 10));
|
||||
buffer[index--] = bytes1(uint8(48 + temp % 10));
|
||||
temp /= 10;
|
||||
}
|
||||
return string(buffer);
|
||||
|
||||
Reference in New Issue
Block a user