From 3e3df06d5770479b7dac5386e0497f22897cb0f0 Mon Sep 17 00:00:00 2001 From: Lawrence Forman Date: Fri, 7 Feb 2020 02:56:10 -0500 Subject: [PATCH] `@0x/contracts-erc20-bridge-sampler`: Fix catching invalid opcode from DevUtils `@0x/contract-addresses`: Update `ERC20BridgeSampler` mainnet and kovan addresses. --- contracts/erc20-bridge-sampler/CHANGELOG.json | 9 ++++++++ .../contracts/src/ERC20BridgeSampler.sol | 23 +++++++++++++++---- packages/contract-addresses/CHANGELOG.json | 4 ++++ packages/contract-addresses/addresses.json | 4 ++-- 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/contracts/erc20-bridge-sampler/CHANGELOG.json b/contracts/erc20-bridge-sampler/CHANGELOG.json index 84c96ab635..66c2998c86 100644 --- a/contracts/erc20-bridge-sampler/CHANGELOG.json +++ b/contracts/erc20-bridge-sampler/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "1.3.0", + "changes": [ + { + "note": "Catch reverts to `DevUtils` calls", + "pr": 2476 + } + ] + }, { "timestamp": 1580988106, "version": "1.2.1", diff --git a/contracts/erc20-bridge-sampler/contracts/src/ERC20BridgeSampler.sol b/contracts/erc20-bridge-sampler/contracts/src/ERC20BridgeSampler.sol index facb665e5f..168976a058 100644 --- a/contracts/erc20-bridge-sampler/contracts/src/ERC20BridgeSampler.sol +++ b/contracts/erc20-bridge-sampler/contracts/src/ERC20BridgeSampler.sol @@ -40,7 +40,7 @@ contract ERC20BridgeSampler is uint256 constant internal KYBER_SAMPLE_CALL_GAS = 1500e3; uint256 constant internal UNISWAP_SAMPLE_CALL_GAS = 150e3; uint256 constant internal ETH2DAI_SAMPLE_CALL_GAS = 1000e3; - uint256 constant internal DEV_UTILS_SAMPLE_CALL_GAS = 500e3; + uint256 constant internal DEV_UTILS_CALL_GAS = 500e3; address constant private UNISWAP_SOURCE = 0xc0a47dFe034B400B47bDaD5FecDa2621de6c4d95; address constant private ETH2DAI_SOURCE = 0x39755357759cE0d7f32dC8dC45414CCa409AE24e; address constant private KYBER_SOURCE = 0x818E6FECD516Ecc3849DAf6845e3EC868087B755; @@ -205,13 +205,28 @@ contract ERC20BridgeSampler is orderFillableTakerAssetAmounts[i] = 0; continue; } + // solhint-disable indent + (bool didSucceed, bytes memory resultData) = + _getDevUtilsAddress() + .staticcall + .gas(DEV_UTILS_CALL_GAS) + (abi.encodeWithSelector( + IDevUtils(_getDevUtilsAddress()).getOrderRelevantState.selector, + orders[i], + orderSignatures[i] + )); + // solhint-enable indent + if (!didSucceed) { + orderFillableTakerAssetAmounts[i] = 0; + continue; + } ( LibOrder.OrderInfo memory orderInfo, uint256 fillableTakerAssetAmount, bool isValidSignature - ) = IDevUtils(_getDevUtilsAddress()).getOrderRelevantState.gas(DEV_UTILS_SAMPLE_CALL_GAS)( - orders[i], - orderSignatures[i] + ) = abi.decode( + resultData, + (LibOrder.OrderInfo, uint256, bool) ); // The fillable amount is zero if the order is not fillable or if the // signature is invalid. diff --git a/packages/contract-addresses/CHANGELOG.json b/packages/contract-addresses/CHANGELOG.json index 09e254d477..d4af75be78 100644 --- a/packages/contract-addresses/CHANGELOG.json +++ b/packages/contract-addresses/CHANGELOG.json @@ -5,6 +5,10 @@ { "note": "Update `ERC20BridgeSampler` and `Eth2Dai` on mainnet and kovan.", "pr": 2474 + }, + { + "note": "Update `ERC20BridgeSampler` address on mainnet and kovan.", + "pr": 2476 } ] }, diff --git a/packages/contract-addresses/addresses.json b/packages/contract-addresses/addresses.json index ac50f823e6..1066c000a8 100644 --- a/packages/contract-addresses/addresses.json +++ b/packages/contract-addresses/addresses.json @@ -23,7 +23,7 @@ "devUtils": "0x161793cdca4ff9e766a706c2c49c36ac1340bbcd", "erc20BridgeProxy": "0x8ed95d1746bf1e4dab58d8ed4724f1ef95b20db0", "uniswapBridge": "0x533344cfdf2a3e911e2cf4c6f5ed08e791f5355f", - "erc20BridgeSampler": "0x45d41caec1cd893517e6e4e8222717d3d7a3bcb0", + "erc20BridgeSampler": "0x38b55fb7b13cbfbf8781e0f11a77b6199ae10a11", "kyberBridge": "0xf342f3a80fdc9b48713d58fe97e17f5cc764ee62", "eth2DaiBridge": "0xe3379a1956f4a79f39eb2e87bb441419e167538e", "chaiBridge": "0x77c31eba23043b9a72d13470f3a3a311344d7438", @@ -114,7 +114,7 @@ "erc20BridgeProxy": "0xfb2dd2a1366de37f7241c83d47da58fd503e2c64", "uniswapBridge": "0x8224aa8fe5c9f07d5a59c735386ff6cc6aaeb568", "eth2DaiBridge": "0x9485d65c6a2fae0d519cced5bd830e57c41998a9", - "erc20BridgeSampler": "0x5ad1553c2e60db118d2c01c0b73ac71e6c586b84", + "erc20BridgeSampler": "0x76a3d21fc9c16afd29eb12a5bdcedd5ddbf24357", "kyberBridge": "0xde7b2747624a647600fdb349184d0448ab954929", "chaiBridge": "0x0000000000000000000000000000000000000000", "dydxBridge": "0x0000000000000000000000000000000000000000"