add test for weth protocol fees
This commit is contained in:
		@@ -20,12 +20,14 @@ contract TestFramework {
 | 
			
		||||
 | 
			
		||||
    function emptyRevert()
 | 
			
		||||
        external
 | 
			
		||||
        pure
 | 
			
		||||
    {
 | 
			
		||||
        revert();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function stringRevert(string calldata message)
 | 
			
		||||
        external
 | 
			
		||||
        pure
 | 
			
		||||
    {
 | 
			
		||||
        revert(message);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -327,4 +327,46 @@ blockchainTests.resets('fillOrder integration tests', env => {
 | 
			
		||||
        const poolStats = await deployment.staking.stakingWrapper.getStakingPoolStatsThisEpoch.callAsync(poolId);
 | 
			
		||||
        expect(poolStats.feesCollected).to.bignumber.equal(DeploymentManager.protocolFee);
 | 
			
		||||
    });
 | 
			
		||||
    it('should collect WETH fees and pay out rewards', async () => {
 | 
			
		||||
        // Operator and delegator each stake some ZRX; wait an epoch so that the stake is active.
 | 
			
		||||
        await operator.stakeAsync(toBaseUnitAmount(100), poolId);
 | 
			
		||||
        await delegator.stakeAsync(toBaseUnitAmount(50), poolId);
 | 
			
		||||
        await delegator.endEpochAsync();
 | 
			
		||||
 | 
			
		||||
        // Fetch the current balances
 | 
			
		||||
        await balanceStore.updateBalancesAsync();
 | 
			
		||||
 | 
			
		||||
        // Create and fill the order. One order's worth of protocol fees are now available as rewards.
 | 
			
		||||
        const order = await maker.signOrderAsync();
 | 
			
		||||
        const receipt = await taker.fillOrderAsync(order, order.takerAssetAmount, { value: constants.ZERO_AMOUNT });
 | 
			
		||||
        const rewardsAvailable = DeploymentManager.protocolFee;
 | 
			
		||||
        const expectedBalances = simulateFill(order, receipt, constants.ZERO_AMOUNT);
 | 
			
		||||
 | 
			
		||||
        // End the epoch. This should wrap the staking proxy's ETH balance.
 | 
			
		||||
        const endEpochReceipt = await delegator.endEpochAsync();
 | 
			
		||||
 | 
			
		||||
        // Check balances
 | 
			
		||||
        expectedBalances.burnGas(delegator.address, DeploymentManager.gasPrice.times(endEpochReceipt.gasUsed));
 | 
			
		||||
        await balanceStore.updateBalancesAsync();
 | 
			
		||||
        balanceStore.assertEquals(expectedBalances);
 | 
			
		||||
 | 
			
		||||
        // The rewards are split between the operator and delegator based on the pool's operatorShare
 | 
			
		||||
        const operatorReward = rewardsAvailable
 | 
			
		||||
            .times(operator.operatorShares[poolId])
 | 
			
		||||
            .dividedToIntegerBy(constants.PPM_DENOMINATOR);
 | 
			
		||||
 | 
			
		||||
        // Finalize the pool. This should automatically pay the operator in WETH.
 | 
			
		||||
        const [finalizePoolReceipt] = await delegator.finalizePoolsAsync([poolId]);
 | 
			
		||||
 | 
			
		||||
        // Check balances
 | 
			
		||||
        expectedBalances.transferAsset(
 | 
			
		||||
            deployment.staking.stakingProxy.address,
 | 
			
		||||
            operator.address,
 | 
			
		||||
            operatorReward,
 | 
			
		||||
            assetDataUtils.encodeERC20AssetData(deployment.tokens.weth.address),
 | 
			
		||||
        );
 | 
			
		||||
        expectedBalances.burnGas(delegator.address, DeploymentManager.gasPrice.times(finalizePoolReceipt.gasUsed));
 | 
			
		||||
        await balanceStore.updateBalancesAsync();
 | 
			
		||||
        balanceStore.assertEquals(expectedBalances);
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -362,11 +362,7 @@ export class DeploymentManager {
 | 
			
		||||
            stakingLogic.address,
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        const stakingWrapper = new TestStakingContract(
 | 
			
		||||
            stakingProxy.address,
 | 
			
		||||
            environment.provider,
 | 
			
		||||
            txDefaults,
 | 
			
		||||
        );
 | 
			
		||||
        const stakingWrapper = new TestStakingContract(stakingProxy.address, environment.provider, txDefaults);
 | 
			
		||||
 | 
			
		||||
        // Add the zrx vault and the weth contract to the staking proxy.
 | 
			
		||||
        await stakingWrapper.setWethContract.awaitTransactionSuccessAsync(tokens.weth.address, { from: owner });
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user