Skip to content

Conversation

@spypsy
Copy link
Member

@spypsy spypsy commented Dec 17, 2025

Fixes A-354

Implements ExtendedValidatorKeyStore utilizing ValidatorHASigner.
Updated interfaces to return null when the signature isn't acquired & updated handling of signing for null results.

Also some cleanup on previous HA work like consolidating config

Fixes [A-352](https://linear.app/aztec-labs/issue/A-352/add-postgresql-integration-for-recording-signed-duties) [A-353](https://linear.app/aztec-labs/issue/A-353/implement-core-slash-protection-logic)

Introduces High-Availability validator signer. The signer uses a Postgres DB that will be used by multiple sequencer nodes, running with the same set of validator keys, in order to ensure that only one payload per duty is signed.
Base automatically changed from spy/ha to next January 8, 2026 10:35
return undefined;
}
if (err instanceof SlashingProtectionError) {
this.log.warn(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we are defining this as normal, it shouldn't be a warning should it? This will scare people.

return undefined;
}
if (err instanceof SlashingProtectionError) {
this.log.warn(`Attestations signature for slot ${this.slot} blocked by slashing protection`, {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here

? {
slot: proposal.slotNumber,
blockNumber,
blockIndexWithinCheckpoint: -1, // -1 indicates not applicable (attestation, not a block proposal)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm wondering if this should be optional rather than set to -1 whenevre it's not a block proposal being signed.

Copy link
Member Author

@spypsy spypsy Jan 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah would actually make sense to make it optional in SigningContext and just use -1 at the bottom DB layer

this.log.info(`Assembling checkpoint proposal for slot ${header.slotNumber}`);
return this.createBlockProposal(0 as BlockNumber, header, archive, txs, proposerAddress, options);
// Derive checkpoint number from the header's slot
const checkpointNumber = header.slotNumber as unknown as CheckpointNumber;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't right. Slot number !== Checkpoint number.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nope, missed this one. fixing

public readonly slot: bigint,
public readonly slot: SlotNumber,
public readonly dutyType: DutyType,
public readonly blockIndexWithinCheckpoint: number,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm wondering if we should make a new branded type.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

might need @spalladino input on this, I know he has more work on checkpoints in progress

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a TODO for that, heh

@AztecBot
Copy link
Collaborator

AztecBot commented Jan 9, 2026

Flakey Tests

🤖 says: This CI run detected 1 tests that failed, but were tolerated due to a .test_patterns.yml entry.

\033FLAKED\033 (\0338;;http://ci.aztec-labs.com/4708706d5a1751c6�4708706d5a1751c68;;�\033):  yarn-project/end-to-end/scripts/run_test.sh simple src/e2e_p2p/multiple_validators_sentinel.parallel.test.ts "collects attestations for validators in proposer node when block is not published" (110s) (code: 1) group:e2e-p2p-epoch-flakes (\033spypsy\033: refactor multi-sign HA handling)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants