@aztec/stdlib 0.0.1-commit.8afd444 → 0.0.1-commit.8f9871590
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/abi/function_call.d.ts +39 -9
- package/dest/abi/function_call.d.ts.map +1 -1
- package/dest/abi/function_call.js +20 -3
- package/dest/block/in_block.js +1 -1
- package/dest/checkpoint/checkpoint.d.ts +16 -7
- package/dest/checkpoint/checkpoint.d.ts.map +1 -1
- package/dest/checkpoint/checkpoint.js +19 -9
- package/dest/checkpoint/published_checkpoint.d.ts +7 -1
- package/dest/checkpoint/published_checkpoint.d.ts.map +1 -1
- package/dest/config/index.d.ts +2 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +1 -0
- package/dest/config/sequencer-config.d.ts +10 -0
- package/dest/config/sequencer-config.d.ts.map +1 -0
- package/dest/config/sequencer-config.js +12 -0
- package/dest/contract/contract_class_id.d.ts +1 -1
- package/dest/contract/contract_class_id.d.ts.map +1 -1
- package/dest/contract/contract_class_id.js +3 -2
- package/dest/contract/interfaces/node-info.d.ts +3 -1
- package/dest/contract/interfaces/node-info.d.ts.map +1 -1
- package/dest/contract/interfaces/node-info.js +2 -1
- package/dest/epoch-helpers/index.d.ts +5 -1
- package/dest/epoch-helpers/index.d.ts.map +1 -1
- package/dest/epoch-helpers/index.js +4 -2
- package/dest/hash/hash.d.ts +2 -1
- package/dest/hash/hash.d.ts.map +1 -1
- package/dest/hash/hash.js +6 -0
- package/dest/interfaces/aztec-node-admin.d.ts +10 -1
- package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
- package/dest/interfaces/aztec-node.d.ts +1 -1
- package/dest/interfaces/block-builder.d.ts +2 -2
- package/dest/interfaces/block-builder.d.ts.map +1 -1
- package/dest/interfaces/get_logs_response.d.ts +8 -1
- package/dest/interfaces/get_logs_response.d.ts.map +1 -1
- package/dest/interfaces/p2p.d.ts +2 -2
- package/dest/interfaces/p2p.d.ts.map +1 -1
- package/dest/interfaces/proving-job.d.ts +168 -168
- package/dest/interfaces/slasher.d.ts +9 -1
- package/dest/interfaces/slasher.d.ts.map +1 -1
- package/dest/interfaces/slasher.js +2 -0
- package/dest/interfaces/validator.d.ts +17 -3
- package/dest/interfaces/validator.d.ts.map +1 -1
- package/dest/interfaces/validator.js +4 -1
- package/dest/kernel/private_circuit_public_inputs.d.ts +3 -3
- package/dest/kernel/private_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_circuit_public_inputs.js +6 -6
- package/dest/kernel/private_kernel_circuit_public_inputs.d.ts +3 -3
- package/dest/kernel/private_kernel_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_circuit_public_inputs.js +4 -4
- package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts +3 -3
- package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_tail_circuit_private_inputs.js +4 -4
- package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts +3 -3
- package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_tail_circuit_public_inputs.js +7 -7
- package/dest/kernel/private_to_public_kernel_circuit_public_inputs.d.ts +3 -3
- package/dest/kernel/private_to_public_kernel_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_to_public_kernel_circuit_public_inputs.js +5 -5
- package/dest/kernel/private_to_rollup_kernel_circuit_public_inputs.d.ts +3 -3
- package/dest/kernel/private_to_rollup_kernel_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_to_rollup_kernel_circuit_public_inputs.js +5 -5
- package/dest/logs/extended_public_log.d.ts +7 -1
- package/dest/logs/extended_public_log.d.ts.map +1 -1
- package/dest/logs/log_id.d.ts +10 -7
- package/dest/logs/log_id.d.ts.map +1 -1
- package/dest/logs/log_id.js +15 -13
- package/dest/logs/siloed_tag.d.ts +1 -1
- package/dest/logs/siloed_tag.d.ts.map +1 -1
- package/dest/logs/siloed_tag.js +2 -6
- package/dest/messaging/l2_to_l1_membership.d.ts +2 -2
- package/dest/messaging/l2_to_l1_membership.js +3 -3
- package/dest/note/index.d.ts +1 -2
- package/dest/note/index.d.ts.map +1 -1
- package/dest/note/index.js +0 -1
- package/dest/p2p/checkpoint_attestation.d.ts +2 -1
- package/dest/p2p/checkpoint_attestation.d.ts.map +1 -1
- package/dest/p2p/checkpoint_attestation.js +1 -1
- package/dest/p2p/checkpoint_proposal.d.ts +17 -5
- package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
- package/dest/p2p/checkpoint_proposal.js +29 -15
- package/dest/p2p/consensus_payload.d.ts +12 -3
- package/dest/p2p/consensus_payload.d.ts.map +1 -1
- package/dest/p2p/consensus_payload.js +22 -15
- package/dest/p2p/constants.d.ts +3 -1
- package/dest/p2p/constants.d.ts.map +1 -1
- package/dest/p2p/constants.js +1 -0
- package/dest/rollup/checkpoint_rollup_public_inputs.d.ts +6 -6
- package/dest/rollup/checkpoint_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/checkpoint_rollup_public_inputs.js +2 -2
- package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts +2 -2
- package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/root_rollup_public_inputs.d.ts +6 -6
- package/dest/rollup/root_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/root_rollup_public_inputs.js +3 -3
- package/dest/slashing/empire.d.ts +1 -1
- package/dest/slashing/empire.d.ts.map +1 -1
- package/dest/slashing/empire.js +2 -0
- package/dest/slashing/helpers.d.ts +2 -2
- package/dest/slashing/helpers.d.ts.map +1 -1
- package/dest/slashing/helpers.js +6 -0
- package/dest/slashing/tally.d.ts +2 -1
- package/dest/slashing/tally.d.ts.map +1 -1
- package/dest/slashing/tally.js +6 -2
- package/dest/slashing/types.d.ts +7 -3
- package/dest/slashing/types.d.ts.map +1 -1
- package/dest/slashing/types.js +13 -1
- package/dest/tests/factories.js +4 -4
- package/dest/tests/mocks.d.ts +4 -1
- package/dest/tests/mocks.d.ts.map +1 -1
- package/dest/tests/mocks.js +14 -9
- package/dest/timetable/index.d.ts +37 -0
- package/dest/timetable/index.d.ts.map +1 -0
- package/dest/timetable/index.js +39 -0
- package/dest/trees/public_data_leaf.d.ts +2 -1
- package/dest/trees/public_data_leaf.d.ts.map +1 -1
- package/dest/trees/public_data_leaf.js +7 -6
- package/dest/tx/validator/empty_validator.d.ts +2 -2
- package/dest/tx/validator/empty_validator.d.ts.map +1 -1
- package/dest/tx/validator/error_texts.d.ts +1 -1
- package/dest/tx/validator/error_texts.js +1 -1
- package/dest/tx/validator/tx_validator.d.ts +2 -2
- package/dest/tx/validator/tx_validator.d.ts.map +1 -1
- package/dest/validators/schemas.d.ts +30 -30
- package/dest/validators/schemas.d.ts.map +1 -1
- package/dest/validators/schemas.js +4 -3
- package/dest/validators/types.d.ts +3 -3
- package/dest/validators/types.d.ts.map +1 -1
- package/package.json +22 -11
- package/src/abi/function_call.ts +25 -3
- package/src/block/in_block.ts +1 -1
- package/src/checkpoint/checkpoint.ts +27 -11
- package/src/config/index.ts +1 -0
- package/src/config/sequencer-config.ts +19 -0
- package/src/contract/contract_class_id.ts +3 -2
- package/src/contract/interfaces/node-info.ts +3 -0
- package/src/epoch-helpers/index.ts +3 -0
- package/src/hash/hash.ts +4 -0
- package/src/interfaces/aztec-node.ts +1 -1
- package/src/interfaces/block-builder.ts +1 -0
- package/src/interfaces/p2p.ts +1 -1
- package/src/interfaces/slasher.ts +4 -0
- package/src/interfaces/validator.ts +11 -1
- package/src/kernel/private_circuit_public_inputs.ts +4 -4
- package/src/kernel/private_kernel_circuit_public_inputs.ts +2 -2
- package/src/kernel/private_kernel_tail_circuit_private_inputs.ts +2 -2
- package/src/kernel/private_kernel_tail_circuit_public_inputs.ts +5 -5
- package/src/kernel/private_to_public_kernel_circuit_public_inputs.ts +3 -3
- package/src/kernel/private_to_rollup_kernel_circuit_public_inputs.ts +3 -3
- package/src/logs/log_id.ts +15 -12
- package/src/logs/siloed_tag.ts +2 -3
- package/src/messaging/l2_to_l1_membership.ts +3 -3
- package/src/note/index.ts +0 -1
- package/src/p2p/checkpoint_attestation.ts +6 -1
- package/src/p2p/checkpoint_proposal.ts +45 -13
- package/src/p2p/consensus_payload.ts +25 -12
- package/src/p2p/constants.ts +3 -0
- package/src/rollup/checkpoint_rollup_public_inputs.ts +5 -5
- package/src/rollup/root_rollup_public_inputs.ts +7 -7
- package/src/slashing/empire.ts +3 -1
- package/src/slashing/helpers.ts +8 -0
- package/src/slashing/tally.ts +8 -2
- package/src/slashing/types.ts +14 -0
- package/src/tests/factories.ts +6 -6
- package/src/tests/mocks.ts +21 -10
- package/src/timetable/index.ts +66 -0
- package/src/trees/public_data_leaf.ts +11 -5
- package/src/tx/validator/empty_validator.ts +1 -1
- package/src/tx/validator/error_texts.ts +1 -1
- package/src/tx/validator/tx_validator.ts +1 -1
- package/src/validators/schemas.ts +8 -1
- package/src/validators/types.ts +5 -4
- package/dest/note/notes_filter.d.ts +0 -27
- package/dest/note/notes_filter.d.ts.map +0 -1
- package/dest/note/notes_filter.js +0 -11
- package/src/note/notes_filter.ts +0 -38
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BlobAccumulator, FinalBlobBatchingChallenges } from '@aztec/blob-lib/types';
|
|
2
|
-
import {
|
|
2
|
+
import { MAX_CHECKPOINTS_PER_EPOCH } from '@aztec/constants';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
5
|
import { bufferSchemaFor } from '@aztec/foundation/schemas';
|
|
@@ -38,11 +38,11 @@ export class CheckpointRollupPublicInputs {
|
|
|
38
38
|
/**
|
|
39
39
|
* The hashes of the headers of the constituent checkpoints.
|
|
40
40
|
*/
|
|
41
|
-
public checkpointHeaderHashes: Tuple<Fr, typeof
|
|
41
|
+
public checkpointHeaderHashes: Tuple<Fr, typeof MAX_CHECKPOINTS_PER_EPOCH>,
|
|
42
42
|
/**
|
|
43
43
|
* The summed transaction fees and recipients of the constituent checkpoints.
|
|
44
44
|
*/
|
|
45
|
-
public fees: Tuple<FeeRecipient, typeof
|
|
45
|
+
public fees: Tuple<FeeRecipient, typeof MAX_CHECKPOINTS_PER_EPOCH>,
|
|
46
46
|
/**
|
|
47
47
|
* Accumulated opening proofs for all blobs before this checkpoint range.
|
|
48
48
|
*/
|
|
@@ -65,8 +65,8 @@ export class CheckpointRollupPublicInputs {
|
|
|
65
65
|
reader.readObject(AppendOnlyTreeSnapshot),
|
|
66
66
|
reader.readObject(AppendOnlyTreeSnapshot),
|
|
67
67
|
reader.readObject(AppendOnlyTreeSnapshot),
|
|
68
|
-
reader.readArray(
|
|
69
|
-
reader.readArray(
|
|
68
|
+
reader.readArray(MAX_CHECKPOINTS_PER_EPOCH, Fr),
|
|
69
|
+
reader.readArray(MAX_CHECKPOINTS_PER_EPOCH, FeeRecipient),
|
|
70
70
|
reader.readObject(BlobAccumulator),
|
|
71
71
|
reader.readObject(BlobAccumulator),
|
|
72
72
|
reader.readObject(FinalBlobBatchingChallenges),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FinalBlobAccumulator } from '@aztec/blob-lib/types';
|
|
2
|
-
import {
|
|
2
|
+
import { MAX_CHECKPOINTS_PER_EPOCH } from '@aztec/constants';
|
|
3
3
|
import { makeTuple } from '@aztec/foundation/array';
|
|
4
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
5
|
import { bufferSchemaFor } from '@aztec/foundation/schemas';
|
|
@@ -27,8 +27,8 @@ export class RootRollupPublicInputs {
|
|
|
27
27
|
*/
|
|
28
28
|
public outHash: Fr,
|
|
29
29
|
/** Hashes of checkpoint headers for this rollup. */
|
|
30
|
-
public checkpointHeaderHashes: Tuple<Fr, typeof
|
|
31
|
-
public fees: Tuple<FeeRecipient, typeof
|
|
30
|
+
public checkpointHeaderHashes: Tuple<Fr, typeof MAX_CHECKPOINTS_PER_EPOCH>,
|
|
31
|
+
public fees: Tuple<FeeRecipient, typeof MAX_CHECKPOINTS_PER_EPOCH>,
|
|
32
32
|
public constants: EpochConstantData,
|
|
33
33
|
public blobPublicInputs: FinalBlobAccumulator,
|
|
34
34
|
) {}
|
|
@@ -68,8 +68,8 @@ export class RootRollupPublicInputs {
|
|
|
68
68
|
Fr.fromBuffer(reader),
|
|
69
69
|
Fr.fromBuffer(reader),
|
|
70
70
|
Fr.fromBuffer(reader),
|
|
71
|
-
reader.readArray(
|
|
72
|
-
reader.readArray(
|
|
71
|
+
reader.readArray(MAX_CHECKPOINTS_PER_EPOCH, Fr),
|
|
72
|
+
reader.readArray(MAX_CHECKPOINTS_PER_EPOCH, FeeRecipient),
|
|
73
73
|
EpochConstantData.fromBuffer(reader),
|
|
74
74
|
reader.readObject(FinalBlobAccumulator),
|
|
75
75
|
);
|
|
@@ -99,8 +99,8 @@ export class RootRollupPublicInputs {
|
|
|
99
99
|
Fr.random(),
|
|
100
100
|
Fr.random(),
|
|
101
101
|
Fr.random(),
|
|
102
|
-
makeTuple(
|
|
103
|
-
makeTuple(
|
|
102
|
+
makeTuple(MAX_CHECKPOINTS_PER_EPOCH, Fr.random),
|
|
103
|
+
makeTuple(MAX_CHECKPOINTS_PER_EPOCH, FeeRecipient.random),
|
|
104
104
|
new EpochConstantData(Fr.random(), Fr.random(), Fr.random(), Fr.random(), Fr.random()),
|
|
105
105
|
FinalBlobAccumulator.random(),
|
|
106
106
|
);
|
package/src/slashing/empire.ts
CHANGED
|
@@ -83,7 +83,9 @@ export function getFirstEligibleRoundForOffense(
|
|
|
83
83
|
case OffenseType.PROPOSED_INSUFFICIENT_ATTESTATIONS:
|
|
84
84
|
case OffenseType.PROPOSED_INCORRECT_ATTESTATIONS:
|
|
85
85
|
case OffenseType.ATTESTED_DESCENDANT_OF_INVALID:
|
|
86
|
-
case OffenseType.BROADCASTED_INVALID_BLOCK_PROPOSAL:
|
|
86
|
+
case OffenseType.BROADCASTED_INVALID_BLOCK_PROPOSAL:
|
|
87
|
+
case OffenseType.DUPLICATE_PROPOSAL:
|
|
88
|
+
case OffenseType.DUPLICATE_ATTESTATION: {
|
|
87
89
|
const slot = offense.epochOrSlot;
|
|
88
90
|
const detectedSlot = SlotNumber.fromBigInt(slot + 1n);
|
|
89
91
|
return getRoundForSlot(detectedSlot, constants).round + 1n;
|
package/src/slashing/helpers.ts
CHANGED
|
@@ -50,6 +50,8 @@ export function getPenaltyForOffense(
|
|
|
50
50
|
SlasherConfig,
|
|
51
51
|
| 'slashAttestDescendantOfInvalidPenalty'
|
|
52
52
|
| 'slashBroadcastedInvalidBlockPenalty'
|
|
53
|
+
| 'slashDuplicateProposalPenalty'
|
|
54
|
+
| 'slashDuplicateAttestationPenalty'
|
|
53
55
|
| 'slashPrunePenalty'
|
|
54
56
|
| 'slashDataWithholdingPenalty'
|
|
55
57
|
| 'slashUnknownPenalty'
|
|
@@ -71,6 +73,10 @@ export function getPenaltyForOffense(
|
|
|
71
73
|
return config.slashAttestDescendantOfInvalidPenalty;
|
|
72
74
|
case OffenseType.BROADCASTED_INVALID_BLOCK_PROPOSAL:
|
|
73
75
|
return config.slashBroadcastedInvalidBlockPenalty;
|
|
76
|
+
case OffenseType.DUPLICATE_PROPOSAL:
|
|
77
|
+
return config.slashDuplicateProposalPenalty;
|
|
78
|
+
case OffenseType.DUPLICATE_ATTESTATION:
|
|
79
|
+
return config.slashDuplicateAttestationPenalty;
|
|
74
80
|
case OffenseType.UNKNOWN:
|
|
75
81
|
return config.slashUnknownPenalty;
|
|
76
82
|
default: {
|
|
@@ -85,6 +91,8 @@ export function getTimeUnitForOffense(offense: OffenseType): 'epoch' | 'slot' {
|
|
|
85
91
|
switch (offense) {
|
|
86
92
|
case OffenseType.ATTESTED_DESCENDANT_OF_INVALID:
|
|
87
93
|
case OffenseType.BROADCASTED_INVALID_BLOCK_PROPOSAL:
|
|
94
|
+
case OffenseType.DUPLICATE_PROPOSAL:
|
|
95
|
+
case OffenseType.DUPLICATE_ATTESTATION:
|
|
88
96
|
case OffenseType.PROPOSED_INCORRECT_ATTESTATIONS:
|
|
89
97
|
case OffenseType.PROPOSED_INSUFFICIENT_ATTESTATIONS:
|
|
90
98
|
return 'slot';
|
package/src/slashing/tally.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { sumBigint } from '@aztec/foundation/bigint';
|
|
2
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
2
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
4
|
import type { PartialBy } from '@aztec/foundation/types';
|
|
4
5
|
|
|
@@ -20,9 +21,10 @@ export function getSlashConsensusVotesFromOffenses(
|
|
|
20
21
|
settings: {
|
|
21
22
|
slashingAmounts: [bigint, bigint, bigint];
|
|
22
23
|
epochDuration: number;
|
|
24
|
+
targetCommitteeSize: number;
|
|
23
25
|
},
|
|
24
26
|
): ValidatorSlashVote[] {
|
|
25
|
-
const { slashingAmounts } = settings;
|
|
27
|
+
const { slashingAmounts, targetCommitteeSize } = settings;
|
|
26
28
|
|
|
27
29
|
if (committees.length !== epochsForCommittees.length) {
|
|
28
30
|
throw new Error('committees and epochsForCommittees must have the same length');
|
|
@@ -31,7 +33,9 @@ export function getSlashConsensusVotesFromOffenses(
|
|
|
31
33
|
const votes = committees.flatMap((committee, committeeIndex) => {
|
|
32
34
|
const committeeEpoch = epochsForCommittees[committeeIndex];
|
|
33
35
|
|
|
34
|
-
|
|
36
|
+
// Map over actual committee members, then pad to targetCommitteeSize.
|
|
37
|
+
// Padding handles cases where committees may be empty (e.g., when there aren't enough validators to fill the committee size during network startup).
|
|
38
|
+
const votes = committee.map(validator => {
|
|
35
39
|
// Find offenses for this validator in this specific epoch.
|
|
36
40
|
// If an offense has no epoch, it is considered for all epochs due to a slashAlways setting.
|
|
37
41
|
const validatorOffenses = offenses.filter(
|
|
@@ -45,6 +49,8 @@ export function getSlashConsensusVotesFromOffenses(
|
|
|
45
49
|
const slashUnits = getSlashUnitsForAmount(slashAmount, slashingAmounts);
|
|
46
50
|
return Number(slashUnits);
|
|
47
51
|
});
|
|
52
|
+
|
|
53
|
+
return padArrayEnd(votes, 0, targetCommitteeSize);
|
|
48
54
|
});
|
|
49
55
|
|
|
50
56
|
return votes;
|
package/src/slashing/types.ts
CHANGED
|
@@ -20,6 +20,10 @@ export enum OffenseType {
|
|
|
20
20
|
PROPOSED_INCORRECT_ATTESTATIONS = 6,
|
|
21
21
|
/** A committee member attested to a block that was built as a descendent of an invalid block (as in a block with invalid attestations) */
|
|
22
22
|
ATTESTED_DESCENDANT_OF_INVALID = 7,
|
|
23
|
+
/** A proposer sent duplicate proposals for the same position (slot, indexWithinCheckpoint for blocks or slot for checkpoints) */
|
|
24
|
+
DUPLICATE_PROPOSAL = 8,
|
|
25
|
+
/** A validator signed attestations for different proposals at the same slot (equivocation) */
|
|
26
|
+
DUPLICATE_ATTESTATION = 9,
|
|
23
27
|
}
|
|
24
28
|
|
|
25
29
|
export function getOffenseTypeName(offense: OffenseType) {
|
|
@@ -40,6 +44,10 @@ export function getOffenseTypeName(offense: OffenseType) {
|
|
|
40
44
|
return 'proposed_incorrect_attestations';
|
|
41
45
|
case OffenseType.ATTESTED_DESCENDANT_OF_INVALID:
|
|
42
46
|
return 'attested_descendant_of_invalid';
|
|
47
|
+
case OffenseType.DUPLICATE_PROPOSAL:
|
|
48
|
+
return 'duplicate_proposal';
|
|
49
|
+
case OffenseType.DUPLICATE_ATTESTATION:
|
|
50
|
+
return 'duplicate_attestation';
|
|
43
51
|
default:
|
|
44
52
|
throw new Error(`Unknown offense type: ${offense}`);
|
|
45
53
|
}
|
|
@@ -56,6 +64,8 @@ export const OffenseToBigInt: Record<OffenseType, bigint> = {
|
|
|
56
64
|
[OffenseType.PROPOSED_INSUFFICIENT_ATTESTATIONS]: 5n,
|
|
57
65
|
[OffenseType.PROPOSED_INCORRECT_ATTESTATIONS]: 6n,
|
|
58
66
|
[OffenseType.ATTESTED_DESCENDANT_OF_INVALID]: 7n,
|
|
67
|
+
[OffenseType.DUPLICATE_PROPOSAL]: 8n,
|
|
68
|
+
[OffenseType.DUPLICATE_ATTESTATION]: 9n,
|
|
59
69
|
};
|
|
60
70
|
|
|
61
71
|
export function bigIntToOffense(offense: bigint): OffenseType {
|
|
@@ -76,6 +86,10 @@ export function bigIntToOffense(offense: bigint): OffenseType {
|
|
|
76
86
|
return OffenseType.PROPOSED_INCORRECT_ATTESTATIONS;
|
|
77
87
|
case 7n:
|
|
78
88
|
return OffenseType.ATTESTED_DESCENDANT_OF_INVALID;
|
|
89
|
+
case 8n:
|
|
90
|
+
return OffenseType.DUPLICATE_PROPOSAL;
|
|
91
|
+
case 9n:
|
|
92
|
+
return OffenseType.DUPLICATE_ATTESTATION;
|
|
79
93
|
default:
|
|
80
94
|
throw new Error(`Unknown offense: ${offense}`);
|
|
81
95
|
}
|
package/src/tests/factories.ts
CHANGED
|
@@ -7,11 +7,11 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
ARCHIVE_HEIGHT,
|
|
9
9
|
AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED,
|
|
10
|
-
AZTEC_MAX_EPOCH_DURATION,
|
|
11
10
|
CHONK_PROOF_LENGTH,
|
|
12
11
|
CONTRACT_CLASS_LOG_SIZE_IN_FIELDS,
|
|
13
12
|
GeneratorIndex,
|
|
14
13
|
L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH,
|
|
14
|
+
MAX_CHECKPOINTS_PER_EPOCH,
|
|
15
15
|
MAX_CONTRACT_CLASS_LOGS_PER_TX,
|
|
16
16
|
MAX_ENQUEUED_CALLS_PER_CALL,
|
|
17
17
|
MAX_ENQUEUED_CALLS_PER_TX,
|
|
@@ -656,7 +656,7 @@ function makeClaimedLengthArray<T extends Serializable, N extends number>(
|
|
|
656
656
|
*/
|
|
657
657
|
export function makePrivateCircuitPublicInputs(seed = 0): PrivateCircuitPublicInputs {
|
|
658
658
|
return PrivateCircuitPublicInputs.from({
|
|
659
|
-
|
|
659
|
+
expirationTimestamp: BigInt(seed + 0x31415),
|
|
660
660
|
callContext: makeCallContext(seed, { isStaticCall: true }),
|
|
661
661
|
argsHash: fr(seed + 0x100),
|
|
662
662
|
returnsHash: fr(seed + 0x200),
|
|
@@ -851,8 +851,8 @@ export function makeCheckpointRollupPublicInputs(seed = 0) {
|
|
|
851
851
|
makeAppendOnlyTreeSnapshot(seed + 0x200),
|
|
852
852
|
makeAppendOnlyTreeSnapshot(seed + 0x300),
|
|
853
853
|
makeAppendOnlyTreeSnapshot(seed + 0x350),
|
|
854
|
-
makeTuple(
|
|
855
|
-
makeTuple(
|
|
854
|
+
makeTuple(MAX_CHECKPOINTS_PER_EPOCH, () => fr(seed), 0x400),
|
|
855
|
+
makeTuple(MAX_CHECKPOINTS_PER_EPOCH, () => makeFeeRecipient(seed), 0x500),
|
|
856
856
|
makeBlobAccumulator(seed + 0x600),
|
|
857
857
|
makeBlobAccumulator(seed + 0x700),
|
|
858
858
|
makeFinalBlobBatchingChallenges(seed + 0x800),
|
|
@@ -888,8 +888,8 @@ export function makeRootRollupPublicInputs(seed = 0): RootRollupPublicInputs {
|
|
|
888
888
|
fr(seed + 0x100),
|
|
889
889
|
fr(seed + 0x200),
|
|
890
890
|
fr(seed + 0x300),
|
|
891
|
-
makeTuple(
|
|
892
|
-
makeTuple(
|
|
891
|
+
makeTuple(MAX_CHECKPOINTS_PER_EPOCH, () => fr(seed), 0x400),
|
|
892
|
+
makeTuple(MAX_CHECKPOINTS_PER_EPOCH, () => makeFeeRecipient(seed), 0x500),
|
|
893
893
|
makeEpochConstantData(seed + 0x600),
|
|
894
894
|
makeFinalBlobAccumulator(seed + 0x700),
|
|
895
895
|
);
|
package/src/tests/mocks.ts
CHANGED
|
@@ -2,9 +2,9 @@ import {
|
|
|
2
2
|
FIXED_DA_GAS,
|
|
3
3
|
FIXED_L2_GAS,
|
|
4
4
|
MAX_ENQUEUED_CALLS_PER_TX,
|
|
5
|
-
MAX_INCLUDE_BY_TIMESTAMP_DURATION,
|
|
6
5
|
MAX_NULLIFIERS_PER_TX,
|
|
7
6
|
MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
|
|
7
|
+
MAX_TX_LIFETIME,
|
|
8
8
|
} from '@aztec/constants';
|
|
9
9
|
import { type FieldsOf, makeTuple } from '@aztec/foundation/array';
|
|
10
10
|
import { BlockNumber, CheckpointNumber, IndexWithinCheckpoint, SlotNumber } from '@aztec/foundation/branded-types';
|
|
@@ -139,8 +139,8 @@ export const mockTx = async (
|
|
|
139
139
|
data.constants.vkTreeRoot = vkTreeRoot;
|
|
140
140
|
data.constants.protocolContractsHash = protocolContractsHash;
|
|
141
141
|
|
|
142
|
-
// Set
|
|
143
|
-
data.
|
|
142
|
+
// Set expirationTimestamp to the maximum allowed duration from the current time.
|
|
143
|
+
data.expirationTimestamp = BigInt(Math.floor(Date.now() / 1000) + MAX_TX_LIFETIME);
|
|
144
144
|
|
|
145
145
|
const publicFunctionCalldata: HashedValues[] = [];
|
|
146
146
|
if (!isForPublic) {
|
|
@@ -503,6 +503,7 @@ export interface MakeConsensusPayloadOptions {
|
|
|
503
503
|
archive?: Fr;
|
|
504
504
|
txHashes?: TxHash[];
|
|
505
505
|
txs?: Tx[];
|
|
506
|
+
feeAssetPriceModifier?: bigint;
|
|
506
507
|
}
|
|
507
508
|
|
|
508
509
|
export interface MakeBlockProposalOptions {
|
|
@@ -519,6 +520,7 @@ export interface MakeCheckpointProposalOptions {
|
|
|
519
520
|
signer?: Secp256k1Signer;
|
|
520
521
|
checkpointHeader?: CheckpointHeader;
|
|
521
522
|
archiveRoot?: Fr;
|
|
523
|
+
feeAssetPriceModifier?: bigint;
|
|
522
524
|
/** Options for the lastBlock - if undefined, no lastBlock is included */
|
|
523
525
|
lastBlock?: {
|
|
524
526
|
blockHeader?: BlockHeader;
|
|
@@ -534,11 +536,12 @@ const makeAndSignConsensusPayload = (
|
|
|
534
536
|
options?: MakeConsensusPayloadOptions,
|
|
535
537
|
) => {
|
|
536
538
|
const header = options?.header ?? makeCheckpointHeader(1);
|
|
537
|
-
const { signer = Secp256k1Signer.random(), archive = Fr.random() } = options ?? {};
|
|
539
|
+
const { signer = Secp256k1Signer.random(), archive = Fr.random(), feeAssetPriceModifier = 0n } = options ?? {};
|
|
538
540
|
|
|
539
541
|
const payload = ConsensusPayload.fromFields({
|
|
540
542
|
header,
|
|
541
543
|
archive,
|
|
544
|
+
feeAssetPriceModifier,
|
|
542
545
|
});
|
|
543
546
|
|
|
544
547
|
const hash = getHashedSignaturePayloadEthSignedMessage(payload, domainSeparator);
|
|
@@ -582,6 +585,7 @@ export const makeCheckpointProposal = (options?: MakeCheckpointProposalOptions):
|
|
|
582
585
|
const blockHeader = options?.lastBlock?.blockHeader ?? makeBlockHeader(1);
|
|
583
586
|
const checkpointHeader = options?.checkpointHeader ?? makeCheckpointHeader(1);
|
|
584
587
|
const archiveRoot = options?.archiveRoot ?? Fr.random();
|
|
588
|
+
const feeAssetPriceModifier = options?.feeAssetPriceModifier ?? 0n;
|
|
585
589
|
const signer = options?.signer ?? Secp256k1Signer.random();
|
|
586
590
|
|
|
587
591
|
// Build lastBlock info if provided
|
|
@@ -594,8 +598,12 @@ export const makeCheckpointProposal = (options?: MakeCheckpointProposalOptions):
|
|
|
594
598
|
}
|
|
595
599
|
: undefined;
|
|
596
600
|
|
|
597
|
-
return CheckpointProposal.createProposalFromSigner(
|
|
598
|
-
|
|
601
|
+
return CheckpointProposal.createProposalFromSigner(
|
|
602
|
+
checkpointHeader,
|
|
603
|
+
archiveRoot,
|
|
604
|
+
feeAssetPriceModifier,
|
|
605
|
+
lastBlockInfo,
|
|
606
|
+
payload => Promise.resolve(signer.signMessage(payload)),
|
|
599
607
|
);
|
|
600
608
|
};
|
|
601
609
|
|
|
@@ -605,6 +613,7 @@ export const makeCheckpointProposal = (options?: MakeCheckpointProposalOptions):
|
|
|
605
613
|
export type MakeCheckpointAttestationOptions = {
|
|
606
614
|
header?: CheckpointHeader;
|
|
607
615
|
archive?: Fr;
|
|
616
|
+
feeAssetPriceModifier?: bigint;
|
|
608
617
|
attesterSigner?: Secp256k1Signer;
|
|
609
618
|
proposerSigner?: Secp256k1Signer;
|
|
610
619
|
signer?: Secp256k1Signer;
|
|
@@ -616,9 +625,10 @@ export type MakeCheckpointAttestationOptions = {
|
|
|
616
625
|
export const makeCheckpointAttestation = (options: MakeCheckpointAttestationOptions = {}): CheckpointAttestation => {
|
|
617
626
|
const header = options.header ?? makeCheckpointHeader(1);
|
|
618
627
|
const archive = options.archive ?? Fr.random();
|
|
628
|
+
const feeAssetPriceModifier = options.feeAssetPriceModifier ?? 0n;
|
|
619
629
|
const { signer, attesterSigner = signer, proposerSigner = signer } = options;
|
|
620
630
|
|
|
621
|
-
const payload = new ConsensusPayload(header, archive);
|
|
631
|
+
const payload = new ConsensusPayload(header, archive, feeAssetPriceModifier);
|
|
622
632
|
|
|
623
633
|
// Sign as attester
|
|
624
634
|
const attestationHash = getHashedSignaturePayloadEthSignedMessage(
|
|
@@ -631,7 +641,7 @@ export const makeCheckpointAttestation = (options: MakeCheckpointAttestationOpti
|
|
|
631
641
|
// Sign as proposer - use CheckpointProposal's payload format (serializeToBuffer)
|
|
632
642
|
// This is different from ConsensusPayload's format (ABI encoding)
|
|
633
643
|
const proposalSignerToUse = proposerSigner ?? Secp256k1Signer.random();
|
|
634
|
-
const tempProposal = new CheckpointProposal(header, archive, Signature.empty());
|
|
644
|
+
const tempProposal = new CheckpointProposal(header, archive, feeAssetPriceModifier, Signature.empty());
|
|
635
645
|
const proposalHash = getHashedSignaturePayloadEthSignedMessage(
|
|
636
646
|
tempProposal,
|
|
637
647
|
SignatureDomainSeparator.checkpointProposal,
|
|
@@ -648,7 +658,7 @@ export const makeCheckpointAttestationFromProposal = (
|
|
|
648
658
|
proposal: CheckpointProposal,
|
|
649
659
|
attesterSigner?: Secp256k1Signer,
|
|
650
660
|
): CheckpointAttestation => {
|
|
651
|
-
const payload = new ConsensusPayload(proposal.checkpointHeader, proposal.archive);
|
|
661
|
+
const payload = new ConsensusPayload(proposal.checkpointHeader, proposal.archive, proposal.feeAssetPriceModifier);
|
|
652
662
|
|
|
653
663
|
// Sign as attester
|
|
654
664
|
const attestationHash = getHashedSignaturePayloadEthSignedMessage(
|
|
@@ -672,8 +682,9 @@ export const makeCheckpointAttestationFromCheckpoint = (
|
|
|
672
682
|
): CheckpointAttestation => {
|
|
673
683
|
const header = checkpoint.header;
|
|
674
684
|
const archive = checkpoint.archive.root;
|
|
685
|
+
const feeAssetPriceModifier = checkpoint.feeAssetPriceModifier;
|
|
675
686
|
|
|
676
|
-
return makeCheckpointAttestation({ header, archive, attesterSigner, proposerSigner });
|
|
687
|
+
return makeCheckpointAttestation({ header, archive, feeAssetPriceModifier, attesterSigner, proposerSigner });
|
|
677
688
|
};
|
|
678
689
|
|
|
679
690
|
/**
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timetable constants used for sequencer timing calculations.
|
|
3
|
+
* These define the time budgets for various phases of block production.
|
|
4
|
+
*
|
|
5
|
+
* The sequencer slot is divided into phases:
|
|
6
|
+
* 1. Checkpoint initialization (sync + proposer check)
|
|
7
|
+
* 2. Block building (execution)
|
|
8
|
+
* 3. Checkpoint assembly
|
|
9
|
+
* 4. P2P propagation for proposal and attestations (round-trip)
|
|
10
|
+
* 5. L1 publishing
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/** Time budget for checkpoint initialization (sync + proposer check) in seconds */
|
|
14
|
+
export const CHECKPOINT_INITIALIZATION_TIME = 1;
|
|
15
|
+
|
|
16
|
+
/** Time budget for assembling a checkpoint after building the last block in seconds */
|
|
17
|
+
export const CHECKPOINT_ASSEMBLE_TIME = 1;
|
|
18
|
+
|
|
19
|
+
/** Default one-way P2P propagation time for proposals and attestations in seconds */
|
|
20
|
+
export const DEFAULT_P2P_PROPAGATION_TIME = 2;
|
|
21
|
+
|
|
22
|
+
/** Default L1 publishing time (matches Ethereum slot duration on mainnet) in seconds */
|
|
23
|
+
export const DEFAULT_L1_PUBLISHING_TIME = 12;
|
|
24
|
+
|
|
25
|
+
/** Minimum execution time for building a block in seconds */
|
|
26
|
+
export const MIN_EXECUTION_TIME = 2;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Calculates the maximum number of blocks that can be built in a slot.
|
|
30
|
+
* Used by both the sequencer timetable and p2p gossipsub scoring.
|
|
31
|
+
*
|
|
32
|
+
* @param aztecSlotDurationSec - Aztec slot duration in seconds
|
|
33
|
+
* @param blockDurationSec - Duration per block in seconds (undefined = single block mode)
|
|
34
|
+
* @param opts - Optional overrides for timing constants
|
|
35
|
+
* @returns Maximum number of blocks per slot
|
|
36
|
+
*/
|
|
37
|
+
export function calculateMaxBlocksPerSlot(
|
|
38
|
+
aztecSlotDurationSec: number,
|
|
39
|
+
blockDurationSec: number | undefined,
|
|
40
|
+
opts: {
|
|
41
|
+
checkpointInitializationTime?: number;
|
|
42
|
+
checkpointAssembleTime?: number;
|
|
43
|
+
p2pPropagationTime?: number;
|
|
44
|
+
l1PublishingTime?: number;
|
|
45
|
+
} = {},
|
|
46
|
+
): number {
|
|
47
|
+
if (!blockDurationSec) {
|
|
48
|
+
return 1; // Single block per slot
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const initOffset = opts.checkpointInitializationTime ?? CHECKPOINT_INITIALIZATION_TIME;
|
|
52
|
+
const assembleTime = opts.checkpointAssembleTime ?? CHECKPOINT_ASSEMBLE_TIME;
|
|
53
|
+
const p2pTime = opts.p2pPropagationTime ?? DEFAULT_P2P_PROPAGATION_TIME;
|
|
54
|
+
const l1Time = opts.l1PublishingTime ?? DEFAULT_L1_PUBLISHING_TIME;
|
|
55
|
+
|
|
56
|
+
// Calculate checkpoint finalization time (assembly + round-trip propagation + L1 publishing)
|
|
57
|
+
const checkpointFinalizationTime = assembleTime + p2pTime * 2 + l1Time;
|
|
58
|
+
|
|
59
|
+
// Time reserved at end for last sub-slot (validator re-execution) + finalization
|
|
60
|
+
const timeReservedAtEnd = blockDurationSec + checkpointFinalizationTime;
|
|
61
|
+
|
|
62
|
+
// Time available for building blocks
|
|
63
|
+
const timeAvailableForBlocks = aztecSlotDurationSec - initOffset - timeReservedAtEnd;
|
|
64
|
+
|
|
65
|
+
return Math.max(1, Math.floor(timeAvailableForBlocks / blockDurationSec));
|
|
66
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { toBigIntBE, toBufferBE } from '@aztec/foundation/bigint-buffer';
|
|
2
|
+
import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
|
|
2
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
4
|
import { schemas } from '@aztec/foundation/schemas';
|
|
4
5
|
import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
@@ -81,11 +82,15 @@ export class PublicDataTreeLeafPreimage implements IndexedTreeLeafPreimage {
|
|
|
81
82
|
toHashInputs(): Buffer[] {
|
|
82
83
|
return [
|
|
83
84
|
...this.leaf.toHashInputs(),
|
|
84
|
-
Buffer.from(toBufferBE(this.nextIndex, 32)),
|
|
85
85
|
Buffer.from(this.nextKey.toBuffer()),
|
|
86
|
+
Buffer.from(toBufferBE(this.nextIndex, 32)),
|
|
86
87
|
];
|
|
87
88
|
}
|
|
88
89
|
|
|
90
|
+
hash(): Promise<Fr> {
|
|
91
|
+
return poseidon2Hash(this.toHashInputs());
|
|
92
|
+
}
|
|
93
|
+
|
|
89
94
|
clone(): PublicDataTreeLeafPreimage {
|
|
90
95
|
return new PublicDataTreeLeafPreimage(this.leaf.clone(), this.nextKey, this.nextIndex);
|
|
91
96
|
}
|
|
@@ -104,10 +109,11 @@ export class PublicDataTreeLeafPreimage implements IndexedTreeLeafPreimage {
|
|
|
104
109
|
|
|
105
110
|
static fromBuffer(buffer: Buffer | BufferReader): PublicDataTreeLeafPreimage {
|
|
106
111
|
const reader = BufferReader.asReader(buffer);
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
112
|
+
return new PublicDataTreeLeafPreimage(
|
|
113
|
+
PublicDataTreeLeaf.fromBuffer(reader),
|
|
114
|
+
Fr.fromBuffer(reader),
|
|
115
|
+
toBigIntBE(reader.readBytes(32)),
|
|
116
|
+
);
|
|
111
117
|
}
|
|
112
118
|
|
|
113
119
|
static fromLeaf(leaf: PublicDataTreeLeaf, nextKey: bigint, nextIndex: bigint): PublicDataTreeLeafPreimage {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AnyTx, TxValidationResult, TxValidator } from './tx_validator.js';
|
|
2
2
|
|
|
3
|
-
export class EmptyTxValidator<T
|
|
3
|
+
export class EmptyTxValidator<T = AnyTx> implements TxValidator<T> {
|
|
4
4
|
public validateTx(_tx: T): Promise<TxValidationResult> {
|
|
5
5
|
return Promise.resolve({ result: 'valid' });
|
|
6
6
|
}
|
|
@@ -12,7 +12,7 @@ export const TX_ERROR_DUPLICATE_NULLIFIER_IN_TX = 'Duplicate nullifier in tx';
|
|
|
12
12
|
export const TX_ERROR_EXISTING_NULLIFIER = 'Existing nullifier';
|
|
13
13
|
|
|
14
14
|
// Metadata
|
|
15
|
-
export const
|
|
15
|
+
export const TX_ERROR_INVALID_EXPIRATION_TIMESTAMP = 'Invalid expiration timestamp';
|
|
16
16
|
export const TX_ERROR_INCORRECT_L1_CHAIN_ID = 'Incorrect L1 chain id';
|
|
17
17
|
export const TX_ERROR_INCORRECT_ROLLUP_VERSION = 'Incorrect rollup version';
|
|
18
18
|
export const TX_ERROR_INCORRECT_VK_TREE_ROOT = 'Incorrect verification keys tree root';
|
|
@@ -20,7 +20,7 @@ export type TxValidationResult =
|
|
|
20
20
|
| { result: 'invalid'; reason: string[] }
|
|
21
21
|
| { result: 'skipped'; reason: string[] };
|
|
22
22
|
|
|
23
|
-
export interface TxValidator<T
|
|
23
|
+
export interface TxValidator<T = AnyTx> {
|
|
24
24
|
validateTx(tx: T): Promise<TxValidationResult>;
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -12,7 +12,14 @@ import type {
|
|
|
12
12
|
} from './types.js';
|
|
13
13
|
|
|
14
14
|
export const ValidatorStatusInSlotSchema = zodFor<ValidatorStatusInSlot>()(
|
|
15
|
-
z.enum([
|
|
15
|
+
z.enum([
|
|
16
|
+
'checkpoint-mined',
|
|
17
|
+
'checkpoint-proposed',
|
|
18
|
+
'checkpoint-missed',
|
|
19
|
+
'blocks-missed',
|
|
20
|
+
'attestation-sent',
|
|
21
|
+
'attestation-missed',
|
|
22
|
+
]),
|
|
16
23
|
);
|
|
17
24
|
|
|
18
25
|
export const ValidatorStatusHistorySchema = zodFor<ValidatorStatusHistory>()(
|
package/src/validators/types.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
3
|
|
|
4
|
-
export type ValidatorStatusType = '
|
|
4
|
+
export type ValidatorStatusType = 'proposer' | 'attestation';
|
|
5
5
|
|
|
6
6
|
export type ValidatorStatusInSlot =
|
|
7
|
-
| '
|
|
8
|
-
| '
|
|
9
|
-
| '
|
|
7
|
+
| 'checkpoint-mined'
|
|
8
|
+
| 'checkpoint-proposed'
|
|
9
|
+
| 'checkpoint-missed'
|
|
10
|
+
| 'blocks-missed'
|
|
10
11
|
| 'attestation-sent'
|
|
11
12
|
| 'attestation-missed';
|
|
12
13
|
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
-
import type { AztecAddress } from '../aztec-address/index.js';
|
|
3
|
-
import { type ZodFor } from '../schemas/index.js';
|
|
4
|
-
import { NoteStatus } from './note_status.js';
|
|
5
|
-
/**
|
|
6
|
-
* A filter used to fetch notes.
|
|
7
|
-
* @remarks This filter is applied as an intersection of all its params.
|
|
8
|
-
*/
|
|
9
|
-
export type NotesFilter = {
|
|
10
|
-
/**
|
|
11
|
-
* The contract address the note belongs to.
|
|
12
|
-
* @remarks Providing a contract address is required as we need that information to trigger private state sync.
|
|
13
|
-
*/
|
|
14
|
-
contractAddress: AztecAddress;
|
|
15
|
-
/** The owner of the note. */
|
|
16
|
-
owner?: AztecAddress;
|
|
17
|
-
/** The specific storage location of the note on the contract. */
|
|
18
|
-
storageSlot?: Fr;
|
|
19
|
-
/** The status of the note. Defaults to 'ACTIVE'. */
|
|
20
|
-
status?: NoteStatus;
|
|
21
|
-
/** The siloed nullifier for the note. */
|
|
22
|
-
siloedNullifier?: Fr;
|
|
23
|
-
/** The scopes in which to get notes from. This defaults to all scopes. */
|
|
24
|
-
scopes?: AztecAddress[];
|
|
25
|
-
};
|
|
26
|
-
export declare const NotesFilterSchema: ZodFor<NotesFilter>;
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZXNfZmlsdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbm90ZS9ub3Rlc19maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJekQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFXLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDOzs7R0FHRztBQUNILE1BQU0sTUFBTSxXQUFXLEdBQUc7SUFDeEI7OztPQUdHO0lBQ0gsZUFBZSxFQUFFLFlBQVksQ0FBQztJQUM5Qiw2QkFBNkI7SUFDN0IsS0FBSyxDQUFDLEVBQUUsWUFBWSxDQUFDO0lBQ3JCLGlFQUFpRTtJQUNqRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDakIsb0RBQW9EO0lBQ3BELE1BQU0sQ0FBQyxFQUFFLFVBQVUsQ0FBQztJQUNwQix5Q0FBeUM7SUFDekMsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3JCLDBFQUEwRTtJQUMxRSxNQUFNLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQztDQUN6QixDQUFDO0FBRUYsZUFBTyxNQUFNLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxXQUFXLENBT2hELENBQUMifQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notes_filter.d.ts","sourceRoot":"","sources":["../../src/note/notes_filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAIzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,eAAe,EAAE,YAAY,CAAC;IAC9B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,iEAAiE;IACjE,WAAW,CAAC,EAAE,EAAE,CAAC;IACjB,oDAAoD;IACpD,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,yCAAyC;IACzC,eAAe,CAAC,EAAE,EAAE,CAAC;IACrB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAOhD,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { schemas } from '../schemas/index.js';
|
|
3
|
-
import { NoteStatus } from './note_status.js';
|
|
4
|
-
export const NotesFilterSchema = z.object({
|
|
5
|
-
contractAddress: schemas.AztecAddress,
|
|
6
|
-
owner: schemas.AztecAddress.optional(),
|
|
7
|
-
storageSlot: schemas.Fr.optional(),
|
|
8
|
-
status: z.nativeEnum(NoteStatus).optional(),
|
|
9
|
-
siloedNullifier: schemas.Fr.optional(),
|
|
10
|
-
scopes: z.array(schemas.AztecAddress).optional()
|
|
11
|
-
});
|
package/src/note/notes_filter.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
-
|
|
3
|
-
import { z } from 'zod';
|
|
4
|
-
|
|
5
|
-
import type { AztecAddress } from '../aztec-address/index.js';
|
|
6
|
-
import { type ZodFor, schemas } from '../schemas/index.js';
|
|
7
|
-
import { NoteStatus } from './note_status.js';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* A filter used to fetch notes.
|
|
11
|
-
* @remarks This filter is applied as an intersection of all its params.
|
|
12
|
-
*/
|
|
13
|
-
export type NotesFilter = {
|
|
14
|
-
/**
|
|
15
|
-
* The contract address the note belongs to.
|
|
16
|
-
* @remarks Providing a contract address is required as we need that information to trigger private state sync.
|
|
17
|
-
*/
|
|
18
|
-
contractAddress: AztecAddress;
|
|
19
|
-
/** The owner of the note. */
|
|
20
|
-
owner?: AztecAddress;
|
|
21
|
-
/** The specific storage location of the note on the contract. */
|
|
22
|
-
storageSlot?: Fr;
|
|
23
|
-
/** The status of the note. Defaults to 'ACTIVE'. */
|
|
24
|
-
status?: NoteStatus;
|
|
25
|
-
/** The siloed nullifier for the note. */
|
|
26
|
-
siloedNullifier?: Fr;
|
|
27
|
-
/** The scopes in which to get notes from. This defaults to all scopes. */
|
|
28
|
-
scopes?: AztecAddress[];
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
export const NotesFilterSchema: ZodFor<NotesFilter> = z.object({
|
|
32
|
-
contractAddress: schemas.AztecAddress,
|
|
33
|
-
owner: schemas.AztecAddress.optional(),
|
|
34
|
-
storageSlot: schemas.Fr.optional(),
|
|
35
|
-
status: z.nativeEnum(NoteStatus).optional(),
|
|
36
|
-
siloedNullifier: schemas.Fr.optional(),
|
|
37
|
-
scopes: z.array(schemas.AztecAddress).optional(),
|
|
38
|
-
});
|