Some readability improvements and minor optimizations to staking finalization.
This commit is contained in:
@@ -87,7 +87,7 @@ blockchainTests.resets('Finalizer unit tests', env => {
|
||||
|
||||
interface UnfinalizedState {
|
||||
rewardsAvailable: Numberish;
|
||||
poolsToFinalize: Numberish;
|
||||
numPoolsToFinalize: Numberish;
|
||||
totalFeesCollected: Numberish;
|
||||
totalWeightedStake: Numberish;
|
||||
totalRewardsFinalized: Numberish;
|
||||
@@ -135,16 +135,16 @@ blockchainTests.resets('Finalizer unit tests', env => {
|
||||
|
||||
async function assertFinalizationLogsAndBalancesAsync(
|
||||
rewardsAvailable: Numberish,
|
||||
poolsToFinalize: ActivePoolOpts[],
|
||||
numPoolsToFinalize: ActivePoolOpts[],
|
||||
finalizationLogs: LogEntry[],
|
||||
): Promise<void> {
|
||||
const currentEpoch = await getCurrentEpochAsync();
|
||||
// Compute the expected rewards for each pool.
|
||||
const poolsWithStake = poolsToFinalize.filter(p => !new BigNumber(p.weightedStake).isZero());
|
||||
const poolsWithStake = numPoolsToFinalize.filter(p => !new BigNumber(p.weightedStake).isZero());
|
||||
const poolRewards = await calculatePoolRewardsAsync(rewardsAvailable, poolsWithStake);
|
||||
const totalRewards = BigNumber.sum(...poolRewards);
|
||||
const rewardsRemaining = new BigNumber(rewardsAvailable).minus(totalRewards);
|
||||
const [totalOperatorRewards, totalMembersRewards] = getTotalSplitRewards(poolsToFinalize, poolRewards);
|
||||
const [totalOperatorRewards, totalMembersRewards] = getTotalSplitRewards(numPoolsToFinalize, poolRewards);
|
||||
|
||||
// Assert the `RewardsPaid` logs.
|
||||
const rewardsPaidEvents = getRewardsPaidEvents(finalizationLogs);
|
||||
@@ -196,13 +196,13 @@ blockchainTests.resets('Finalizer unit tests', env => {
|
||||
|
||||
async function calculatePoolRewardsAsync(
|
||||
rewardsAvailable: Numberish,
|
||||
poolsToFinalize: ActivePoolOpts[],
|
||||
numPoolsToFinalize: ActivePoolOpts[],
|
||||
): Promise<BigNumber[]> {
|
||||
const totalFees = BigNumber.sum(...poolsToFinalize.map(p => p.feesCollected));
|
||||
const totalStake = BigNumber.sum(...poolsToFinalize.map(p => p.weightedStake));
|
||||
const poolRewards = _.times(poolsToFinalize.length, () => constants.ZERO_AMOUNT);
|
||||
for (const i of _.times(poolsToFinalize.length)) {
|
||||
const pool = poolsToFinalize[i];
|
||||
const totalFees = BigNumber.sum(...numPoolsToFinalize.map(p => p.feesCollected));
|
||||
const totalStake = BigNumber.sum(...numPoolsToFinalize.map(p => p.weightedStake));
|
||||
const poolRewards = _.times(numPoolsToFinalize.length, () => constants.ZERO_AMOUNT);
|
||||
for (const i of _.times(numPoolsToFinalize.length)) {
|
||||
const pool = numPoolsToFinalize[i];
|
||||
const feesCollected = new BigNumber(pool.feesCollected);
|
||||
if (feesCollected.isZero()) {
|
||||
continue;
|
||||
@@ -305,7 +305,7 @@ blockchainTests.resets('Finalizer unit tests', env => {
|
||||
const pool = await addActivePoolAsync();
|
||||
await testContract.endEpoch.awaitTransactionSuccessAsync();
|
||||
return assertUnfinalizedStateAsync({
|
||||
poolsToFinalize: 1,
|
||||
numPoolsToFinalize: 1,
|
||||
rewardsAvailable: INITIAL_BALANCE,
|
||||
totalFeesCollected: pool.feesCollected,
|
||||
totalWeightedStake: pool.weightedStake,
|
||||
@@ -326,22 +326,6 @@ blockchainTests.resets('Finalizer unit tests', env => {
|
||||
]);
|
||||
});
|
||||
|
||||
it("correctly clear an epoch's aggregated stats after it is finalized", async () => {
|
||||
const pool = await addActivePoolAsync();
|
||||
const epoch = await testContract.currentEpoch.callAsync();
|
||||
await testContract.endEpoch.awaitTransactionSuccessAsync();
|
||||
await testContract.finalizePool.awaitTransactionSuccessAsync(pool.poolId);
|
||||
await testContract.endEpoch.awaitTransactionSuccessAsync();
|
||||
const aggregatedStats = await testContract.aggregatedStatsByEpoch.callAsync(epoch);
|
||||
expect(aggregatedStats).to.be.deep.equal([
|
||||
new BigNumber(0),
|
||||
new BigNumber(0),
|
||||
new BigNumber(0),
|
||||
new BigNumber(0),
|
||||
new BigNumber(0),
|
||||
]);
|
||||
});
|
||||
|
||||
it('reverts if the prior epoch is unfinalized', async () => {
|
||||
await addActivePoolAsync();
|
||||
await testContract.endEpoch.awaitTransactionSuccessAsync();
|
||||
|
@@ -369,7 +369,7 @@ blockchainTests('Protocol Fees unit tests', env => {
|
||||
});
|
||||
|
||||
interface FinalizationState {
|
||||
poolsToFinalize: BigNumber;
|
||||
numPoolsToFinalize: BigNumber;
|
||||
totalFeesCollected: BigNumber;
|
||||
totalWeightedStake: BigNumber;
|
||||
}
|
||||
@@ -377,7 +377,7 @@ blockchainTests('Protocol Fees unit tests', env => {
|
||||
async function getFinalizationStateAsync(): Promise<FinalizationState> {
|
||||
const aggregatedStats = await testContract.getAggregatedStatsForCurrentEpoch.callAsync();
|
||||
return {
|
||||
poolsToFinalize: aggregatedStats.poolsToFinalize,
|
||||
numPoolsToFinalize: aggregatedStats.numPoolsToFinalize,
|
||||
totalFeesCollected: aggregatedStats.totalFeesCollected,
|
||||
totalWeightedStake: aggregatedStats.totalWeightedStake,
|
||||
};
|
||||
@@ -415,7 +415,7 @@ blockchainTests('Protocol Fees unit tests', env => {
|
||||
|
||||
it('no pools to finalize to start', async () => {
|
||||
const state = await getFinalizationStateAsync();
|
||||
expect(state.poolsToFinalize).to.bignumber.eq(0);
|
||||
expect(state.numPoolsToFinalize).to.bignumber.eq(0);
|
||||
expect(state.totalFeesCollected).to.bignumber.eq(0);
|
||||
expect(state.totalWeightedStake).to.bignumber.eq(0);
|
||||
});
|
||||
@@ -443,7 +443,7 @@ blockchainTests('Protocol Fees unit tests', env => {
|
||||
expect(actualPoolStats.membersStake).to.bignumber.eq(pool.membersStake);
|
||||
expect(actualPoolStats.weightedStake).to.bignumber.eq(expectedWeightedStake);
|
||||
const state = await getFinalizationStateAsync();
|
||||
expect(state.poolsToFinalize).to.bignumber.eq(1);
|
||||
expect(state.numPoolsToFinalize).to.bignumber.eq(1);
|
||||
expect(state.totalFeesCollected).to.bignumber.eq(fee);
|
||||
expect(state.totalWeightedStake).to.bignumber.eq(expectedWeightedStake);
|
||||
});
|
||||
@@ -464,7 +464,7 @@ blockchainTests('Protocol Fees unit tests', env => {
|
||||
expect(actualPoolStats.membersStake).to.bignumber.eq(pool.membersStake);
|
||||
expect(actualPoolStats.weightedStake).to.bignumber.eq(expectedWeightedStake);
|
||||
const state = await getFinalizationStateAsync();
|
||||
expect(state.poolsToFinalize).to.bignumber.eq(1);
|
||||
expect(state.numPoolsToFinalize).to.bignumber.eq(1);
|
||||
expect(state.totalFeesCollected).to.bignumber.eq(fees);
|
||||
expect(state.totalWeightedStake).to.bignumber.eq(expectedWeightedStake);
|
||||
});
|
||||
@@ -490,7 +490,7 @@ blockchainTests('Protocol Fees unit tests', env => {
|
||||
totalWeightedStake = totalWeightedStake.plus(expectedWeightedStake);
|
||||
}
|
||||
const state = await getFinalizationStateAsync();
|
||||
expect(state.poolsToFinalize).to.bignumber.eq(pools.length);
|
||||
expect(state.numPoolsToFinalize).to.bignumber.eq(pools.length);
|
||||
expect(state.totalFeesCollected).to.bignumber.eq(totalFees);
|
||||
expect(state.totalWeightedStake).to.bignumber.eq(totalWeightedStake);
|
||||
});
|
||||
|
Reference in New Issue
Block a user