diff --git a/contracts/staking/contracts/src/fees/MixinExchangeManager.sol b/contracts/staking/contracts/src/fees/MixinExchangeManager.sol index d34e78f9be..708ec6c03a 100644 --- a/contracts/staking/contracts/src/fees/MixinExchangeManager.sol +++ b/contracts/staking/contracts/src/fees/MixinExchangeManager.sol @@ -55,7 +55,7 @@ contract MixinExchangeManager is onlyOwner { if (validExchanges[addr]) { - LibRichErrors.rrevert(LibStakingRichErrors.ExchangeAlreadyRegisteredError( + LibRichErrors.rrevert(LibStakingRichErrors.ExchangeAddressAlreadyRegisteredError( addr )); } diff --git a/contracts/staking/contracts/src/libs/LibStakingRichErrors.sol b/contracts/staking/contracts/src/libs/LibStakingRichErrors.sol index ce7ba7c289..a5b204f995 100644 --- a/contracts/staking/contracts/src/libs/LibStakingRichErrors.sol +++ b/contracts/staking/contracts/src/libs/LibStakingRichErrors.sol @@ -23,101 +23,103 @@ import "@0x/contracts-utils/contracts/src/LibRichErrors.sol"; library LibStakingRichErrors { // bytes4(keccak256("MiscalculatedRewardsError(uint256,uint256)")) - bytes4 internal constant MISCALCULATED_REWARDS_ERROR_SELECTOR = + bytes4 internal constant MISCALCULATED_REWARDS_ERROR_SELECTOR = 0xf7806c4e; - + // bytes4(keccak256("OnlyCallableByExchangeError(address)")) - bytes4 internal constant ONLY_CALLABLE_BY_EXCHANGE_ERROR_SELECTOR = + bytes4 internal constant ONLY_CALLABLE_BY_EXCHANGE_ERROR_SELECTOR = 0xb56d2df0; - - // bytes4(keccak256("ExchangeAlreadyRegisteredError(address)")) - bytes4 internal constant EXCHANGE_ALREADY_REGISTERED_ERROR_SELECTOR = - 0x5ef5b57d; - + + // bytes4(keccak256("ExchangeAddressAlreadyRegisteredError(address)")) + bytes4 internal constant EXCHANGE_ADDRESS_ALREADY_REGISTERED_ERROR_SELECTOR = + 0xc87a78b7; + // bytes4(keccak256("ExchangeAddressNotRegisteredError(address)")) - bytes4 internal constant EXCHANGE_ADDRESS_NOT_REGISTERED_ERROR_SELECTOR = + bytes4 internal constant EXCHANGE_ADDRESS_NOT_REGISTERED_ERROR_SELECTOR = 0x7dc025b0; - + // bytes4(keccak256("SignatureLengthGreaterThan0RequiredError()")) - bytes4 internal constant SIGNATURE_LENGTH_GREATER_THAN_0_REQUIRED_ERROR_SELECTOR = + bytes4 internal constant SIGNATURE_LENGTH_GREATER_THAN_0_REQUIRED_ERROR_SELECTOR = 0x2dcb01d9; - + // bytes4(keccak256("SignatureUnsupportedError(bytes)")) - bytes4 internal constant SIGNATURE_UNSUPPORTED_ERROR_SELECTOR = + bytes4 internal constant SIGNATURE_UNSUPPORTED_ERROR_SELECTOR = 0xffca2a70; - + // bytes4(keccak256("SignatureIllegalError(bytes)")) - bytes4 internal constant SIGNATURE_ILLEGAL_ERROR_SELECTOR = + bytes4 internal constant SIGNATURE_ILLEGAL_ERROR_SELECTOR = 0x4a95093c; - + // bytes4(keccak256("SignatureLength0RequiredError(bytes)")) - bytes4 internal constant SIGNATURE_LENGTH_0_REQUIRED_ERROR_SELECTOR = + bytes4 internal constant SIGNATURE_LENGTH_0_REQUIRED_ERROR_SELECTOR = 0xcbcd59a2; - + // bytes4(keccak256("SignatureLength65RequiredError(bytes)")) - bytes4 internal constant SIGNATURE_LENGTH_65_REQUIRED_ERROR_SELECTOR = + bytes4 internal constant SIGNATURE_LENGTH_65_REQUIRED_ERROR_SELECTOR = 0x091d7ab9; - + // bytes4(keccak256("WalletError(address,bytes)")) - bytes4 internal constant WALLET_ERROR_SELECTOR = + bytes4 internal constant WALLET_ERROR_SELECTOR = 0x0cfc935d; - + // bytes4(keccak256("InsufficientBalanceError(uint256,uint256)")) - bytes4 internal constant INSUFFICIENT_BALANCE_ERROR_SELECTOR = + bytes4 internal constant INSUFFICIENT_BALANCE_ERROR_SELECTOR = 0x84c8b7c9; - + // bytes4(keccak256("OnlyCallableByPoolOperatorError(address,address)")) - bytes4 internal constant ONLY_CALLABLE_BY_POOL_OPERATOR_ERROR_SELECTOR = + bytes4 internal constant ONLY_CALLABLE_BY_POOL_OPERATOR_ERROR_SELECTOR = 0x6cfa0c22; - + // bytes4(keccak256("OnlyCallableByPoolOperatorOrMakerError(address,address,address)")) - bytes4 internal constant ONLY_CALLABLE_BY_POOL_OPERATOR_OR_MAKER_ERROR_SELECTOR = + bytes4 internal constant ONLY_CALLABLE_BY_POOL_OPERATOR_OR_MAKER_ERROR_SELECTOR = 0x7d9e1c10; - + // bytes4(keccak256("InvalidMakerSignatureError(bytes32,address,bytes)")) - bytes4 internal constant INVALID_MAKER_SIGNATURE_ERROR_SELECTOR = + bytes4 internal constant INVALID_MAKER_SIGNATURE_ERROR_SELECTOR = 0x726b89c8; - + // bytes4(keccak256("MakerAddressAlreadyRegisteredError(address)")) - bytes4 internal constant MAKER_ADDRESS_ALREADY_REGISTERED_ERROR_SELECTOR = + bytes4 internal constant MAKER_ADDRESS_ALREADY_REGISTERED_ERROR_SELECTOR = 0x5a3971da; - + // bytes4(keccak256("MakerAddressNotRegisteredError(address,bytes32,bytes32)")) - bytes4 internal constant MAKER_ADDRESS_NOT_REGISTERED_ERROR_SELECTOR = + bytes4 internal constant MAKER_ADDRESS_NOT_REGISTERED_ERROR_SELECTOR = 0x12ab07e8; - + // bytes4(keccak256("WithdrawAmountExceedsMemberBalanceError(uint256,uint256)")) - bytes4 internal constant WITHDRAW_AMOUNT_EXCEEDS_MEMBER_BALANCE_ERROR_SELECTOR = + bytes4 internal constant WITHDRAW_AMOUNT_EXCEEDS_MEMBER_BALANCE_ERROR_SELECTOR = 0xfc9c065f; - + // bytes4(keccak256("BlockTimestampTooLowError(uint64,uint64)")) - bytes4 internal constant BLOCK_TIMESTAMP_TOO_LOW_ERROR_SELECTOR = + bytes4 internal constant BLOCK_TIMESTAMP_TOO_LOW_ERROR_SELECTOR = 0x887225f7; - + // bytes4(keccak256("OnlyCallableByStakingContractError(address)")) - bytes4 internal constant ONLY_CALLABLE_BY_STAKING_CONTRACT_ERROR_SELECTOR = + bytes4 internal constant ONLY_CALLABLE_BY_STAKING_CONTRACT_ERROR_SELECTOR = 0xca1d07a2; - + // bytes4(keccak256("OnlyCallableInCatastrophicFailureError()")) - bytes4 internal constant ONLY_CALLABLE_IN_CATASTROPHIC_FAILURE_ERROR_SELECTOR = + bytes4 internal constant ONLY_CALLABLE_IN_CATASTROPHIC_FAILURE_ERROR_SELECTOR = 0xa4f5de9d; - + // bytes4(keccak256("OnlyCallableNotInCatastrophicFailureError()")) - bytes4 internal constant ONLY_CALLABLE_NOT_IN_CATASTROPHIC_FAILURE_ERROR_SELECTOR = + bytes4 internal constant ONLY_CALLABLE_NOT_IN_CATASTROPHIC_FAILURE_ERROR_SELECTOR = 0x7e8d2ed9; - + // bytes4(keccak256("AmountExceedsBalanceOfPoolError(uint256,uint96)")) - bytes4 internal constant AMOUNT_EXCEEDS_BALANCE_OF_POOL_ERROR_SELECTOR = + bytes4 internal constant AMOUNT_EXCEEDS_BALANCE_OF_POOL_ERROR_SELECTOR = 0x4c5c09dd; - + // bytes4(keccak256("OperatorShareMustBeBetween0And100Error(bytes32,uint8)")) - bytes4 internal constant OPERATOR_SHARE_MUST_BE_BETWEEN_0_AND_100_ERROR_SELECTOR = + bytes4 internal constant OPERATOR_SHARE_MUST_BE_BETWEEN_0_AND_100_ERROR_SELECTOR = 0xde447684; - + // bytes4(keccak256("PoolAlreadyExistsError(bytes32)")) - bytes4 internal constant POOL_ALREADY_EXISTS_ERROR_SELECTOR = + bytes4 internal constant POOL_ALREADY_EXISTS_ERROR_SELECTOR = 0x2a5e4dcf; - + + // solhint-disable func-name-mixedcase + function MiscalculatedRewardsError( uint256 totalRewardsPaid, uint256 initialContractBalance @@ -132,7 +134,7 @@ library LibStakingRichErrors { initialContractBalance ); } - + function OnlyCallableByExchangeError( address senderAddress ) @@ -145,8 +147,8 @@ library LibStakingRichErrors { senderAddress ); } - - function ExchangeAlreadyRegisteredError( + + function ExchangeAddressAlreadyRegisteredError( address exchangeAddress ) internal @@ -154,11 +156,11 @@ library LibStakingRichErrors { returns (bytes memory) { return abi.encodeWithSelector( - EXCHANGE_ALREADY_REGISTERED_ERROR_SELECTOR, + EXCHANGE_ADDRESS_ALREADY_REGISTERED_ERROR_SELECTOR, exchangeAddress ); } - + function ExchangeAddressNotRegisteredError( address exchangeAddress ) @@ -171,7 +173,7 @@ library LibStakingRichErrors { exchangeAddress ); } - + function SignatureLengthGreaterThan0RequiredError() internal pure @@ -179,7 +181,7 @@ library LibStakingRichErrors { { return abi.encodeWithSelector(SIGNATURE_LENGTH_GREATER_THAN_0_REQUIRED_ERROR_SELECTOR); } - + function SignatureUnsupportedError( bytes memory signature ) @@ -192,7 +194,7 @@ library LibStakingRichErrors { signature ); } - + function SignatureIllegalError( bytes memory signature ) @@ -205,7 +207,7 @@ library LibStakingRichErrors { signature ); } - + function SignatureLength0RequiredError( bytes memory signature ) @@ -218,7 +220,7 @@ library LibStakingRichErrors { signature ); } - + function SignatureLength65RequiredError( bytes memory signature ) @@ -231,7 +233,7 @@ library LibStakingRichErrors { signature ); } - + function WalletError( address walletAddress, bytes memory errorData @@ -246,7 +248,7 @@ library LibStakingRichErrors { errorData ); } - + function InsufficientBalanceError( uint256 amount, uint256 balance @@ -261,7 +263,7 @@ library LibStakingRichErrors { balance ); } - + function OnlyCallableByPoolOperatorError( address senderAddress, address poolOperatorAddress @@ -276,7 +278,7 @@ library LibStakingRichErrors { poolOperatorAddress ); } - + function OnlyCallableByPoolOperatorOrMakerError( address senderAddress, address poolOperatorAddress, @@ -293,7 +295,7 @@ library LibStakingRichErrors { makerAddress ); } - + function InvalidMakerSignatureError( bytes32 poolId, address makerAddress, @@ -310,7 +312,7 @@ library LibStakingRichErrors { makerSignature ); } - + function MakerAddressAlreadyRegisteredError( address makerAddress ) @@ -323,7 +325,7 @@ library LibStakingRichErrors { makerAddress ); } - + function MakerAddressNotRegisteredError( address makerAddress, bytes32 makerPoolId, @@ -340,7 +342,7 @@ library LibStakingRichErrors { poolId ); } - + function WithdrawAmountExceedsMemberBalanceError( uint256 withdrawAmount, uint256 balance @@ -355,7 +357,7 @@ library LibStakingRichErrors { balance ); } - + function BlockTimestampTooLowError( uint64 epochEndTime, uint64 currentBlockTimestamp @@ -370,7 +372,7 @@ library LibStakingRichErrors { currentBlockTimestamp ); } - + function OnlyCallableByStakingContractError( address senderAddress ) @@ -383,7 +385,7 @@ library LibStakingRichErrors { senderAddress ); } - + function OnlyCallableInCatastrophicFailureError() internal pure @@ -391,7 +393,7 @@ library LibStakingRichErrors { { return abi.encodeWithSelector(ONLY_CALLABLE_IN_CATASTROPHIC_FAILURE_ERROR_SELECTOR); } - + function OnlyCallableNotInCatastrophicFailureError() internal pure @@ -399,7 +401,7 @@ library LibStakingRichErrors { { return abi.encodeWithSelector(ONLY_CALLABLE_NOT_IN_CATASTROPHIC_FAILURE_ERROR_SELECTOR); } - + function AmountExceedsBalanceOfPoolError( uint256 amount, uint96 poolBalance @@ -414,7 +416,7 @@ library LibStakingRichErrors { poolBalance ); } - + function OperatorShareMustBeBetween0And100Error( bytes32 poolId, uint8 poolOperatorShare @@ -429,7 +431,7 @@ library LibStakingRichErrors { poolOperatorShare ); } - + function PoolAlreadyExistsError( bytes32 poolId ) @@ -442,4 +444,4 @@ library LibStakingRichErrors { poolId ); } -} \ No newline at end of file +} diff --git a/contracts/staking/test/actors/staker_actor.ts b/contracts/staking/test/actors/staker_actor.ts index b6c6ecd97b..ebdc85b106 100644 --- a/contracts/staking/test/actors/staker_actor.ts +++ b/contracts/staking/test/actors/staker_actor.ts @@ -75,10 +75,7 @@ export class StakerActor extends BaseActor { expectedStakerBalances.deactivatedStakeBalance = initStakerBalances.deactivatedStakeBalance.plus(amount); await this.assertBalancesAsync(expectedStakerBalances); } - public async burnDeactivatedStakeAndWithdrawZrxAsync( - amount: BigNumber, - revertError?: RevertError, - ): Promise { + public async burnDeactivatedStakeAndWithdrawZrxAsync(amount: BigNumber, revertError?: RevertError): Promise { // query init balances const initZrxBalanceOfVault = await this._stakingWrapper.getZrxTokenBalanceOfZrxVaultAsync(); const initStakerBalances = await this.getBalancesAsync(); diff --git a/contracts/staking/test/exchange_test.ts b/contracts/staking/test/exchange_test.ts index 42b6927e80..ce03332e02 100644 --- a/contracts/staking/test/exchange_test.ts +++ b/contracts/staking/test/exchange_test.ts @@ -47,7 +47,7 @@ blockchainTests.only('Exchange Integrations', env => { const isValidAddressValid = await stakingWrapper.isValidExchangeAddressAsync(exchange); expect(isValidAddressValid).to.be.true(); // 3 try adding valid address again - let revertError = new StakingRevertErrors.ExchangeAlreadyRegisteredError(exchange); + let revertError = new StakingRevertErrors.ExchangeAddressAlreadyRegisteredError(exchange); let tx = stakingWrapper.addExchangeAddressAsync(exchange); await expect(tx).to.revertWith(revertError); // 4 remove valid address diff --git a/contracts/staking/test/pools_test.ts b/contracts/staking/test/pools_test.ts index e1e0db0d5c..d74a7f6442 100644 --- a/contracts/staking/test/pools_test.ts +++ b/contracts/staking/test/pools_test.ts @@ -113,12 +113,7 @@ blockchainTests.only('Staking Pool Management', env => { await poolOperator.addMakerToStakingPoolAsync(poolId, makerAddress, makerApproval.signature); const revertError = new StakingRevertErrors.MakerAddressAlreadyRegisteredError(makerAddress); // add same maker to pool again - await poolOperator.addMakerToStakingPoolAsync( - poolId, - makerAddress, - makerApproval.signature, - revertError, - ); + await poolOperator.addMakerToStakingPoolAsync(poolId, makerAddress, makerApproval.signature, revertError); }); it('Should fail to remove a maker that does not exist', async () => { // test parameters @@ -135,11 +130,7 @@ blockchainTests.only('Staking Pool Management', env => { poolId, ); // remove non-existent maker from pool - await poolOperator.removeMakerFromStakingPoolAsync( - poolId, - makerAddress, - revertError, - ); + await poolOperator.removeMakerFromStakingPoolAsync(poolId, makerAddress, revertError); }); it('Should fail to add a maker who signed with the wrong private key', async () => { // test parameters @@ -161,12 +152,7 @@ blockchainTests.only('Staking Pool Management', env => { makerAddress, makerApproval.signature, ); - await poolOperator.addMakerToStakingPoolAsync( - poolId, - makerAddress, - makerApproval.signature, - revertError, - ); + await poolOperator.addMakerToStakingPoolAsync(poolId, makerAddress, makerApproval.signature, revertError); }); it('Should fail to add a maker who signed with the wrong staking contract address', async () => { // test parameters @@ -187,12 +173,7 @@ blockchainTests.only('Staking Pool Management', env => { makerAddress, makerApproval.signature, ); - await poolOperator.addMakerToStakingPoolAsync( - poolId, - makerAddress, - makerApproval.signature, - revertError, - ); + await poolOperator.addMakerToStakingPoolAsync(poolId, makerAddress, makerApproval.signature, revertError); }); it('Should fail to add a maker who signed with the wrong chain id', async () => { // test parameters @@ -220,12 +201,7 @@ blockchainTests.only('Staking Pool Management', env => { makerAddress, makerApproval.signature, ); - await poolOperator.addMakerToStakingPoolAsync( - poolId, - makerAddress, - makerApproval.signature, - revertError, - ); + await poolOperator.addMakerToStakingPoolAsync(poolId, makerAddress, makerApproval.signature, revertError); }); it('Should fail to add a maker when called by someone other than the pool operator', async () => { // test parameters diff --git a/contracts/utils/src/reference_functions.ts b/contracts/utils/src/reference_functions.ts index acaba129a0..140bf0a89f 100644 --- a/contracts/utils/src/reference_functions.ts +++ b/contracts/utils/src/reference_functions.ts @@ -8,11 +8,7 @@ const MAX_UINT256 = new BigNumber(2).pow(256).minus(1); export function safeAdd(a: BigNumber, b: BigNumber): BigNumber { const r = a.plus(b); if (r.isGreaterThan(MAX_UINT256)) { - throw new SafeMathRevertErrors.Uint256BinopError( - SafeMathRevertErrors.BinopErrorCodes.AdditionOverflow, - a, - b, - ); + throw new SafeMathRevertErrors.Uint256BinopError(SafeMathRevertErrors.BinopErrorCodes.AdditionOverflow, a, b); } return r; } @@ -52,11 +48,7 @@ export function safeMul(a: BigNumber, b: BigNumber): BigNumber { */ export function safeDiv(a: BigNumber, b: BigNumber): BigNumber { if (b.isEqualTo(0)) { - throw new SafeMathRevertErrors.Uint256BinopError( - SafeMathRevertErrors.BinopErrorCodes.DivisionByZero, - a, - b, - ); + throw new SafeMathRevertErrors.Uint256BinopError(SafeMathRevertErrors.BinopErrorCodes.DivisionByZero, a, b); } return a.dividedToIntegerBy(b); } diff --git a/packages/order-utils/src/staking_revert_errors.ts b/packages/order-utils/src/staking_revert_errors.ts index e431aadf59..c855e75b27 100644 --- a/packages/order-utils/src/staking_revert_errors.ts +++ b/packages/order-utils/src/staking_revert_errors.ts @@ -18,11 +18,13 @@ export class OnlyCallableByExchangeError extends RevertError { } } -export class ExchangeAlreadyRegisteredError extends RevertError { +export class ExchangeAddressAlreadyRegisteredError extends RevertError { constructor(exchangeAddress?: string) { - super('ExchangeAlreadyRegisteredError', 'ExchangeAlreadyRegisteredError(address exchangeAddress)', { - exchangeAddress, - }); + super( + 'ExchangeAddressAlreadyRegisteredError', + 'ExchangeAddressAlreadyRegisteredError(address exchangeAddress)', + { exchangeAddress }, + ); } } @@ -196,7 +198,7 @@ export class PoolAlreadyExistsError extends RevertError { const types = [ MiscalculatedRewardsError, OnlyCallableByExchangeError, - ExchangeAlreadyRegisteredError, + ExchangeAddressAlreadyRegisteredError, ExchangeAddressNotRegisteredError, SignatureLengthGreaterThan0RequiredError, SignatureUnsupportedError, diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index b89f1cbb9a..702d52f9cd 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -341,21 +341,6 @@ export enum RevertReason { TargetNotEven = 'TARGET_NOT_EVEN', UnexpectedStaticCallResult = 'UNEXPECTED_STATIC_CALL_RESULT', TransfersSuccessful = 'TRANSFERS_SUCCESSFUL', - // Staking - OnlyCallableByPoolOperator = 'ONLY_CALLABLE_BY_POOL_OPERATOR', - OnlyCallableByPoolOperatorOrMaker = 'ONLY_CALLABLE_BY_POOL_OPERATOR_OR_MAKER', - MakerAddressAlreadyRegistered = 'MAKER_ADDRESS_ALREADY_REGISTERED', - MakerAddressNotRegistered = 'MAKER_ADDRESS_NOT_REGISTERED', - OnlyCallableByExchange = 'ONLY_CALLABLE_BY_EXCHANGE', - ExchangeAddressAlreadyRegistered = 'EXCHANGE_ADDRESS_ALREADY_REGISTERED', - ExchangeAddressNotRegistered = 'EXCHANGE_ADDRESS_NOT_REGISTERED', - PoolAlreadyExists = 'POOL_ALREADY_EXISTS', - PoolBalanceIsZero = 'POOL_BALANCE_IS_ZERO', - InvalidOwner = 'INVALID_OWNER', - AmountExceedsBalanceOfPool = 'AMOUNT_EXCEEDS_BALANCE_OF_POOL', - OnlyCallableByStakingContract = 'ONLY_CALLABLE_BY_STAKING_CONTRACT', - InvalidMakerSignature = 'INVALID_MAKER_SIGNATURE', - InsufficientBalance = 'INSUFFICIENT_BALANCE', } export enum StatusCodes {