Skip to content
This repository was archived by the owner on Mar 18, 2025. It is now read-only.

Commit 6f59566

Browse files
authored
Merge pull request #2902 from w3f/optimize-check-candidate
optimize checkValidateIntention
2 parents c200468 + 1a90976 commit 6f59566

File tree

5 files changed

+17
-81
lines changed

5 files changed

+17
-81
lines changed

packages/common/src/constraints/CheckCandidates.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { logger } from "../index";
1+
import { ChainData, logger } from "../index";
22
import { allCandidates, Candidate, setLastValid, setValid } from "../db";
33
import { constraintsLabel, OTV } from "./constraints";
44
import {
@@ -22,6 +22,7 @@ import { percentage, timeRemaining } from "../utils/util";
2222
export const checkCandidate = async (
2323
constraints: OTV,
2424
candidate: Candidate,
25+
validators: string[],
2526
): Promise<boolean> => {
2627
try {
2728
let valid = false;
@@ -35,6 +36,7 @@ export const checkCandidate = async (
3536
constraints.config,
3637
constraints.chaindata,
3738
candidate,
39+
validators,
3840
);
3941
if (!validateValid) {
4042
logger.info(
@@ -166,14 +168,16 @@ export const checkCandidate = async (
166168

167169
export const checkAllCandidates = async (
168170
constraints: OTV,
171+
chaindata: ChainData,
169172
): Promise<boolean> => {
170173
try {
171174
const candidates = await allCandidates();
175+
const validators = await chaindata.getValidators();
172176
logger.info(`checking ${candidates.length} candidates`, constraintsLabel);
173177
for (const [index, candidate] of candidates.entries()) {
174178
const start = Date.now();
175179

176-
const isValid = await constraints.checkCandidate(candidate);
180+
const isValid = await constraints.checkCandidate(candidate, validators);
177181
const end = Date.now();
178182
const time = `(${end - start}ms)`;
179183
const remaining = timeRemaining(

packages/common/src/constraints/ValidityChecks.ts

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ export const checkValidateIntention = async (
4646
config: Config.ConfigSchema,
4747
chaindata: ChainData,
4848
candidate: Candidate,
49+
validators: string[],
4950
): Promise<boolean> => {
5051
try {
51-
const validators = await chaindata.getValidators();
5252
if (
5353
!validators?.length ||
5454
validators.includes(Util.formatAddress(candidate?.stash, config))
@@ -65,28 +65,6 @@ export const checkValidateIntention = async (
6565
}
6666
};
6767

68-
// checks the validate intention for all validators
69-
export const checkAllValidateIntentions = async (
70-
config: Config.ConfigSchema,
71-
chaindata: ChainData,
72-
candidates: Candidate[],
73-
): Promise<boolean> => {
74-
try {
75-
const validators = await chaindata.getValidators();
76-
for (const candidate of candidates) {
77-
if (!validators.includes(Util.formatAddress(candidate.stash, config))) {
78-
await setValidateIntentionValidity(candidate, false);
79-
} else {
80-
await setValidateIntentionValidity(candidate, true);
81-
}
82-
}
83-
return true;
84-
} catch (e) {
85-
logger.error(`Error checking validate intentions: ${e}`, constraintsLabel);
86-
throw new Error("could not make validity check");
87-
}
88-
};
89-
9068
// checks that the validator is on the latest client version
9169
export const checkLatestClientVersion = async (
9270
config: Config.ConfigSchema,

packages/common/src/constraints/constraints.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,15 @@ export class OTV implements Constraints {
100100

101101
// Checks the validity of all candidates
102102
async checkAllCandidates(): Promise<boolean> {
103-
return await checkAllCandidates(this);
103+
return await checkAllCandidates(this, this.chaindata);
104104
}
105105

106106
// Check the candidate and set any invalidity fields
107-
async checkCandidate(candidate: Candidate): Promise<boolean> {
108-
return await checkCandidate(this, candidate);
107+
async checkCandidate(
108+
candidate: Candidate,
109+
validators: string[],
110+
): Promise<boolean> {
111+
return await checkCandidate(this, candidate, validators);
109112
}
110113

111114
async scoreAllCandidates(): Promise<boolean> {

packages/common/src/scorekeeper/Round.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,11 @@ export const startRound = async (
7676

7777
// Get all Candidates and set validity
7878
const allCandidates = await queries.allCandidates();
79+
const validators = await chaindata.getValidators();
7980

8081
// Set Validity
8182
for (const [index, candidate] of allCandidates.entries()) {
82-
const isValid = await constraints.checkCandidate(candidate);
83+
const isValid = await constraints.checkCandidate(candidate, validators);
8384

8485
const progress = Math.floor((index / allCandidates.length) * 100);
8586
jobStatusEmitter.emit("jobProgress", {

packages/common/src/scorekeeper/jobs/specificJobs/ConstraintsJob.ts

Lines changed: 2 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export const validityJob = async (
3535
try {
3636
const { constraints } = metadata;
3737
const candidates = await allCandidates();
38+
const validators = await metadata.chaindata.getValidators();
3839
logger.info(`Checking ${candidates.length} candidates`, constraintsLabel);
3940

4041
// Calculate total number of candidates
@@ -43,7 +44,7 @@ export const validityJob = async (
4344
for (const [index, candidate] of candidates.entries()) {
4445
const start = Date.now();
4546

46-
const isValid = await constraints.checkCandidate(candidate);
47+
const isValid = await constraints.checkCandidate(candidate, validators);
4748
const end = Date.now();
4849
const time = `(${end - start}ms)`;
4950
const remaining = timeRemaining(index + 1, totalCandidates, end - start);
@@ -82,57 +83,6 @@ export const validityJobWithTiming = withExecutionTimeLogging(
8283
"Validity Job Done",
8384
);
8485

85-
export const candidateValidityJob = async (
86-
constraints: Constraints.OTV,
87-
candidateAddress: string,
88-
) => {
89-
try {
90-
const start = Date.now();
91-
92-
const candidate = await queries.getCandidateByStash(candidateAddress);
93-
if (candidate) {
94-
await constraints.checkCandidate(candidate);
95-
96-
const end = Date.now();
97-
const executionTime = (end - start) / 1000;
98-
99-
logger.info(
100-
`validity for ${candidate.name} Done. (${executionTime}s)`,
101-
constraintsLabel,
102-
);
103-
}
104-
} catch (e) {
105-
logger.error(`Error running validity job: ${e}`, constraintsLabel);
106-
}
107-
};
108-
109-
export const individualScoreJob = async (
110-
constraints: Constraints.OTV,
111-
candidateAddress: string,
112-
) => {
113-
try {
114-
const start = Date.now();
115-
const candidate = await queries.getCandidateByStash(candidateAddress);
116-
if (candidate) {
117-
let scoreMetadata = await queries.getLatestValidatorScoreMetadata();
118-
if (!scoreMetadata) {
119-
logger.warn(
120-
`no score metadata, cannot score candidates`,
121-
constraintsLabel,
122-
);
123-
await constraints.setScoreMetadata();
124-
scoreMetadata = await queries.getLatestValidatorScoreMetadata();
125-
}
126-
await constraints.scoreCandidate(candidate, scoreMetadata);
127-
128-
const end = Date.now();
129-
const executionTime = (end - start) / 1000;
130-
}
131-
} catch (e) {
132-
logger.error(`Error running individual score job: ${e}`, constraintsLabel);
133-
}
134-
};
135-
13686
export const scoreJob = async (
13787
metadata: JobRunnerMetadata,
13888
): Promise<boolean> => {

0 commit comments

Comments
 (0)