diff --git a/contracts/exchange/contracts/test/TestValidatorWallet.sol b/contracts/exchange/contracts/test/TestValidatorWallet.sol index 00b295f289..3c24541d82 100644 --- a/contracts/exchange/contracts/test/TestValidatorWallet.sol +++ b/contracts/exchange/contracts/test/TestValidatorWallet.sol @@ -31,6 +31,7 @@ interface ISimplifiedExchange { returns (bytes32 orderHash); } + // solhint-disable no-unused-vars contract TestValidatorWallet { using LibBytes for bytes; @@ -53,8 +54,9 @@ contract TestValidatorWallet { ValidateSignature, NTypes } + /// @dev The Exchange contract. - ISimplifiedExchange internal _EXCHANGE; + ISimplifiedExchange internal _exchange; /// @dev Internal state to modify. uint256 internal _state = 1; /// @dev What action to execute when a hash is validated . @@ -63,7 +65,21 @@ contract TestValidatorWallet { mapping (bytes32=>address) internal _validSignerForHash; constructor(address exchange) public { - _EXCHANGE = ISimplifiedExchange(exchange); + _exchange = ISimplifiedExchange(exchange); + } + + /// @dev Approves an ERC20 token to spend tokens from this address. + /// @param token Address of ERC20 token. + /// @param spender Address that will spend tokens. + /// @param value Amount of tokens spender is approved to spend. + function approveERC20( + address token, + address spender, + uint256 value + ) + external + { + IERC20Token(token).approve(spender, value); } /// @dev Set the action to take when validating a hash. @@ -80,7 +96,7 @@ contract TestValidatorWallet { external { if (uint8(action) >= uint8(ValidatorAction.NTypes)) { - revert('UNSUPPORTED_VALIDATE_ACTION'); + revert("UNSUPPORTED_VALIDATE_ACTION"); } _hashActions[hash] = action; _validSignerForHash[hash] = allowedSigner; @@ -101,6 +117,7 @@ contract TestValidatorWallet { { bytes32 hash = _getOrderHashFromEIP1271Data(data); ValidatorAction action = _hashActions[hash]; + // solhint-disable-next-line no-empty-blocks if (action == ValidatorAction.Reject) { // NOOP. } else if (action == ValidatorAction.Accept) { @@ -122,38 +139,6 @@ contract TestValidatorWallet { } } - function _getOrderHashFromEIP1271Data(bytes memory data) - private - returns (bytes32 hash) - { - if (data.length == 32) { - // `data` is an order hash. - hash = data.readBytes32(0); - } else { - // `data` is an abi-encoded Order. - LibOrder.Order memory order = _getOrderFromEIP1271Data(data); - // Use the Exchange contract to convert it into a hash. - hash = _EXCHANGE.getOrderHash(order); - } - } - - function _getOrderFromEIP1271Data(bytes memory data) - private - returns (LibOrder.Order memory order) - { - require(data.length > 32, "INVALID_EIP1271_ORDER_DATA_LENGTH"); - assembly { - // Skip past the length to find the first parameter. - let argsStart := add(data, 32) - order := add(argsStart, mload(argsStart)) - // Destructively point the asset data fields to absolute locations. - for {let o := 0x140} lt(o, 0x1C0) {o := add(o, 0x20)} { - let arg := add(order, o) - mstore(arg, add(argsStart, add(mload(arg), 0x20))) - } - } - } - /// @dev Validates a hash with the `Validator` signature type. /// @param hash Message hash that is signed. /// @param signerAddress Address that should have signed the given hash. @@ -240,23 +225,9 @@ contract TestValidatorWallet { } } - /// @dev Approves an ERC20 token to spend tokens from this address. - /// @param token Address of ERC20 token. - /// @param spender Address that will spend tokens. - /// @param value Amount of tokens spender is approved to spend. - function approveERC20( - address token, - address spender, - uint256 value - ) - external - { - IERC20Token(token).approve(spender, value); - } - /// @dev Increments state variable. function _updateState() - internal + private { _state++; } @@ -267,7 +238,7 @@ contract TestValidatorWallet { bytes memory signature, address signerAddress ) - internal + private pure returns (bool isSignedBy) { @@ -289,4 +260,37 @@ contract TestValidatorWallet { } isSignedBy = recovered == signerAddress; } + + function _getOrderHashFromEIP1271Data(bytes memory data) + private + returns (bytes32 hash) + { + if (data.length == 32) { + // `data` is an order hash. + hash = data.readBytes32(0); + } else { + // `data` is an abi-encoded Order. + LibOrder.Order memory order = _getOrderFromEIP1271Data(data); + // Use the Exchange contract to convert it into a hash. + hash = _exchange.getOrderHash(order); + } + } + + function _getOrderFromEIP1271Data(bytes memory data) + private + returns (LibOrder.Order memory order) + { + require(data.length > 32, "INVALID_EIP1271_ORDER_DATA_LENGTH"); + assembly { + // Skip past the length to find the first parameter. + let argsStart := add(data, 32) + order := add(argsStart, mload(argsStart)) + // Destructively point the asset data fields to absolute locations. + for {let o := 0x140} lt(o, 0x1C0) {o := add(o, 0x20)} { + let arg := add(order, o) + mstore(arg, add(argsStart, add(mload(arg), 0x20))) + } + } + } + } diff --git a/contracts/exchange/test/core.ts b/contracts/exchange/test/core.ts index 9cf59e7b20..891f260bd3 100644 --- a/contracts/exchange/test/core.ts +++ b/contracts/exchange/test/core.ts @@ -264,11 +264,9 @@ describe('Exchange core', () => { constants.INITIAL_ERC20_BALANCE, ); // Approve the order validator. - await exchange.setOrderValidatorApproval.awaitTransactionSuccessAsync( - validatorWallet.address, - true, - { from: makerAddress }, - ); + await exchange.setOrderValidatorApproval.awaitTransactionSuccessAsync(validatorWallet.address, true, { + from: makerAddress, + }); signedOrder = await orderFactory.newSignedOrderAsync({ makerFee: constants.ZERO_AMOUNT, takerFee: constants.ZERO_AMOUNT, @@ -289,22 +287,16 @@ describe('Exchange core', () => { makerAddress, ); const fillAmount = signedOrder.takerAssetAmount.div(10); - await exchangeWrapper.fillOrderAsync( - signedOrder, - takerAddress, - { takerAssetFillAmount: fillAmount }, - ); + await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { takerAssetFillAmount: fillAmount }); // Reject the signature check for the second fill. await validatorWallet.setValidateAction.awaitTransactionSuccessAsync( orderHashHex, ValidatorWalletAction.Reject, makerAddress, ); - const tx = exchangeWrapper.fillOrderAsync( - signedOrder, - takerAddress, - { takerAssetFillAmount: fillAmount }, - ); + const tx = exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { + takerAssetFillAmount: fillAmount, + }); const expectedError = new ExchangeRevertErrors.SignatureError( ExchangeRevertErrors.SignatureErrorCode.BadSignature, orderHashHex, @@ -315,9 +307,7 @@ describe('Exchange core', () => { }); it('should revert if `OrderWallet` signature type rejects during a second fill', async () => { - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.OrderWallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.OrderWallet])]); signedOrder.makerAddress = validatorWallet.address; signedOrder.signature = ethUtil.bufferToHex(signature); const orderHashHex = orderHashUtils.getOrderHashHex(signedOrder); @@ -328,22 +318,16 @@ describe('Exchange core', () => { makerAddress, ); const fillAmount = signedOrder.takerAssetAmount.div(10); - await exchangeWrapper.fillOrderAsync( - signedOrder, - takerAddress, - { takerAssetFillAmount: fillAmount }, - ); + await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { takerAssetFillAmount: fillAmount }); // Reject the signature check for the second fill. await validatorWallet.setValidateAction.awaitTransactionSuccessAsync( orderHashHex, ValidatorWalletAction.Reject, makerAddress, ); - const tx = exchangeWrapper.fillOrderAsync( - signedOrder, - takerAddress, - { takerAssetFillAmount: fillAmount }, - ); + const tx = exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { + takerAssetFillAmount: fillAmount, + }); const expectedError = new ExchangeRevertErrors.SignatureError( ExchangeRevertErrors.SignatureErrorCode.BadSignature, orderHashHex, @@ -354,9 +338,7 @@ describe('Exchange core', () => { }); it('should revert if `EIP1271OrderWallet` signature type rejects during a second fill', async () => { - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.EIP1271OrderWallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.EIP1271OrderWallet])]); signedOrder.makerAddress = validatorWallet.address; signedOrder.signature = ethUtil.bufferToHex(signature); const orderHashHex = orderHashUtils.getOrderHashHex(signedOrder); @@ -367,22 +349,16 @@ describe('Exchange core', () => { signedOrder.makerAddress, ); const fillAmount = signedOrder.takerAssetAmount.div(10); - await exchangeWrapper.fillOrderAsync( - signedOrder, - takerAddress, - { takerAssetFillAmount: fillAmount }, - ); + await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { takerAssetFillAmount: fillAmount }); // Reject the signature check for the second fill. await validatorWallet.setValidateAction.awaitTransactionSuccessAsync( orderHashHex, ValidatorWalletAction.Reject, signedOrder.makerAddress, ); - const tx = exchangeWrapper.fillOrderAsync( - signedOrder, - takerAddress, - { takerAssetFillAmount: fillAmount }, - ); + const tx = exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { + takerAssetFillAmount: fillAmount, + }); const expectedError = new ExchangeRevertErrors.SignatureError( ExchangeRevertErrors.SignatureErrorCode.BadSignature, orderHashHex, diff --git a/contracts/exchange/test/lib_exchange_rich_error_decoder.ts b/contracts/exchange/test/lib_exchange_rich_error_decoder.ts index 24a687ed56..909b7f58d9 100644 --- a/contracts/exchange/test/lib_exchange_rich_error_decoder.ts +++ b/contracts/exchange/test/lib_exchange_rich_error_decoder.ts @@ -81,9 +81,21 @@ describe('LibExchangeRichErrorDecoder', () => { createDecodeTest(ExchangeRevertErrors.SignatureError, [errorCode, orderHash, signer, signature]); createDecodeTest(ExchangeRevertErrors.SignatureValidatorNotApprovedError, [signer, validator]); createDecodeTest(ExchangeRevertErrors.SignatureOrderValidatorNotApprovedError, [signer, validator]); - createDecodeTest(ExchangeRevertErrors.SignatureValidatorError, [orderHash, signer, validator, signature, errorData]); + createDecodeTest(ExchangeRevertErrors.SignatureValidatorError, [ + orderHash, + signer, + validator, + signature, + errorData, + ]); createDecodeTest(ExchangeRevertErrors.SignatureWalletError, [orderHash, signer, signature, errorData]); - createDecodeTest(ExchangeRevertErrors.SignatureOrderValidatorError, [orderHash, signer, validator, signature, errorData]); + createDecodeTest(ExchangeRevertErrors.SignatureOrderValidatorError, [ + orderHash, + signer, + validator, + signature, + errorData, + ]); createDecodeTest(ExchangeRevertErrors.SignatureOrderWalletError, [orderHash, signer, signature, errorData]); })(); diff --git a/contracts/exchange/test/signature_validator.ts b/contracts/exchange/test/signature_validator.ts index 33d23a4b2a..a800b4eebe 100644 --- a/contracts/exchange/test/signature_validator.ts +++ b/contracts/exchange/test/signature_validator.ts @@ -71,19 +71,21 @@ describe('MixinSignatureValidator', () => { validatorWalletRevertReason = await validatorWallet.REVERT_REASON.callAsync(); // Approve the validator for both signers. - await Promise.all([signerAddress, notSignerAddress].map(async (addr: string) => { - const tx1 = signatureValidator.setSignatureValidatorApproval.awaitTransactionSuccessAsync( - validatorWallet.address, - true, - { from: addr }, - ); - const tx2 = signatureValidator.setOrderValidatorApproval.awaitTransactionSuccessAsync( - validatorWallet.address, - true, - { from: addr }, - ); - return Promise.all([tx1, tx2]); - })); + await Promise.all( + [signerAddress, notSignerAddress].map(async (addr: string) => { + const tx1 = signatureValidator.setSignatureValidatorApproval.awaitTransactionSuccessAsync( + validatorWallet.address, + true, + { from: addr }, + ); + const tx2 = signatureValidator.setOrderValidatorApproval.awaitTransactionSuccessAsync( + validatorWallet.address, + true, + { from: addr }, + ); + return Promise.all([tx1, tx2]); + }), + ); const defaultOrderParams = { ...constants.STATIC_ORDER_PARAMS, @@ -130,11 +132,7 @@ describe('MixinSignatureValidator', () => { signedOrder.makerAddress, emptySignature, ); - const tx = validateCallAsync( - signedOrder, - signedOrder.makerAddress, - emptySignature, - ); + const tx = validateCallAsync(signedOrder, signedOrder.makerAddress, emptySignature); return expect(tx).to.revertWith(expectedError); }); @@ -148,11 +146,7 @@ describe('MixinSignatureValidator', () => { signedOrder.makerAddress, unsupportedSignatureHex, ); - const tx = validateCallAsync( - signedOrder, - signedOrder.makerAddress, - unsupportedSignatureHex, - ); + const tx = validateCallAsync(signedOrder, signedOrder.makerAddress, unsupportedSignatureHex); return expect(tx).to.revertWith(expectedError); }); @@ -165,21 +159,13 @@ describe('MixinSignatureValidator', () => { signedOrder.makerAddress, illegalSignatureHex, ); - const tx = validateCallAsync( - signedOrder, - signedOrder.makerAddress, - illegalSignatureHex, - ); + const tx = validateCallAsync(signedOrder, signedOrder.makerAddress, illegalSignatureHex); return expect(tx).to.revertWith(expectedError); }); it('should return false when SignatureType=Invalid and signature has a length of zero', async () => { const signatureHex = `0x${Buffer.from([SignatureType.Invalid]).toString('hex')}`; - const isValidSignature = await validateCallAsync( - signedOrder, - signedOrder.makerAddress, - signatureHex, - ); + const isValidSignature = await validateCallAsync(signedOrder, signedOrder.makerAddress, signatureHex); expect(isValidSignature).to.be.false(); }); @@ -195,21 +181,13 @@ describe('MixinSignatureValidator', () => { signedOrder.makerAddress, signatureHex, ); - const tx = validateCallAsync( - signedOrder, - signedOrder.makerAddress, - signatureHex, - ); + const tx = validateCallAsync(signedOrder, signedOrder.makerAddress, signatureHex); return expect(tx).to.revertWith(expectedError); }); it('should return true when SignatureType=EIP712 and signature is valid', async () => { // Validate signature - const isValidSignature = await validateCallAsync( - signedOrder, - signerAddress, - signedOrder.signature, - ); + const isValidSignature = await validateCallAsync(signedOrder, signerAddress, signedOrder.signature); expect(isValidSignature).to.be.true(); }); @@ -221,11 +199,7 @@ describe('MixinSignatureValidator', () => { const signatureHex = ethUtil.bufferToHex(signature); // Validate signature. // This will fail because `signerAddress` signed the message, but we're passing in `notSignerAddress` - const isValidSignature = await validateCallAsync( - signedOrder, - notSignerAddress, - signatureHex, - ); + const isValidSignature = await validateCallAsync(signedOrder, notSignerAddress, signatureHex); expect(isValidSignature).to.be.false(); }); @@ -244,11 +218,7 @@ describe('MixinSignatureValidator', () => { ]); const signatureHex = ethUtil.bufferToHex(signature); // Validate signature - const isValidSignature = await validateCallAsync( - signedOrder, - signerAddress, - signatureHex, - ); + const isValidSignature = await validateCallAsync(signedOrder, signerAddress, signatureHex); expect(isValidSignature).to.be.true(); }); @@ -261,19 +231,13 @@ describe('MixinSignatureValidator', () => { const signatureHex = ethUtil.bufferToHex(signature); // Validate signature. // This will fail because `signerAddress` signed the message, but we're passing in `notSignerAddress` - const isValidSignature = await validateCallAsync( - signedOrder, - signerAddress, - signatureHex, - ); + const isValidSignature = await validateCallAsync(signedOrder, signerAddress, signatureHex); expect(isValidSignature).to.be.false(); }); it('should return true when SignatureType=Wallet and signature is valid', async () => { signedOrder.makerAddress = validatorWallet.address; - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.Wallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.Wallet])]); const signatureHex = ethUtil.bufferToHex(signature); // Validate signature const isValidSignature = await validateCallAsync( @@ -287,9 +251,7 @@ describe('MixinSignatureValidator', () => { it('should return false when SignatureType=Wallet and signature is invalid', async () => { signedOrder.makerAddress = validatorWallet.address; - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.Wallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.Wallet])]); const signatureHex = ethUtil.bufferToHex(signature); // Validate signature const isValidSignature = await validateCallAsync( @@ -304,9 +266,7 @@ describe('MixinSignatureValidator', () => { it('should revert when validator attempts to update state and SignatureType=Wallet', async () => { signedOrder.makerAddress = validatorWallet.address; const orderHashHex = orderHashUtils.getOrderHashHex(signedOrder); - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.Wallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.Wallet])]); const signatureHex = ethUtil.bufferToHex(signature); const expectedError = new ExchangeRevertErrors.SignatureWalletError( orderHashHex, @@ -326,9 +286,7 @@ describe('MixinSignatureValidator', () => { it('should revert when validator reverts and SignatureType=Wallet', async () => { signedOrder.makerAddress = validatorWallet.address; const orderHashHex = orderHashUtils.getOrderHashHex(signedOrder); - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.Wallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.Wallet])]); const signatureHex = ethUtil.bufferToHex(signature); const expectedError = new ExchangeRevertErrors.SignatureWalletError( orderHashHex, @@ -391,12 +349,7 @@ describe('MixinSignatureValidator', () => { signatureHex, constants.NULL_BYTES, ); - const tx = validateCallAsync( - signedOrder, - signerAddress, - signatureHex, - ValidatorWalletAction.UpdateState, - ); + const tx = validateCallAsync(signedOrder, signerAddress, signatureHex, ValidatorWalletAction.UpdateState); return expect(tx).to.revertWith(expectedError); }); @@ -415,12 +368,7 @@ describe('MixinSignatureValidator', () => { signatureHex, new StringRevertError(validatorWalletRevertReason).encode(), ); - const tx = validateCallAsync( - signedOrder, - signerAddress, - signatureHex, - ValidatorWalletAction.Revert, - ); + const tx = validateCallAsync(signedOrder, signerAddress, signatureHex, ValidatorWalletAction.Revert); return expect(tx).to.revertWith(expectedError); }); @@ -453,9 +401,7 @@ describe('MixinSignatureValidator', () => { it('should return true when SignatureType=EIP1271Wallet and signature is valid', async () => { signedOrder.makerAddress = validatorWallet.address; - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.EIP1271Wallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.EIP1271Wallet])]); const signatureHex = ethUtil.bufferToHex(signature); // Validate signature const isValidSignature = await validateCallAsync( @@ -469,9 +415,7 @@ describe('MixinSignatureValidator', () => { it('should return false when SignatureType=EIP1271Wallet and signature is invalid', async () => { signedOrder.makerAddress = validatorWallet.address; - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.EIP1271Wallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.EIP1271Wallet])]); const signatureHex = ethUtil.bufferToHex(signature); // Validate signature const isValidSignature = await validateCallAsync( @@ -486,9 +430,7 @@ describe('MixinSignatureValidator', () => { it('should revert when validator attempts to update state and SignatureType=EIP1271Wallet', async () => { signedOrder.makerAddress = validatorWallet.address; const orderHashHex = orderHashUtils.getOrderHashHex(signedOrder); - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.EIP1271Wallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.EIP1271Wallet])]); const signatureHex = ethUtil.bufferToHex(signature); const expectedError = new ExchangeRevertErrors.SignatureWalletError( orderHashHex, @@ -508,9 +450,7 @@ describe('MixinSignatureValidator', () => { it('should revert when validator reverts and SignatureType=EIP1271Wallet', async () => { signedOrder.makerAddress = validatorWallet.address; const orderHashHex = orderHashUtils.getOrderHashHex(signedOrder); - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.EIP1271Wallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.EIP1271Wallet])]); const signatureHex = ethUtil.bufferToHex(signature); const expectedError = new ExchangeRevertErrors.SignatureWalletError( orderHashHex, @@ -530,26 +470,20 @@ describe('MixinSignatureValidator', () => { it('should return true when SignatureType=Presigned and signer has presigned hash', async () => { // Presign hash const orderHashHex = orderHashUtils.getOrderHashHex(signedOrder); - await signatureValidator.preSign.awaitTransactionSuccessAsync(orderHashHex, { from: signedOrder.makerAddress }); + await signatureValidator.preSign.awaitTransactionSuccessAsync(orderHashHex, { + from: signedOrder.makerAddress, + }); // Validate presigned signature const signature = ethUtil.toBuffer(`0x${SignatureType.PreSigned}`); const signatureHex = ethUtil.bufferToHex(signature); - const isValidSignature = await validateCallAsync( - signedOrder, - signedOrder.makerAddress, - signatureHex, - ); + const isValidSignature = await validateCallAsync(signedOrder, signedOrder.makerAddress, signatureHex); expect(isValidSignature).to.be.true(); }); it('should return false when SignatureType=Presigned and signer has not presigned hash', async () => { const signature = ethUtil.toBuffer(`0x${SignatureType.PreSigned}`); const signatureHex = ethUtil.bufferToHex(signature); - const isValidSignature = await validateCallAsync( - signedOrder, - signedOrder.makerAddress, - signatureHex, - ); + const isValidSignature = await validateCallAsync(signedOrder, signedOrder.makerAddress, signatureHex); expect(isValidSignature).to.be.false(); }); }; @@ -569,11 +503,7 @@ describe('MixinSignatureValidator', () => { validSigner, ); } - return signatureValidator.isValidHashSignature.callAsync( - orderHashHex, - order.makerAddress, - signatureHex, - ); + return signatureValidator.isValidHashSignature.callAsync(orderHashHex, order.makerAddress, signatureHex); }; beforeEach(async () => { @@ -652,11 +582,7 @@ describe('MixinSignatureValidator', () => { validSigner, ); } - return signatureValidator.isValidOrderSignature.callAsync( - order, - order.makerAddress, - signatureHex, - ); + return signatureValidator.isValidOrderSignature.callAsync(order, order.makerAddress, signatureHex); }; beforeEach(async () => { @@ -710,12 +636,7 @@ describe('MixinSignatureValidator', () => { signatureHex, constants.NULL_BYTES, ); - const tx = validateCallAsync( - signedOrder, - signerAddress, - signatureHex, - ValidatorWalletAction.UpdateState, - ); + const tx = validateCallAsync(signedOrder, signerAddress, signatureHex, ValidatorWalletAction.UpdateState); return expect(tx).to.revertWith(expectedError); }); @@ -734,12 +655,7 @@ describe('MixinSignatureValidator', () => { signatureHex, new StringRevertError(validatorWalletRevertReason).encode(), ); - const tx = validateCallAsync( - signedOrder, - signerAddress, - signatureHex, - ValidatorWalletAction.Revert, - ); + const tx = validateCallAsync(signedOrder, signerAddress, signatureHex, ValidatorWalletAction.Revert); return expect(tx).to.revertWith(expectedError); }); @@ -771,9 +687,7 @@ describe('MixinSignatureValidator', () => { it('should return true when SignatureType=OrderWallet and signature is valid', async () => { signedOrder.makerAddress = validatorWallet.address; - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.OrderWallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.OrderWallet])]); const signatureHex = ethUtil.bufferToHex(signature); // Validate signature const isValidSignature = await validateCallAsync( @@ -787,9 +701,7 @@ describe('MixinSignatureValidator', () => { it('should return false when SignatureType=OrderWallet and signature is invalid', async () => { signedOrder.makerAddress = validatorWallet.address; - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.OrderWallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.OrderWallet])]); const signatureHex = ethUtil.bufferToHex(signature); // Validate signature const isValidSignature = await validateCallAsync( @@ -804,9 +716,7 @@ describe('MixinSignatureValidator', () => { it('should revert when validator attempts to update state and SignatureType=OrderWallet', async () => { signedOrder.makerAddress = validatorWallet.address; const orderHashHex = orderHashUtils.getOrderHashHex(signedOrder); - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.OrderWallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.OrderWallet])]); const signatureHex = ethUtil.bufferToHex(signature); const expectedError = new ExchangeRevertErrors.SignatureOrderWalletError( orderHashHex, @@ -826,9 +736,7 @@ describe('MixinSignatureValidator', () => { it('should revert when validator reverts and SignatureType=OrderWallet', async () => { signedOrder.makerAddress = validatorWallet.address; const orderHashHex = orderHashUtils.getOrderHashHex(signedOrder); - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.OrderWallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.OrderWallet])]); const signatureHex = ethUtil.bufferToHex(signature); const expectedError = new ExchangeRevertErrors.SignatureOrderWalletError( orderHashHex, @@ -847,9 +755,7 @@ describe('MixinSignatureValidator', () => { it('should return true when SignatureType=EIP1271OrderWallet and signature is valid', async () => { signedOrder.makerAddress = validatorWallet.address; - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.EIP1271OrderWallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.EIP1271OrderWallet])]); const signatureHex = ethUtil.bufferToHex(signature); // Validate signature const isValidSignature = await validateCallAsync( @@ -863,9 +769,7 @@ describe('MixinSignatureValidator', () => { it('should return false when SignatureType=EIP1271OrderWallet and signature is invalid', async () => { signedOrder.makerAddress = validatorWallet.address; - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.EIP1271OrderWallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.EIP1271OrderWallet])]); const signatureHex = ethUtil.bufferToHex(signature); // Validate signature const isValidSignature = await validateCallAsync( @@ -880,9 +784,7 @@ describe('MixinSignatureValidator', () => { it('should revert when validator attempts to update state and SignatureType=EIP1271OrderWallet', async () => { signedOrder.makerAddress = validatorWallet.address; const orderHashHex = orderHashUtils.getOrderHashHex(signedOrder); - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.EIP1271OrderWallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.EIP1271OrderWallet])]); const signatureHex = ethUtil.bufferToHex(signature); const expectedError = new ExchangeRevertErrors.SignatureOrderWalletError( orderHashHex, @@ -902,9 +804,7 @@ describe('MixinSignatureValidator', () => { it('should revert when validator reverts and SignatureType=EIP1271OrderWallet', async () => { signedOrder.makerAddress = validatorWallet.address; const orderHashHex = orderHashUtils.getOrderHashHex(signedOrder); - const signature = Buffer.concat([ - ethUtil.toBuffer([SignatureType.EIP1271OrderWallet]), - ]); + const signature = Buffer.concat([ethUtil.toBuffer([SignatureType.EIP1271OrderWallet])]); const signatureHex = ethUtil.bufferToHex(signature); const expectedError = new ExchangeRevertErrors.SignatureOrderWalletError( orderHashHex, @@ -935,8 +835,9 @@ describe('MixinSignatureValidator', () => { }, ); expect(res.logs.length).to.equal(1); - const log = signatureValidatorLogDecoder.decodeLogOrThrow(res.logs[0]) as - LogWithDecodedArgs; + const log = signatureValidatorLogDecoder.decodeLogOrThrow(res.logs[0]) as LogWithDecodedArgs< + TestSignatureValidatorSignatureValidatorApprovalEventArgs + >; const logArgs = log.args; expect(logArgs.signerAddress).to.equal(signerAddress); expect(logArgs.validatorAddress).to.equal(validatorWallet.address); @@ -952,8 +853,9 @@ describe('MixinSignatureValidator', () => { }, ); expect(res.logs.length).to.equal(1); - const log = signatureValidatorLogDecoder.decodeLogOrThrow(res.logs[0]) as - LogWithDecodedArgs; + const log = signatureValidatorLogDecoder.decodeLogOrThrow(res.logs[0]) as LogWithDecodedArgs< + TestSignatureValidatorSignatureValidatorApprovalEventArgs + >; const logArgs = log.args; expect(logArgs.signerAddress).to.equal(signerAddress); expect(logArgs.validatorAddress).to.equal(validatorWallet.address); @@ -969,8 +871,9 @@ describe('MixinSignatureValidator', () => { }, ); expect(res.logs.length).to.equal(1); - const log = signatureValidatorLogDecoder.decodeLogOrThrow(res.logs[0]) as - LogWithDecodedArgs; + const log = signatureValidatorLogDecoder.decodeLogOrThrow(res.logs[0]) as LogWithDecodedArgs< + TestSignatureValidatorSignatureValidatorApprovalEventArgs + >; const logArgs = log.args; expect(logArgs.signerAddress).to.equal(signerAddress); expect(logArgs.validatorAddress).to.equal(validatorWallet.address); @@ -986,8 +889,9 @@ describe('MixinSignatureValidator', () => { }, ); expect(res.logs.length).to.equal(1); - const log = signatureValidatorLogDecoder.decodeLogOrThrow(res.logs[0]) as - LogWithDecodedArgs; + const log = signatureValidatorLogDecoder.decodeLogOrThrow(res.logs[0]) as LogWithDecodedArgs< + TestSignatureValidatorSignatureValidatorApprovalEventArgs + >; const logArgs = log.args; expect(logArgs.signerAddress).to.equal(signerAddress); expect(logArgs.validatorAddress).to.equal(validatorWallet.address); diff --git a/packages/base-contract/src/index.ts b/packages/base-contract/src/index.ts index 59808f9d7d..3665c53556 100644 --- a/packages/base-contract/src/index.ts +++ b/packages/base-contract/src/index.ts @@ -45,19 +45,21 @@ export class PromiseWithTransactionHash implements Promise { this.txHashPromise = txHashPromise; this._promise = promise; } - // tslint:disable-next-line:async-suffix + // tslint:disable:promise-function-async + // tslint:disable:async-suffix public then( onFulfilled?: (v: T) => TResult | Promise, onRejected?: (reason: any) => Promise, ): Promise { return this._promise.then(onFulfilled, onRejected); } - // tslint:disable-next-line:async-suffix public catch(onRejected?: (reason: any) => Promise): Promise { return this._promise.catch(onRejected); } + // tslint:enable:promise-function-async + // tslint:enable:async-suffix get [Symbol.toStringTag](): 'Promise' { - return this._promise[Symbol.toStringTag]; + return this._promise[Symbol.toStringTag]; } }