@aztec/slasher 3.0.0-nightly.20250905 → 4.0.0-nightly.20250907
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/factory/create_implementation.d.ts.map +1 -1
- package/dest/factory/create_implementation.js +2 -26
- package/dest/factory/get_settings.d.ts +4 -0
- package/dest/factory/get_settings.d.ts.map +1 -0
- package/dest/factory/get_settings.js +36 -0
- package/dest/factory/index.d.ts +1 -0
- package/dest/factory/index.d.ts.map +1 -1
- package/dest/factory/index.js +1 -0
- package/dest/tally_slasher_client.d.ts.map +1 -1
- package/dest/tally_slasher_client.js +8 -1
- package/package.json +9 -9
- package/src/factory/create_implementation.ts +3 -40
- package/src/factory/get_settings.ts +58 -0
- package/src/factory/index.ts +1 -0
- package/src/tally_slasher_client.ts +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create_implementation.d.ts","sourceRoot":"","sources":["../../src/factory/create_implementation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAEL,cAAc,EAEf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGrE,OAAO,EAAE,mBAAmB,EAA8B,MAAM,6BAA6B,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"create_implementation.d.ts","sourceRoot":"","sources":["../../src/factory/create_implementation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAEL,cAAc,EAEf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGrE,OAAO,EAAE,mBAAmB,EAA8B,MAAM,6BAA6B,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,wHAAwH;AACxH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,aAAa,GAAG,eAAe,GAAG;IAAE,oBAAoB,EAAE,MAAM,CAAA;CAAE,EAC1E,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,UAAU,EACpB,mBAAmB,EAAE,UAAU,GAAG,SAAS,EAC3C,QAAQ,EAAE,OAAO,EAAE,EACnB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,gBAAgB,EACzB,MAAM,yCAA0B,yEAcjC"}
|
|
@@ -6,6 +6,7 @@ import { NullSlasherClient } from '../null_slasher_client.js';
|
|
|
6
6
|
import { SlasherOffensesStore } from '../stores/offenses_store.js';
|
|
7
7
|
import { SlasherPayloadsStore } from '../stores/payloads_store.js';
|
|
8
8
|
import { TallySlasherClient } from '../tally_slasher_client.js';
|
|
9
|
+
import { getTallySlasherSettings } from './get_settings.js';
|
|
9
10
|
/** Creates a slasher client implementation (either tally or empire) based on the slasher proposer type in the rollup */ export async function createSlasherImplementation(config, rollup, l1Client, slashFactoryAddress, watchers, epochCache, dateProvider, kvStore, logger = createLogger('slasher')) {
|
|
10
11
|
const proposer = await rollup.getSlashingProposer();
|
|
11
12
|
if (!proposer) {
|
|
@@ -61,32 +62,7 @@ async function createTallySlasher(config, rollup, slashingProposer, watchers, da
|
|
|
61
62
|
if (slashingProposer.type !== 'tally') {
|
|
62
63
|
throw new Error('Slashing proposer contract is not of type tally');
|
|
63
64
|
}
|
|
64
|
-
const
|
|
65
|
-
slashingProposer.getExecutionDelayInRounds(),
|
|
66
|
-
slashingProposer.getRoundSize(),
|
|
67
|
-
slashingProposer.getRoundSizeInEpochs(),
|
|
68
|
-
slashingProposer.getLifetimeInRounds(),
|
|
69
|
-
slashingProposer.getSlashOffsetInRounds(),
|
|
70
|
-
slashingProposer.getSlashingAmounts(),
|
|
71
|
-
slashingProposer.getQuorumSize(),
|
|
72
|
-
rollup.getEpochDuration(),
|
|
73
|
-
rollup.getL1GenesisTime(),
|
|
74
|
-
rollup.getSlotDuration(),
|
|
75
|
-
rollup.getTargetCommitteeSize()
|
|
76
|
-
]);
|
|
77
|
-
const settings = {
|
|
78
|
-
slashingExecutionDelayInRounds: Number(slashingExecutionDelayInRounds),
|
|
79
|
-
slashingRoundSize: Number(slashingRoundSize),
|
|
80
|
-
slashingRoundSizeInEpochs: Number(slashingRoundSizeInEpochs),
|
|
81
|
-
slashingLifetimeInRounds: Number(slashingLifetimeInRounds),
|
|
82
|
-
slashingQuorumSize: Number(slashingQuorumSize),
|
|
83
|
-
epochDuration: Number(epochDuration),
|
|
84
|
-
l1GenesisTime: l1GenesisTime,
|
|
85
|
-
slotDuration: Number(slotDuration),
|
|
86
|
-
slashingOffsetInRounds: Number(slashingOffsetInRounds),
|
|
87
|
-
slashingAmounts,
|
|
88
|
-
targetCommitteeSize: Number(targetCommitteeSize)
|
|
89
|
-
};
|
|
65
|
+
const settings = await getTallySlasherSettings(rollup, slashingProposer);
|
|
90
66
|
const offensesStore = new SlasherOffensesStore(kvStore, {
|
|
91
67
|
...settings,
|
|
92
68
|
slashOffenseExpirationRounds: config.slashOffenseExpirationRounds
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RollupContract, TallySlashingProposerContract } from '@aztec/ethereum';
|
|
2
|
+
import type { TallySlasherSettings } from '../tally_slasher_client.js';
|
|
3
|
+
export declare function getTallySlasherSettings(rollup: RollupContract, slashingProposer?: TallySlashingProposerContract): Promise<TallySlasherSettings>;
|
|
4
|
+
//# sourceMappingURL=get_settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_settings.d.ts","sourceRoot":"","sources":["../../src/factory/get_settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAErF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,cAAc,EACtB,gBAAgB,CAAC,EAAE,6BAA6B,GAC/C,OAAO,CAAC,oBAAoB,CAAC,CAkD/B"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export async function getTallySlasherSettings(rollup, slashingProposer) {
|
|
2
|
+
if (!slashingProposer) {
|
|
3
|
+
const rollupSlashingProposer = await rollup.getSlashingProposer();
|
|
4
|
+
if (!rollupSlashingProposer || rollupSlashingProposer.type !== 'tally') {
|
|
5
|
+
throw new Error('Rollup slashing proposer is not of type tally');
|
|
6
|
+
}
|
|
7
|
+
slashingProposer = rollupSlashingProposer;
|
|
8
|
+
}
|
|
9
|
+
const [slashingExecutionDelayInRounds, slashingRoundSize, slashingRoundSizeInEpochs, slashingLifetimeInRounds, slashingOffsetInRounds, slashingAmounts, slashingQuorumSize, epochDuration, l1GenesisTime, slotDuration, targetCommitteeSize] = await Promise.all([
|
|
10
|
+
slashingProposer.getExecutionDelayInRounds(),
|
|
11
|
+
slashingProposer.getRoundSize(),
|
|
12
|
+
slashingProposer.getRoundSizeInEpochs(),
|
|
13
|
+
slashingProposer.getLifetimeInRounds(),
|
|
14
|
+
slashingProposer.getSlashOffsetInRounds(),
|
|
15
|
+
slashingProposer.getSlashingAmounts(),
|
|
16
|
+
slashingProposer.getQuorumSize(),
|
|
17
|
+
rollup.getEpochDuration(),
|
|
18
|
+
rollup.getL1GenesisTime(),
|
|
19
|
+
rollup.getSlotDuration(),
|
|
20
|
+
rollup.getTargetCommitteeSize()
|
|
21
|
+
]);
|
|
22
|
+
const settings = {
|
|
23
|
+
slashingExecutionDelayInRounds: Number(slashingExecutionDelayInRounds),
|
|
24
|
+
slashingRoundSize: Number(slashingRoundSize),
|
|
25
|
+
slashingRoundSizeInEpochs: Number(slashingRoundSizeInEpochs),
|
|
26
|
+
slashingLifetimeInRounds: Number(slashingLifetimeInRounds),
|
|
27
|
+
slashingQuorumSize: Number(slashingQuorumSize),
|
|
28
|
+
epochDuration: Number(epochDuration),
|
|
29
|
+
l1GenesisTime: l1GenesisTime,
|
|
30
|
+
slotDuration: Number(slotDuration),
|
|
31
|
+
slashingOffsetInRounds: Number(slashingOffsetInRounds),
|
|
32
|
+
slashingAmounts,
|
|
33
|
+
targetCommitteeSize: Number(targetCommitteeSize)
|
|
34
|
+
};
|
|
35
|
+
return settings;
|
|
36
|
+
}
|
package/dest/factory/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/factory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/factory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dest/factory/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tally_slasher_client.d.ts","sourceRoot":"","sources":["../src/tally_slasher_client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tally_slasher_client.d.ts","sourceRoot":"","sources":["../src/tally_slasher_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -125,19 +125,26 @@ import { SlashRoundMonitor } from './slash_round_monitor.js';
|
|
|
125
125
|
if (executableRound < 0n) {
|
|
126
126
|
return undefined;
|
|
127
127
|
}
|
|
128
|
-
|
|
128
|
+
let logData = {
|
|
129
129
|
currentRound,
|
|
130
130
|
executableRound,
|
|
131
131
|
slotNumber
|
|
132
132
|
};
|
|
133
133
|
try {
|
|
134
134
|
const roundInfo = await this.tallySlashingProposer.getRound(executableRound);
|
|
135
|
+
logData = {
|
|
136
|
+
...logData,
|
|
137
|
+
roundInfo
|
|
138
|
+
};
|
|
135
139
|
if (roundInfo.isExecuted) {
|
|
136
140
|
this.log.verbose(`Round ${executableRound} has already been executed`, logData);
|
|
137
141
|
return undefined;
|
|
138
142
|
} else if (!roundInfo.readyToExecute) {
|
|
139
143
|
this.log.verbose(`Round ${executableRound} is not ready to execute yet`, logData);
|
|
140
144
|
return undefined;
|
|
145
|
+
} else if (roundInfo.voteCount === 0n) {
|
|
146
|
+
this.log.debug(`Round ${executableRound} received no votes`, logData);
|
|
147
|
+
return undefined;
|
|
141
148
|
} else if (roundInfo.voteCount < this.settings.slashingQuorumSize) {
|
|
142
149
|
this.log.verbose(`Round ${executableRound} does not have enough votes to execute`, logData);
|
|
143
150
|
return undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/slasher",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0-nightly.20250907",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -54,20 +54,20 @@
|
|
|
54
54
|
]
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@aztec/epoch-cache": "
|
|
58
|
-
"@aztec/ethereum": "
|
|
59
|
-
"@aztec/foundation": "
|
|
60
|
-
"@aztec/kv-store": "
|
|
61
|
-
"@aztec/l1-artifacts": "
|
|
62
|
-
"@aztec/stdlib": "
|
|
63
|
-
"@aztec/telemetry-client": "
|
|
57
|
+
"@aztec/epoch-cache": "4.0.0-nightly.20250907",
|
|
58
|
+
"@aztec/ethereum": "4.0.0-nightly.20250907",
|
|
59
|
+
"@aztec/foundation": "4.0.0-nightly.20250907",
|
|
60
|
+
"@aztec/kv-store": "4.0.0-nightly.20250907",
|
|
61
|
+
"@aztec/l1-artifacts": "4.0.0-nightly.20250907",
|
|
62
|
+
"@aztec/stdlib": "4.0.0-nightly.20250907",
|
|
63
|
+
"@aztec/telemetry-client": "4.0.0-nightly.20250907",
|
|
64
64
|
"source-map-support": "^0.5.21",
|
|
65
65
|
"tslib": "^2.4.0",
|
|
66
66
|
"viem": "2.23.7",
|
|
67
67
|
"zod": "^3.23.8"
|
|
68
68
|
},
|
|
69
69
|
"devDependencies": {
|
|
70
|
-
"@aztec/aztec.js": "
|
|
70
|
+
"@aztec/aztec.js": "4.0.0-nightly.20250907",
|
|
71
71
|
"@jest/globals": "^30.0.0",
|
|
72
72
|
"@types/jest": "^30.0.0",
|
|
73
73
|
"@types/node": "^22.15.17",
|
|
@@ -17,8 +17,9 @@ import { EmpireSlasherClient, type EmpireSlasherSettings } from '../empire_slash
|
|
|
17
17
|
import { NullSlasherClient } from '../null_slasher_client.js';
|
|
18
18
|
import { SlasherOffensesStore } from '../stores/offenses_store.js';
|
|
19
19
|
import { SlasherPayloadsStore } from '../stores/payloads_store.js';
|
|
20
|
-
import { TallySlasherClient
|
|
20
|
+
import { TallySlasherClient } from '../tally_slasher_client.js';
|
|
21
21
|
import type { Watcher } from '../watcher.js';
|
|
22
|
+
import { getTallySlasherSettings } from './get_settings.js';
|
|
22
23
|
|
|
23
24
|
/** Creates a slasher client implementation (either tally or empire) based on the slasher proposer type in the rollup */
|
|
24
25
|
export async function createSlasherImplementation(
|
|
@@ -132,45 +133,7 @@ async function createTallySlasher(
|
|
|
132
133
|
throw new Error('Slashing proposer contract is not of type tally');
|
|
133
134
|
}
|
|
134
135
|
|
|
135
|
-
const
|
|
136
|
-
slashingExecutionDelayInRounds,
|
|
137
|
-
slashingRoundSize,
|
|
138
|
-
slashingRoundSizeInEpochs,
|
|
139
|
-
slashingLifetimeInRounds,
|
|
140
|
-
slashingOffsetInRounds,
|
|
141
|
-
slashingAmounts,
|
|
142
|
-
slashingQuorumSize,
|
|
143
|
-
epochDuration,
|
|
144
|
-
l1GenesisTime,
|
|
145
|
-
slotDuration,
|
|
146
|
-
targetCommitteeSize,
|
|
147
|
-
] = await Promise.all([
|
|
148
|
-
slashingProposer.getExecutionDelayInRounds(),
|
|
149
|
-
slashingProposer.getRoundSize(),
|
|
150
|
-
slashingProposer.getRoundSizeInEpochs(),
|
|
151
|
-
slashingProposer.getLifetimeInRounds(),
|
|
152
|
-
slashingProposer.getSlashOffsetInRounds(),
|
|
153
|
-
slashingProposer.getSlashingAmounts(),
|
|
154
|
-
slashingProposer.getQuorumSize(),
|
|
155
|
-
rollup.getEpochDuration(),
|
|
156
|
-
rollup.getL1GenesisTime(),
|
|
157
|
-
rollup.getSlotDuration(),
|
|
158
|
-
rollup.getTargetCommitteeSize(),
|
|
159
|
-
]);
|
|
160
|
-
|
|
161
|
-
const settings: TallySlasherSettings = {
|
|
162
|
-
slashingExecutionDelayInRounds: Number(slashingExecutionDelayInRounds),
|
|
163
|
-
slashingRoundSize: Number(slashingRoundSize),
|
|
164
|
-
slashingRoundSizeInEpochs: Number(slashingRoundSizeInEpochs),
|
|
165
|
-
slashingLifetimeInRounds: Number(slashingLifetimeInRounds),
|
|
166
|
-
slashingQuorumSize: Number(slashingQuorumSize),
|
|
167
|
-
epochDuration: Number(epochDuration),
|
|
168
|
-
l1GenesisTime: l1GenesisTime,
|
|
169
|
-
slotDuration: Number(slotDuration),
|
|
170
|
-
slashingOffsetInRounds: Number(slashingOffsetInRounds),
|
|
171
|
-
slashingAmounts,
|
|
172
|
-
targetCommitteeSize: Number(targetCommitteeSize),
|
|
173
|
-
};
|
|
136
|
+
const settings = await getTallySlasherSettings(rollup, slashingProposer);
|
|
174
137
|
|
|
175
138
|
const offensesStore = new SlasherOffensesStore(kvStore, {
|
|
176
139
|
...settings,
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { RollupContract, TallySlashingProposerContract } from '@aztec/ethereum';
|
|
2
|
+
|
|
3
|
+
import type { TallySlasherSettings } from '../tally_slasher_client.js';
|
|
4
|
+
|
|
5
|
+
export async function getTallySlasherSettings(
|
|
6
|
+
rollup: RollupContract,
|
|
7
|
+
slashingProposer?: TallySlashingProposerContract,
|
|
8
|
+
): Promise<TallySlasherSettings> {
|
|
9
|
+
if (!slashingProposer) {
|
|
10
|
+
const rollupSlashingProposer = await rollup.getSlashingProposer();
|
|
11
|
+
if (!rollupSlashingProposer || rollupSlashingProposer.type !== 'tally') {
|
|
12
|
+
throw new Error('Rollup slashing proposer is not of type tally');
|
|
13
|
+
}
|
|
14
|
+
slashingProposer = rollupSlashingProposer;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const [
|
|
18
|
+
slashingExecutionDelayInRounds,
|
|
19
|
+
slashingRoundSize,
|
|
20
|
+
slashingRoundSizeInEpochs,
|
|
21
|
+
slashingLifetimeInRounds,
|
|
22
|
+
slashingOffsetInRounds,
|
|
23
|
+
slashingAmounts,
|
|
24
|
+
slashingQuorumSize,
|
|
25
|
+
epochDuration,
|
|
26
|
+
l1GenesisTime,
|
|
27
|
+
slotDuration,
|
|
28
|
+
targetCommitteeSize,
|
|
29
|
+
] = await Promise.all([
|
|
30
|
+
slashingProposer.getExecutionDelayInRounds(),
|
|
31
|
+
slashingProposer.getRoundSize(),
|
|
32
|
+
slashingProposer.getRoundSizeInEpochs(),
|
|
33
|
+
slashingProposer.getLifetimeInRounds(),
|
|
34
|
+
slashingProposer.getSlashOffsetInRounds(),
|
|
35
|
+
slashingProposer.getSlashingAmounts(),
|
|
36
|
+
slashingProposer.getQuorumSize(),
|
|
37
|
+
rollup.getEpochDuration(),
|
|
38
|
+
rollup.getL1GenesisTime(),
|
|
39
|
+
rollup.getSlotDuration(),
|
|
40
|
+
rollup.getTargetCommitteeSize(),
|
|
41
|
+
]);
|
|
42
|
+
|
|
43
|
+
const settings: TallySlasherSettings = {
|
|
44
|
+
slashingExecutionDelayInRounds: Number(slashingExecutionDelayInRounds),
|
|
45
|
+
slashingRoundSize: Number(slashingRoundSize),
|
|
46
|
+
slashingRoundSizeInEpochs: Number(slashingRoundSizeInEpochs),
|
|
47
|
+
slashingLifetimeInRounds: Number(slashingLifetimeInRounds),
|
|
48
|
+
slashingQuorumSize: Number(slashingQuorumSize),
|
|
49
|
+
epochDuration: Number(epochDuration),
|
|
50
|
+
l1GenesisTime: l1GenesisTime,
|
|
51
|
+
slotDuration: Number(slotDuration),
|
|
52
|
+
slashingOffsetInRounds: Number(slashingOffsetInRounds),
|
|
53
|
+
slashingAmounts,
|
|
54
|
+
targetCommitteeSize: Number(targetCommitteeSize),
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
return settings;
|
|
58
|
+
}
|
package/src/factory/index.ts
CHANGED
|
@@ -185,15 +185,20 @@ export class TallySlasherClient implements ProposerSlashActionProvider, SlasherC
|
|
|
185
185
|
return undefined;
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
-
|
|
188
|
+
let logData: Record<string, unknown> = { currentRound, executableRound, slotNumber };
|
|
189
|
+
|
|
189
190
|
try {
|
|
190
191
|
const roundInfo = await this.tallySlashingProposer.getRound(executableRound);
|
|
192
|
+
logData = { ...logData, roundInfo };
|
|
191
193
|
if (roundInfo.isExecuted) {
|
|
192
194
|
this.log.verbose(`Round ${executableRound} has already been executed`, logData);
|
|
193
195
|
return undefined;
|
|
194
196
|
} else if (!roundInfo.readyToExecute) {
|
|
195
197
|
this.log.verbose(`Round ${executableRound} is not ready to execute yet`, logData);
|
|
196
198
|
return undefined;
|
|
199
|
+
} else if (roundInfo.voteCount === 0n) {
|
|
200
|
+
this.log.debug(`Round ${executableRound} received no votes`, logData);
|
|
201
|
+
return undefined;
|
|
197
202
|
} else if (roundInfo.voteCount < this.settings.slashingQuorumSize) {
|
|
198
203
|
this.log.verbose(`Round ${executableRound} does not have enough votes to execute`, logData);
|
|
199
204
|
return undefined;
|