Skip to content

Commit 3432ee3

Browse files
committed
Merge branch 'min-conditions-merge' into 'main'
Min conditions applications, few fixes See merge request flarenetwork/ftso/ftso-scaling!148
2 parents b284f7b + 697cb90 commit 3432ee3

30 files changed

+485
-281
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ calculations
1010
test-db
1111
exports-csv
1212
staking-data
13-
listed-data-providers
13+
listed-data-providers
14+
passes-data
15+
rewards-data

apps/ftso-reward-calculation-process/src/libs/calculator-utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ export async function calculationOfRewardCalculationDataForRange(
137137
);
138138
done = true;
139139
} catch (e) {
140-
// console.log(e);
140+
console.log(e);
141141
logger.error(
142142
`Error while calculating reward calculation data for voting rounds ${firstVotingRoundId}-${lastVotingRoundId} in reward epoch ${rewardEpochId}: ${e}`
143143
);

apps/ftso-reward-calculation-process/src/services/calculator.service.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import FakeTimers from "@sinonjs/fake-timers";
44
import { EntityManager } from "typeorm";
55
import { DataManagerForRewarding } from "../../../../libs/fsp-rewards/src/DataManagerForRewarding";
66
import { IndexerClientForRewarding } from "../../../../libs/fsp-rewards/src/IndexerClientForRewarding";
7-
import { RewardEpochManager } from "../../../../libs/ftso-core/src/RewardEpochManager";
7+
import { BURN_ADDRESS, FUTURE_VOTING_ROUNDS } from "../../../../libs/fsp-rewards/src/constants";
8+
import { calculateMinimalConditions, extractNewPasses, updateClaimsForMinimalConditions } from "../../../../libs/fsp-rewards/src/reward-calculation/minimal-conditions/minimal-conditions";
9+
import { writeDataProviderConditions, writePassesInfo } from "../../../../libs/fsp-rewards/src/reward-calculation/minimal-conditions/minimal-conditions-data";
810
import { initializeRewardEpochStorage } from "../../../../libs/fsp-rewards/src/reward-calculation/reward-calculation";
911
import { RewardClaim } from "../../../../libs/fsp-rewards/src/utils/RewardClaim";
10-
import { RewardEpochDuration } from "../../../../libs/ftso-core/src/utils/RewardEpochDuration";
1112
import { deserializeAggregatedClaimsForVotingRoundId } from "../../../../libs/fsp-rewards/src/utils/stat-info/aggregated-claims";
1213
import { serializeFinalRewardClaims } from "../../../../libs/fsp-rewards/src/utils/stat-info/final-reward-claims";
1314
import { getIncrementalCalculationsTempRewards, serializeIncrementalCalculationsTempRewards } from "../../../../libs/fsp-rewards/src/utils/stat-info/incremental-calculation-temp-rewards";
15+
import { getIncrementalCalculationsFeedSelections, serializeIncrementalCalculationsFeedSelections } from "../../../../libs/fsp-rewards/src/utils/stat-info/incremental-calculation-temp-selected-feeds";
1416
import { recordProgress } from "../../../../libs/fsp-rewards/src/utils/stat-info/progress";
1517
import {
1618
RewardCalculationStatus,
@@ -25,8 +27,11 @@ import {
2527
serializeRewardEpochInfo,
2628
} from "../../../../libs/fsp-rewards/src/utils/stat-info/reward-epoch-info";
2729
import { destroyStorage } from "../../../../libs/fsp-rewards/src/utils/stat-info/storage";
30+
import { RewardEpochManager } from "../../../../libs/ftso-core/src/RewardEpochManager";
31+
import { RewardEpochDuration } from "../../../../libs/ftso-core/src/utils/RewardEpochDuration";
2832
import { IncrementalCalculationState } from "../interfaces/IncrementalCalculationState";
2933
import { OptionalCommandOptions } from "../interfaces/OptionalCommandOptions";
34+
import { calculateAttestationTypeAppearances } from "../libs/attestation-type-appearances";
3035
import {
3136
calculationOfRewardCalculationDataForRange,
3237
latestRewardEpochStart,
@@ -43,11 +48,6 @@ import { fullRoundOfferCalculation, initializeTemplateOffers } from "../libs/off
4348
import { runRandomNumberFixing } from "../libs/random-number-fixing-utils";
4449
import { runCalculateRewardClaimsTopJob } from "../libs/reward-claims-calculation";
4550
import { runCalculateRewardCalculationTopJob } from "../libs/reward-data-calculation";
46-
import { getIncrementalCalculationsFeedSelections, serializeIncrementalCalculationsFeedSelections } from "../../../../libs/fsp-rewards/src/utils/stat-info/incremental-calculation-temp-selected-feeds";
47-
import { calculateAttestationTypeAppearances } from "../libs/attestation-type-appearances";
48-
import { calculateMinimalConditions } from "../../../../libs/fsp-rewards/src/reward-calculation/minimal-conditions/minimal-conditions";
49-
import { writeDataProviderConditions } from "../../../../libs/fsp-rewards/src/reward-calculation/minimal-conditions/minimal-conditions-data";
50-
import {BURN_ADDRESS, FUTURE_VOTING_ROUNDS} from "../../../../libs/fsp-rewards/src/constants";
5151

5252
if (process.env.FORCE_NOW) {
5353
const newNow = parseInt(process.env.FORCE_NOW) * 1000;
@@ -300,9 +300,14 @@ export class CalculatorService {
300300
if (options.rewardEpochId === undefined) {
301301
throw new Error("Reward epoch id is required for minimal conditions calculation");
302302
}
303-
const result = calculateMinimalConditions(options.rewardEpochId, false);
303+
const result = calculateMinimalConditions(options.rewardEpochId);
304304
writeDataProviderConditions(options.rewardEpochId, result);
305+
const passes = extractNewPasses(result);
306+
writePassesInfo(options.rewardEpochId, passes);
307+
// conditional
308+
updateClaimsForMinimalConditions(options.rewardEpochId, result);
305309
}
310+
306311
/**
307312
* Returns a list of all (merged) reward claims for the given reward epoch.
308313
* Calculation can be quite intensive.

libs/contracts/src/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export const FLARE_CONTRACTS: NetworkContractAddresses = {
6969
name: "FastUpdateIncentiveManager",
7070
address: "0xd648e8ACA486Ce876D641A0F53ED1F2E9eF4885D",
7171
},
72-
FdcHub: {name: "FdcHub", address: ""},
72+
FdcHub: {name: "FdcHub", address: "0xc25c749DC27Efb1864Cb3DADa8845B7687eB2d44"},
7373
};
7474

7575
export type networks = "local-test" | "from-env" | "coston2" | "coston" | "songbird" | "flare";

libs/fsp-rewards/src/DataManagerForRewarding.ts

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
import { ECDSASignature } from "../../ftso-core/src/fsp-utils/ECDSASignature";
2-
import { ProtocolMessageMerkleRoot } from "../../ftso-core/src/fsp-utils/ProtocolMessageMerkleRoot";
3-
import { RelayMessage } from "../../ftso-core/src/fsp-utils/RelayMessage";
4-
import { ISignaturePayload, SignaturePayload } from "../../ftso-core/src/fsp-utils/SignaturePayload";
1+
import { ContractMethodNames } from "../../contracts/src/definitions";
52
import { DataAvailabilityStatus, DataManager, DataMangerResponse } from "../../ftso-core/src/DataManager";
63
import {
74
BlockAssuranceResult,
@@ -10,30 +7,31 @@ import {
107
ParsedFinalizationData,
118
SubmissionData,
129
} from "../../ftso-core/src/IndexerClient";
13-
import { IndexerClientForRewarding } from "./IndexerClientForRewarding";
1410
import { RewardEpoch } from "../../ftso-core/src/RewardEpoch";
1511
import { RewardEpochManager } from "../../ftso-core/src/RewardEpochManager";
16-
import { ContractMethodNames } from "../../contracts/src/definitions";
1712
import {
18-
ADDITIONAL_REWARDED_FINALIZATION_WINDOWS,
1913
EPOCH_SETTINGS,
20-
FDC_PROTOCOL_ID,
2114
FTSO2_PROTOCOL_ID,
2215
} from "../../ftso-core/src/constants";
2316
import { DataForCalculations } from "../../ftso-core/src/data/DataForCalculations";
24-
import { bitVoteIndicesNum, extractFDCRewardData, uniqueRequestsIndices } from "./reward-calculation/fdc/fdc-utils";
17+
import { ECDSASignature } from "../../ftso-core/src/fsp-utils/ECDSASignature";
18+
import { ProtocolMessageMerkleRoot } from "../../ftso-core/src/fsp-utils/ProtocolMessageMerkleRoot";
19+
import { RelayMessage } from "../../ftso-core/src/fsp-utils/RelayMessage";
20+
import { ISignaturePayload, SignaturePayload } from "../../ftso-core/src/fsp-utils/SignaturePayload";
21+
import { SigningPolicy } from "../../ftso-core/src/fsp-utils/SigningPolicy";
2522
import { ILogger } from "../../ftso-core/src/utils/ILogger";
2623
import { errorString } from "../../ftso-core/src/utils/error";
2724
import { Address, MessageHash } from "../../ftso-core/src/voting-types";
28-
import { WRONG_SIGNATURE_INDICATOR_MESSAGE_HASH } from "./constants";
25+
import { IndexerClientForRewarding } from "./IndexerClientForRewarding";
26+
import { ADDITIONAL_REWARDED_FINALIZATION_WINDOWS, FDC_PROTOCOL_ID, WRONG_SIGNATURE_INDICATOR_MESSAGE_HASH } from "./constants";
2927
import {
3028
DataForRewardCalculation,
31-
FastUpdatesDataForVotingRound,
3229
FDCDataForVotingRound,
3330
FDCRewardData,
31+
FastUpdatesDataForVotingRound,
3432
PartialFDCDataForVotingRound,
3533
} from "./data-calculation-interfaces";
36-
import { SigningPolicy } from "../../ftso-core/src/fsp-utils/SigningPolicy";
34+
import { bitVoteIndicesNum, extractFDCRewardData, uniqueRequestsIndices } from "./reward-calculation/fdc/fdc-utils";
3735

3836
export interface SignAndFinalizeSubmissionData {
3937
signatures: SubmissionData[];

libs/fsp-rewards/src/constants.ts

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,74 @@
1-
import {networks} from "../../contracts/src/constants";
1+
import { networks } from "../../contracts/src/constants";
2+
3+
export const ZERO_BYTES32 = "0x0000000000000000000000000000000000000000000000000000000000000000";
4+
5+
// Protocol ids
6+
const ftso2FastUpdatesProtocolId = () => {
7+
const network = process.env.NETWORK as networks;
8+
switch (network) {
9+
case "coston":
10+
case "from-env":
11+
case "local-test":
12+
case "coston2":
13+
case "songbird":
14+
case "flare":
15+
return 255;
16+
default:
17+
// Ensure exhaustive checking
18+
// eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars
19+
((_: never): void => { })(network);
20+
}
21+
};
22+
23+
// Protocol id for FTSO2 fast updates
24+
export const FTSO2_FAST_UPDATES_PROTOCOL_ID = ftso2FastUpdatesProtocolId();
25+
26+
27+
const FDCProtocolId = () => {
28+
const network = process.env.NETWORK as networks;
29+
switch (network) {
30+
case "coston":
31+
case "from-env":
32+
case "local-test":
33+
case "coston2":
34+
case "songbird":
35+
case "flare":
36+
return 200;
37+
default:
38+
// Ensure exhaustive checking
39+
// eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars
40+
((_: never): void => { })(network);
41+
}
42+
};
43+
44+
// Protocol id for FDC
45+
export const FDC_PROTOCOL_ID = FDCProtocolId();
46+
47+
export const STAKING_PROTOCOL_ID = 0;
48+
49+
/**
50+
* The number of additional voting rounds for performing queries for signature and finalization data.
51+
* If value is 0, then for votingRoundId the original window is from the end of reveals to the end
52+
* of the voting epoch votingRoundId. If value is bigger, it extends to ends of the next epochs accordingly.
53+
*/
54+
const additionalRewardFinalizationWindows = () => {
55+
const network = process.env.NETWORK as networks;
56+
switch (network) {
57+
case "from-env":
58+
case "coston":
59+
case "coston2":
60+
case "songbird":
61+
case "flare":
62+
case "local-test":
63+
return 0;
64+
default:
65+
// Ensure exhaustive checking
66+
// eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars
67+
((_: never): void => { })(network);
68+
}
69+
};
70+
71+
export const ADDITIONAL_REWARDED_FINALIZATION_WINDOWS = additionalRewardFinalizationWindows();
272

373
const burnAddress = () => {
474
const network = process.env.NETWORK as networks;

libs/fsp-rewards/src/reward-calculation/fdc/fdc-utils.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import { ISignaturePayload } from "../../../../ftso-core/src/fsp-utils/SignaturePayload";
1+
import { AttestationRequest } from "../../../../contracts/src/events/AttestationRequest";
22
import { GenericSubmissionData, SubmissionData } from "../../../../ftso-core/src/IndexerClient";
33
import { RewardEpoch } from "../../../../ftso-core/src/RewardEpoch";
4-
import { FDC_PROTOCOL_ID } from "../../../../ftso-core/src/constants";
5-
import { AttestationRequest } from "../../../../contracts/src/events/AttestationRequest";
4+
import { ISignaturePayload } from "../../../../ftso-core/src/fsp-utils/SignaturePayload";
65
import { Address, MessageHash } from "../../../../ftso-core/src/voting-types";
7-
import {WRONG_SIGNATURE_INDICATOR_MESSAGE_HASH} from "../../constants";
6+
import { FDC_PROTOCOL_ID, WRONG_SIGNATURE_INDICATOR_MESSAGE_HASH } from "../../constants";
87
import {
98
FDCEligibleSigner,
109
FDCOffender,
@@ -22,7 +21,7 @@ export function uniqueRequestsIndices(attestationRequests: AttestationRequest[])
2221
for (let i = 0; i < attestationRequests.length; i++) {
2322
const request = attestationRequests[i];
2423
if (!encountered.get(request.data)) {
25-
encountered.set(request.data, i);
24+
encountered.set(request.data, result.length);
2625
result.push([i]);
2726
} else {
2827
result[encountered.get(request.data)].push(i);

libs/fsp-rewards/src/reward-calculation/fdc/reward-fdc-penalties.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { VoterWeights } from "../../../../ftso-core/src/RewardEpoch";
2-
import { FDC_PROTOCOL_ID } from "../../../../ftso-core/src/constants";
32
import { IPartialRewardOfferForRound } from "../../utils/PartialRewardOffer";
43
import { IPartialRewardClaim } from "../../utils/RewardClaim";
54
import { SDataForRewardCalculation } from "../../utils/stat-info/reward-calculation-data";
65
import { RewardEpochInfo } from "../../utils/stat-info/reward-epoch-info";
76
import { Address } from "../../../../ftso-core/src/voting-types";
87
import { RewardTypePrefix } from "../RewardTypePrefix";
98
import { generateSigningWeightBasedClaimsForVoter } from "../reward-signing-split";
9+
import { FDC_PROTOCOL_ID } from "../../constants";
1010

1111
/**
1212
* * Given a @param offer, @param penaltyFactor and @param votersWeights penalty claims for offenders.

libs/fsp-rewards/src/reward-calculation/fdc/reward-fdc-signing.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
import { EPOCH_SETTINGS, FDC_PROTOCOL_ID } from "../../../../ftso-core/src/constants";
1+
import { EPOCH_SETTINGS } from "../../../../ftso-core/src/constants";
2+
import { Address } from "../../../../ftso-core/src/voting-types";
3+
import { FDC_PROTOCOL_ID, FINALIZATION_BIPS, TOTAL_BIPS } from "../../constants";
4+
import { FDCEligibleSigner } from "../../data-calculation-interfaces";
25
import { IPartialRewardOfferForRound } from "../../utils/PartialRewardOffer";
36
import { ClaimType, IPartialRewardClaim } from "../../utils/RewardClaim";
47
import { SDataForRewardCalculation } from "../../utils/stat-info/reward-calculation-data";
58
import { RewardEpochInfo } from "../../utils/stat-info/reward-epoch-info";
6-
import { Address } from "../../../../ftso-core/src/voting-types";
79
import { RewardTypePrefix } from "../RewardTypePrefix";
810
import { SigningRewardClaimType } from "../reward-signing";
911
import { generateSigningWeightBasedClaimsForVoter } from "../reward-signing-split";
1012
import { isSignatureBeforeTimestamp, isSignatureInGracePeriod } from "../reward-utils";
11-
import {FINALIZATION_BIPS, TOTAL_BIPS} from "../../constants";
12-
import {FDCEligibleSigner} from "../../data-calculation-interfaces";
1313

1414
/**
1515
* A split of partial reward offer into three parts:

libs/fsp-rewards/src/reward-calculation/minimal-conditions/minimal-conditions-constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
export const TOTAL_PPM = 1000000n;
1313
export const FTSO_SCALING_AVAILABILITY_THRESHOLD_PPM = 800000n; // 80%
1414
export const FTSO_SCALING_CLOSENESS_THRESHOLD_PPM = 5000n; // 0.5%
15-
export const FU_THRESHOLD_PPM = 800000n; // 60%
15+
export const FU_THRESHOLD_PPM = 800000n; // 80%
1616
export const FU_CONSIDERATION_THRESHOLD_PPM = 2000n; // 0.2% of the weight
1717
export const STAKING_UPTIME_THRESHOLD_PPM = 800000n; // 80%
1818
export const STAKING_MIN_SELF_BOND_GWEI = 1000000000000000n; // 1M FLR

0 commit comments

Comments
 (0)