@aztec/validator-client 0.0.1-commit.d3ec352c → 0.0.1-commit.fcb71a6
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/block_proposal_handler.d.ts +2 -2
- package/dest/block_proposal_handler.d.ts.map +1 -1
- package/dest/block_proposal_handler.js +3 -3
- package/dest/duties/validation_service.d.ts +2 -2
- package/dest/duties/validation_service.d.ts.map +1 -1
- package/dest/duties/validation_service.js +2 -2
- package/dest/factory.d.ts +3 -1
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +1 -1
- package/dest/key_store/local_key_store.js +1 -1
- package/dest/key_store/web3signer_key_store.js +1 -1
- package/dest/validator.d.ts +8 -5
- package/dest/validator.d.ts.map +1 -1
- package/dest/validator.js +45 -10
- package/package.json +12 -10
- package/src/block_proposal_handler.ts +5 -3
- package/src/duties/validation_service.ts +2 -2
- package/src/factory.ts +3 -0
- package/src/key_store/local_key_store.ts +1 -1
- package/src/key_store/node_keystore_adapter.ts +1 -1
- package/src/key_store/web3signer_key_store.ts +1 -1
- package/src/validator.ts +48 -9
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
-
import { Fr } from '@aztec/foundation/
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
4
4
|
import type { P2P, PeerId } from '@aztec/p2p';
|
|
5
5
|
import { TxProvider } from '@aztec/p2p';
|
|
@@ -50,4 +50,4 @@ export declare class BlockProposalHandler {
|
|
|
50
50
|
reexecuteTransactions(proposal: BlockProposal, blockNumber: BlockNumber, txs: Tx[], l1ToL2Messages: Fr[]): Promise<ReexecuteTransactionsResult>;
|
|
51
51
|
}
|
|
52
52
|
export {};
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfaGFuZGxlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2NrX3Byb3Bvc2FsX2hhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBZ0MsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJcEQsT0FBTyxFQUFFLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEUsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBbUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsS0FBSyxhQUFhLEVBQW9CLE1BQU0sbUJBQW1CLENBQUM7QUFDekUsT0FBTyxFQUFlLEtBQUssUUFBUSxFQUFtQixLQUFLLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBT3hGLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBRSxLQUFLLE1BQU0sRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRyxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyRCxNQUFNLE1BQU0sb0NBQW9DLEdBQzVDLGtCQUFrQixHQUNsQix3QkFBd0IsR0FDeEIseUJBQXlCLEdBQ3pCLGtCQUFrQixHQUNsQiw2QkFBNkIsR0FDN0IsbUJBQW1CLEdBQ25CLGdCQUFnQixHQUNoQixZQUFZLEdBQ1osU0FBUyxHQUNULGVBQWUsQ0FBQztBQUVwQixLQUFLLDJCQUEyQixHQUFHO0lBQ2pDLEtBQUssRUFBRSxPQUFPLENBQUM7SUFDZixTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDdEIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0lBQzFCLGFBQWEsRUFBRSxNQUFNLENBQUM7Q0FDdkIsQ0FBQztBQUVGLE1BQU0sTUFBTSxvQ0FBb0MsR0FBRztJQUNqRCxPQUFPLEVBQUUsSUFBSSxDQUFDO0lBQ2QsV0FBVyxFQUFFLFdBQVcsQ0FBQztJQUN6QixpQkFBaUIsQ0FBQyxFQUFFLDJCQUEyQixDQUFDO0NBQ2pELENBQUM7QUFFRixNQUFNLE1BQU0sb0NBQW9DLEdBQUc7SUFDakQsT0FBTyxFQUFFLEtBQUssQ0FBQztJQUNmLE1BQU0sRUFBRSxvQ0FBb0MsQ0FBQztJQUM3QyxXQUFXLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDMUIsaUJBQWlCLENBQUMsRUFBRSwyQkFBMkIsQ0FBQztDQUNqRCxDQUFDO0FBRUYsTUFBTSxNQUFNLDZCQUE2QixHQUFHLG9DQUFvQyxHQUFHLG9DQUFvQyxDQUFDO0FBRXhILHFCQUFhLG9CQUFvQjtJQUk3QixPQUFPLENBQUMsWUFBWTtJQUNwQixPQUFPLENBQUMsV0FBVztJQUNuQixPQUFPLENBQUMsbUJBQW1CO0lBQzNCLE9BQU8sQ0FBQyxVQUFVO0lBQ2xCLE9BQU8sQ0FBQyxzQkFBc0I7SUFDOUIsT0FBTyxDQUFDLE1BQU07SUFDZCxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ2hCLE9BQU8sQ0FBQyxZQUFZO0lBRXBCLE9BQU8sQ0FBQyxHQUFHO0lBWmIsU0FBZ0IsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUUvQixZQUNVLFlBQVksRUFBRSxxQkFBcUIsRUFDbkMsV0FBVyxFQUFFLGFBQWEsRUFDMUIsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQ3hDLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLHNCQUFzQixFQUFFLHNCQUFzQixFQUM5QyxNQUFNLEVBQUUseUJBQXlCLEVBQ2pDLE9BQU8sQ0FBQyw4QkFBa0IsRUFDMUIsWUFBWSxHQUFFLFlBQWlDLEVBQ3ZELFNBQVMsR0FBRSxlQUFzQyxFQUN6QyxHQUFHLHlDQUFtRCxFQU0vRDtJQUVELHNCQUFzQixDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsb0JBQW9CLENBeUIzRDtJQUVLLG1CQUFtQixDQUN2QixRQUFRLEVBQUUsYUFBYSxFQUN2QixjQUFjLEVBQUUsTUFBTSxFQUN0QixlQUFlLEVBQUUsT0FBTyxHQUN2QixPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FrR3hDO1lBRWEsY0FBYztJQXFDNUIsT0FBTyxDQUFDLHNCQUFzQjtJQU05QixPQUFPLENBQUMseUJBQXlCO0lBWTNCLHFCQUFxQixDQUN6QixRQUFRLEVBQUUsYUFBYSxFQUN2QixXQUFXLEVBQUUsV0FBVyxFQUN4QixHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQ1QsY0FBYyxFQUFFLEVBQUUsRUFBRSxHQUNuQixPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0F3RXRDO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_proposal_handler.d.ts","sourceRoot":"","sources":["../src/block_proposal_handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"block_proposal_handler.d.ts","sourceRoot":"","sources":["../src/block_proposal_handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
|
|
2
|
-
import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
4
|
import { TimeoutError } from '@aztec/foundation/error';
|
|
4
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
5
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
7
7
|
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
@@ -132,7 +132,7 @@ export class BlockProposalHandler {
|
|
|
132
132
|
deadline: this.getReexecutionDeadline(slotNumber, config)
|
|
133
133
|
});
|
|
134
134
|
// Check that I have the same set of l1ToL2Messages as the proposal
|
|
135
|
-
const l1ToL2Messages = await this.l1ToL2MessageSource.getL1ToL2Messages(blockNumber);
|
|
135
|
+
const l1ToL2Messages = await this.l1ToL2MessageSource.getL1ToL2Messages(CheckpointNumber.fromBlockNumber(blockNumber));
|
|
136
136
|
const computedInHash = computeInHashFromL1ToL2Messages(l1ToL2Messages);
|
|
137
137
|
const proposalInHash = proposal.payload.header.contentCommitment.inHash;
|
|
138
138
|
if (!computedInHash.equals(proposalInHash)) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
1
2
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
3
|
import type { Signature } from '@aztec/foundation/eth-signature';
|
|
3
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
4
4
|
import type { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
5
5
|
import { BlockAttestation, BlockProposal, type BlockProposalOptions } from '@aztec/stdlib/p2p';
|
|
6
6
|
import type { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
@@ -34,4 +34,4 @@ export declare class ValidationService {
|
|
|
34
34
|
attestToProposal(proposal: BlockProposal, attestors: EthAddress[]): Promise<BlockAttestation[]>;
|
|
35
35
|
signAttestationsAndSigners(attestationsAndSigners: CommitteeAttestationsAndSigners, proposer: EthAddress): Promise<Signature>;
|
|
36
36
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbl9zZXJ2aWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZHV0aWVzL3ZhbGlkYXRpb25fc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFakUsT0FBTyxLQUFLLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixLQUFLLG9CQUFvQixFQUcxQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVuRSxxQkFBYSxpQkFBaUI7SUFFMUIsT0FBTyxDQUFDLFFBQVE7SUFDaEIsT0FBTyxDQUFDLEdBQUc7SUFGYixZQUNVLFFBQVEsRUFBRSxpQkFBaUIsRUFDM0IsR0FBRyx5Q0FBK0MsRUFDeEQ7SUFFSjs7Ozs7Ozs7O09BU0c7SUFDRyxtQkFBbUIsQ0FDdkIsTUFBTSxFQUFFLGdCQUFnQixFQUN4QixPQUFPLEVBQUUsRUFBRSxFQUNYLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFDVCx1QkFBdUIsRUFBRSxVQUFVLEdBQUcsU0FBUyxFQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEdBQzVCLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0F3QnhCO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0csZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FRcEc7SUFFSywwQkFBMEIsQ0FDOUIsc0JBQXNCLEVBQUUsK0JBQStCLEVBQ3ZELFFBQVEsRUFBRSxVQUFVLEdBQ25CLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FLcEI7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation_service.d.ts","sourceRoot":"","sources":["../../src/duties/validation_service.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"validation_service.d.ts","sourceRoot":"","sources":["../../src/duties/validation_service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,KAAK,oBAAoB,EAG1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,GAAG;IAFb,YACU,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,yCAA+C,EACxD;IAEJ;;;;;;;;;OASG;IACG,mBAAmB,CACvB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,EAAE,EACX,GAAG,EAAE,EAAE,EAAE,EACT,uBAAuB,EAAE,UAAU,GAAG,SAAS,EAC/C,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,aAAa,CAAC,CAwBxB;IAED;;;;;;;;;OASG;IACG,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAQpG;IAEK,0BAA0B,CAC9B,sBAAsB,EAAE,+BAA+B,EACvD,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,SAAS,CAAC,CAKpB;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
2
|
-
import { keccak256 } from '@aztec/foundation/crypto';
|
|
3
|
-
import { Fr } from '@aztec/foundation/
|
|
2
|
+
import { keccak256 } from '@aztec/foundation/crypto/keccak';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { BlockAttestation, BlockProposal, ConsensusPayload, SignatureDomainSeparator } from '@aztec/stdlib/p2p';
|
|
6
6
|
export class ValidationService {
|
package/dest/factory.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FileStoreBlobClient } from '@aztec/blob-client/filestore';
|
|
1
2
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
2
3
|
import type { DateProvider } from '@aztec/foundation/timer';
|
|
3
4
|
import type { KeystoreManager } from '@aztec/node-keystore';
|
|
@@ -26,5 +27,6 @@ export declare function createValidatorClient(config: ValidatorClientFullConfig,
|
|
|
26
27
|
dateProvider: DateProvider;
|
|
27
28
|
epochCache: EpochCache;
|
|
28
29
|
keyStoreManager: KeystoreManager | undefined;
|
|
30
|
+
fileStoreBlobUploadClient?: FileStoreBlobClient;
|
|
29
31
|
}): ValidatorClient | undefined;
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEVBQTBCLEtBQUssU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BFLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLHFCQUFxQixFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEcsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRSxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsd0JBQWdCLDBCQUEwQixDQUN4QyxNQUFNLEVBQUUseUJBQXlCLEVBQ2pDLElBQUksRUFBRTtJQUNKLFlBQVksRUFBRSxxQkFBcUIsQ0FBQztJQUNwQyxXQUFXLEVBQUUsYUFBYSxDQUFDO0lBQzNCLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDO0lBQ3pDLFNBQVMsRUFBRSxTQUFTLENBQUM7SUFDckIsVUFBVSxFQUFFLFVBQVUsQ0FBQztJQUN2QixZQUFZLEVBQUUsWUFBWSxDQUFDO0lBQzNCLFNBQVMsRUFBRSxlQUFlLENBQUM7Q0FDNUIsd0JBaUJGO0FBRUQsd0JBQWdCLHFCQUFxQixDQUNuQyxNQUFNLEVBQUUseUJBQXlCLEVBQ2pDLElBQUksRUFBRTtJQUNKLFlBQVksRUFBRSxxQkFBcUIsQ0FBQztJQUNwQyxTQUFTLEVBQUUsU0FBUyxDQUFDO0lBQ3JCLFdBQVcsRUFBRSxhQUFhLENBQUM7SUFDM0IsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUM7SUFDekMsU0FBUyxFQUFFLGVBQWUsQ0FBQztJQUMzQixZQUFZLEVBQUUsWUFBWSxDQUFDO0lBQzNCLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDdkIsZUFBZSxFQUFFLGVBQWUsR0FBRyxTQUFTLENBQUM7SUFDN0MseUJBQXlCLENBQUMsRUFBRSxtQkFBbUIsQ0FBQztDQUNqRCwrQkFvQkYifQ==
|
package/dest/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACxG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE;IACJ,YAAY,EAAE,qBAAqB,CAAC;IACpC,WAAW,EAAE,aAAa,CAAC;IAC3B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;CAC5B,wBAiBF;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE;IACJ,YAAY,EAAE,qBAAqB,CAAC;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,aAAa,CAAC;IAC3B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,eAAe,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACxG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE;IACJ,YAAY,EAAE,qBAAqB,CAAC;IACpC,WAAW,EAAE,aAAa,CAAC;IAC3B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;CAC5B,wBAiBF;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE;IACJ,YAAY,EAAE,qBAAqB,CAAC;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,aAAa,CAAC;IAC3B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C,yBAAyB,CAAC,EAAE,mBAAmB,CAAC;CACjD,+BAoBF"}
|
package/dest/factory.js
CHANGED
|
@@ -14,5 +14,5 @@ export function createValidatorClient(config, deps) {
|
|
|
14
14
|
return undefined;
|
|
15
15
|
}
|
|
16
16
|
const txProvider = deps.p2pClient.getTxProvider();
|
|
17
|
-
return ValidatorClient.new(config, deps.blockBuilder, deps.epochCache, deps.p2pClient, deps.blockSource, deps.l1ToL2MessageSource, txProvider, deps.keyStoreManager, deps.dateProvider, deps.telemetry);
|
|
17
|
+
return ValidatorClient.new(config, deps.blockBuilder, deps.epochCache, deps.p2pClient, deps.blockSource, deps.l1ToL2MessageSource, txProvider, deps.keyStoreManager, deps.fileStoreBlobUploadClient, deps.dateProvider, deps.telemetry);
|
|
18
18
|
}
|
package/dest/validator.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import type { FileStoreBlobClient } from '@aztec/blob-client/filestore';
|
|
1
2
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
2
3
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
5
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
6
|
import type { Signature } from '@aztec/foundation/eth-signature';
|
|
5
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
6
7
|
import { type Logger } from '@aztec/foundation/log';
|
|
7
8
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
8
9
|
import type { KeystoreManager } from '@aztec/node-keystore';
|
|
@@ -29,6 +30,7 @@ export declare class ValidatorClient extends ValidatorClient_base implements Val
|
|
|
29
30
|
private p2pClient;
|
|
30
31
|
private blockProposalHandler;
|
|
31
32
|
private config;
|
|
33
|
+
private fileStoreBlobUploadClient;
|
|
32
34
|
private dateProvider;
|
|
33
35
|
readonly tracer: Tracer;
|
|
34
36
|
private validationService;
|
|
@@ -39,10 +41,10 @@ export declare class ValidatorClient extends ValidatorClient_base implements Val
|
|
|
39
41
|
private lastEpochForCommitteeUpdateLoop;
|
|
40
42
|
private epochCacheUpdateLoop;
|
|
41
43
|
private proposersOfInvalidBlocks;
|
|
42
|
-
protected constructor(keyStore: NodeKeystoreAdapter, epochCache: EpochCache, p2pClient: P2P, blockProposalHandler: BlockProposalHandler, config: ValidatorClientFullConfig, dateProvider?: DateProvider, telemetry?: TelemetryClient, log?: Logger);
|
|
44
|
+
protected constructor(keyStore: NodeKeystoreAdapter, epochCache: EpochCache, p2pClient: P2P, blockProposalHandler: BlockProposalHandler, config: ValidatorClientFullConfig, fileStoreBlobUploadClient: FileStoreBlobClient | undefined, dateProvider?: DateProvider, telemetry?: TelemetryClient, log?: Logger);
|
|
43
45
|
static validateKeyStoreConfiguration(keyStoreManager: KeystoreManager, logger?: Logger): void;
|
|
44
46
|
private handleEpochCommitteeUpdate;
|
|
45
|
-
static new(config: ValidatorClientFullConfig, blockBuilder: IFullNodeBlockBuilder, epochCache: EpochCache, p2pClient: P2P, blockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, txProvider: TxProvider, keyStoreManager: KeystoreManager, dateProvider?: DateProvider, telemetry?: TelemetryClient): ValidatorClient;
|
|
47
|
+
static new(config: ValidatorClientFullConfig, blockBuilder: IFullNodeBlockBuilder, epochCache: EpochCache, p2pClient: P2P, blockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, txProvider: TxProvider, keyStoreManager: KeystoreManager, fileStoreBlobUploadClient?: FileStoreBlobClient, dateProvider?: DateProvider, telemetry?: TelemetryClient): ValidatorClient;
|
|
46
48
|
getValidatorAddresses(): EthAddress[];
|
|
47
49
|
getBlockProposalHandler(): BlockProposalHandler;
|
|
48
50
|
reExecuteTransactions(proposal: BlockProposal, blockNumber: BlockNumber, txs: any[], l1ToL2Messages: Fr[]): Promise<any>;
|
|
@@ -57,7 +59,8 @@ export declare class ValidatorClient extends ValidatorClient_base implements Val
|
|
|
57
59
|
registerHandlers(): Promise<void>;
|
|
58
60
|
attestToProposal(proposal: BlockProposal, proposalSender: PeerId): Promise<BlockAttestation[] | undefined>;
|
|
59
61
|
private slashInvalidBlock;
|
|
60
|
-
createBlockProposal(blockNumber: BlockNumber, header: CheckpointHeader, archive: Fr, txs: Tx[], proposerAddress: EthAddress | undefined, options: BlockProposalOptions): Promise<BlockProposal
|
|
62
|
+
createBlockProposal(blockNumber: BlockNumber, header: CheckpointHeader, archive: Fr, txs: Tx[], proposerAddress: EthAddress | undefined, options: BlockProposalOptions): Promise<BlockProposal>;
|
|
63
|
+
createCheckpointProposal(header: CheckpointHeader, archive: Fr, txs: Tx[], proposerAddress: EthAddress | undefined, options: BlockProposalOptions): Promise<BlockProposal>;
|
|
61
64
|
broadcastBlockProposal(proposal: BlockProposal): Promise<void>;
|
|
62
65
|
signAttestationsAndSigners(attestationsAndSigners: CommitteeAttestationsAndSigners, proposer: EthAddress): Promise<Signature>;
|
|
63
66
|
collectOwnAttestations(proposal: BlockProposal): Promise<BlockAttestation[]>;
|
|
@@ -66,4 +69,4 @@ export declare class ValidatorClient extends ValidatorClient_base implements Val
|
|
|
66
69
|
private handleAuthRequest;
|
|
67
70
|
}
|
|
68
71
|
export {};
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFeEUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTFELE9BQU8sRUFBb0MsS0FBSyxPQUFPLEVBQUUsS0FBSyxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRyxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSwrQkFBK0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRixPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuSCxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8s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
|
package/dest/validator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAe,MAAM,iCAAiC,CAAC;AAC3E,OAAO,
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
|
package/dest/validator.js
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
}
|
|
7
|
+
import { getBlobsPerL1Block } from '@aztec/blob-lib';
|
|
1
8
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
9
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
3
10
|
import { sleep } from '@aztec/foundation/sleep';
|
|
@@ -5,7 +12,7 @@ import { DateProvider } from '@aztec/foundation/timer';
|
|
|
5
12
|
import { AuthRequest, AuthResponse, BlockProposalValidator, ReqRespSubProtocol } from '@aztec/p2p';
|
|
6
13
|
import { OffenseType, WANT_TO_SLASH_EVENT } from '@aztec/slasher';
|
|
7
14
|
import { AttestationTimeoutError } from '@aztec/stdlib/validators';
|
|
8
|
-
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
15
|
+
import { Attributes, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
9
16
|
import { EventEmitter } from 'events';
|
|
10
17
|
import { BlockProposalHandler } from './block_proposal_handler.js';
|
|
11
18
|
import { ValidationService } from './duties/validation_service.js';
|
|
@@ -27,6 +34,7 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
27
34
|
p2pClient;
|
|
28
35
|
blockProposalHandler;
|
|
29
36
|
config;
|
|
37
|
+
fileStoreBlobUploadClient;
|
|
30
38
|
dateProvider;
|
|
31
39
|
tracer;
|
|
32
40
|
validationService;
|
|
@@ -39,8 +47,8 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
39
47
|
lastEpochForCommitteeUpdateLoop;
|
|
40
48
|
epochCacheUpdateLoop;
|
|
41
49
|
proposersOfInvalidBlocks;
|
|
42
|
-
constructor(keyStore, epochCache, p2pClient, blockProposalHandler, config, dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('validator')){
|
|
43
|
-
super(), this.keyStore = keyStore, this.epochCache = epochCache, this.p2pClient = p2pClient, this.blockProposalHandler = blockProposalHandler, this.config = config, this.dateProvider = dateProvider, this.hasRegisteredHandlers = false, this.proposersOfInvalidBlocks = new Set();
|
|
50
|
+
constructor(keyStore, epochCache, p2pClient, blockProposalHandler, config, fileStoreBlobUploadClient, dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('validator')){
|
|
51
|
+
super(), this.keyStore = keyStore, this.epochCache = epochCache, this.p2pClient = p2pClient, this.blockProposalHandler = blockProposalHandler, this.config = config, this.fileStoreBlobUploadClient = fileStoreBlobUploadClient, this.dateProvider = dateProvider, this.hasRegisteredHandlers = false, this.proposersOfInvalidBlocks = new Set();
|
|
44
52
|
// Create child logger with fisherman prefix if in fisherman mode
|
|
45
53
|
this.log = config.fishermanMode ? log.createChild('[FISHERMAN]') : log;
|
|
46
54
|
this.tracer = telemetry.getTracer('Validator');
|
|
@@ -94,13 +102,13 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
94
102
|
this.log.error(`Error updating epoch committee`, err);
|
|
95
103
|
}
|
|
96
104
|
}
|
|
97
|
-
static new(config, blockBuilder, epochCache, p2pClient, blockSource, l1ToL2MessageSource, txProvider, keyStoreManager, dateProvider = new DateProvider(), telemetry = getTelemetryClient()) {
|
|
105
|
+
static new(config, blockBuilder, epochCache, p2pClient, blockSource, l1ToL2MessageSource, txProvider, keyStoreManager, fileStoreBlobUploadClient, dateProvider = new DateProvider(), telemetry = getTelemetryClient()) {
|
|
98
106
|
const metrics = new ValidatorMetrics(telemetry);
|
|
99
107
|
const blockProposalValidator = new BlockProposalValidator(epochCache, {
|
|
100
108
|
txsPermitted: !config.disableTransactions
|
|
101
109
|
});
|
|
102
110
|
const blockProposalHandler = new BlockProposalHandler(blockBuilder, blockSource, l1ToL2MessageSource, txProvider, blockProposalValidator, config, metrics, dateProvider, telemetry);
|
|
103
|
-
const validator = new ValidatorClient(NodeKeystoreAdapter.fromKeyStoreManager(keyStoreManager), epochCache, p2pClient, blockProposalHandler, config, dateProvider, telemetry);
|
|
111
|
+
const validator = new ValidatorClient(NodeKeystoreAdapter.fromKeyStoreManager(keyStoreManager), epochCache, p2pClient, blockProposalHandler, config, fileStoreBlobUploadClient, dateProvider, telemetry);
|
|
104
112
|
return validator;
|
|
105
113
|
}
|
|
106
114
|
getValidatorAddresses() {
|
|
@@ -184,7 +192,7 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
184
192
|
// invalid proposals even when not in the committee, or if we are configured to always reexecute for monitoring purposes.
|
|
185
193
|
// In fisherman mode, we always reexecute to validate proposals.
|
|
186
194
|
const { validatorReexecute, slashBroadcastedInvalidBlockPenalty, alwaysReexecuteBlockProposals, fishermanMode } = this.config;
|
|
187
|
-
const shouldReexecute = fishermanMode || slashBroadcastedInvalidBlockPenalty > 0n && validatorReexecute || partOfCommittee && validatorReexecute || alwaysReexecuteBlockProposals;
|
|
195
|
+
const shouldReexecute = fishermanMode || slashBroadcastedInvalidBlockPenalty > 0n && validatorReexecute || partOfCommittee && validatorReexecute || alwaysReexecuteBlockProposals || this.fileStoreBlobUploadClient;
|
|
188
196
|
const validationResult = await this.blockProposalHandler.handleBlockProposal(proposal, proposalSender, !!shouldReexecute);
|
|
189
197
|
if (!validationResult.isValid) {
|
|
190
198
|
this.log.warn(`Proposal validation failed: ${validationResult.reason}`, proposalInfo);
|
|
@@ -223,6 +231,19 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
223
231
|
fishermanMode: this.config.fishermanMode || false
|
|
224
232
|
});
|
|
225
233
|
this.metrics.incSuccessfulAttestations(inCommittee.length);
|
|
234
|
+
// Upload blobs to filestore after successful re-execution (fire-and-forget)
|
|
235
|
+
if (validationResult.reexecutionResult?.block && this.fileStoreBlobUploadClient) {
|
|
236
|
+
void Promise.resolve().then(async ()=>{
|
|
237
|
+
try {
|
|
238
|
+
const blobFields = validationResult.reexecutionResult.block.getCheckpointBlobFields();
|
|
239
|
+
const blobs = getBlobsPerL1Block(blobFields);
|
|
240
|
+
await this.fileStoreBlobUploadClient.saveBlobs(blobs, true);
|
|
241
|
+
this.log.debug(`Uploaded ${blobs.length} blobs to filestore from re-execution`, proposalInfo);
|
|
242
|
+
} catch (err) {
|
|
243
|
+
this.log.warn(`Failed to upload blobs from re-execution`, err);
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
}
|
|
226
247
|
// If the above function does not throw an error, then we can attest to the proposal
|
|
227
248
|
// Determine which validators should attest
|
|
228
249
|
let attestors;
|
|
@@ -270,11 +291,14 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
270
291
|
}
|
|
271
292
|
]);
|
|
272
293
|
}
|
|
294
|
+
// TODO(palla/mbps): Block proposal should not require a checkpoint proposal
|
|
273
295
|
async createBlockProposal(blockNumber, header, archive, txs, proposerAddress, options) {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
296
|
+
// TODO(palla/mbps): Prevent double proposals properly
|
|
297
|
+
// if (this.previousProposal?.slotNumber === header.slotNumber) {
|
|
298
|
+
// this.log.verbose(`Already made a proposal for the same slot, skipping proposal`);
|
|
299
|
+
// return Promise.resolve(undefined);
|
|
300
|
+
// }
|
|
301
|
+
this.log.info(`Assembling block proposal for block ${blockNumber} slot ${header.slotNumber}`);
|
|
278
302
|
const newProposal = await this.validationService.createBlockProposal(header, archive, txs, proposerAddress, {
|
|
279
303
|
...options,
|
|
280
304
|
broadcastInvalidBlockProposal: this.config.broadcastInvalidBlockProposal
|
|
@@ -282,6 +306,11 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
282
306
|
this.previousProposal = newProposal;
|
|
283
307
|
return newProposal;
|
|
284
308
|
}
|
|
309
|
+
// TODO(palla/mbps): Effectively create a checkpoint proposal different from a block proposal
|
|
310
|
+
createCheckpointProposal(header, archive, txs, proposerAddress, options) {
|
|
311
|
+
this.log.info(`Assembling checkpoint proposal for slot ${header.slotNumber}`);
|
|
312
|
+
return this.createBlockProposal(0, header, archive, txs, proposerAddress, options);
|
|
313
|
+
}
|
|
285
314
|
async broadcastBlockProposal(proposal) {
|
|
286
315
|
await this.p2pClient.broadcastProposal(proposal);
|
|
287
316
|
}
|
|
@@ -378,3 +407,9 @@ const SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT = [
|
|
|
378
407
|
return authResponse.toBuffer();
|
|
379
408
|
}
|
|
380
409
|
}
|
|
410
|
+
_ts_decorate([
|
|
411
|
+
trackSpan('validator.attestToProposal', (proposal, proposalSender)=>({
|
|
412
|
+
[Attributes.BLOCK_HASH]: proposal.payload.header.hash.toString(),
|
|
413
|
+
[Attributes.PEER_ID]: proposalSender.toString()
|
|
414
|
+
}))
|
|
415
|
+
], ValidatorClient.prototype, "attestToProposal", null);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/validator-client",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.fcb71a6",
|
|
4
4
|
"main": "dest/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -64,15 +64,17 @@
|
|
|
64
64
|
]
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@aztec/
|
|
68
|
-
"@aztec/
|
|
69
|
-
"@aztec/
|
|
70
|
-
"@aztec/
|
|
71
|
-
"@aztec/
|
|
72
|
-
"@aztec/
|
|
73
|
-
"@aztec/
|
|
74
|
-
"@aztec/
|
|
75
|
-
"@aztec/
|
|
67
|
+
"@aztec/blob-client": "0.0.1-commit.fcb71a6",
|
|
68
|
+
"@aztec/blob-lib": "0.0.1-commit.fcb71a6",
|
|
69
|
+
"@aztec/constants": "0.0.1-commit.fcb71a6",
|
|
70
|
+
"@aztec/epoch-cache": "0.0.1-commit.fcb71a6",
|
|
71
|
+
"@aztec/ethereum": "0.0.1-commit.fcb71a6",
|
|
72
|
+
"@aztec/foundation": "0.0.1-commit.fcb71a6",
|
|
73
|
+
"@aztec/node-keystore": "0.0.1-commit.fcb71a6",
|
|
74
|
+
"@aztec/p2p": "0.0.1-commit.fcb71a6",
|
|
75
|
+
"@aztec/slasher": "0.0.1-commit.fcb71a6",
|
|
76
|
+
"@aztec/stdlib": "0.0.1-commit.fcb71a6",
|
|
77
|
+
"@aztec/telemetry-client": "0.0.1-commit.fcb71a6",
|
|
76
78
|
"koa": "^2.16.1",
|
|
77
79
|
"koa-router": "^13.1.1",
|
|
78
80
|
"tslib": "^2.4.0",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
|
|
2
|
-
import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
4
|
import { TimeoutError } from '@aztec/foundation/error';
|
|
4
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
5
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
7
7
|
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
@@ -173,7 +173,9 @@ export class BlockProposalHandler {
|
|
|
173
173
|
});
|
|
174
174
|
|
|
175
175
|
// Check that I have the same set of l1ToL2Messages as the proposal
|
|
176
|
-
const l1ToL2Messages = await this.l1ToL2MessageSource.getL1ToL2Messages(
|
|
176
|
+
const l1ToL2Messages = await this.l1ToL2MessageSource.getL1ToL2Messages(
|
|
177
|
+
CheckpointNumber.fromBlockNumber(blockNumber),
|
|
178
|
+
);
|
|
177
179
|
const computedInHash = computeInHashFromL1ToL2Messages(l1ToL2Messages);
|
|
178
180
|
const proposalInHash = proposal.payload.header.contentCommitment.inHash;
|
|
179
181
|
if (!computedInHash.equals(proposalInHash)) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
2
|
-
import { keccak256 } from '@aztec/foundation/crypto';
|
|
2
|
+
import { keccak256 } from '@aztec/foundation/crypto/keccak';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
4
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
5
|
import type { Signature } from '@aztec/foundation/eth-signature';
|
|
5
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
6
6
|
import { createLogger } from '@aztec/foundation/log';
|
|
7
7
|
import type { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
8
8
|
import {
|
package/src/factory.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FileStoreBlobClient } from '@aztec/blob-client/filestore';
|
|
1
2
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
2
3
|
import type { DateProvider } from '@aztec/foundation/timer';
|
|
3
4
|
import type { KeystoreManager } from '@aztec/node-keystore';
|
|
@@ -51,6 +52,7 @@ export function createValidatorClient(
|
|
|
51
52
|
dateProvider: DateProvider;
|
|
52
53
|
epochCache: EpochCache;
|
|
53
54
|
keyStoreManager: KeystoreManager | undefined;
|
|
55
|
+
fileStoreBlobUploadClient?: FileStoreBlobClient;
|
|
54
56
|
},
|
|
55
57
|
) {
|
|
56
58
|
if (config.disableValidator || !deps.keyStoreManager) {
|
|
@@ -67,6 +69,7 @@ export function createValidatorClient(
|
|
|
67
69
|
deps.l1ToL2MessageSource,
|
|
68
70
|
txProvider,
|
|
69
71
|
deps.keyStoreManager,
|
|
72
|
+
deps.fileStoreBlobUploadClient,
|
|
70
73
|
deps.dateProvider,
|
|
71
74
|
deps.telemetry,
|
|
72
75
|
);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
2
|
-
import { Secp256k1Signer } from '@aztec/foundation/crypto';
|
|
2
|
+
import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
|
|
3
3
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
4
|
import type { Signature } from '@aztec/foundation/eth-signature';
|
|
5
5
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EthSigner } from '@aztec/ethereum';
|
|
1
|
+
import type { EthSigner } from '@aztec/ethereum/eth-signer';
|
|
2
2
|
import type { Buffer32 } from '@aztec/foundation/buffer';
|
|
3
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
4
|
import type { Signature } from '@aztec/foundation/eth-signature';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Buffer32 } from '@aztec/foundation/buffer';
|
|
2
|
-
import { normalizeSignature } from '@aztec/foundation/crypto';
|
|
2
|
+
import { normalizeSignature } from '@aztec/foundation/crypto/secp256k1-signer';
|
|
3
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
4
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
5
5
|
|
package/src/validator.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import type { FileStoreBlobClient } from '@aztec/blob-client/filestore';
|
|
2
|
+
import { getBlobsPerL1Block } from '@aztec/blob-lib';
|
|
1
3
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
2
4
|
import { BlockNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
5
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
6
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
7
|
import type { Signature } from '@aztec/foundation/eth-signature';
|
|
5
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
6
8
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
7
9
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
8
10
|
import { sleep } from '@aztec/foundation/sleep';
|
|
@@ -19,7 +21,7 @@ import type { BlockAttestation, BlockProposal, BlockProposalOptions } from '@azt
|
|
|
19
21
|
import type { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
20
22
|
import type { Tx } from '@aztec/stdlib/tx';
|
|
21
23
|
import { AttestationTimeoutError } from '@aztec/stdlib/validators';
|
|
22
|
-
import { type TelemetryClient, type Tracer, getTelemetryClient } from '@aztec/telemetry-client';
|
|
24
|
+
import { Attributes, type TelemetryClient, type Tracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
23
25
|
|
|
24
26
|
import { EventEmitter } from 'events';
|
|
25
27
|
import type { TypedDataDefinition } from 'viem';
|
|
@@ -65,6 +67,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
65
67
|
private p2pClient: P2P,
|
|
66
68
|
private blockProposalHandler: BlockProposalHandler,
|
|
67
69
|
private config: ValidatorClientFullConfig,
|
|
70
|
+
private fileStoreBlobUploadClient: FileStoreBlobClient | undefined,
|
|
68
71
|
private dateProvider: DateProvider = new DateProvider(),
|
|
69
72
|
telemetry: TelemetryClient = getTelemetryClient(),
|
|
70
73
|
log = createLogger('validator'),
|
|
@@ -147,6 +150,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
147
150
|
l1ToL2MessageSource: L1ToL2MessageSource,
|
|
148
151
|
txProvider: TxProvider,
|
|
149
152
|
keyStoreManager: KeystoreManager,
|
|
153
|
+
fileStoreBlobUploadClient?: FileStoreBlobClient,
|
|
150
154
|
dateProvider: DateProvider = new DateProvider(),
|
|
151
155
|
telemetry: TelemetryClient = getTelemetryClient(),
|
|
152
156
|
) {
|
|
@@ -172,6 +176,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
172
176
|
p2pClient,
|
|
173
177
|
blockProposalHandler,
|
|
174
178
|
config,
|
|
179
|
+
fileStoreBlobUploadClient,
|
|
175
180
|
dateProvider,
|
|
176
181
|
telemetry,
|
|
177
182
|
);
|
|
@@ -259,6 +264,10 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
259
264
|
}
|
|
260
265
|
}
|
|
261
266
|
|
|
267
|
+
@trackSpan('validator.attestToProposal', (proposal, proposalSender) => ({
|
|
268
|
+
[Attributes.BLOCK_HASH]: proposal.payload.header.hash.toString(),
|
|
269
|
+
[Attributes.PEER_ID]: proposalSender.toString(),
|
|
270
|
+
}))
|
|
262
271
|
async attestToProposal(proposal: BlockProposal, proposalSender: PeerId): Promise<BlockAttestation[] | undefined> {
|
|
263
272
|
const slotNumber = proposal.slotNumber;
|
|
264
273
|
const proposer = proposal.getSender();
|
|
@@ -289,7 +298,8 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
289
298
|
fishermanMode ||
|
|
290
299
|
(slashBroadcastedInvalidBlockPenalty > 0n && validatorReexecute) ||
|
|
291
300
|
(partOfCommittee && validatorReexecute) ||
|
|
292
|
-
alwaysReexecuteBlockProposals
|
|
301
|
+
alwaysReexecuteBlockProposals ||
|
|
302
|
+
this.fileStoreBlobUploadClient;
|
|
293
303
|
|
|
294
304
|
const validationResult = await this.blockProposalHandler.handleBlockProposal(
|
|
295
305
|
proposal,
|
|
@@ -345,6 +355,20 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
345
355
|
|
|
346
356
|
this.metrics.incSuccessfulAttestations(inCommittee.length);
|
|
347
357
|
|
|
358
|
+
// Upload blobs to filestore after successful re-execution (fire-and-forget)
|
|
359
|
+
if (validationResult.reexecutionResult?.block && this.fileStoreBlobUploadClient) {
|
|
360
|
+
void Promise.resolve().then(async () => {
|
|
361
|
+
try {
|
|
362
|
+
const blobFields = validationResult.reexecutionResult!.block.getCheckpointBlobFields();
|
|
363
|
+
const blobs = getBlobsPerL1Block(blobFields);
|
|
364
|
+
await this.fileStoreBlobUploadClient!.saveBlobs(blobs, true);
|
|
365
|
+
this.log.debug(`Uploaded ${blobs.length} blobs to filestore from re-execution`, proposalInfo);
|
|
366
|
+
} catch (err) {
|
|
367
|
+
this.log.warn(`Failed to upload blobs from re-execution`, err);
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
|
|
348
372
|
// If the above function does not throw an error, then we can attest to the proposal
|
|
349
373
|
// Determine which validators should attest
|
|
350
374
|
let attestors: EthAddress[];
|
|
@@ -400,6 +424,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
400
424
|
]);
|
|
401
425
|
}
|
|
402
426
|
|
|
427
|
+
// TODO(palla/mbps): Block proposal should not require a checkpoint proposal
|
|
403
428
|
async createBlockProposal(
|
|
404
429
|
blockNumber: BlockNumber,
|
|
405
430
|
header: CheckpointHeader,
|
|
@@ -407,12 +432,14 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
407
432
|
txs: Tx[],
|
|
408
433
|
proposerAddress: EthAddress | undefined,
|
|
409
434
|
options: BlockProposalOptions,
|
|
410
|
-
): Promise<BlockProposal
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
435
|
+
): Promise<BlockProposal> {
|
|
436
|
+
// TODO(palla/mbps): Prevent double proposals properly
|
|
437
|
+
// if (this.previousProposal?.slotNumber === header.slotNumber) {
|
|
438
|
+
// this.log.verbose(`Already made a proposal for the same slot, skipping proposal`);
|
|
439
|
+
// return Promise.resolve(undefined);
|
|
440
|
+
// }
|
|
441
|
+
|
|
442
|
+
this.log.info(`Assembling block proposal for block ${blockNumber} slot ${header.slotNumber}`);
|
|
416
443
|
const newProposal = await this.validationService.createBlockProposal(header, archive, txs, proposerAddress, {
|
|
417
444
|
...options,
|
|
418
445
|
broadcastInvalidBlockProposal: this.config.broadcastInvalidBlockProposal,
|
|
@@ -421,6 +448,18 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
421
448
|
return newProposal;
|
|
422
449
|
}
|
|
423
450
|
|
|
451
|
+
// TODO(palla/mbps): Effectively create a checkpoint proposal different from a block proposal
|
|
452
|
+
createCheckpointProposal(
|
|
453
|
+
header: CheckpointHeader,
|
|
454
|
+
archive: Fr,
|
|
455
|
+
txs: Tx[],
|
|
456
|
+
proposerAddress: EthAddress | undefined,
|
|
457
|
+
options: BlockProposalOptions,
|
|
458
|
+
): Promise<BlockProposal> {
|
|
459
|
+
this.log.info(`Assembling checkpoint proposal for slot ${header.slotNumber}`);
|
|
460
|
+
return this.createBlockProposal(0 as BlockNumber, header, archive, txs, proposerAddress, options);
|
|
461
|
+
}
|
|
462
|
+
|
|
424
463
|
async broadcastBlockProposal(proposal: BlockProposal): Promise<void> {
|
|
425
464
|
await this.p2pClient.broadcastProposal(proposal);
|
|
426
465
|
}
|