From d373f5488a725ac1c543eabe72704632dfd2da4a Mon Sep 17 00:00:00 2001 From: Amir Bandeali Date: Wed, 24 Apr 2019 21:25:31 -0700 Subject: [PATCH] Add functions with mutex to ReentrantERC20Token and update IExchange with missing function --- .../src/interfaces/ISignatureValidator.sol | 10 ++++++++++ .../exchange/contracts/test/ReentrantERC20Token.sol | 13 +++++++++++++ 2 files changed, 23 insertions(+) diff --git a/contracts/exchange/contracts/src/interfaces/ISignatureValidator.sol b/contracts/exchange/contracts/src/interfaces/ISignatureValidator.sol index 0f5e07f376..6a8ecbebfc 100644 --- a/contracts/exchange/contracts/src/interfaces/ISignatureValidator.sol +++ b/contracts/exchange/contracts/src/interfaces/ISignatureValidator.sol @@ -39,6 +39,16 @@ contract ISignatureValidator { ) external; + /// @dev Approves/unnapproves an OrderValidator contract to verify signatures on signer's behalf + /// using the `OrderValidator` signature type. + /// @param validatorAddress Address of Validator contract. + /// @param approval Approval or disapproval of Validator contract. + function setOrderValidatorApproval( + address validatorAddress, + bool approval + ) + external; + /// @dev Verifies that a signature for a hash is valid. /// @param hash Message hash that is signed. /// @param signerAddress Address of signer. diff --git a/contracts/exchange/contracts/test/ReentrantERC20Token.sol b/contracts/exchange/contracts/test/ReentrantERC20Token.sol index 73459e2adc..9962cb5d2c 100644 --- a/contracts/exchange/contracts/test/ReentrantERC20Token.sol +++ b/contracts/exchange/contracts/test/ReentrantERC20Token.sol @@ -50,7 +50,9 @@ contract ReentrantERC20Token is CANCEL_ORDER, BATCH_CANCEL_ORDERS, CANCEL_ORDERS_UP_TO, + PRE_SIGN, SET_SIGNATURE_VALIDATOR_APPROVAL, + SET_ORDER_VALIDATOR_APPROVAL, NONE } @@ -161,12 +163,23 @@ contract ReentrantERC20Token is exchange.cancelOrdersUpTo.selector, 1 ); + } else if (currentFunctionId == uint8(ExchangeFunction.PRE_SIGN)) { + callData = abi.encodeWithSelector( + exchange.preSign.selector, + uint256(getRandomAddress()) + ); } else if (currentFunctionId == uint8(ExchangeFunction.SET_SIGNATURE_VALIDATOR_APPROVAL)) { callData = abi.encodeWithSelector( exchange.setSignatureValidatorApproval.selector, getRandomAddress(), false ); + } else if (currentFunctionId == uint8(ExchangeFunction.SET_ORDER_VALIDATOR_APPROVAL)) { + callData = abi.encodeWithSelector( + exchange.setOrderValidatorApproval.selector, + getRandomAddress(), + false + ); } else { return true; }