69 lines
3.0 KiB
TypeScript
69 lines
3.0 KiB
TypeScript
import { constants, StakingPoolById, StakingRevertErrors } from '@0x/contracts-staking';
|
|
import { expect } from '@0x/contracts-test-utils';
|
|
import { TxData } from 'ethereum-types';
|
|
|
|
import { DeploymentManager } from '../deployment_manager';
|
|
|
|
import { FunctionAssertion, FunctionResult } from './function_assertion';
|
|
|
|
/**
|
|
* Returns a FunctionAssertion for `decreaseStakingPoolOperatorShare` which assumes valid input is
|
|
* provided. The FunctionAssertion checks that the operator share actually gets updated.
|
|
*/
|
|
export function validDecreaseStakingPoolOperatorShareAssertion(
|
|
deployment: DeploymentManager,
|
|
pools: StakingPoolById,
|
|
): FunctionAssertion<[string, number], void, void> {
|
|
const { stakingWrapper } = deployment.staking;
|
|
|
|
return new FunctionAssertion<[string, number], void, void>(stakingWrapper, 'decreaseStakingPoolOperatorShare', {
|
|
after: async (_beforeInfo: void, result: FunctionResult, args: [string, number], _txData: Partial<TxData>) => {
|
|
// Ensure that the tx succeeded.
|
|
expect(result.success, `Error: ${result.data}`).to.be.true();
|
|
|
|
const [poolId, expectedOperatorShare] = args;
|
|
|
|
// Checks that the on-chain pool's operator share has been updated.
|
|
const { operatorShare } = await stakingWrapper.getStakingPool(poolId).callAsync();
|
|
expect(operatorShare).to.bignumber.equal(expectedOperatorShare);
|
|
|
|
// Updates the pool in local state.
|
|
pools[poolId].operatorShare = operatorShare;
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Returns a FunctionAssertion for `decreaseStakingPoolOperatorShare` which assumes the given
|
|
* operator share is larger than the current operator share for the pool. The FunctionAssertion
|
|
* checks that the transaction reverts with the correct error in this scenario.
|
|
*/
|
|
export function invalidDecreaseStakingPoolOperatorShareAssertion(
|
|
deployment: DeploymentManager,
|
|
): FunctionAssertion<[string, number], void, void> {
|
|
const { stakingWrapper } = deployment.staking;
|
|
|
|
return new FunctionAssertion<[string, number], void, void>(stakingWrapper, 'decreaseStakingPoolOperatorShare', {
|
|
after: async (_beforeInfo: void, result: FunctionResult, args: [string, number], _txData: Partial<TxData>) => {
|
|
// Ensure that the tx reverted.
|
|
expect(result.success).to.be.false();
|
|
|
|
// Check revert error
|
|
const [poolId, operatorShare] = args;
|
|
const expectedError =
|
|
operatorShare > constants.PPM
|
|
? new StakingRevertErrors.OperatorShareError(
|
|
StakingRevertErrors.OperatorShareErrorCodes.OperatorShareTooLarge,
|
|
poolId,
|
|
operatorShare,
|
|
)
|
|
: new StakingRevertErrors.OperatorShareError(
|
|
StakingRevertErrors.OperatorShareErrorCodes.CanOnlyDecreaseOperatorShare,
|
|
poolId,
|
|
operatorShare,
|
|
);
|
|
expect(result.data).to.equal(expectedError);
|
|
},
|
|
});
|
|
}
|