From 8eb0ab535e63a62fd158b372b3b45a0c60f2dd86 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 08:44:16 -0300 Subject: [PATCH 01/32] Add GAS_PRICE constant key --- contracts/upgradeable_contracts/BasicBridge.sol | 6 ++++-- .../erc20_to_erc20/BasicForeignBridgeErcToErc.sol | 2 +- .../erc20_to_erc20/HomeBridgeErcToErc.sol | 2 +- .../erc20_to_native/ForeignBridgeErcToNative.sol | 2 +- .../erc20_to_native/HomeBridgeErcToNative.sol | 2 +- .../native_to_erc20/ForeignBridgeNativeToErc.sol | 2 +- .../native_to_erc20/HomeBridgeNativeToErc.sol | 2 +- 7 files changed, 10 insertions(+), 8 deletions(-) diff --git a/contracts/upgradeable_contracts/BasicBridge.sol b/contracts/upgradeable_contracts/BasicBridge.sol index dcd0ffcb6..18a4814de 100644 --- a/contracts/upgradeable_contracts/BasicBridge.sol +++ b/contracts/upgradeable_contracts/BasicBridge.sol @@ -17,18 +17,20 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim event DailyLimitChanged(uint256 newLimit); event ExecutionDailyLimitChanged(uint256 newLimit); + bytes32 internal constant GAS_PRICE = keccak256(abi.encodePacked("gasPrice")); + function getBridgeInterfacesVersion() external pure returns (uint64 major, uint64 minor, uint64 patch) { return (2, 3, 0); } function setGasPrice(uint256 _gasPrice) external onlyOwner { require(_gasPrice > 0); - uintStorage[keccak256(abi.encodePacked("gasPrice"))] = _gasPrice; + uintStorage[GAS_PRICE] = _gasPrice; emit GasPriceChanged(_gasPrice); } function gasPrice() external view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("gasPrice"))]; + return uintStorage[GAS_PRICE]; } function setRequiredBlockConfirmations(uint256 _blockConfirmations) external onlyOwner { diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol index 2b342fe7f..6f4ed82e8 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol @@ -24,7 +24,7 @@ contract BasicForeignBridgeErcToErc is BasicForeignBridge { setErc20token(_erc20token); uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))] = _requiredBlockConfirmations; - uintStorage[keccak256(abi.encodePacked("gasPrice"))] = _gasPrice; + uintStorage[GAS_PRICE] = _gasPrice; uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit; uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _homeMaxPerTx; diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol index 0b2dc8c36..439e58f31 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol @@ -139,7 +139,7 @@ contract HomeBridgeErcToErc is uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("minPerTx"))] = _minPerTx; - uintStorage[keccak256(abi.encodePacked("gasPrice"))] = _homeGasPrice; + uintStorage[GAS_PRICE] = _homeGasPrice; uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))] = _requiredBlockConfirmations; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _foreignDailyLimit; uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _foreignMaxPerTx; diff --git a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol index ca837ac50..7da8996ec 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol @@ -28,7 +28,7 @@ contract ForeignBridgeErcToNative is BasicForeignBridge { setErc20token(_erc20token); uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))] = _requiredBlockConfirmations; - uintStorage[keccak256(abi.encodePacked("gasPrice"))] = _gasPrice; + uintStorage[GAS_PRICE] = _gasPrice; uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit; uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _homeMaxPerTx; diff --git a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol index 97fdd4d6d..d01d5322a 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol @@ -154,7 +154,7 @@ contract HomeBridgeErcToNative is EternalStorage, BasicHomeBridge, OverdrawManag uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("minPerTx"))] = _minPerTx; - uintStorage[keccak256(abi.encodePacked("gasPrice"))] = _homeGasPrice; + uintStorage[GAS_PRICE] = _homeGasPrice; uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))] = _requiredBlockConfirmations; addressStorage[keccak256(abi.encodePacked("blockRewardContract"))] = _blockReward; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _foreignDailyLimit; diff --git a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol index 210ce8e04..96e81c428 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol @@ -110,7 +110,7 @@ contract ForeignBridgeNativeToErc is uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("minPerTx"))] = _minPerTx; - uintStorage[keccak256(abi.encodePacked("gasPrice"))] = _foreignGasPrice; + uintStorage[GAS_PRICE] = _foreignGasPrice; uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))] = _requiredBlockConfirmations; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit; uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _homeMaxPerTx; diff --git a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol index 362bbd292..e1d265d68 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol @@ -111,7 +111,7 @@ contract HomeBridgeNativeToErc is EternalStorage, BasicHomeBridge, RewardableHom uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("minPerTx"))] = _minPerTx; - uintStorage[keccak256(abi.encodePacked("gasPrice"))] = _homeGasPrice; + uintStorage[GAS_PRICE] = _homeGasPrice; uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))] = _requiredBlockConfirmations; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _foreignDailyLimit; uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _foreignMaxPerTx; From 204125026f4a782a5649e0d12366512789224de8 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 08:49:00 -0300 Subject: [PATCH 02/32] Add REQUIRED_BLOCK_CONFIRMATIONS constant key --- contracts/upgradeable_contracts/BasicBridge.sol | 5 +++-- .../erc20_to_erc20/BasicForeignBridgeErcToErc.sol | 2 +- .../erc20_to_erc20/HomeBridgeErcToErc.sol | 2 +- .../erc20_to_native/ForeignBridgeErcToNative.sol | 2 +- .../erc20_to_native/HomeBridgeErcToNative.sol | 2 +- .../native_to_erc20/ForeignBridgeNativeToErc.sol | 2 +- .../native_to_erc20/HomeBridgeNativeToErc.sol | 2 +- 7 files changed, 9 insertions(+), 8 deletions(-) diff --git a/contracts/upgradeable_contracts/BasicBridge.sol b/contracts/upgradeable_contracts/BasicBridge.sol index 18a4814de..9e6fc369d 100644 --- a/contracts/upgradeable_contracts/BasicBridge.sol +++ b/contracts/upgradeable_contracts/BasicBridge.sol @@ -18,6 +18,7 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim event ExecutionDailyLimitChanged(uint256 newLimit); bytes32 internal constant GAS_PRICE = keccak256(abi.encodePacked("gasPrice")); + bytes32 internal constant REQUIRED_BLOCK_CONFIRMATIONS = keccak256(abi.encodePacked("requiredBlockConfirmations")); function getBridgeInterfacesVersion() external pure returns (uint64 major, uint64 minor, uint64 patch) { return (2, 3, 0); @@ -35,12 +36,12 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim function setRequiredBlockConfirmations(uint256 _blockConfirmations) external onlyOwner { require(_blockConfirmations > 0); - uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))] = _blockConfirmations; + uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _blockConfirmations; emit RequiredBlockConfirmationChanged(_blockConfirmations); } function requiredBlockConfirmations() external view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))]; + return uintStorage[REQUIRED_BLOCK_CONFIRMATIONS]; } function deployedAtBlock() external view returns (uint256) { diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol index 6f4ed82e8..ec6e4ff54 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol @@ -23,7 +23,7 @@ contract BasicForeignBridgeErcToErc is BasicForeignBridge { addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; setErc20token(_erc20token); uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; - uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))] = _requiredBlockConfirmations; + uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[GAS_PRICE] = _gasPrice; uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit; diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol index 439e58f31..e8642c77f 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol @@ -140,7 +140,7 @@ contract HomeBridgeErcToErc is uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("minPerTx"))] = _minPerTx; uintStorage[GAS_PRICE] = _homeGasPrice; - uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))] = _requiredBlockConfirmations; + uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _foreignDailyLimit; uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _foreignMaxPerTx; setOwner(_owner); diff --git a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol index 7da8996ec..4fdd94a87 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol @@ -27,7 +27,7 @@ contract ForeignBridgeErcToNative is BasicForeignBridge { addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; setErc20token(_erc20token); uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; - uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))] = _requiredBlockConfirmations; + uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[GAS_PRICE] = _gasPrice; uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit; diff --git a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol index d01d5322a..e258cd692 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol @@ -155,7 +155,7 @@ contract HomeBridgeErcToNative is EternalStorage, BasicHomeBridge, OverdrawManag uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("minPerTx"))] = _minPerTx; uintStorage[GAS_PRICE] = _homeGasPrice; - uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))] = _requiredBlockConfirmations; + uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; addressStorage[keccak256(abi.encodePacked("blockRewardContract"))] = _blockReward; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _foreignDailyLimit; uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _foreignMaxPerTx; diff --git a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol index 96e81c428..0c4001199 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol @@ -111,7 +111,7 @@ contract ForeignBridgeNativeToErc is uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("minPerTx"))] = _minPerTx; uintStorage[GAS_PRICE] = _foreignGasPrice; - uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))] = _requiredBlockConfirmations; + uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit; uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _homeMaxPerTx; setOwner(_owner); diff --git a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol index e1d265d68..a14378f35 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol @@ -112,7 +112,7 @@ contract HomeBridgeNativeToErc is EternalStorage, BasicHomeBridge, RewardableHom uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("minPerTx"))] = _minPerTx; uintStorage[GAS_PRICE] = _homeGasPrice; - uintStorage[keccak256(abi.encodePacked("requiredBlockConfirmations"))] = _requiredBlockConfirmations; + uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _foreignDailyLimit; uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _foreignMaxPerTx; setOwner(_owner); From 43972ee9d05af06c82fb17da41cfe51206d11b72 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 09:21:00 -0300 Subject: [PATCH 03/32] Add TOTAL_SPENT_PER_DAY constant key --- contracts/upgradeable_contracts/BasicBridge.sol | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/contracts/upgradeable_contracts/BasicBridge.sol b/contracts/upgradeable_contracts/BasicBridge.sol index 9e6fc369d..8392a161c 100644 --- a/contracts/upgradeable_contracts/BasicBridge.sol +++ b/contracts/upgradeable_contracts/BasicBridge.sol @@ -19,6 +19,7 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim bytes32 internal constant GAS_PRICE = keccak256(abi.encodePacked("gasPrice")); bytes32 internal constant REQUIRED_BLOCK_CONFIRMATIONS = keccak256(abi.encodePacked("requiredBlockConfirmations")); + bytes32 internal constant TOTAL_SPENT_PER_DAY = "totalSpentPerDay"; function getBridgeInterfacesVersion() external pure returns (uint64 major, uint64 minor, uint64 patch) { return (2, 3, 0); @@ -49,11 +50,11 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim } function setTotalSpentPerDay(uint256 _day, uint256 _value) internal { - uintStorage[keccak256(abi.encodePacked("totalSpentPerDay", _day))] = _value; + uintStorage[keccak256(abi.encodePacked(TOTAL_SPENT_PER_DAY, _day))] = _value; } function totalSpentPerDay(uint256 _day) public view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("totalSpentPerDay", _day))]; + return uintStorage[keccak256(abi.encodePacked(TOTAL_SPENT_PER_DAY, _day))]; } function setTotalExecutedPerDay(uint256 _day, uint256 _value) internal { From faee37558416a4b4a9152dae5f142b872afe8703 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 09:22:14 -0300 Subject: [PATCH 04/32] Add TOTAL_EXECUTED_PER_DAY constant key --- contracts/upgradeable_contracts/BasicBridge.sol | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/contracts/upgradeable_contracts/BasicBridge.sol b/contracts/upgradeable_contracts/BasicBridge.sol index 8392a161c..129491fb6 100644 --- a/contracts/upgradeable_contracts/BasicBridge.sol +++ b/contracts/upgradeable_contracts/BasicBridge.sol @@ -20,6 +20,7 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim bytes32 internal constant GAS_PRICE = keccak256(abi.encodePacked("gasPrice")); bytes32 internal constant REQUIRED_BLOCK_CONFIRMATIONS = keccak256(abi.encodePacked("requiredBlockConfirmations")); bytes32 internal constant TOTAL_SPENT_PER_DAY = "totalSpentPerDay"; + bytes32 internal constant TOTAL_EXECUTED_PER_DAY = "totalExecutedPerDay"; function getBridgeInterfacesVersion() external pure returns (uint64 major, uint64 minor, uint64 patch) { return (2, 3, 0); @@ -58,11 +59,11 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim } function setTotalExecutedPerDay(uint256 _day, uint256 _value) internal { - uintStorage[keccak256(abi.encodePacked("totalExecutedPerDay", _day))] = _value; + uintStorage[keccak256(abi.encodePacked(TOTAL_EXECUTED_PER_DAY, _day))] = _value; } function totalExecutedPerDay(uint256 _day) public view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("totalExecutedPerDay", _day))]; + return uintStorage[keccak256(abi.encodePacked(TOTAL_EXECUTED_PER_DAY, _day))]; } function minPerTx() public view returns (uint256) { From 7934c082a5d255410a411d52f5659989c3dc79d3 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 09:25:05 -0300 Subject: [PATCH 05/32] Add MIN_PER_TX constant key --- contracts/upgradeable_contracts/BasicBridge.sol | 6 ++++-- .../erc20_to_erc20/ForeignBridgeErc677ToErc677.sol | 2 +- .../erc20_to_erc20/HomeBridgeErcToErc.sol | 2 +- .../erc20_to_native/HomeBridgeErcToNative.sol | 2 +- .../native_to_erc20/ForeignBridgeNativeToErc.sol | 2 +- .../native_to_erc20/HomeBridgeNativeToErc.sol | 2 +- 6 files changed, 9 insertions(+), 7 deletions(-) diff --git a/contracts/upgradeable_contracts/BasicBridge.sol b/contracts/upgradeable_contracts/BasicBridge.sol index 129491fb6..a8a058c4a 100644 --- a/contracts/upgradeable_contracts/BasicBridge.sol +++ b/contracts/upgradeable_contracts/BasicBridge.sol @@ -19,6 +19,8 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim bytes32 internal constant GAS_PRICE = keccak256(abi.encodePacked("gasPrice")); bytes32 internal constant REQUIRED_BLOCK_CONFIRMATIONS = keccak256(abi.encodePacked("requiredBlockConfirmations")); + bytes32 internal constant MIN_PER_TX = keccak256(abi.encodePacked("minPerTx")); + bytes32 internal constant TOTAL_SPENT_PER_DAY = "totalSpentPerDay"; bytes32 internal constant TOTAL_EXECUTED_PER_DAY = "totalExecutedPerDay"; @@ -67,7 +69,7 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim } function minPerTx() public view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("minPerTx"))]; + return uintStorage[MIN_PER_TX]; } function maxPerTx() public view returns (uint256) { @@ -123,7 +125,7 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim function setMinPerTx(uint256 _minPerTx) external onlyOwner { require(_minPerTx < dailyLimit() && _minPerTx < maxPerTx()); - uintStorage[keccak256(abi.encodePacked("minPerTx"))] = _minPerTx; + uintStorage[MIN_PER_TX] = _minPerTx; } function withinLimit(uint256 _amount) public view returns (bool) { diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/ForeignBridgeErc677ToErc677.sol b/contracts/upgradeable_contracts/erc20_to_erc20/ForeignBridgeErc677ToErc677.sol index e8603870d..9163d2700 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/ForeignBridgeErc677ToErc677.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/ForeignBridgeErc677ToErc677.sol @@ -32,7 +32,7 @@ contract ForeignBridgeErc677ToErc677 is ERC677Bridge, BasicForeignBridgeErcToErc ); uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; - uintStorage[keccak256(abi.encodePacked("minPerTx"))] = _minPerTx; + uintStorage[MIN_PER_TX] = _minPerTx; return isInitialized(); } diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol index e8642c77f..eeef92bef 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol @@ -138,7 +138,7 @@ contract HomeBridgeErcToErc is uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; - uintStorage[keccak256(abi.encodePacked("minPerTx"))] = _minPerTx; + uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _homeGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _foreignDailyLimit; diff --git a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol index e258cd692..759458d48 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol @@ -153,7 +153,7 @@ contract HomeBridgeErcToNative is EternalStorage, BasicHomeBridge, OverdrawManag uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; - uintStorage[keccak256(abi.encodePacked("minPerTx"))] = _minPerTx; + uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _homeGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; addressStorage[keccak256(abi.encodePacked("blockRewardContract"))] = _blockReward; diff --git a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol index 0c4001199..8707386a4 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol @@ -109,7 +109,7 @@ contract ForeignBridgeNativeToErc is uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; - uintStorage[keccak256(abi.encodePacked("minPerTx"))] = _minPerTx; + uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _foreignGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit; diff --git a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol index a14378f35..78dbf189f 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol @@ -110,7 +110,7 @@ contract HomeBridgeNativeToErc is EternalStorage, BasicHomeBridge, RewardableHom uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; - uintStorage[keccak256(abi.encodePacked("minPerTx"))] = _minPerTx; + uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _homeGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _foreignDailyLimit; From c9ed3180628ba1afcc3b85019df1e90cebedb62a Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 09:26:32 -0300 Subject: [PATCH 06/32] Add MAX_PER_TX constant key --- contracts/upgradeable_contracts/BasicBridge.sol | 5 +++-- .../erc20_to_erc20/BasicForeignBridgeErcToErc.sol | 2 +- .../erc20_to_erc20/HomeBridgeErcToErc.sol | 2 +- .../erc20_to_native/ForeignBridgeErcToNative.sol | 2 +- .../erc20_to_native/HomeBridgeErcToNative.sol | 2 +- .../native_to_erc20/ForeignBridgeNativeToErc.sol | 2 +- .../native_to_erc20/HomeBridgeNativeToErc.sol | 2 +- 7 files changed, 9 insertions(+), 8 deletions(-) diff --git a/contracts/upgradeable_contracts/BasicBridge.sol b/contracts/upgradeable_contracts/BasicBridge.sol index a8a058c4a..8b656f289 100644 --- a/contracts/upgradeable_contracts/BasicBridge.sol +++ b/contracts/upgradeable_contracts/BasicBridge.sol @@ -20,6 +20,7 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim bytes32 internal constant GAS_PRICE = keccak256(abi.encodePacked("gasPrice")); bytes32 internal constant REQUIRED_BLOCK_CONFIRMATIONS = keccak256(abi.encodePacked("requiredBlockConfirmations")); bytes32 internal constant MIN_PER_TX = keccak256(abi.encodePacked("minPerTx")); + bytes32 internal constant MAX_PER_TX = keccak256(abi.encodePacked("maxPerTx")); bytes32 internal constant TOTAL_SPENT_PER_DAY = "totalSpentPerDay"; bytes32 internal constant TOTAL_EXECUTED_PER_DAY = "totalExecutedPerDay"; @@ -73,7 +74,7 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim } function maxPerTx() public view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("maxPerTx"))]; + return uintStorage[MAX_PER_TX]; } function executionMaxPerTx() public view returns (uint256) { @@ -120,7 +121,7 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim function setMaxPerTx(uint256 _maxPerTx) external onlyOwner { require(_maxPerTx < dailyLimit()); - uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; + uintStorage[MAX_PER_TX] = _maxPerTx; } function setMinPerTx(uint256 _minPerTx) external onlyOwner { diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol index ec6e4ff54..64654313d 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol @@ -25,7 +25,7 @@ contract BasicForeignBridgeErcToErc is BasicForeignBridge { uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[GAS_PRICE] = _gasPrice; - uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; + uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit; uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _homeMaxPerTx; setOwner(_owner); diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol index eeef92bef..cd3101efa 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol @@ -137,7 +137,7 @@ contract HomeBridgeErcToErc is addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; - uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; + uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _homeGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; diff --git a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol index 4fdd94a87..a7cf2c06f 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol @@ -29,7 +29,7 @@ contract ForeignBridgeErcToNative is BasicForeignBridge { uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[GAS_PRICE] = _gasPrice; - uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; + uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit; uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _homeMaxPerTx; setOwner(_owner); diff --git a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol index 759458d48..9654c318f 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol @@ -152,7 +152,7 @@ contract HomeBridgeErcToNative is EternalStorage, BasicHomeBridge, OverdrawManag addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; - uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; + uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _homeGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; diff --git a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol index 8707386a4..279f93d40 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol @@ -108,7 +108,7 @@ contract ForeignBridgeNativeToErc is setErc677token(_erc677token); uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; - uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; + uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _foreignGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; diff --git a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol index 78dbf189f..59fecf3e7 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol @@ -109,7 +109,7 @@ contract HomeBridgeNativeToErc is EternalStorage, BasicHomeBridge, RewardableHom addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; - uintStorage[keccak256(abi.encodePacked("maxPerTx"))] = _maxPerTx; + uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _homeGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; From 381e44adc92e8395ae3d60bbee38a9e00349fd76 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 09:27:45 -0300 Subject: [PATCH 07/32] Add DAILY_LIMIT constant key --- contracts/upgradeable_contracts/BasicBridge.sol | 5 +++-- .../erc20_to_erc20/ForeignBridgeErc677ToErc677.sol | 2 +- .../erc20_to_erc20/HomeBridgeErcToErc.sol | 2 +- .../erc20_to_native/HomeBridgeErcToNative.sol | 2 +- .../native_to_erc20/ForeignBridgeNativeToErc.sol | 2 +- .../native_to_erc20/HomeBridgeNativeToErc.sol | 2 +- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/contracts/upgradeable_contracts/BasicBridge.sol b/contracts/upgradeable_contracts/BasicBridge.sol index 8b656f289..c8ad0a021 100644 --- a/contracts/upgradeable_contracts/BasicBridge.sol +++ b/contracts/upgradeable_contracts/BasicBridge.sol @@ -21,6 +21,7 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim bytes32 internal constant REQUIRED_BLOCK_CONFIRMATIONS = keccak256(abi.encodePacked("requiredBlockConfirmations")); bytes32 internal constant MIN_PER_TX = keccak256(abi.encodePacked("minPerTx")); bytes32 internal constant MAX_PER_TX = keccak256(abi.encodePacked("maxPerTx")); + bytes32 internal constant DAILY_LIMIT = keccak256(abi.encodePacked("dailyLimit")); bytes32 internal constant TOTAL_SPENT_PER_DAY = "totalSpentPerDay"; bytes32 internal constant TOTAL_EXECUTED_PER_DAY = "totalExecutedPerDay"; @@ -96,12 +97,12 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim function setDailyLimit(uint256 _dailyLimit) external onlyOwner { require(_dailyLimit > maxPerTx() || _dailyLimit == 0); - uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; + uintStorage[DAILY_LIMIT] = _dailyLimit; emit DailyLimitChanged(_dailyLimit); } function dailyLimit() public view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("dailyLimit"))]; + return uintStorage[DAILY_LIMIT]; } function setExecutionDailyLimit(uint256 _dailyLimit) external onlyOwner { diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/ForeignBridgeErc677ToErc677.sol b/contracts/upgradeable_contracts/erc20_to_erc20/ForeignBridgeErc677ToErc677.sol index 9163d2700..5973c6fe6 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/ForeignBridgeErc677ToErc677.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/ForeignBridgeErc677ToErc677.sol @@ -31,7 +31,7 @@ contract ForeignBridgeErc677ToErc677 is ERC677Bridge, BasicForeignBridgeErcToErc _owner ); - uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; + uintStorage[DAILY_LIMIT] = _dailyLimit; uintStorage[MIN_PER_TX] = _minPerTx; return isInitialized(); diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol index cd3101efa..3ce8ac67b 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol @@ -136,7 +136,7 @@ contract HomeBridgeErcToErc is require(_owner != address(0)); addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; - uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; + uintStorage[DAILY_LIMIT] = _dailyLimit; uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _homeGasPrice; diff --git a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol index 9654c318f..a497a3c4f 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol @@ -151,7 +151,7 @@ contract HomeBridgeErcToNative is EternalStorage, BasicHomeBridge, OverdrawManag require(_owner != address(0)); addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; - uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; + uintStorage[DAILY_LIMIT] = _dailyLimit; uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _homeGasPrice; diff --git a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol index 279f93d40..74ca6aae5 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol @@ -106,7 +106,7 @@ contract ForeignBridgeNativeToErc is require(_owner != address(0)); addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; setErc677token(_erc677token); - uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; + uintStorage[DAILY_LIMIT] = _dailyLimit; uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[MIN_PER_TX] = _minPerTx; diff --git a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol index 59fecf3e7..b4d68628e 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol @@ -108,7 +108,7 @@ contract HomeBridgeNativeToErc is EternalStorage, BasicHomeBridge, RewardableHom require(_owner != address(0)); addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; - uintStorage[keccak256(abi.encodePacked("dailyLimit"))] = _dailyLimit; + uintStorage[DAILY_LIMIT] = _dailyLimit; uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _homeGasPrice; From 8278fa47c84955269dc374c7d5c88af4ec9b5308 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 09:28:54 -0300 Subject: [PATCH 08/32] Add EXECUTION_MAX_PER_TX constant key --- contracts/upgradeable_contracts/BasicBridge.sol | 5 +++-- .../erc20_to_erc20/BasicForeignBridgeErcToErc.sol | 2 +- .../erc20_to_erc20/HomeBridgeErcToErc.sol | 2 +- .../erc20_to_native/ForeignBridgeErcToNative.sol | 2 +- .../erc20_to_native/HomeBridgeErcToNative.sol | 2 +- .../native_to_erc20/ForeignBridgeNativeToErc.sol | 2 +- .../native_to_erc20/HomeBridgeNativeToErc.sol | 2 +- 7 files changed, 9 insertions(+), 8 deletions(-) diff --git a/contracts/upgradeable_contracts/BasicBridge.sol b/contracts/upgradeable_contracts/BasicBridge.sol index c8ad0a021..814e3b071 100644 --- a/contracts/upgradeable_contracts/BasicBridge.sol +++ b/contracts/upgradeable_contracts/BasicBridge.sol @@ -22,6 +22,7 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim bytes32 internal constant MIN_PER_TX = keccak256(abi.encodePacked("minPerTx")); bytes32 internal constant MAX_PER_TX = keccak256(abi.encodePacked("maxPerTx")); bytes32 internal constant DAILY_LIMIT = keccak256(abi.encodePacked("dailyLimit")); + bytes32 internal constant EXECUTION_MAX_PER_TX = keccak256(abi.encodePacked("executionMaxPerTx")); bytes32 internal constant TOTAL_SPENT_PER_DAY = "totalSpentPerDay"; bytes32 internal constant TOTAL_EXECUTED_PER_DAY = "totalExecutedPerDay"; @@ -79,7 +80,7 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim } function executionMaxPerTx() public view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))]; + return uintStorage[EXECUTION_MAX_PER_TX]; } function setInitialize() internal { @@ -117,7 +118,7 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim function setExecutionMaxPerTx(uint256 _maxPerTx) external onlyOwner { require(_maxPerTx < executionDailyLimit()); - uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _maxPerTx; + uintStorage[EXECUTION_MAX_PER_TX] = _maxPerTx; } function setMaxPerTx(uint256 _maxPerTx) external onlyOwner { diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol index 64654313d..edd37852b 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol @@ -27,7 +27,7 @@ contract BasicForeignBridgeErcToErc is BasicForeignBridge { uintStorage[GAS_PRICE] = _gasPrice; uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit; - uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _homeMaxPerTx; + uintStorage[EXECUTION_MAX_PER_TX] = _homeMaxPerTx; setOwner(_owner); setInitialize(); } diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol index 3ce8ac67b..a2318ccc9 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol @@ -142,7 +142,7 @@ contract HomeBridgeErcToErc is uintStorage[GAS_PRICE] = _homeGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _foreignDailyLimit; - uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _foreignMaxPerTx; + uintStorage[EXECUTION_MAX_PER_TX] = _foreignMaxPerTx; setOwner(_owner); setErc677token(_erc677token); } diff --git a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol index a7cf2c06f..5c427c7dc 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol @@ -31,7 +31,7 @@ contract ForeignBridgeErcToNative is BasicForeignBridge { uintStorage[GAS_PRICE] = _gasPrice; uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit; - uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _homeMaxPerTx; + uintStorage[EXECUTION_MAX_PER_TX] = _homeMaxPerTx; setOwner(_owner); setInitialize(); return isInitialized(); diff --git a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol index a497a3c4f..b1576ef44 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol @@ -158,7 +158,7 @@ contract HomeBridgeErcToNative is EternalStorage, BasicHomeBridge, OverdrawManag uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; addressStorage[keccak256(abi.encodePacked("blockRewardContract"))] = _blockReward; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _foreignDailyLimit; - uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _foreignMaxPerTx; + uintStorage[EXECUTION_MAX_PER_TX] = _foreignMaxPerTx; setOwner(_owner); } diff --git a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol index 74ca6aae5..6200d54b4 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol @@ -113,7 +113,7 @@ contract ForeignBridgeNativeToErc is uintStorage[GAS_PRICE] = _foreignGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit; - uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _homeMaxPerTx; + uintStorage[EXECUTION_MAX_PER_TX] = _homeMaxPerTx; setOwner(_owner); } diff --git a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol index b4d68628e..8317b70e8 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol @@ -114,7 +114,7 @@ contract HomeBridgeNativeToErc is EternalStorage, BasicHomeBridge, RewardableHom uintStorage[GAS_PRICE] = _homeGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _foreignDailyLimit; - uintStorage[keccak256(abi.encodePacked("executionMaxPerTx"))] = _foreignMaxPerTx; + uintStorage[EXECUTION_MAX_PER_TX] = _foreignMaxPerTx; setOwner(_owner); } From 1af28bd740b1c0fc0207fcacbbeb729ae39eca09 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 09:31:55 -0300 Subject: [PATCH 09/32] Add EXECUTION_DAILY_LIMIT constant key --- contracts/upgradeable_contracts/BasicBridge.sol | 5 +++-- .../erc20_to_erc20/BasicForeignBridgeErcToErc.sol | 2 +- .../erc20_to_erc20/HomeBridgeErcToErc.sol | 2 +- .../erc20_to_native/ForeignBridgeErcToNative.sol | 2 +- .../erc20_to_native/HomeBridgeErcToNative.sol | 2 +- .../native_to_erc20/ForeignBridgeNativeToErc.sol | 2 +- .../native_to_erc20/HomeBridgeNativeToErc.sol | 2 +- 7 files changed, 9 insertions(+), 8 deletions(-) diff --git a/contracts/upgradeable_contracts/BasicBridge.sol b/contracts/upgradeable_contracts/BasicBridge.sol index 814e3b071..f8acc1da4 100644 --- a/contracts/upgradeable_contracts/BasicBridge.sol +++ b/contracts/upgradeable_contracts/BasicBridge.sol @@ -23,6 +23,7 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim bytes32 internal constant MAX_PER_TX = keccak256(abi.encodePacked("maxPerTx")); bytes32 internal constant DAILY_LIMIT = keccak256(abi.encodePacked("dailyLimit")); bytes32 internal constant EXECUTION_MAX_PER_TX = keccak256(abi.encodePacked("executionMaxPerTx")); + bytes32 internal constant EXECUTION_DAILY_LIMIT = keccak256(abi.encodePacked("executionDailyLimit")); bytes32 internal constant TOTAL_SPENT_PER_DAY = "totalSpentPerDay"; bytes32 internal constant TOTAL_EXECUTED_PER_DAY = "totalExecutedPerDay"; @@ -108,12 +109,12 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim function setExecutionDailyLimit(uint256 _dailyLimit) external onlyOwner { require(_dailyLimit > executionMaxPerTx() || _dailyLimit == 0); - uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _dailyLimit; + uintStorage[EXECUTION_DAILY_LIMIT] = _dailyLimit; emit ExecutionDailyLimitChanged(_dailyLimit); } function executionDailyLimit() public view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))]; + return uintStorage[EXECUTION_DAILY_LIMIT]; } function setExecutionMaxPerTx(uint256 _maxPerTx) external onlyOwner { diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol index edd37852b..8eb8fa5c3 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol @@ -26,7 +26,7 @@ contract BasicForeignBridgeErcToErc is BasicForeignBridge { uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[GAS_PRICE] = _gasPrice; uintStorage[MAX_PER_TX] = _maxPerTx; - uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit; + uintStorage[EXECUTION_DAILY_LIMIT] = _homeDailyLimit; uintStorage[EXECUTION_MAX_PER_TX] = _homeMaxPerTx; setOwner(_owner); setInitialize(); diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol index a2318ccc9..5632f442e 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol @@ -141,7 +141,7 @@ contract HomeBridgeErcToErc is uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _homeGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; - uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _foreignDailyLimit; + uintStorage[EXECUTION_DAILY_LIMIT] = _foreignDailyLimit; uintStorage[EXECUTION_MAX_PER_TX] = _foreignMaxPerTx; setOwner(_owner); setErc677token(_erc677token); diff --git a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol index 5c427c7dc..7028a9fc8 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol @@ -30,7 +30,7 @@ contract ForeignBridgeErcToNative is BasicForeignBridge { uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[GAS_PRICE] = _gasPrice; uintStorage[MAX_PER_TX] = _maxPerTx; - uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit; + uintStorage[EXECUTION_DAILY_LIMIT] = _homeDailyLimit; uintStorage[EXECUTION_MAX_PER_TX] = _homeMaxPerTx; setOwner(_owner); setInitialize(); diff --git a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol index b1576ef44..2e8dba2d7 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol @@ -157,7 +157,7 @@ contract HomeBridgeErcToNative is EternalStorage, BasicHomeBridge, OverdrawManag uintStorage[GAS_PRICE] = _homeGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; addressStorage[keccak256(abi.encodePacked("blockRewardContract"))] = _blockReward; - uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _foreignDailyLimit; + uintStorage[EXECUTION_DAILY_LIMIT] = _foreignDailyLimit; uintStorage[EXECUTION_MAX_PER_TX] = _foreignMaxPerTx; setOwner(_owner); } diff --git a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol index 6200d54b4..19cabc847 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol @@ -112,7 +112,7 @@ contract ForeignBridgeNativeToErc is uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _foreignGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; - uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _homeDailyLimit; + uintStorage[EXECUTION_DAILY_LIMIT] = _homeDailyLimit; uintStorage[EXECUTION_MAX_PER_TX] = _homeMaxPerTx; setOwner(_owner); } diff --git a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol index 8317b70e8..f42a4f66e 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol @@ -113,7 +113,7 @@ contract HomeBridgeNativeToErc is EternalStorage, BasicHomeBridge, RewardableHom uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _homeGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; - uintStorage[keccak256(abi.encodePacked("executionDailyLimit"))] = _foreignDailyLimit; + uintStorage[EXECUTION_DAILY_LIMIT] = _foreignDailyLimit; uintStorage[EXECUTION_MAX_PER_TX] = _foreignMaxPerTx; setOwner(_owner); } From 40bbf14280e07a5de913eb821bb49d0f488f5f22 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 10:04:38 -0300 Subject: [PATCH 10/32] Add Initializable base contract --- .../BaseBridgeValidators.sol | 16 ++------------- .../upgradeable_contracts/BasicBridge.sol | 16 ++------------- .../BridgeValidators.sol | 2 +- .../upgradeable_contracts/Initializable.sol | 20 +++++++++++++++++++ .../RewardableValidators.sol | 2 +- .../BasicForeignBridgeErcToErc.sol | 2 +- .../erc20_to_erc20/HomeBridgeErcToErc.sol | 2 +- .../ForeignBridgeErcToNative.sol | 2 +- .../erc20_to_native/HomeBridgeErcToNative.sol | 2 +- .../ForeignBridgeNativeToErc.sol | 2 +- .../native_to_erc20/HomeBridgeNativeToErc.sol | 2 +- 11 files changed, 32 insertions(+), 36 deletions(-) create mode 100644 contracts/upgradeable_contracts/Initializable.sol diff --git a/contracts/upgradeable_contracts/BaseBridgeValidators.sol b/contracts/upgradeable_contracts/BaseBridgeValidators.sol index 78bb7ece5..260f9e677 100644 --- a/contracts/upgradeable_contracts/BaseBridgeValidators.sol +++ b/contracts/upgradeable_contracts/BaseBridgeValidators.sol @@ -2,9 +2,9 @@ pragma solidity 0.4.24; import "./Ownable.sol"; import "openzeppelin-solidity/contracts/math/SafeMath.sol"; -import "../upgradeability/EternalStorage.sol"; +import "./Initializable.sol"; -contract BaseBridgeValidators is EternalStorage, Ownable { +contract BaseBridgeValidators is Initializable, Ownable { using SafeMath for uint256; address public constant F_ADDR = 0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF; @@ -85,14 +85,6 @@ contract BaseBridgeValidators is EternalStorage, Ownable { return _validator != F_ADDR && getNextValidator(_validator) != address(0); } - function isInitialized() public view returns (bool) { - return boolStorage[keccak256(abi.encodePacked("isInitialized"))]; - } - - function deployedAtBlock() external view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))]; - } - function getNextValidator(address _address) public view returns (address) { return addressStorage[keccak256(abi.encodePacked("validatorsList", _address))]; } @@ -108,8 +100,4 @@ contract BaseBridgeValidators is EternalStorage, Ownable { function setNextValidator(address _prevValidator, address _validator) internal { addressStorage[keccak256(abi.encodePacked("validatorsList", _prevValidator))] = _validator; } - - function setInitialize() internal { - boolStorage[keccak256(abi.encodePacked("isInitialized"))] = true; - } } diff --git a/contracts/upgradeable_contracts/BasicBridge.sol b/contracts/upgradeable_contracts/BasicBridge.sol index f8acc1da4..689e41731 100644 --- a/contracts/upgradeable_contracts/BasicBridge.sol +++ b/contracts/upgradeable_contracts/BasicBridge.sol @@ -2,14 +2,14 @@ pragma solidity 0.4.24; import "../interfaces/IBridgeValidators.sol"; import "./Upgradeable.sol"; -import "../upgradeability/EternalStorage.sol"; +import "./Initializable.sol"; import "openzeppelin-solidity/contracts/math/SafeMath.sol"; import "openzeppelin-solidity/contracts/AddressUtils.sol"; import "./Validatable.sol"; import "./Ownable.sol"; import "./Claimable.sol"; -contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claimable { +contract BasicBridge is Initializable, Validatable, Ownable, Upgradeable, Claimable { using SafeMath for uint256; event GasPriceChanged(uint256 gasPrice); @@ -52,10 +52,6 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim return uintStorage[REQUIRED_BLOCK_CONFIRMATIONS]; } - function deployedAtBlock() external view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))]; - } - function setTotalSpentPerDay(uint256 _day, uint256 _value) internal { uintStorage[keccak256(abi.encodePacked(TOTAL_SPENT_PER_DAY, _day))] = _value; } @@ -84,14 +80,6 @@ contract BasicBridge is EternalStorage, Validatable, Ownable, Upgradeable, Claim return uintStorage[EXECUTION_MAX_PER_TX]; } - function setInitialize() internal { - boolStorage[keccak256(abi.encodePacked("isInitialized"))] = true; - } - - function isInitialized() public view returns (bool) { - return boolStorage[keccak256(abi.encodePacked("isInitialized"))]; - } - function getCurrentDay() public view returns (uint256) { // solhint-disable-next-line not-rely-on-time return now / 1 days; diff --git a/contracts/upgradeable_contracts/BridgeValidators.sol b/contracts/upgradeable_contracts/BridgeValidators.sol index 39d35fdc0..f54a5d1ca 100644 --- a/contracts/upgradeable_contracts/BridgeValidators.sol +++ b/contracts/upgradeable_contracts/BridgeValidators.sol @@ -35,7 +35,7 @@ contract BridgeValidators is BaseBridgeValidators { setValidatorCount(_initialValidators.length); uintStorage[keccak256(abi.encodePacked("requiredSignatures"))] = _requiredSignatures; - uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; + uintStorage[DEPLOYED_AT_BLOCK] = block.number; setInitialize(); emit RequiredSignaturesChanged(_requiredSignatures); diff --git a/contracts/upgradeable_contracts/Initializable.sol b/contracts/upgradeable_contracts/Initializable.sol new file mode 100644 index 000000000..12b41b8c3 --- /dev/null +++ b/contracts/upgradeable_contracts/Initializable.sol @@ -0,0 +1,20 @@ +pragma solidity 0.4.24; + +import "../upgradeability/EternalStorage.sol"; + +contract Initializable is EternalStorage { + bytes32 internal constant INITIALIZED = keccak256(abi.encodePacked("isInitialized")); + bytes32 internal constant DEPLOYED_AT_BLOCK = keccak256(abi.encodePacked("deployedAtBlock")); + + function setInitialize() internal { + boolStorage[INITIALIZED] = true; + } + + function isInitialized() public view returns (bool) { + return boolStorage[INITIALIZED]; + } + + function deployedAtBlock() external view returns (uint256) { + return uintStorage[DEPLOYED_AT_BLOCK]; + } +} diff --git a/contracts/upgradeable_contracts/RewardableValidators.sol b/contracts/upgradeable_contracts/RewardableValidators.sol index 35d9ad094..9ec59ffba 100644 --- a/contracts/upgradeable_contracts/RewardableValidators.sol +++ b/contracts/upgradeable_contracts/RewardableValidators.sol @@ -40,7 +40,7 @@ contract RewardableValidators is BaseBridgeValidators { setValidatorCount(_initialValidators.length); uintStorage[keccak256(abi.encodePacked("requiredSignatures"))] = _requiredSignatures; - uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; + uintStorage[DEPLOYED_AT_BLOCK] = block.number; setInitialize(); emit RequiredSignaturesChanged(_requiredSignatures); diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol index 8eb8fa5c3..bea871ae0 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol @@ -22,7 +22,7 @@ contract BasicForeignBridgeErcToErc is BasicForeignBridge { require(_owner != address(0)); addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; setErc20token(_erc20token); - uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; + uintStorage[DEPLOYED_AT_BLOCK] = block.number; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[GAS_PRICE] = _gasPrice; uintStorage[MAX_PER_TX] = _maxPerTx; diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol index 5632f442e..845dd3f82 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol @@ -135,7 +135,7 @@ contract HomeBridgeErcToErc is require(_foreignMaxPerTx < _foreignDailyLimit); require(_owner != address(0)); addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; - uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; + uintStorage[DEPLOYED_AT_BLOCK] = block.number; uintStorage[DAILY_LIMIT] = _dailyLimit; uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[MIN_PER_TX] = _minPerTx; diff --git a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol index 7028a9fc8..ff0bc1e8d 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol @@ -26,7 +26,7 @@ contract ForeignBridgeErcToNative is BasicForeignBridge { require(_owner != address(0)); addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; setErc20token(_erc20token); - uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; + uintStorage[DEPLOYED_AT_BLOCK] = block.number; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; uintStorage[GAS_PRICE] = _gasPrice; uintStorage[MAX_PER_TX] = _maxPerTx; diff --git a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol index 2e8dba2d7..20908ce20 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol @@ -150,7 +150,7 @@ contract HomeBridgeErcToNative is EternalStorage, BasicHomeBridge, OverdrawManag require(_foreignMaxPerTx < _foreignDailyLimit); require(_owner != address(0)); addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; - uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; + uintStorage[DEPLOYED_AT_BLOCK] = block.number; uintStorage[DAILY_LIMIT] = _dailyLimit; uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[MIN_PER_TX] = _minPerTx; diff --git a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol index 19cabc847..de623e45c 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol @@ -107,7 +107,7 @@ contract ForeignBridgeNativeToErc is addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; setErc677token(_erc677token); uintStorage[DAILY_LIMIT] = _dailyLimit; - uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; + uintStorage[DEPLOYED_AT_BLOCK] = block.number; uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _foreignGasPrice; diff --git a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol index f42a4f66e..47c3d34bc 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol @@ -107,7 +107,7 @@ contract HomeBridgeNativeToErc is EternalStorage, BasicHomeBridge, RewardableHom require(_foreignMaxPerTx < _foreignDailyLimit); require(_owner != address(0)); addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; - uintStorage[keccak256(abi.encodePacked("deployedAtBlock"))] = block.number; + uintStorage[DEPLOYED_AT_BLOCK] = block.number; uintStorage[DAILY_LIMIT] = _dailyLimit; uintStorage[MAX_PER_TX] = _maxPerTx; uintStorage[MIN_PER_TX] = _minPerTx; From 68112764661a58063ff1f2ddb65f890b07caf331 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 10:13:39 -0300 Subject: [PATCH 11/32] Add REQUIRED_SIGNATURES constant key --- contracts/upgradeable_contracts/BaseBridgeValidators.sol | 5 +++-- contracts/upgradeable_contracts/BridgeValidators.sol | 2 +- contracts/upgradeable_contracts/RewardableValidators.sol | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/contracts/upgradeable_contracts/BaseBridgeValidators.sol b/contracts/upgradeable_contracts/BaseBridgeValidators.sol index 260f9e677..60fe7c486 100644 --- a/contracts/upgradeable_contracts/BaseBridgeValidators.sol +++ b/contracts/upgradeable_contracts/BaseBridgeValidators.sol @@ -9,6 +9,7 @@ contract BaseBridgeValidators is Initializable, Ownable { address public constant F_ADDR = 0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF; uint256 internal constant MAX_VALIDATORS = 100; + bytes32 internal constant REQUIRED_SIGNATURES = keccak256(abi.encodePacked("requiredSignatures")); event ValidatorAdded(address indexed validator); event ValidatorRemoved(address indexed validator); @@ -17,7 +18,7 @@ contract BaseBridgeValidators is Initializable, Ownable { function setRequiredSignatures(uint256 _requiredSignatures) external onlyOwner { require(validatorCount() >= _requiredSignatures); require(_requiredSignatures != 0); - uintStorage[keccak256(abi.encodePacked("requiredSignatures"))] = _requiredSignatures; + uintStorage[REQUIRED_SIGNATURES] = _requiredSignatures; emit RequiredSignaturesChanged(_requiredSignatures); } @@ -74,7 +75,7 @@ contract BaseBridgeValidators is Initializable, Ownable { } function requiredSignatures() public view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("requiredSignatures"))]; + return uintStorage[REQUIRED_SIGNATURES]; } function validatorCount() public view returns (uint256) { diff --git a/contracts/upgradeable_contracts/BridgeValidators.sol b/contracts/upgradeable_contracts/BridgeValidators.sol index f54a5d1ca..887baf835 100644 --- a/contracts/upgradeable_contracts/BridgeValidators.sol +++ b/contracts/upgradeable_contracts/BridgeValidators.sol @@ -34,7 +34,7 @@ contract BridgeValidators is BaseBridgeValidators { } setValidatorCount(_initialValidators.length); - uintStorage[keccak256(abi.encodePacked("requiredSignatures"))] = _requiredSignatures; + uintStorage[REQUIRED_SIGNATURES] = _requiredSignatures; uintStorage[DEPLOYED_AT_BLOCK] = block.number; setInitialize(); emit RequiredSignaturesChanged(_requiredSignatures); diff --git a/contracts/upgradeable_contracts/RewardableValidators.sol b/contracts/upgradeable_contracts/RewardableValidators.sol index 9ec59ffba..f1a11545f 100644 --- a/contracts/upgradeable_contracts/RewardableValidators.sol +++ b/contracts/upgradeable_contracts/RewardableValidators.sol @@ -39,7 +39,7 @@ contract RewardableValidators is BaseBridgeValidators { } setValidatorCount(_initialValidators.length); - uintStorage[keccak256(abi.encodePacked("requiredSignatures"))] = _requiredSignatures; + uintStorage[REQUIRED_SIGNATURES] = _requiredSignatures; uintStorage[DEPLOYED_AT_BLOCK] = block.number; setInitialize(); emit RequiredSignaturesChanged(_requiredSignatures); From a045471aee7316604803249002aad4872d1819d8 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 10:32:02 -0300 Subject: [PATCH 12/32] Add HOME_FEE_STORAGE_KEY constant key --- contracts/upgradeable_contracts/BaseFeeManager.sol | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/contracts/upgradeable_contracts/BaseFeeManager.sol b/contracts/upgradeable_contracts/BaseFeeManager.sol index 35be34fd3..bd39a5e0f 100644 --- a/contracts/upgradeable_contracts/BaseFeeManager.sol +++ b/contracts/upgradeable_contracts/BaseFeeManager.sol @@ -13,6 +13,7 @@ contract BaseFeeManager is EternalStorage, FeeTypes { // This is not a real fee value but a relative value used to calculate the fee percentage uint256 internal constant MAX_FEE = 1 ether; + bytes32 internal constant HOME_FEE_STORAGE_KEY = keccak256(abi.encodePacked("homeFee")); function calculateFee(uint256 _value, bool _recover, bytes32 _feeType) public view returns (uint256) { uint256 fee = _feeType == HOME_FEE ? getHomeFee() : getForeignFee(); @@ -29,12 +30,12 @@ contract BaseFeeManager is EternalStorage, FeeTypes { } function setHomeFee(uint256 _fee) external validFee(_fee) { - uintStorage[keccak256(abi.encodePacked("homeFee"))] = _fee; + uintStorage[HOME_FEE_STORAGE_KEY] = _fee; emit HomeFeeUpdated(_fee); } function getHomeFee() public view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("homeFee"))]; + return uintStorage[HOME_FEE_STORAGE_KEY]; } function setForeignFee(uint256 _fee) external validFee(_fee) { From 841b71666264a405b7dd0b8fe79f2c21e97df079 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 10:32:53 -0300 Subject: [PATCH 13/32] Add FOREIGN_FEE_STORAGE_KEY constant key --- contracts/upgradeable_contracts/BaseFeeManager.sol | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/contracts/upgradeable_contracts/BaseFeeManager.sol b/contracts/upgradeable_contracts/BaseFeeManager.sol index bd39a5e0f..2a520bddc 100644 --- a/contracts/upgradeable_contracts/BaseFeeManager.sol +++ b/contracts/upgradeable_contracts/BaseFeeManager.sol @@ -14,6 +14,7 @@ contract BaseFeeManager is EternalStorage, FeeTypes { // This is not a real fee value but a relative value used to calculate the fee percentage uint256 internal constant MAX_FEE = 1 ether; bytes32 internal constant HOME_FEE_STORAGE_KEY = keccak256(abi.encodePacked("homeFee")); + bytes32 internal constant FOREIGN_FEE_STORAGE_KEY = keccak256(abi.encodePacked("foreignFee")); function calculateFee(uint256 _value, bool _recover, bytes32 _feeType) public view returns (uint256) { uint256 fee = _feeType == HOME_FEE ? getHomeFee() : getForeignFee(); @@ -39,12 +40,12 @@ contract BaseFeeManager is EternalStorage, FeeTypes { } function setForeignFee(uint256 _fee) external validFee(_fee) { - uintStorage[keccak256(abi.encodePacked("foreignFee"))] = _fee; + uintStorage[FOREIGN_FEE_STORAGE_KEY] = _fee; emit ForeignFeeUpdated(_fee); } function getForeignFee() public view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("foreignFee"))]; + return uintStorage[FOREIGN_FEE_STORAGE_KEY]; } /* solcov ignore next */ From 7d014b2a46da0966b3ce4482eab487d6593f1b8c Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 11:56:03 -0300 Subject: [PATCH 14/32] Remove TOTAL_SPENT_PER_DAY and TOTAL_EXECUTED_PER_DAY keys --- contracts/upgradeable_contracts/BasicBridge.sol | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/contracts/upgradeable_contracts/BasicBridge.sol b/contracts/upgradeable_contracts/BasicBridge.sol index 689e41731..c3e20e3e6 100644 --- a/contracts/upgradeable_contracts/BasicBridge.sol +++ b/contracts/upgradeable_contracts/BasicBridge.sol @@ -25,9 +25,6 @@ contract BasicBridge is Initializable, Validatable, Ownable, Upgradeable, Claima bytes32 internal constant EXECUTION_MAX_PER_TX = keccak256(abi.encodePacked("executionMaxPerTx")); bytes32 internal constant EXECUTION_DAILY_LIMIT = keccak256(abi.encodePacked("executionDailyLimit")); - bytes32 internal constant TOTAL_SPENT_PER_DAY = "totalSpentPerDay"; - bytes32 internal constant TOTAL_EXECUTED_PER_DAY = "totalExecutedPerDay"; - function getBridgeInterfacesVersion() external pure returns (uint64 major, uint64 minor, uint64 patch) { return (2, 3, 0); } @@ -53,19 +50,19 @@ contract BasicBridge is Initializable, Validatable, Ownable, Upgradeable, Claima } function setTotalSpentPerDay(uint256 _day, uint256 _value) internal { - uintStorage[keccak256(abi.encodePacked(TOTAL_SPENT_PER_DAY, _day))] = _value; + uintStorage[keccak256(abi.encodePacked("totalSpentPerDay", _day))] = _value; } function totalSpentPerDay(uint256 _day) public view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked(TOTAL_SPENT_PER_DAY, _day))]; + return uintStorage[keccak256(abi.encodePacked("totalSpentPerDay", _day))]; } function setTotalExecutedPerDay(uint256 _day, uint256 _value) internal { - uintStorage[keccak256(abi.encodePacked(TOTAL_EXECUTED_PER_DAY, _day))] = _value; + uintStorage[keccak256(abi.encodePacked("totalExecutedPerDay", _day))] = _value; } function totalExecutedPerDay(uint256 _day) public view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked(TOTAL_EXECUTED_PER_DAY, _day))]; + return uintStorage[keccak256(abi.encodePacked("totalExecutedPerDay", _day))]; } function minPerTx() public view returns (uint256) { From 40a90fc400c12d44318bd2198365116834fbc477 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 14:09:15 -0300 Subject: [PATCH 15/32] Add VALIDATOR_COUNT constant key --- contracts/upgradeable_contracts/BaseBridgeValidators.sol | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/contracts/upgradeable_contracts/BaseBridgeValidators.sol b/contracts/upgradeable_contracts/BaseBridgeValidators.sol index 60fe7c486..854b6dfae 100644 --- a/contracts/upgradeable_contracts/BaseBridgeValidators.sol +++ b/contracts/upgradeable_contracts/BaseBridgeValidators.sol @@ -10,6 +10,7 @@ contract BaseBridgeValidators is Initializable, Ownable { address public constant F_ADDR = 0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF; uint256 internal constant MAX_VALIDATORS = 100; bytes32 internal constant REQUIRED_SIGNATURES = keccak256(abi.encodePacked("requiredSignatures")); + bytes32 internal constant VALIDATOR_COUNT = keccak256(abi.encodePacked("validatorCount")); event ValidatorAdded(address indexed validator); event ValidatorRemoved(address indexed validator); @@ -79,7 +80,7 @@ contract BaseBridgeValidators is Initializable, Ownable { } function validatorCount() public view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("validatorCount"))]; + return uintStorage[VALIDATOR_COUNT]; } function isValidator(address _validator) public view returns (bool) { @@ -95,7 +96,7 @@ contract BaseBridgeValidators is Initializable, Ownable { } function setValidatorCount(uint256 _validatorCount) internal { - uintStorage[keccak256(abi.encodePacked("validatorCount"))] = _validatorCount; + uintStorage[VALIDATOR_COUNT] = _validatorCount; } function setNextValidator(address _prevValidator, address _validator) internal { From d59230635a53edf6e9084eeb4c5dc95d4683a91d Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 14:19:34 -0300 Subject: [PATCH 16/32] Add FEE_MANAGER_CONTRACT constant key --- contracts/upgradeable_contracts/RewardableBridge.sol | 6 ++++-- .../erc20_to_erc20/HomeBridgeErcToErc.sol | 2 +- .../erc20_to_native/HomeBridgeErcToNative.sol | 2 +- .../native_to_erc20/ForeignBridgeNativeToErc.sol | 2 +- .../native_to_erc20/HomeBridgeNativeToErc.sol | 2 +- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/contracts/upgradeable_contracts/RewardableBridge.sol b/contracts/upgradeable_contracts/RewardableBridge.sol index 6032a41aa..163561846 100644 --- a/contracts/upgradeable_contracts/RewardableBridge.sol +++ b/contracts/upgradeable_contracts/RewardableBridge.sol @@ -8,6 +8,8 @@ contract RewardableBridge is Ownable, FeeTypes { event FeeDistributedFromAffirmation(uint256 feeAmount, bytes32 indexed transactionHash); event FeeDistributedFromSignatures(uint256 feeAmount, bytes32 indexed transactionHash); + bytes32 internal constant FEE_MANAGER_CONTRACT = keccak256(abi.encodePacked("feeManagerContract")); + function _getFee(bytes32 _feeType) internal view returns (uint256) { uint256 fee; address feeManager = feeManagerContract(); @@ -43,12 +45,12 @@ contract RewardableBridge is Ownable, FeeTypes { } function feeManagerContract() public view returns (address) { - return addressStorage[keccak256(abi.encodePacked("feeManagerContract"))]; + return addressStorage[FEE_MANAGER_CONTRACT]; } function setFeeManagerContract(address _feeManager) external onlyOwner { require(_feeManager == address(0) || AddressUtils.isContract(_feeManager)); - addressStorage[keccak256(abi.encodePacked("feeManagerContract"))] = _feeManager; + addressStorage[FEE_MANAGER_CONTRACT] = _feeManager; } function _setFee(address _feeManager, uint256 _fee, bytes32 _feeType) internal { diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol index 845dd3f82..d41afc334 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol @@ -111,7 +111,7 @@ contract HomeBridgeErcToErc is _owner ); require(AddressUtils.isContract(_feeManager)); - addressStorage[keccak256(abi.encodePacked("feeManagerContract"))] = _feeManager; + addressStorage[FEE_MANAGER_CONTRACT] = _feeManager; _setFee(_feeManager, _homeFee, HOME_FEE); _setFee(_feeManager, _foreignFee, FOREIGN_FEE); } diff --git a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol index 20908ce20..e265f0375 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol @@ -94,7 +94,7 @@ contract HomeBridgeErcToNative is EternalStorage, BasicHomeBridge, OverdrawManag _owner ); require(AddressUtils.isContract(_feeManager)); - addressStorage[keccak256(abi.encodePacked("feeManagerContract"))] = _feeManager; + addressStorage[FEE_MANAGER_CONTRACT] = _feeManager; _setFee(_feeManager, _homeFee, HOME_FEE); _setFee(_feeManager, _foreignFee, FOREIGN_FEE); setInitialize(); diff --git a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol index de623e45c..fa8a5df83 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol @@ -71,7 +71,7 @@ contract ForeignBridgeNativeToErc is _owner ); require(AddressUtils.isContract(_feeManager)); - addressStorage[keccak256(abi.encodePacked("feeManagerContract"))] = _feeManager; + addressStorage[FEE_MANAGER_CONTRACT] = _feeManager; _setFee(_feeManager, _homeFee, HOME_FEE); setInitialize(); return isInitialized(); diff --git a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol index 47c3d34bc..ebc7ff5f0 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol @@ -77,7 +77,7 @@ contract HomeBridgeNativeToErc is EternalStorage, BasicHomeBridge, RewardableHom _owner ); require(AddressUtils.isContract(_feeManager)); - addressStorage[keccak256(abi.encodePacked("feeManagerContract"))] = _feeManager; + addressStorage[FEE_MANAGER_CONTRACT] = _feeManager; _setFee(_feeManager, _homeFee, HOME_FEE); _setFee(_feeManager, _foreignFee, FOREIGN_FEE); setInitialize(); From bcf43b52df1f6badced6bff825fe4d53051d7535 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 14:24:43 -0300 Subject: [PATCH 17/32] Add VALIDATOR_CONTRACT constant key --- contracts/upgradeable_contracts/Validatable.sol | 4 +++- contracts/upgradeable_contracts/ValidatorsFeeManager.sol | 2 +- .../erc20_to_erc20/BasicForeignBridgeErcToErc.sol | 2 +- .../erc20_to_erc20/HomeBridgeErcToErc.sol | 2 +- .../erc20_to_native/ForeignBridgeErcToNative.sol | 2 +- .../erc20_to_native/HomeBridgeErcToNative.sol | 2 +- .../native_to_erc20/ForeignBridgeNativeToErc.sol | 2 +- .../native_to_erc20/HomeBridgeNativeToErc.sol | 2 +- 8 files changed, 10 insertions(+), 8 deletions(-) diff --git a/contracts/upgradeable_contracts/Validatable.sol b/contracts/upgradeable_contracts/Validatable.sol index c66ceab07..2b6a7d084 100644 --- a/contracts/upgradeable_contracts/Validatable.sol +++ b/contracts/upgradeable_contracts/Validatable.sol @@ -3,8 +3,10 @@ import "../interfaces/IBridgeValidators.sol"; import "../upgradeability/EternalStorage.sol"; contract Validatable is EternalStorage { + bytes32 internal constant VALIDATOR_CONTRACT = keccak256(abi.encodePacked("validatorContract")); + function validatorContract() public view returns (IBridgeValidators) { - return IBridgeValidators(addressStorage[keccak256(abi.encodePacked("validatorContract"))]); + return IBridgeValidators(addressStorage[VALIDATOR_CONTRACT]); } modifier onlyValidator() { diff --git a/contracts/upgradeable_contracts/ValidatorsFeeManager.sol b/contracts/upgradeable_contracts/ValidatorsFeeManager.sol index 2f85bfd80..84b1946c9 100644 --- a/contracts/upgradeable_contracts/ValidatorsFeeManager.sol +++ b/contracts/upgradeable_contracts/ValidatorsFeeManager.sol @@ -21,7 +21,7 @@ contract ValidatorsFeeManager is BaseFeeManager { } function rewardableValidatorContract() internal view returns (IRewardableValidators) { - return IRewardableValidators(addressStorage[keccak256(abi.encodePacked("validatorContract"))]); + return IRewardableValidators(addressStorage[VALIDATOR_CONTRACT]); } function distributeFeeProportionally(uint256 _fee, bytes32 _direction) internal { diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol index bea871ae0..0b85aece1 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/BasicForeignBridgeErcToErc.sol @@ -20,7 +20,7 @@ contract BasicForeignBridgeErcToErc is BasicForeignBridge { require(_gasPrice > 0); require(_homeMaxPerTx < _homeDailyLimit); require(_owner != address(0)); - addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; + addressStorage[VALIDATOR_CONTRACT] = _validatorContract; setErc20token(_erc20token); uintStorage[DEPLOYED_AT_BLOCK] = block.number; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol index d41afc334..9d6ba0c20 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErc.sol @@ -134,7 +134,7 @@ contract HomeBridgeErcToErc is require(_minPerTx > 0 && _maxPerTx > _minPerTx && _dailyLimit > _maxPerTx); require(_foreignMaxPerTx < _foreignDailyLimit); require(_owner != address(0)); - addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; + addressStorage[VALIDATOR_CONTRACT] = _validatorContract; uintStorage[DEPLOYED_AT_BLOCK] = block.number; uintStorage[DAILY_LIMIT] = _dailyLimit; uintStorage[MAX_PER_TX] = _maxPerTx; diff --git a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol index ff0bc1e8d..bd4a5984f 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol @@ -24,7 +24,7 @@ contract ForeignBridgeErcToNative is BasicForeignBridge { require(_gasPrice > 0); require(_homeMaxPerTx < _homeDailyLimit); require(_owner != address(0)); - addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; + addressStorage[VALIDATOR_CONTRACT] = _validatorContract; setErc20token(_erc20token); uintStorage[DEPLOYED_AT_BLOCK] = block.number; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; diff --git a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol index e265f0375..75f1828fb 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol @@ -149,7 +149,7 @@ contract HomeBridgeErcToNative is EternalStorage, BasicHomeBridge, OverdrawManag require(_blockReward == address(0) || AddressUtils.isContract(_blockReward)); require(_foreignMaxPerTx < _foreignDailyLimit); require(_owner != address(0)); - addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; + addressStorage[VALIDATOR_CONTRACT] = _validatorContract; uintStorage[DEPLOYED_AT_BLOCK] = block.number; uintStorage[DAILY_LIMIT] = _dailyLimit; uintStorage[MAX_PER_TX] = _maxPerTx; diff --git a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol index fa8a5df83..693687d24 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/ForeignBridgeNativeToErc.sol @@ -104,7 +104,7 @@ contract ForeignBridgeNativeToErc is require(_foreignGasPrice > 0); require(_homeMaxPerTx < _homeDailyLimit); require(_owner != address(0)); - addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; + addressStorage[VALIDATOR_CONTRACT] = _validatorContract; setErc677token(_erc677token); uintStorage[DAILY_LIMIT] = _dailyLimit; uintStorage[DEPLOYED_AT_BLOCK] = block.number; diff --git a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol index ebc7ff5f0..4893d7c6f 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/HomeBridgeNativeToErc.sol @@ -106,7 +106,7 @@ contract HomeBridgeNativeToErc is EternalStorage, BasicHomeBridge, RewardableHom require(_minPerTx > 0 && _maxPerTx > _minPerTx && _dailyLimit > _maxPerTx); require(_foreignMaxPerTx < _foreignDailyLimit); require(_owner != address(0)); - addressStorage[keccak256(abi.encodePacked("validatorContract"))] = _validatorContract; + addressStorage[VALIDATOR_CONTRACT] = _validatorContract; uintStorage[DEPLOYED_AT_BLOCK] = block.number; uintStorage[DAILY_LIMIT] = _dailyLimit; uintStorage[MAX_PER_TX] = _maxPerTx; From 0b2da1cdbea3237ba72653ab8c9576cd30315244 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 14:47:27 -0300 Subject: [PATCH 18/32] Fix ValidatorsFeeManager --- contracts/upgradeable_contracts/ValidatorsFeeManager.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/upgradeable_contracts/ValidatorsFeeManager.sol b/contracts/upgradeable_contracts/ValidatorsFeeManager.sol index 84b1946c9..2f85bfd80 100644 --- a/contracts/upgradeable_contracts/ValidatorsFeeManager.sol +++ b/contracts/upgradeable_contracts/ValidatorsFeeManager.sol @@ -21,7 +21,7 @@ contract ValidatorsFeeManager is BaseFeeManager { } function rewardableValidatorContract() internal view returns (IRewardableValidators) { - return IRewardableValidators(addressStorage[VALIDATOR_CONTRACT]); + return IRewardableValidators(addressStorage[keccak256(abi.encodePacked("validatorContract"))]); } function distributeFeeProportionally(uint256 _fee, bytes32 _direction) internal { From 4cc6a10e5928dd6dca040cb1c6f1eeba29f83255 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 14:48:28 -0300 Subject: [PATCH 19/32] Add ERC20Bridge contract --- .../BasicForeignBridge.sol | 1 - .../upgradeable_contracts/ERC20Bridge.sol | 18 ++++++++++++++++++ .../erc20_to_erc20/ForeignBridgeErcToErc.sol | 12 ++---------- .../ForeignBridgeErcToNative.sol | 15 ++------------- 4 files changed, 22 insertions(+), 24 deletions(-) create mode 100644 contracts/upgradeable_contracts/ERC20Bridge.sol diff --git a/contracts/upgradeable_contracts/BasicForeignBridge.sol b/contracts/upgradeable_contracts/BasicForeignBridge.sol index 02f2689cb..7358fff16 100644 --- a/contracts/upgradeable_contracts/BasicForeignBridge.sol +++ b/contracts/upgradeable_contracts/BasicForeignBridge.sol @@ -2,7 +2,6 @@ pragma solidity 0.4.24; import "../upgradeability/EternalStorage.sol"; import "openzeppelin-solidity/contracts/math/SafeMath.sol"; -import "openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol"; import "./Validatable.sol"; import "../libraries/Message.sol"; import "./BasicBridge.sol"; diff --git a/contracts/upgradeable_contracts/ERC20Bridge.sol b/contracts/upgradeable_contracts/ERC20Bridge.sol new file mode 100644 index 000000000..b14a09516 --- /dev/null +++ b/contracts/upgradeable_contracts/ERC20Bridge.sol @@ -0,0 +1,18 @@ +pragma solidity 0.4.24; + +import "../upgradeability/EternalStorage.sol"; +import "openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol"; +import "openzeppelin-solidity/contracts/AddressUtils.sol"; + +contract ERC20Bridge is EternalStorage { + bytes32 internal constant ERC20_TOKEN = keccak256(abi.encodePacked("erc20token")); + + function erc20token() public view returns (ERC20Basic) { + return ERC20Basic(addressStorage[ERC20_TOKEN]); + } + + function setErc20token(address _token) internal { + require(AddressUtils.isContract(_token)); + addressStorage[ERC20_TOKEN] = _token; + } +} diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/ForeignBridgeErcToErc.sol b/contracts/upgradeable_contracts/erc20_to_erc20/ForeignBridgeErcToErc.sol index 827a635e6..f3594c283 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/ForeignBridgeErcToErc.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/ForeignBridgeErcToErc.sol @@ -1,8 +1,9 @@ pragma solidity 0.4.24; import "./BasicForeignBridgeErcToErc.sol"; +import "../ERC20Bridge.sol"; -contract ForeignBridgeErcToErc is BasicForeignBridgeErcToErc { +contract ForeignBridgeErcToErc is BasicForeignBridgeErcToErc, ERC20Bridge { function initialize( address _validatorContract, address _erc20token, @@ -25,13 +26,4 @@ contract ForeignBridgeErcToErc is BasicForeignBridgeErcToErc { ); return isInitialized(); } - - function erc20token() public view returns (ERC20Basic) { - return ERC20Basic(addressStorage[keccak256(abi.encodePacked("erc20token"))]); - } - - function setErc20token(address _token) internal { - require(AddressUtils.isContract(_token)); - addressStorage[keccak256(abi.encodePacked("erc20token"))] = _token; - } } diff --git a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol index bd4a5984f..2a3fb48c2 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol @@ -1,11 +1,9 @@ pragma solidity 0.4.24; -import "../../libraries/Message.sol"; import "../BasicForeignBridge.sol"; -import "../../interfaces/IBurnableMintableERC677Token.sol"; -import "openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol"; +import "../ERC20Bridge.sol"; -contract ForeignBridgeErcToNative is BasicForeignBridge { +contract ForeignBridgeErcToNative is BasicForeignBridge, ERC20Bridge { event RelayedMessage(address recipient, uint256 value, bytes32 transactionHash); function initialize( @@ -46,10 +44,6 @@ contract ForeignBridgeErcToNative is BasicForeignBridge { super.claimTokens(_token, _to); } - function erc20token() public view returns (ERC20Basic) { - return ERC20Basic(addressStorage[keccak256(abi.encodePacked("erc20token"))]); - } - function onExecuteMessage( address _recipient, uint256 _amount, @@ -59,11 +53,6 @@ contract ForeignBridgeErcToNative is BasicForeignBridge { return erc20token().transfer(_recipient, _amount); } - function setErc20token(address _token) private { - require(AddressUtils.isContract(_token)); - addressStorage[keccak256(abi.encodePacked("erc20token"))] = _token; - } - function onFailedMessage(address, uint256, bytes32) internal { revert(); } From 0d904c658dc12250d67debee013cb6ace2c64123 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 15:16:04 -0300 Subject: [PATCH 20/32] Add BlockRewardBridge contract --- .../BlockRewardBridge.sol | 29 +++++++++++++++++++ .../BlockRewardFeeManager.sol | 8 ++--- .../FeeManagerErcToErcPOSDAO.sol | 15 +--------- .../erc20_to_native/FeeManagerErcToNative.sol | 9 ++---- .../erc20_to_native/HomeBridgeErcToNative.sol | 29 ++++++++----------- 5 files changed, 47 insertions(+), 43 deletions(-) create mode 100644 contracts/upgradeable_contracts/BlockRewardBridge.sol diff --git a/contracts/upgradeable_contracts/BlockRewardBridge.sol b/contracts/upgradeable_contracts/BlockRewardBridge.sol new file mode 100644 index 000000000..5a8c2cc97 --- /dev/null +++ b/contracts/upgradeable_contracts/BlockRewardBridge.sol @@ -0,0 +1,29 @@ +pragma solidity 0.4.24; + +import "../interfaces/IBlockReward.sol"; +import "../upgradeability/EternalStorage.sol"; +import "openzeppelin-solidity/contracts/AddressUtils.sol"; + +contract BlockRewardBridge is EternalStorage { + bytes32 internal constant BLOCK_REWARD_CONTRACT = keccak256(abi.encodePacked("blockRewardContract")); + + function _blockRewardContract() internal view returns (IBlockReward) { + return IBlockReward(addressStorage[BLOCK_REWARD_CONTRACT]); + } + + function _setBlockRewardContract(address _blockReward) internal { + require(AddressUtils.isContract(_blockReward)); + + // Before store the contract we need to make sure that it is the block reward contract in actual fact, + // call a specific method from the contract that should return a specific value + bool isBlockRewardContract = false; + if (_blockReward.call(abi.encodeWithSignature("blockRewardContractId()"))) { + isBlockRewardContract = + IBlockReward(_blockReward).blockRewardContractId() == bytes4(keccak256("blockReward")); + } else if (_blockReward.call(abi.encodeWithSignature("bridgesAllowedLength()"))) { + isBlockRewardContract = IBlockReward(_blockReward).bridgesAllowedLength() != 0; + } + require(isBlockRewardContract); + addressStorage[BLOCK_REWARD_CONTRACT] = _blockReward; + } +} diff --git a/contracts/upgradeable_contracts/BlockRewardFeeManager.sol b/contracts/upgradeable_contracts/BlockRewardFeeManager.sol index adb8f2a9c..541dde7ad 100644 --- a/contracts/upgradeable_contracts/BlockRewardFeeManager.sol +++ b/contracts/upgradeable_contracts/BlockRewardFeeManager.sol @@ -1,9 +1,9 @@ pragma solidity 0.4.24; import "./BaseFeeManager.sol"; -import "../interfaces/IBlockReward.sol"; +import "./BlockRewardBridge.sol"; -contract BlockRewardFeeManager is BaseFeeManager { +contract BlockRewardFeeManager is BaseFeeManager, BlockRewardBridge { function distributeFeeFromAffirmation(uint256 _fee) external { distributeFeeFromBlockReward(_fee); } @@ -12,10 +12,6 @@ contract BlockRewardFeeManager is BaseFeeManager { distributeFeeFromBlockReward(_fee); } - function _blockRewardContract() internal view returns (IBlockReward) { - return IBlockReward(addressStorage[keccak256(abi.encodePacked("blockRewardContract"))]); - } - /* solcov ignore next */ function distributeFeeFromBlockReward(uint256 _fee) internal; } diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/FeeManagerErcToErcPOSDAO.sol b/contracts/upgradeable_contracts/erc20_to_erc20/FeeManagerErcToErcPOSDAO.sol index 71387270d..5d1e83976 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/FeeManagerErcToErcPOSDAO.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/FeeManagerErcToErcPOSDAO.sol @@ -1,6 +1,5 @@ pragma solidity 0.4.24; -import "openzeppelin-solidity/contracts/AddressUtils.sol"; import "../BlockRewardFeeManager.sol"; contract FeeManagerErcToErcPOSDAO is BlockRewardFeeManager { @@ -13,19 +12,7 @@ contract FeeManagerErcToErcPOSDAO is BlockRewardFeeManager { } function setBlockRewardContract(address _blockReward) external { - require(AddressUtils.isContract(_blockReward)); - - // Before store the contract we need to make sure that it is the block reward contract in actual fact, - // call a specific method from the contract that should return a specific value - bool isBlockRewardContract = false; - if (_blockReward.call(abi.encodeWithSignature("blockRewardContractId()"))) { - isBlockRewardContract = - IBlockReward(_blockReward).blockRewardContractId() == bytes4(keccak256("blockReward")); - } else if (_blockReward.call(abi.encodeWithSignature("bridgesAllowedLength()"))) { - isBlockRewardContract = IBlockReward(_blockReward).bridgesAllowedLength() != 0; - } - require(isBlockRewardContract); - addressStorage[keccak256(abi.encodePacked("blockRewardContract"))] = _blockReward; + _setBlockRewardContract(_blockReward); } function distributeFeeFromBlockReward(uint256 _fee) internal { diff --git a/contracts/upgradeable_contracts/erc20_to_native/FeeManagerErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/FeeManagerErcToNative.sol index 2fe8a4718..30a6cec51 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/FeeManagerErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/FeeManagerErcToNative.sol @@ -3,18 +3,15 @@ pragma solidity 0.4.24; import "../../interfaces/IBlockReward.sol"; import "../Sacrifice.sol"; import "../ValidatorsFeeManager.sol"; +import "../BlockRewardBridge.sol"; -contract FeeManagerErcToNative is ValidatorsFeeManager { +contract FeeManagerErcToNative is ValidatorsFeeManager, BlockRewardBridge { function getFeeManagerMode() external pure returns (bytes4) { return bytes4(keccak256(abi.encodePacked("manages-both-directions"))); } - function blockRewardContract() internal view returns (IBlockReward) { - return IBlockReward(addressStorage[keccak256(abi.encodePacked("blockRewardContract"))]); - } - function onAffirmationFeeDistribution(address _rewardAddress, uint256 _fee) internal { - IBlockReward blockReward = blockRewardContract(); + IBlockReward blockReward = _blockRewardContract(); blockReward.addExtraReceiver(_fee, _rewardAddress); } diff --git a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol index 75f1828fb..b78a9b3d3 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol @@ -7,8 +7,15 @@ import "../BasicHomeBridge.sol"; import "../ERC677Bridge.sol"; import "../OverdrawManagement.sol"; import "./RewardableHomeBridgeErcToNative.sol"; - -contract HomeBridgeErcToNative is EternalStorage, BasicHomeBridge, OverdrawManagement, RewardableHomeBridgeErcToNative { +import "../BlockRewardBridge.sol"; + +contract HomeBridgeErcToNative is + EternalStorage, + BasicHomeBridge, + OverdrawManagement, + RewardableHomeBridgeErcToNative, + BlockRewardBridge +{ event AmountLimitExceeded(address recipient, uint256 value, bytes32 transactionHash); function() public payable { @@ -107,7 +114,7 @@ contract HomeBridgeErcToNative is EternalStorage, BasicHomeBridge, OverdrawManag } function blockRewardContract() public view returns (IBlockReward) { - return IBlockReward(addressStorage[keccak256(abi.encodePacked("blockRewardContract"))]); + return _blockRewardContract(); } function totalBurntCoins() public view returns (uint256) { @@ -115,19 +122,7 @@ contract HomeBridgeErcToNative is EternalStorage, BasicHomeBridge, OverdrawManag } function setBlockRewardContract(address _blockReward) external onlyOwner { - require(AddressUtils.isContract(_blockReward)); - - // Before store the contract we need to make sure that it is the block reward contract in actual fact, - // call a specific method from the contract that should return a specific value - bool isBlockRewardContract = false; - if (_blockReward.call(abi.encodeWithSignature("blockRewardContractId()"))) { - isBlockRewardContract = - IBlockReward(_blockReward).blockRewardContractId() == bytes4(keccak256("blockReward")); - } else if (_blockReward.call(abi.encodeWithSignature("bridgesAllowedLength()"))) { - isBlockRewardContract = IBlockReward(_blockReward).bridgesAllowedLength() != 0; - } - require(isBlockRewardContract); - addressStorage[keccak256(abi.encodePacked("blockRewardContract"))] = _blockReward; + _setBlockRewardContract(_blockReward); } function _initialize( @@ -156,7 +151,7 @@ contract HomeBridgeErcToNative is EternalStorage, BasicHomeBridge, OverdrawManag uintStorage[MIN_PER_TX] = _minPerTx; uintStorage[GAS_PRICE] = _homeGasPrice; uintStorage[REQUIRED_BLOCK_CONFIRMATIONS] = _requiredBlockConfirmations; - addressStorage[keccak256(abi.encodePacked("blockRewardContract"))] = _blockReward; + addressStorage[BLOCK_REWARD_CONTRACT] = _blockReward; uintStorage[EXECUTION_DAILY_LIMIT] = _foreignDailyLimit; uintStorage[EXECUTION_MAX_PER_TX] = _foreignMaxPerTx; setOwner(_owner); From d4220e1c854e21cfebecfca61d83b42422089a4c Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 15:25:24 -0300 Subject: [PATCH 21/32] Add ERC677_TOKEN constant key --- contracts/upgradeable_contracts/ERC677Bridge.sol | 7 ++++--- contracts/upgradeable_contracts/ERC677Storage.sol | 5 +++++ .../native_to_erc20/FeeManagerNativeToErc.sol | 5 +++-- 3 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 contracts/upgradeable_contracts/ERC677Storage.sol diff --git a/contracts/upgradeable_contracts/ERC677Bridge.sol b/contracts/upgradeable_contracts/ERC677Bridge.sol index 47478b778..c2484ef5b 100644 --- a/contracts/upgradeable_contracts/ERC677Bridge.sol +++ b/contracts/upgradeable_contracts/ERC677Bridge.sol @@ -2,15 +2,16 @@ pragma solidity 0.4.24; import "./BasicBridge.sol"; import "../interfaces/ERC677.sol"; +import "./ERC677Storage.sol"; -contract ERC677Bridge is BasicBridge { +contract ERC677Bridge is BasicBridge, ERC677Storage { function erc677token() public view returns (ERC677) { - return ERC677(addressStorage[keccak256(abi.encodePacked("erc677token"))]); + return ERC677(addressStorage[ERC677_TOKEN]); } function setErc677token(address _token) internal { require(AddressUtils.isContract(_token)); - addressStorage[keccak256(abi.encodePacked("erc677token"))] = _token; + addressStorage[ERC677_TOKEN] = _token; } function onTokenTransfer( diff --git a/contracts/upgradeable_contracts/ERC677Storage.sol b/contracts/upgradeable_contracts/ERC677Storage.sol new file mode 100644 index 000000000..ff9de3170 --- /dev/null +++ b/contracts/upgradeable_contracts/ERC677Storage.sol @@ -0,0 +1,5 @@ +pragma solidity 0.4.24; + +contract ERC677Storage { + bytes32 internal constant ERC677_TOKEN = keccak256(abi.encodePacked("erc677token")); +} diff --git a/contracts/upgradeable_contracts/native_to_erc20/FeeManagerNativeToErc.sol b/contracts/upgradeable_contracts/native_to_erc20/FeeManagerNativeToErc.sol index c3310649a..032c82ca5 100644 --- a/contracts/upgradeable_contracts/native_to_erc20/FeeManagerNativeToErc.sol +++ b/contracts/upgradeable_contracts/native_to_erc20/FeeManagerNativeToErc.sol @@ -3,14 +3,15 @@ pragma solidity 0.4.24; import "../../interfaces/IBurnableMintableERC677Token.sol"; import "../Sacrifice.sol"; import "../ValidatorsFeeManager.sol"; +import "../ERC677Storage.sol"; -contract FeeManagerNativeToErc is ValidatorsFeeManager { +contract FeeManagerNativeToErc is ValidatorsFeeManager, ERC677Storage { function getFeeManagerMode() external pure returns (bytes4) { return bytes4(keccak256(abi.encodePacked("manages-one-direction"))); } function erc677token() public view returns (IBurnableMintableERC677Token) { - return IBurnableMintableERC677Token(addressStorage[keccak256(abi.encodePacked("erc677token"))]); + return IBurnableMintableERC677Token(addressStorage[ERC677_TOKEN]); } function onAffirmationFeeDistribution(address _rewardAddress, uint256 _fee) internal { From baae8a53d71ebaa045f26769efd6dd9d8e21b753 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 15:30:47 -0300 Subject: [PATCH 22/32] Add ValidatorStorage contract --- contracts/upgradeable_contracts/Validatable.sol | 6 +++--- contracts/upgradeable_contracts/ValidatorStorage.sol | 5 +++++ contracts/upgradeable_contracts/ValidatorsFeeManager.sol | 5 +++-- 3 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 contracts/upgradeable_contracts/ValidatorStorage.sol diff --git a/contracts/upgradeable_contracts/Validatable.sol b/contracts/upgradeable_contracts/Validatable.sol index 2b6a7d084..2881ba916 100644 --- a/contracts/upgradeable_contracts/Validatable.sol +++ b/contracts/upgradeable_contracts/Validatable.sol @@ -1,10 +1,10 @@ pragma solidity 0.4.24; + import "../interfaces/IBridgeValidators.sol"; import "../upgradeability/EternalStorage.sol"; +import "./ValidatorStorage.sol"; -contract Validatable is EternalStorage { - bytes32 internal constant VALIDATOR_CONTRACT = keccak256(abi.encodePacked("validatorContract")); - +contract Validatable is EternalStorage, ValidatorStorage { function validatorContract() public view returns (IBridgeValidators) { return IBridgeValidators(addressStorage[VALIDATOR_CONTRACT]); } diff --git a/contracts/upgradeable_contracts/ValidatorStorage.sol b/contracts/upgradeable_contracts/ValidatorStorage.sol new file mode 100644 index 000000000..c14d4a5af --- /dev/null +++ b/contracts/upgradeable_contracts/ValidatorStorage.sol @@ -0,0 +1,5 @@ +pragma solidity 0.4.24; + +contract ValidatorStorage { + bytes32 internal constant VALIDATOR_CONTRACT = keccak256(abi.encodePacked("validatorContract")); +} diff --git a/contracts/upgradeable_contracts/ValidatorsFeeManager.sol b/contracts/upgradeable_contracts/ValidatorsFeeManager.sol index 2f85bfd80..aa7e098a2 100644 --- a/contracts/upgradeable_contracts/ValidatorsFeeManager.sol +++ b/contracts/upgradeable_contracts/ValidatorsFeeManager.sol @@ -2,8 +2,9 @@ pragma solidity 0.4.24; import "./BaseFeeManager.sol"; import "../interfaces/IRewardableValidators.sol"; +import "./ValidatorStorage.sol"; -contract ValidatorsFeeManager is BaseFeeManager { +contract ValidatorsFeeManager is BaseFeeManager, ValidatorStorage { bytes32 public constant REWARD_FOR_TRANSFERRING_FROM_HOME = keccak256( abi.encodePacked("reward-transferring-from-home") ); @@ -21,7 +22,7 @@ contract ValidatorsFeeManager is BaseFeeManager { } function rewardableValidatorContract() internal view returns (IRewardableValidators) { - return IRewardableValidators(addressStorage[keccak256(abi.encodePacked("validatorContract"))]); + return IRewardableValidators(addressStorage[VALIDATOR_CONTRACT]); } function distributeFeeProportionally(uint256 _fee, bytes32 _direction) internal { From 59d4009e185f1c2441f78ba68d47b187a689a9b3 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 15:33:50 -0300 Subject: [PATCH 23/32] Add OUT_OF_LIMIT_AMOUNT constant key --- contracts/upgradeable_contracts/OverdrawManagement.sol | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/contracts/upgradeable_contracts/OverdrawManagement.sol b/contracts/upgradeable_contracts/OverdrawManagement.sol index 69d0e0ba0..ed06a1f62 100644 --- a/contracts/upgradeable_contracts/OverdrawManagement.sol +++ b/contracts/upgradeable_contracts/OverdrawManagement.sol @@ -12,6 +12,8 @@ contract OverdrawManagement is EternalStorage, RewardableBridge, Upgradeable, Ba event UserRequestForSignature(address recipient, uint256 value); event AssetAboveLimitsFixed(bytes32 indexed transactionHash, uint256 value, uint256 remaining); + bytes32 internal constant OUT_OF_LIMIT_AMOUNT = keccak256(abi.encodePacked("outOfLimitAmount")); + function fixAssetsAboveLimits(bytes32 txHash, bool unlockOnForeign, uint256 valueToUnlock) external onlyIfUpgradeabilityOwner @@ -41,7 +43,7 @@ contract OverdrawManagement is EternalStorage, RewardableBridge, Upgradeable, Ba } function outOfLimitAmount() public view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("outOfLimitAmount"))]; + return uintStorage[OUT_OF_LIMIT_AMOUNT]; } function fixedAssets(bytes32 _txHash) public view returns (bool) { @@ -49,7 +51,7 @@ contract OverdrawManagement is EternalStorage, RewardableBridge, Upgradeable, Ba } function setOutOfLimitAmount(uint256 _value) internal { - uintStorage[keccak256(abi.encodePacked("outOfLimitAmount"))] = _value; + uintStorage[OUT_OF_LIMIT_AMOUNT] = _value; } function txAboveLimits(bytes32 _txHash) internal view returns (address recipient, uint256 value) { From 09852c5517406448eb4071abbe34fe59eceebb1a Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Fri, 2 Aug 2019 15:37:25 -0300 Subject: [PATCH 24/32] Add TOTAL_BURNT_COINS constant key --- .../erc20_to_native/HomeBridgeErcToNative.sol | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol index b78a9b3d3..d3a5596d4 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol @@ -18,6 +18,8 @@ contract HomeBridgeErcToNative is { event AmountLimitExceeded(address recipient, uint256 value, bytes32 transactionHash); + bytes32 internal constant TOTAL_BURNT_COINS = keccak256(abi.encodePacked("totalBurntCoins")); + function() public payable { nativeTransfer(); } @@ -118,7 +120,7 @@ contract HomeBridgeErcToNative is } function totalBurntCoins() public view returns (uint256) { - return uintStorage[keccak256(abi.encodePacked("totalBurntCoins"))]; + return uintStorage[TOTAL_BURNT_COINS]; } function setBlockRewardContract(address _blockReward) external onlyOwner { @@ -187,7 +189,7 @@ contract HomeBridgeErcToNative is } function setTotalBurntCoins(uint256 _amount) internal { - uintStorage[keccak256(abi.encodePacked("totalBurntCoins"))] = _amount; + uintStorage[TOTAL_BURNT_COINS] = _amount; } function onFailedAffirmation(address _recipient, uint256 _value, bytes32 _txHash) internal { From 08f3308e3ce06fc51fc8a0dab48365e4339658b2 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Mon, 5 Aug 2019 15:25:25 -0300 Subject: [PATCH 25/32] Replace method signature with constant selector in BlockReward --- contracts/mocks/BlockReward.sol | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contracts/mocks/BlockReward.sol b/contracts/mocks/BlockReward.sol index a84b2bee6..7d53fc947 100644 --- a/contracts/mocks/BlockReward.sol +++ b/contracts/mocks/BlockReward.sol @@ -11,6 +11,7 @@ contract BlockReward { uint256 public feeAmount = 0; mapping(bytes32 => uint256) internal uintStorage; bytes32 internal constant MINTED_TOTALLY_BY_BRIDGE = "mintedTotallyByBridge"; + bytes4 internal constant MINT_REWARD = 0xe2f764a3; // mintReward(address[],uint256[]) address public token; function() external payable { @@ -86,7 +87,7 @@ contract BlockReward { rewards[i] = feeToDistribute; } - require(token.call(abi.encodeWithSignature("mintReward(address[],uint256[])", receivers, rewards))); + require(token.call(abi.encodeWithSelector(MINT_REWARD, receivers, rewards))); } function random(uint256 _count) public view returns (uint256) { From 5956590c6679b48d793005ffbe240752905e0650 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Mon, 5 Aug 2019 15:25:49 -0300 Subject: [PATCH 26/32] Replace method signature with constant selector in BlockRewardBridge --- contracts/upgradeable_contracts/BlockRewardBridge.sol | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/contracts/upgradeable_contracts/BlockRewardBridge.sol b/contracts/upgradeable_contracts/BlockRewardBridge.sol index 5a8c2cc97..1441f9a0c 100644 --- a/contracts/upgradeable_contracts/BlockRewardBridge.sol +++ b/contracts/upgradeable_contracts/BlockRewardBridge.sol @@ -6,6 +6,8 @@ import "openzeppelin-solidity/contracts/AddressUtils.sol"; contract BlockRewardBridge is EternalStorage { bytes32 internal constant BLOCK_REWARD_CONTRACT = keccak256(abi.encodePacked("blockRewardContract")); + bytes4 internal constant BLOCK_REWARD_CONTRACT_ID = 0x2ee57f8d; // blockRewardContractId() + bytes4 internal constant BRIDGES_ALLOWED_LENGTH = 0x10f2ee7c; // bridgesAllowedLength() function _blockRewardContract() internal view returns (IBlockReward) { return IBlockReward(addressStorage[BLOCK_REWARD_CONTRACT]); @@ -17,10 +19,10 @@ contract BlockRewardBridge is EternalStorage { // Before store the contract we need to make sure that it is the block reward contract in actual fact, // call a specific method from the contract that should return a specific value bool isBlockRewardContract = false; - if (_blockReward.call(abi.encodeWithSignature("blockRewardContractId()"))) { + if (_blockReward.call(BLOCK_REWARD_CONTRACT_ID)) { isBlockRewardContract = IBlockReward(_blockReward).blockRewardContractId() == bytes4(keccak256("blockReward")); - } else if (_blockReward.call(abi.encodeWithSignature("bridgesAllowedLength()"))) { + } else if (_blockReward.call(BRIDGES_ALLOWED_LENGTH)) { isBlockRewardContract = IBlockReward(_blockReward).bridgesAllowedLength() != 0; } require(isBlockRewardContract); From f18ec5ffa9c98b8a31f81eca515cb93473089344 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Mon, 5 Aug 2019 15:26:01 -0300 Subject: [PATCH 27/32] Replace method signature with constant selector in Claimable --- contracts/upgradeable_contracts/Claimable.sol | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contracts/upgradeable_contracts/Claimable.sol b/contracts/upgradeable_contracts/Claimable.sol index 0fc72a0b4..0915a9dd2 100644 --- a/contracts/upgradeable_contracts/Claimable.sol +++ b/contracts/upgradeable_contracts/Claimable.sol @@ -4,6 +4,8 @@ import "openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol"; import "./Sacrifice.sol"; contract Claimable { + bytes4 internal constant TRANSFER = 0xa9059cbb; // transfer(address,uint256) + modifier validAddress(address _to) { require(_to != address(0)); /* solcov ignore next */ @@ -34,7 +36,7 @@ contract Claimable { function safeTransfer(address _token, address _to, uint256 _value) internal { bytes memory returnData; bool returnDataResult; - bytes memory callData = abi.encodeWithSignature("transfer(address,uint256)", _to, _value); + bytes memory callData = abi.encodeWithSelector(TRANSFER, _to, _value); assembly { let result := call(gas, _token, 0x0, add(callData, 0x20), mload(callData), 0, 32) returnData := mload(0) From 16b8105219fc2548773a1c2e8493daf72c727087 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Mon, 5 Aug 2019 15:26:16 -0300 Subject: [PATCH 28/32] Replace method signature with constant selector in ERC677BridgeToken --- contracts/ERC677BridgeToken.sol | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contracts/ERC677BridgeToken.sol b/contracts/ERC677BridgeToken.sol index a197ed7e3..be385fffa 100644 --- a/contracts/ERC677BridgeToken.sol +++ b/contracts/ERC677BridgeToken.sol @@ -12,6 +12,8 @@ contract ERC677BridgeToken is IBurnableMintableERC677Token, DetailedERC20, Burna event ContractFallbackCallFailed(address from, address to, uint256 value); + bytes4 internal constant ON_TOKEN_TRANSFER = 0xa4c0ed36; // onTokenTransfer(address,uint256,bytes) + constructor(string _name, string _symbol, uint8 _decimals) public DetailedERC20(_name, _symbol, _decimals) { // solhint-disable-previous-line no-empty-blocks } @@ -65,7 +67,7 @@ contract ERC677BridgeToken is IBurnableMintableERC677Token, DetailedERC20, Burna } function contractFallback(address _from, address _to, uint256 _value, bytes _data) private returns (bool) { - return _to.call(abi.encodeWithSignature("onTokenTransfer(address,uint256,bytes)", _from, _value, _data)); + return _to.call(abi.encodeWithSelector(ON_TOKEN_TRANSFER, _from, _value, _data)); } function finishMinting() public returns (bool) { From 9704758e4b69cb1e35ca1fa30a2f4d9ac362af87 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Mon, 5 Aug 2019 15:26:35 -0300 Subject: [PATCH 29/32] Replace method signature with constant selector in HomeBridgeErcToErcPOSDAO --- .../erc20_to_erc20/HomeBridgeErcToErcPOSDAO.sol | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErcPOSDAO.sol b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErcPOSDAO.sol index 9b330e1b7..49621afe7 100644 --- a/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErcPOSDAO.sol +++ b/contracts/upgradeable_contracts/erc20_to_erc20/HomeBridgeErcToErcPOSDAO.sol @@ -3,6 +3,9 @@ pragma solidity 0.4.24; import "./HomeBridgeErcToErc.sol"; contract HomeBridgeErcToErcPOSDAO is HomeBridgeErcToErc { + bytes4 internal constant BLOCK_REWARD_CONTRACT_SELECTOR = 0x56b54bae; // blockRewardContract() + bytes4 internal constant SET_BLOCK_REWARD_CONTRACT = 0x27a3e16b; // setBlockRewardContract(address) + function rewardableInitialize( address _validatorContract, uint256 _dailyLimit, @@ -43,7 +46,7 @@ contract HomeBridgeErcToErcPOSDAO is HomeBridgeErcToErc { function blockRewardContract() public view returns (address) { address blockReward; address feeManager = feeManagerContract(); - bytes memory callData = abi.encodeWithSignature("blockRewardContract()"); + bytes memory callData = abi.encodeWithSelector(BLOCK_REWARD_CONTRACT_SELECTOR); assembly { let result := callcode(gas, feeManager, 0x0, add(callData, 0x20), mload(callData), 0, 32) @@ -64,6 +67,6 @@ contract HomeBridgeErcToErcPOSDAO is HomeBridgeErcToErc { } function _setBlockRewardContract(address _feeManager, address _blockReward) internal { - require(_feeManager.delegatecall(abi.encodeWithSignature("setBlockRewardContract(address)", _blockReward))); + require(_feeManager.delegatecall(abi.encodeWithSelector(SET_BLOCK_REWARD_CONTRACT, _blockReward))); } } From 1adc26e7c6823844de076f4c7678bdcfedcc7e40 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Mon, 5 Aug 2019 15:27:15 -0300 Subject: [PATCH 30/32] Replace method signature with constant selector in RewardableBridge --- .../RewardableBridge.sol | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/contracts/upgradeable_contracts/RewardableBridge.sol b/contracts/upgradeable_contracts/RewardableBridge.sol index 163561846..e72ac30ae 100644 --- a/contracts/upgradeable_contracts/RewardableBridge.sol +++ b/contracts/upgradeable_contracts/RewardableBridge.sol @@ -9,12 +9,20 @@ contract RewardableBridge is Ownable, FeeTypes { event FeeDistributedFromSignatures(uint256 feeAmount, bytes32 indexed transactionHash); bytes32 internal constant FEE_MANAGER_CONTRACT = keccak256(abi.encodePacked("feeManagerContract")); + bytes4 internal constant GET_HOME_FEE = 0x94da17cd; // getHomeFee() + bytes4 internal constant GET_FOREIGN_FEE = 0xffd66196; // getForeignFee() + bytes4 internal constant GET_FEE_MANAGER_MODE = 0xf2ba9561; // getFeeManagerMode() + bytes4 internal constant SET_HOME_FEE = 0x34a9e148; // setHomeFee(uint256) + bytes4 internal constant SET_FOREIGN_FEE = 0x286c4066; // setForeignFee(uint256) + bytes4 internal constant CALCULATE_FEE = 0x9862f26f; // calculateFee(uint256,bool,bytes32) + bytes4 internal constant DISTRIBUTE_FEE_FROM_SIGNATURES = 0x59d78464; // distributeFeeFromSignatures(uint256) + bytes4 internal constant DISTRIBUTE_FEE_FROM_AFFIRMATION = 0x054d46ec; // distributeFeeFromAffirmation(uint256) function _getFee(bytes32 _feeType) internal view returns (uint256) { uint256 fee; address feeManager = feeManagerContract(); - string memory method = _feeType == HOME_FEE ? "getHomeFee()" : "getForeignFee()"; - bytes memory callData = abi.encodeWithSignature(method); + bytes4 method = _feeType == HOME_FEE ? GET_HOME_FEE : GET_FOREIGN_FEE; + bytes memory callData = abi.encodeWithSelector(method); assembly { let result := callcode(gas, feeManager, 0x0, add(callData, 0x20), mload(callData), 0, 32) @@ -30,7 +38,7 @@ contract RewardableBridge is Ownable, FeeTypes { function getFeeManagerMode() external view returns (bytes4) { bytes4 mode; - bytes memory callData = abi.encodeWithSignature("getFeeManagerMode()"); + bytes memory callData = abi.encodeWithSelector(GET_FEE_MANAGER_MODE); address feeManager = feeManagerContract(); assembly { let result := callcode(gas, feeManager, 0x0, add(callData, 0x20), mload(callData), 0, 4) @@ -54,8 +62,8 @@ contract RewardableBridge is Ownable, FeeTypes { } function _setFee(address _feeManager, uint256 _fee, bytes32 _feeType) internal { - string memory method = _feeType == HOME_FEE ? "setHomeFee(uint256)" : "setForeignFee(uint256)"; - require(_feeManager.delegatecall(abi.encodeWithSignature(method, _fee))); + bytes4 method = _feeType == HOME_FEE ? SET_HOME_FEE : SET_FOREIGN_FEE; + require(_feeManager.delegatecall(abi.encodeWithSelector(method, _fee))); } function calculateFee(uint256 _value, bool _recover, address _impl, bytes32 _feeType) @@ -64,12 +72,7 @@ contract RewardableBridge is Ownable, FeeTypes { returns (uint256) { uint256 fee; - bytes memory callData = abi.encodeWithSignature( - "calculateFee(uint256,bool,bytes32)", - _value, - _recover, - _feeType - ); + bytes memory callData = abi.encodeWithSelector(CALCULATE_FEE, _value, _recover, _feeType); assembly { let result := callcode(gas, _impl, 0x0, add(callData, 0x20), mload(callData), 0, 32) fee := mload(0) @@ -83,12 +86,12 @@ contract RewardableBridge is Ownable, FeeTypes { } function distributeFeeFromSignatures(uint256 _fee, address _feeManager, bytes32 _txHash) internal { - require(_feeManager.delegatecall(abi.encodeWithSignature("distributeFeeFromSignatures(uint256)", _fee))); + require(_feeManager.delegatecall(abi.encodeWithSelector(DISTRIBUTE_FEE_FROM_SIGNATURES, _fee))); emit FeeDistributedFromSignatures(_fee, _txHash); } function distributeFeeFromAffirmation(uint256 _fee, address _feeManager, bytes32 _txHash) internal { - require(_feeManager.delegatecall(abi.encodeWithSignature("distributeFeeFromAffirmation(uint256)", _fee))); + require(_feeManager.delegatecall(abi.encodeWithSelector(DISTRIBUTE_FEE_FROM_AFFIRMATION, _fee))); emit FeeDistributedFromAffirmation(_fee, _txHash); } } From 8b696e35431b652ce7968a7841a4a87afe419a6d Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Mon, 5 Aug 2019 15:27:37 -0300 Subject: [PATCH 31/32] Replace method signature with constant selector in RewardableHomeBridgeErcToNative --- .../erc20_to_native/RewardableHomeBridgeErcToNative.sol | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contracts/upgradeable_contracts/erc20_to_native/RewardableHomeBridgeErcToNative.sol b/contracts/upgradeable_contracts/erc20_to_native/RewardableHomeBridgeErcToNative.sol index 8842d33c9..fb8ebc612 100644 --- a/contracts/upgradeable_contracts/erc20_to_native/RewardableHomeBridgeErcToNative.sol +++ b/contracts/upgradeable_contracts/erc20_to_native/RewardableHomeBridgeErcToNative.sol @@ -3,6 +3,8 @@ pragma solidity 0.4.24; import "../RewardableBridge.sol"; contract RewardableHomeBridgeErcToNative is RewardableBridge { + bytes4 internal constant GET_AMOUNT_TO_BURN = 0x916850e9; // getAmountToBurn(uint256) + function setHomeFee(uint256 _fee) external onlyOwner { _setFee(feeManagerContract(), _fee, HOME_FEE); } @@ -21,7 +23,7 @@ contract RewardableHomeBridgeErcToNative is RewardableBridge { function getAmountToBurn(uint256 _value) public view returns (uint256) { uint256 amount; - bytes memory callData = abi.encodeWithSignature("getAmountToBurn(uint256)", _value); + bytes memory callData = abi.encodeWithSelector(GET_AMOUNT_TO_BURN, _value); address feeManager = feeManagerContract(); assembly { let result := callcode(gas, feeManager, 0x0, add(callData, 0x20), mload(callData), 0, 32) From be9b8e8a2059f9308fbd347f9614241c50424068 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Mon, 5 Aug 2019 16:18:54 -0300 Subject: [PATCH 32/32] Revert "Replace method signature with constant selector in ERC677BridgeToken" This reverts commit 16b81052 --- contracts/ERC677BridgeToken.sol | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/contracts/ERC677BridgeToken.sol b/contracts/ERC677BridgeToken.sol index be385fffa..a197ed7e3 100644 --- a/contracts/ERC677BridgeToken.sol +++ b/contracts/ERC677BridgeToken.sol @@ -12,8 +12,6 @@ contract ERC677BridgeToken is IBurnableMintableERC677Token, DetailedERC20, Burna event ContractFallbackCallFailed(address from, address to, uint256 value); - bytes4 internal constant ON_TOKEN_TRANSFER = 0xa4c0ed36; // onTokenTransfer(address,uint256,bytes) - constructor(string _name, string _symbol, uint8 _decimals) public DetailedERC20(_name, _symbol, _decimals) { // solhint-disable-previous-line no-empty-blocks } @@ -67,7 +65,7 @@ contract ERC677BridgeToken is IBurnableMintableERC677Token, DetailedERC20, Burna } function contractFallback(address _from, address _to, uint256 _value, bytes _data) private returns (bool) { - return _to.call(abi.encodeWithSelector(ON_TOKEN_TRANSFER, _from, _value, _data)); + return _to.call(abi.encodeWithSignature("onTokenTransfer(address,uint256,bytes)", _from, _value, _data)); } function finishMinting() public returns (bool) {