@aztec/p2p 3.0.0-nightly.20251026 → 3.0.0-nightly.20251031
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/mem_pools/attestation_pool/attestation_pool.d.ts +15 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +32 -0
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +2 -0
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +16 -0
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +2 -0
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +22 -0
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +1 -0
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +8 -2
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +1 -0
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +6 -0
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +6 -0
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/services/encoding.d.ts +24 -3
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +73 -5
- package/dest/services/libp2p/libp2p_service.d.ts +15 -8
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +78 -26
- package/dest/services/reqresp/reqresp.js +2 -2
- package/dest/testbench/p2p_client_testbench_worker.js +4 -1
- package/dest/testbench/testbench.js +2 -2
- package/package.json +14 -14
- package/src/mem_pools/attestation_pool/attestation_pool.ts +17 -0
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +37 -0
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +21 -0
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +28 -0
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +7 -2
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +5 -0
- package/src/mem_pools/tx_pool/tx_pool.ts +7 -0
- package/src/services/encoding.ts +80 -5
- package/src/services/libp2p/libp2p_service.ts +75 -24
- package/src/services/reqresp/reqresp.ts +2 -2
- package/src/testbench/p2p_client_testbench_worker.ts +3 -0
- package/src/testbench/testbench.ts +2 -2
|
@@ -18,6 +18,14 @@ export interface AttestationPool {
|
|
|
18
18
|
* @return The block proposal if it exists, otherwise undefined.
|
|
19
19
|
*/
|
|
20
20
|
getBlockProposal(id: string): Promise<BlockProposal | undefined>;
|
|
21
|
+
/**
|
|
22
|
+
* Check if a block proposal exists in the pool
|
|
23
|
+
*
|
|
24
|
+
* @param idOrProposal - The ID of the block proposal or the block proposal itself to check. The ID is proposal.payload.archive
|
|
25
|
+
*
|
|
26
|
+
* @return True if the block proposal exists, false otherwise.
|
|
27
|
+
*/
|
|
28
|
+
hasBlockProposal(idOrProposal: string | BlockProposal): Promise<boolean>;
|
|
21
29
|
/**
|
|
22
30
|
* AddAttestations
|
|
23
31
|
*
|
|
@@ -74,6 +82,13 @@ export interface AttestationPool {
|
|
|
74
82
|
* @return BlockAttestations
|
|
75
83
|
*/
|
|
76
84
|
getAttestationsForSlotAndProposal(slot: bigint, proposalId: string): Promise<BlockAttestation[]>;
|
|
85
|
+
/**
|
|
86
|
+
* Check if a specific attestation exists in the pool
|
|
87
|
+
*
|
|
88
|
+
* @param attestation - The attestation to check
|
|
89
|
+
* @return True if the attestation exists, false otherwise
|
|
90
|
+
*/
|
|
91
|
+
hasAttestation(attestation: BlockAttestation): Promise<boolean>;
|
|
77
92
|
/** Returns whether the pool is empty. */
|
|
78
93
|
isEmpty(): Promise<boolean>;
|
|
79
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/attestation_pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9D;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAEjE;;;;OAIG;IACH,eAAe,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE;;;;OAIG;IACH,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE;;;;;;OAMG;IACH,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD;;;;;;OAMG;IACH,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;;;;;;OAOG;IACH,oCAAoC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtF;;;;;;;OAOG;IACH,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAElE;;;;;;;;OAQG;IACH,iCAAiC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAEjG,yCAAyC;IACzC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7B"}
|
|
1
|
+
{"version":3,"file":"attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/attestation_pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9D;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAEjE;;;;;;OAMG;IACH,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEzE;;;;OAIG;IACH,eAAe,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE;;;;OAIG;IACH,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE;;;;;;OAMG;IACH,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD;;;;;;OAMG;IACH,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;;;;;;OAOG;IACH,oCAAoC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtF;;;;;;;OAOG;IACH,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAElE;;;;;;;;OAQG;IACH,iCAAiC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAEjG;;;;;OAKG;IACH,cAAc,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhE,yCAAyC;IACzC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attestation_pool_test_suite.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/attestation_pool_test_suite.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,wBAAgB,uBAAuB,CAAC,kBAAkB,EAAE,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"attestation_pool_test_suite.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/attestation_pool_test_suite.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,wBAAgB,uBAAuB,CAAC,kBAAkB,EAAE,MAAM,eAAe,QA0YhF"}
|
|
@@ -52,6 +52,10 @@ export function describeAttestationPool(getAttestationPool) {
|
|
|
52
52
|
const retrievedAttestations = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), archive.toString());
|
|
53
53
|
expect(retrievedAttestations.length).toBe(attestations.length);
|
|
54
54
|
compareAttestations(retrievedAttestations, attestations);
|
|
55
|
+
// Check hasAttestation for added attestations
|
|
56
|
+
for (const attestation of attestations){
|
|
57
|
+
expect(await ap.hasAttestation(attestation)).toBe(true);
|
|
58
|
+
}
|
|
55
59
|
const retrievedAttestationsForSlot = await ap.getAttestationsForSlot(BigInt(slotNumber));
|
|
56
60
|
expect(retrievedAttestationsForSlot.length).toBe(attestations.length);
|
|
57
61
|
compareAttestations(retrievedAttestationsForSlot, attestations);
|
|
@@ -66,6 +70,7 @@ export function describeAttestationPool(getAttestationPool) {
|
|
|
66
70
|
...attestations,
|
|
67
71
|
newAttestation
|
|
68
72
|
]);
|
|
73
|
+
expect(await ap.hasAttestation(newAttestation)).toBe(true);
|
|
69
74
|
const retrievedAttestationsForSlotAfterAdd = await ap.getAttestationsForSlot(BigInt(slotNumber));
|
|
70
75
|
expect(retrievedAttestationsForSlotAfterAdd.length).toBe(attestations.length + 1);
|
|
71
76
|
compareAttestations(retrievedAttestationsForSlotAfterAdd, [
|
|
@@ -76,6 +81,11 @@ export function describeAttestationPool(getAttestationPool) {
|
|
|
76
81
|
await ap.deleteAttestationsForSlot(BigInt(slotNumber));
|
|
77
82
|
const retreivedAttestationsAfterDelete = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), archive.toString());
|
|
78
83
|
expect(retreivedAttestationsAfterDelete.length).toBe(0);
|
|
84
|
+
// Check hasAttestation after deletion
|
|
85
|
+
for (const attestation of attestations){
|
|
86
|
+
expect(await ap.hasAttestation(attestation)).toBe(false);
|
|
87
|
+
}
|
|
88
|
+
expect(await ap.hasAttestation(newAttestation)).toBe(false);
|
|
79
89
|
});
|
|
80
90
|
it('should handle duplicate proposals in a slot', async ()=>{
|
|
81
91
|
const slotNumber = 420;
|
|
@@ -149,9 +159,17 @@ export function describeAttestationPool(getAttestationPool) {
|
|
|
149
159
|
const retreivedAttestations = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
|
|
150
160
|
expect(retreivedAttestations.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
|
|
151
161
|
compareAttestations(retreivedAttestations, attestations);
|
|
162
|
+
// Check hasAttestation before deletion
|
|
163
|
+
for (const attestation of attestations){
|
|
164
|
+
expect(await ap.hasAttestation(attestation)).toBe(true);
|
|
165
|
+
}
|
|
152
166
|
await ap.deleteAttestations(attestations);
|
|
153
167
|
const gottenAfterDelete = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
|
|
154
168
|
expect(gottenAfterDelete.length).toBe(0);
|
|
169
|
+
// Check hasAttestation after deletion
|
|
170
|
+
for (const attestation of attestations){
|
|
171
|
+
expect(await ap.hasAttestation(attestation)).toBe(false);
|
|
172
|
+
}
|
|
155
173
|
});
|
|
156
174
|
it('should blanket delete attestations per slot', async ()=>{
|
|
157
175
|
const slotNumber = 420;
|
|
@@ -224,11 +242,16 @@ export function describeAttestationPool(getAttestationPool) {
|
|
|
224
242
|
const retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
225
243
|
expect(retrievedProposal).toBeDefined();
|
|
226
244
|
expect(retrievedProposal).toEqual(proposal);
|
|
245
|
+
// Check hasBlockProposal with both id and object
|
|
246
|
+
expect(await ap.hasBlockProposal(proposalId)).toBe(true);
|
|
247
|
+
expect(await ap.hasBlockProposal(proposal)).toBe(true);
|
|
227
248
|
});
|
|
228
249
|
it('should return undefined for non-existent block proposal', async ()=>{
|
|
229
250
|
const nonExistentId = Fr.random().toString();
|
|
230
251
|
const retrievedProposal = await ap.getBlockProposal(nonExistentId);
|
|
231
252
|
expect(retrievedProposal).toBeUndefined();
|
|
253
|
+
// Check hasBlockProposal returns false for non-existent proposal
|
|
254
|
+
expect(await ap.hasBlockProposal(nonExistentId)).toBe(false);
|
|
232
255
|
});
|
|
233
256
|
it('should update block proposal if added twice with same id', async ()=>{
|
|
234
257
|
const slotNumber = 420;
|
|
@@ -270,11 +293,13 @@ export function describeAttestationPool(getAttestationPool) {
|
|
|
270
293
|
// Verify proposal exists
|
|
271
294
|
let retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
272
295
|
expect(retrievedProposal).toBeDefined();
|
|
296
|
+
expect(await ap.hasBlockProposal(proposalId)).toBe(true);
|
|
273
297
|
// Delete attestations for slot and proposal
|
|
274
298
|
await ap.deleteAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
|
|
275
299
|
// Proposal should be deleted
|
|
276
300
|
retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
277
301
|
expect(retrievedProposal).toBeUndefined();
|
|
302
|
+
expect(await ap.hasBlockProposal(proposalId)).toBe(false);
|
|
278
303
|
});
|
|
279
304
|
it('should delete block proposal when deleting attestations for slot', async ()=>{
|
|
280
305
|
const slotNumber = 420;
|
|
@@ -286,11 +311,13 @@ export function describeAttestationPool(getAttestationPool) {
|
|
|
286
311
|
// Verify proposal exists
|
|
287
312
|
let retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
288
313
|
expect(retrievedProposal).toBeDefined();
|
|
314
|
+
expect(await ap.hasBlockProposal(proposal)).toBe(true);
|
|
289
315
|
// Delete attestations for slot
|
|
290
316
|
await ap.deleteAttestationsForSlot(BigInt(slotNumber));
|
|
291
317
|
// Proposal should be deleted
|
|
292
318
|
retrievedProposal = await ap.getBlockProposal(proposalId);
|
|
293
319
|
expect(retrievedProposal).toBeUndefined();
|
|
320
|
+
expect(await ap.hasBlockProposal(proposal)).toBe(false);
|
|
294
321
|
});
|
|
295
322
|
it('should be able to fetch both block proposal and attestations', async ()=>{
|
|
296
323
|
const slotNumber = 420;
|
|
@@ -307,7 +334,12 @@ export function describeAttestationPool(getAttestationPool) {
|
|
|
307
334
|
const retrievedAttestations = await ap.getAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
|
|
308
335
|
expect(retrievedProposal).toBeDefined();
|
|
309
336
|
expect(retrievedProposal).toEqual(proposal);
|
|
337
|
+
expect(await ap.hasBlockProposal(proposalId)).toBe(true);
|
|
310
338
|
compareAttestations(retrievedAttestations, attestations);
|
|
339
|
+
// Check hasAttestation for all attestations
|
|
340
|
+
for (const attestation of attestations){
|
|
341
|
+
expect(await ap.hasAttestation(attestation)).toBe(true);
|
|
342
|
+
}
|
|
311
343
|
});
|
|
312
344
|
});
|
|
313
345
|
}
|
|
@@ -22,7 +22,9 @@ export declare class KvAttestationPool implements AttestationPool {
|
|
|
22
22
|
deleteAttestationsForSlot(slot: bigint): Promise<void>;
|
|
23
23
|
deleteAttestationsForSlotAndProposal(slot: bigint, proposalId: string): Promise<void>;
|
|
24
24
|
deleteAttestations(attestations: BlockAttestation[]): Promise<void>;
|
|
25
|
+
hasAttestation(attestation: BlockAttestation): Promise<boolean>;
|
|
25
26
|
getBlockProposal(id: string): Promise<BlockProposal | undefined>;
|
|
27
|
+
hasBlockProposal(idOrProposal: string | BlockProposal): Promise<boolean>;
|
|
26
28
|
addBlockProposal(blockProposal: BlockProposal): Promise<void>;
|
|
27
29
|
}
|
|
28
30
|
//# sourceMappingURL=kv_attestation_pool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kv_attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/kv_attestation_pool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,qBAAa,iBAAkB,YAAW,eAAe;IAYrD,OAAO,CAAC,KAAK;IAEb,OAAO,CAAC,GAAG;IAbb,OAAO,CAAC,OAAO,CAAwC;IAEvD,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,SAAS,CAGf;IACF,OAAO,CAAC,gBAAgB,CAAqC;IAC7D,OAAO,CAAC,uBAAuB,CAAqC;gBAG1D,KAAK,EAAE,iBAAiB,EAChC,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAAyC;IAUtD,OAAO,CAAC,SAAS,CAIf;IAEW,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAOxC,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,iBAAiB;IAIZ,eAAe,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqChE,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAYjE,iCAAiC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAsBhG,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9D,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBtD,oCAAoC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBrF,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BnE,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAahE,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAM3E"}
|
|
1
|
+
{"version":3,"file":"kv_attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/kv_attestation_pool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,qBAAa,iBAAkB,YAAW,eAAe;IAYrD,OAAO,CAAC,KAAK;IAEb,OAAO,CAAC,GAAG;IAbb,OAAO,CAAC,OAAO,CAAwC;IAEvD,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,SAAS,CAGf;IACF,OAAO,CAAC,gBAAgB,CAAqC;IAC7D,OAAO,CAAC,uBAAuB,CAAqC;gBAG1D,KAAK,EAAE,iBAAiB,EAChC,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAAyC;IAUtD,OAAO,CAAC,SAAS,CAIf;IAEW,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAOxC,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,iBAAiB;IAIZ,eAAe,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqChE,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAYjE,iCAAiC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAsBhG,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9D,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBtD,oCAAoC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBrF,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BnE,cAAc,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAgB/D,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAahE,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAKxE,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAM3E"}
|
|
@@ -154,6 +154,18 @@ export class KvAttestationPool {
|
|
|
154
154
|
}
|
|
155
155
|
});
|
|
156
156
|
}
|
|
157
|
+
async hasAttestation(attestation) {
|
|
158
|
+
const slotNumber = attestation.payload.header.slotNumber;
|
|
159
|
+
const proposalId = attestation.archive;
|
|
160
|
+
const sender = attestation.getSender();
|
|
161
|
+
// Attestations with invalid signatures are never in the pool
|
|
162
|
+
if (!sender) {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
const address = sender.toString();
|
|
166
|
+
const key = this.getAttestationKey(slotNumber, proposalId, address);
|
|
167
|
+
return await this.attestations.hasAsync(key);
|
|
168
|
+
}
|
|
157
169
|
async getBlockProposal(id) {
|
|
158
170
|
const buffer = await this.proposals.getAsync(id);
|
|
159
171
|
try {
|
|
@@ -165,6 +177,10 @@ export class KvAttestationPool {
|
|
|
165
177
|
}
|
|
166
178
|
return Promise.resolve(undefined);
|
|
167
179
|
}
|
|
180
|
+
async hasBlockProposal(idOrProposal) {
|
|
181
|
+
const id = typeof idOrProposal === 'string' ? idOrProposal : idOrProposal.payload.archive.toString();
|
|
182
|
+
return await this.proposals.hasAsync(id);
|
|
183
|
+
}
|
|
168
184
|
async addBlockProposal(blockProposal) {
|
|
169
185
|
await this.store.transactionAsync(async ()=>{
|
|
170
186
|
await this.proposalsForSlot.set(blockProposal.slotNumber.toString(), blockProposal.archive.toString());
|
|
@@ -17,7 +17,9 @@ export declare class InMemoryAttestationPool implements AttestationPool {
|
|
|
17
17
|
deleteAttestationsForSlot(slot: bigint): Promise<void>;
|
|
18
18
|
deleteAttestationsForSlotAndProposal(slot: bigint, proposalId: string): Promise<void>;
|
|
19
19
|
deleteAttestations(attestations: BlockAttestation[]): Promise<void>;
|
|
20
|
+
hasAttestation(attestation: BlockAttestation): Promise<boolean>;
|
|
20
21
|
addBlockProposal(blockProposal: BlockProposal): Promise<void>;
|
|
21
22
|
getBlockProposal(id: string): Promise<BlockProposal | undefined>;
|
|
23
|
+
hasBlockProposal(idOrProposal: string | BlockProposal): Promise<boolean>;
|
|
22
24
|
}
|
|
23
25
|
//# sourceMappingURL=memory_attestation_pool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory_attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/memory_attestation_pool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,qBAAa,uBAAwB,YAAW,eAAe;;IAQ3D,OAAO,CAAC,GAAG;IAPb,OAAO,CAAC,OAAO,CAAwC;IAEvD,OAAO,CAAC,YAAY,CAAgG;IACpH,OAAO,CAAC,SAAS,CAA6B;gBAG5C,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAAuC;IAOpD,OAAO,CAAC,SAAS,CAIf;IAEK,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAI3B,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAQjE,iCAAiC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAWhG,eAAe,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C1D,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBpE,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBtD,oCAAoC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBrF,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBnE,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7D,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"memory_attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/memory_attestation_pool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,qBAAa,uBAAwB,YAAW,eAAe;;IAQ3D,OAAO,CAAC,GAAG;IAPb,OAAO,CAAC,OAAO,CAAwC;IAEvD,OAAO,CAAC,YAAY,CAAgG;IACpH,OAAO,CAAC,SAAS,CAA6B;gBAG5C,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAAuC;IAOpD,OAAO,CAAC,SAAS,CAIf;IAEK,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAI3B,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAQjE,iCAAiC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAWhG,eAAe,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C1D,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBpE,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBtD,oCAAoC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBrF,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBnE,cAAc,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB/D,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7D,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAIhE,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;CAIhF"}
|
|
@@ -135,6 +135,24 @@ export class InMemoryAttestationPool {
|
|
|
135
135
|
}
|
|
136
136
|
return Promise.resolve();
|
|
137
137
|
}
|
|
138
|
+
hasAttestation(attestation) {
|
|
139
|
+
const slotNumber = attestation.payload.header.slotNumber;
|
|
140
|
+
const proposalId = attestation.archive.toString();
|
|
141
|
+
const sender = attestation.getSender();
|
|
142
|
+
// Attestations with invalid signatures are never in the pool
|
|
143
|
+
if (!sender) {
|
|
144
|
+
return Promise.resolve(false);
|
|
145
|
+
}
|
|
146
|
+
const slotAttestationMap = this.attestations.get(slotNumber.toBigInt());
|
|
147
|
+
if (!slotAttestationMap) {
|
|
148
|
+
return Promise.resolve(false);
|
|
149
|
+
}
|
|
150
|
+
const proposalAttestationMap = slotAttestationMap.get(proposalId);
|
|
151
|
+
if (!proposalAttestationMap) {
|
|
152
|
+
return Promise.resolve(false);
|
|
153
|
+
}
|
|
154
|
+
return Promise.resolve(proposalAttestationMap.has(sender.toString()));
|
|
155
|
+
}
|
|
138
156
|
addBlockProposal(blockProposal) {
|
|
139
157
|
// We initialize slot-proposal mapping if it does not exist
|
|
140
158
|
// This is important to ensure we can delete this proposal if there were not attestations for it
|
|
@@ -146,6 +164,10 @@ export class InMemoryAttestationPool {
|
|
|
146
164
|
getBlockProposal(id) {
|
|
147
165
|
return Promise.resolve(this.proposals.get(id));
|
|
148
166
|
}
|
|
167
|
+
hasBlockProposal(idOrProposal) {
|
|
168
|
+
const id = typeof idOrProposal === 'string' ? idOrProposal : idOrProposal.payload.archive.toString();
|
|
169
|
+
return Promise.resolve(this.proposals.has(id));
|
|
170
|
+
}
|
|
149
171
|
}
|
|
150
172
|
/**
|
|
151
173
|
* Get Slot or Default
|
|
@@ -48,6 +48,7 @@ export declare class AztecKVTxPool extends AztecKVTxPool_base implements TxPool
|
|
|
48
48
|
getTxByHash(txHash: TxHash): Promise<Tx | undefined>;
|
|
49
49
|
getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
50
50
|
hasTxs(txHashes: TxHash[]): Promise<boolean[]>;
|
|
51
|
+
hasTx(txHash: TxHash): Promise<boolean>;
|
|
51
52
|
/**
|
|
52
53
|
* Checks if an archived tx exists and returns it.
|
|
53
54
|
* @param txHash - The tx hash.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aztec_kv_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/aztec_kv_tx_pool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAA0D,MAAM,iBAAiB,CAAC;AAGjH,OAAO,KAAK,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAIxG,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAKnF,OAAO,EAAE,YAAY,EAAE,MAAM,oDAAoD,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AAGpF,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;kCAKpB,UAAU,iBAAiB,CAAC,YAAY,CAAC;AAH7F;;GAEG;AACH,qBAAa,aAAc,SAAQ,kBAA4D,YAAW,MAAM;;IAS9G,0GAA0G;IAC1G,oBAAoB,EAAE,MAAM,CAAK;IAgDjC;;;;;;;OAOG;gBAED,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,iBAAiB,EAC1B,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,GAAE,eAAsC,EACjD,MAAM,GAAE,aAAkB,EAC1B,GAAG,SAA8B;IA4BnC,OAAO,CAAC,QAAQ,CASd;IAEW,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAMxC;;;;;;OAMG;IACU,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CxE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBrD,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAKvC,gBAAgB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAK/C,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIpC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAIlC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAmB9F;;;;OAIG;IACU,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAK3D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;IAK7D,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"aztec_kv_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/aztec_kv_tx_pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { toArray } from '@aztec/foundation/iterable';
|
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
5
5
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
6
|
-
import {
|
|
6
|
+
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
7
7
|
import { DatabasePublicStateSource } from '@aztec/stdlib/trees';
|
|
8
8
|
import { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
9
9
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
@@ -197,6 +197,12 @@ import { getPendingTxPriority } from './priority.js';
|
|
|
197
197
|
async hasTxs(txHashes) {
|
|
198
198
|
return await Promise.all(txHashes.map((txHash)=>this.#txs.hasAsync(txHash.toString())));
|
|
199
199
|
}
|
|
200
|
+
async hasTx(txHash) {
|
|
201
|
+
const result = await this.hasTxs([
|
|
202
|
+
txHash
|
|
203
|
+
]);
|
|
204
|
+
return result[0];
|
|
205
|
+
}
|
|
200
206
|
/**
|
|
201
207
|
* Checks if an archived tx exists and returns it.
|
|
202
208
|
* @param txHash - The tx hash.
|
|
@@ -442,7 +448,7 @@ import { getPendingTxPriority } from './priority.js';
|
|
|
442
448
|
}
|
|
443
449
|
tailIdx++;
|
|
444
450
|
}
|
|
445
|
-
const archivedTx = new Tx(tx.txHash, tx.data,
|
|
451
|
+
const archivedTx = new Tx(tx.txHash, tx.data, ChonkProof.empty(), tx.contractClassLogFields, tx.publicFunctionCalldata);
|
|
446
452
|
const txHash = txHashes[i].toString();
|
|
447
453
|
await this.#archivedTxs.set(txHash, archivedTx.toBuffer());
|
|
448
454
|
await this.#archivedTxIndices.set(headIdx, txHash);
|
|
@@ -38,6 +38,7 @@ export declare class InMemoryTxPool extends InMemoryTxPool_base implements TxPoo
|
|
|
38
38
|
getTxByHash(txHash: TxHash): Promise<Tx | undefined>;
|
|
39
39
|
getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
40
40
|
hasTxs(txHashes: TxHash[]): Promise<boolean[]>;
|
|
41
|
+
hasTx(txHash: TxHash): Promise<boolean>;
|
|
41
42
|
getArchivedTxByHash(): Promise<Tx | undefined>;
|
|
42
43
|
/**
|
|
43
44
|
* Adds a list of transactions to the pool. Duplicates are ignored.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/memory_tx_pool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAMnF,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;mCAKnB,UAAU,iBAAiB,CAAC,YAAY,CAAC;AAH9F;;GAEG;AACH,qBAAa,cAAe,SAAQ,mBAA4D,YAAW,MAAM;IAkB7G,OAAO,CAAC,GAAG;IAjBb;;OAEG;IACH,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,oBAAoB,CAAsB;IAClD,OAAO,CAAC,yBAAyB,CAA2B;IAE5D,OAAO,CAAC,OAAO,CAA0B;IAEzC;;;OAGG;gBAED,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAA8B;IAW3C,OAAO,CAAC,OAAO,CAOb;IAEK,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAI3B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBxE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB/C,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAa7C,gBAAgB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAM/C,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKpC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAexF;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAK3D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;IAG7D,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"memory_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/memory_tx_pool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAMnF,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;mCAKnB,UAAU,iBAAiB,CAAC,YAAY,CAAC;AAH9F;;GAEG;AACH,qBAAa,cAAe,SAAQ,mBAA4D,YAAW,MAAM;IAkB7G,OAAO,CAAC,GAAG;IAjBb;;OAEG;IACH,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,oBAAoB,CAAsB;IAClD,OAAO,CAAC,yBAAyB,CAA2B;IAE5D,OAAO,CAAC,OAAO,CAA0B;IAEzC;;;OAGG;gBAED,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAA8B;IAW3C,OAAO,CAAC,OAAO,CAOb;IAEK,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAI3B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBxE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB/C,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAa7C,gBAAgB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAM/C,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKpC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAexF;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAK3D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;IAG7D,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAIxC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtC,mBAAmB,IAAI,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAIrD;;;;OAIG;IACI,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BzE;;;;;OAKG;IACI,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BrF;;;OAGG;IACI,SAAS,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;IAIjC;;;OAGG;IACI,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI1C,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAE1C,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD;;;;OAIG;IACI,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA2BpE"}
|
|
@@ -120,6 +120,12 @@ import { getPendingTxPriority } from './priority.js';
|
|
|
120
120
|
hasTxs(txHashes) {
|
|
121
121
|
return Promise.resolve(txHashes.map((txHash)=>this.txs.has(txHash.toBigInt())));
|
|
122
122
|
}
|
|
123
|
+
async hasTx(txHash) {
|
|
124
|
+
const result = await this.hasTxs([
|
|
125
|
+
txHash
|
|
126
|
+
]);
|
|
127
|
+
return result[0];
|
|
128
|
+
}
|
|
123
129
|
getArchivedTxByHash() {
|
|
124
130
|
return Promise.resolve(undefined);
|
|
125
131
|
}
|
|
@@ -41,6 +41,12 @@ export interface TxPool extends TypedEventEmitter<TxPoolEvents> {
|
|
|
41
41
|
* @returns True or False for each tx hash
|
|
42
42
|
*/
|
|
43
43
|
hasTxs(txHashes: TxHash[]): Promise<boolean[]>;
|
|
44
|
+
/**
|
|
45
|
+
* Checks if a transaction exists in the pool
|
|
46
|
+
* @param txHash - The hash of the transaction to check for
|
|
47
|
+
* @returns True if the transaction exists, false otherwise
|
|
48
|
+
*/
|
|
49
|
+
hasTx(txHash: TxHash): Promise<boolean>;
|
|
44
50
|
/**
|
|
45
51
|
* Checks if an archived transaction exists in the pool and returns it.
|
|
46
52
|
* @param txHash - The hash of the transaction, used as an ID.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/tx_pool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/tx_pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TopicType } from '@aztec/stdlib/p2p';
|
|
1
2
|
import type { RPC } from '@chainsafe/libp2p-gossipsub/message';
|
|
2
3
|
import type { DataTransform } from '@chainsafe/libp2p-gossipsub/types';
|
|
3
4
|
import type { Message } from '@libp2p/interface';
|
|
@@ -21,9 +22,29 @@ export declare function getMsgIdFn(message: Message): Buffer<ArrayBuffer>;
|
|
|
21
22
|
* Snappy transform for libp2p gossipsub
|
|
22
23
|
*/
|
|
23
24
|
export declare class SnappyTransform implements DataTransform {
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
private maxSizesKb;
|
|
26
|
+
private defaultMaxSizeKb;
|
|
27
|
+
private logger;
|
|
28
|
+
constructor(maxSizesKb?: Record<TopicType, number>, defaultMaxSizeKb?: number, logger?: import("@aztec/foundation/log").Logger);
|
|
29
|
+
inboundTransform(topicStr: string, data: Uint8Array): Uint8Array;
|
|
30
|
+
inboundTransformData(data: Buffer, topic?: TopicType): Buffer;
|
|
26
31
|
outboundTransform(_topicStr: string, data: Uint8Array): Uint8Array;
|
|
27
|
-
|
|
32
|
+
outboundTransformData(data: Buffer): Buffer;
|
|
28
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Reads the Snappy preamble from compressed data and returns the expected decompressed size.
|
|
36
|
+
*
|
|
37
|
+
* The Snappy format starts with a little-endian varint encoding the uncompressed length.
|
|
38
|
+
* Varints consist of a series of bytes where:
|
|
39
|
+
* - Lower 7 bits contain data
|
|
40
|
+
* - Upper bit (0x80) is set if more bytes follow
|
|
41
|
+
*
|
|
42
|
+
* @param data - The compressed data starting with the Snappy preamble
|
|
43
|
+
* @returns Object containing the decompressed size and the number of bytes read from the preamble
|
|
44
|
+
* @throws Error if the data is too short or the varint is invalid
|
|
45
|
+
*/
|
|
46
|
+
export declare function readSnappyPreamble(data: Uint8Array): {
|
|
47
|
+
decompressedSize: number;
|
|
48
|
+
bytesRead: number;
|
|
49
|
+
};
|
|
29
50
|
//# sourceMappingURL=encoding.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/services/encoding.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAajD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAKvD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAItD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,uBAK1C;
|
|
1
|
+
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/services/encoding.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAsB,MAAM,mBAAmB,CAAC;AAElE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAajD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAKvD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAItD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,uBAK1C;AAYD;;GAEG;AACH,qBAAa,eAAgB,YAAW,aAAa;IAEjD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,MAAM;gBAFN,UAAU,GAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAqB,EACzD,gBAAgB,GAAE,MAAkB,EACpC,MAAM,yCAAuC;IAIvD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAKzD,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM;IAepE,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAI3D,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAMnD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAmCpG"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Taken from lodestar: https://github.com/ChainSafe/lodestar
|
|
2
2
|
import { sha256 } from '@aztec/foundation/crypto';
|
|
3
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { TopicType, getTopicFromString } from '@aztec/stdlib/p2p';
|
|
3
5
|
import { compressSync, uncompressSync } from 'snappy';
|
|
4
6
|
import xxhashFactory from 'xxhash-wasm';
|
|
5
7
|
// Load WASM
|
|
@@ -38,29 +40,95 @@ export function msgIdToStrFn(msgId) {
|
|
|
38
40
|
];
|
|
39
41
|
return sha256(Buffer.concat(vec)).subarray(0, 20);
|
|
40
42
|
}
|
|
43
|
+
const DefaultMaxSizesKb = {
|
|
44
|
+
// Tx effects should not exceed 128kb, so 512kb for the full tx obj should be sufficient
|
|
45
|
+
[TopicType.tx]: 512,
|
|
46
|
+
// An attestation has roughly 30 fields, which is 1kb, so 5x is plenty
|
|
47
|
+
[TopicType.block_attestation]: 5,
|
|
48
|
+
// Proposals may carry some tx objects, so we allow a larger size capped at 10mb
|
|
49
|
+
// Note this may not be enough for carrying all tx objects in a block
|
|
50
|
+
[TopicType.block_proposal]: 1024 * 10
|
|
51
|
+
};
|
|
41
52
|
/**
|
|
42
53
|
* Snappy transform for libp2p gossipsub
|
|
43
54
|
*/ export class SnappyTransform {
|
|
55
|
+
maxSizesKb;
|
|
56
|
+
defaultMaxSizeKb;
|
|
57
|
+
logger;
|
|
58
|
+
constructor(maxSizesKb = DefaultMaxSizesKb, defaultMaxSizeKb = 10 * 1024, logger = createLogger('p2p:snappy-transform')){
|
|
59
|
+
this.maxSizesKb = maxSizesKb;
|
|
60
|
+
this.defaultMaxSizeKb = defaultMaxSizeKb;
|
|
61
|
+
this.logger = logger;
|
|
62
|
+
}
|
|
44
63
|
// Topic string included to satisfy DataTransform interface
|
|
45
|
-
inboundTransform(
|
|
46
|
-
|
|
64
|
+
inboundTransform(topicStr, data) {
|
|
65
|
+
const topic = getTopicFromString(topicStr);
|
|
66
|
+
return this.inboundTransformData(Buffer.from(data), topic);
|
|
47
67
|
}
|
|
48
|
-
|
|
68
|
+
inboundTransformData(data, topic) {
|
|
49
69
|
if (data.length === 0) {
|
|
50
70
|
return data;
|
|
51
71
|
}
|
|
72
|
+
const maxSizeKb = this.maxSizesKb[topic] ?? this.defaultMaxSizeKb;
|
|
73
|
+
const { decompressedSize } = readSnappyPreamble(data);
|
|
74
|
+
if (decompressedSize > maxSizeKb * 1024) {
|
|
75
|
+
this.logger.warn(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);
|
|
76
|
+
throw new Error(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);
|
|
77
|
+
}
|
|
52
78
|
return Buffer.from(uncompressSync(data, {
|
|
53
79
|
asBuffer: true
|
|
54
80
|
}));
|
|
55
81
|
}
|
|
56
82
|
// Topic string included to satisfy DataTransform interface
|
|
57
83
|
outboundTransform(_topicStr, data) {
|
|
58
|
-
return this.
|
|
84
|
+
return this.outboundTransformData(Buffer.from(data));
|
|
59
85
|
}
|
|
60
|
-
|
|
86
|
+
outboundTransformData(data) {
|
|
61
87
|
if (data.length === 0) {
|
|
62
88
|
return data;
|
|
63
89
|
}
|
|
64
90
|
return Buffer.from(compressSync(data));
|
|
65
91
|
}
|
|
66
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Reads the Snappy preamble from compressed data and returns the expected decompressed size.
|
|
95
|
+
*
|
|
96
|
+
* The Snappy format starts with a little-endian varint encoding the uncompressed length.
|
|
97
|
+
* Varints consist of a series of bytes where:
|
|
98
|
+
* - Lower 7 bits contain data
|
|
99
|
+
* - Upper bit (0x80) is set if more bytes follow
|
|
100
|
+
*
|
|
101
|
+
* @param data - The compressed data starting with the Snappy preamble
|
|
102
|
+
* @returns Object containing the decompressed size and the number of bytes read from the preamble
|
|
103
|
+
* @throws Error if the data is too short or the varint is invalid
|
|
104
|
+
*/ export function readSnappyPreamble(data) {
|
|
105
|
+
if (data.length === 0) {
|
|
106
|
+
throw new Error('Cannot read preamble from empty data');
|
|
107
|
+
}
|
|
108
|
+
let result = 0;
|
|
109
|
+
let shift = 0;
|
|
110
|
+
let bytesRead = 0;
|
|
111
|
+
// Maximum varint length for 32-bit value is 5 bytes
|
|
112
|
+
// (7 bits per byte, so 5 bytes = 35 bits, enough for 2^32 - 1)
|
|
113
|
+
const maxBytes = 5;
|
|
114
|
+
for(let i = 0; i < Math.min(data.length, maxBytes); i++){
|
|
115
|
+
const byte = data[i];
|
|
116
|
+
bytesRead++;
|
|
117
|
+
// Extract lower 7 bits and add to result with appropriate shift
|
|
118
|
+
// Use >>> 0 to convert to unsigned 32-bit integer to avoid sign issues
|
|
119
|
+
result = (result | (byte & 0x7f) << shift) >>> 0;
|
|
120
|
+
// If upper bit is not set, we're done
|
|
121
|
+
if ((byte & 0x80) === 0) {
|
|
122
|
+
return {
|
|
123
|
+
decompressedSize: result,
|
|
124
|
+
bytesRead
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
shift += 7;
|
|
128
|
+
}
|
|
129
|
+
// If we get here, either we ran out of data or the varint is too long
|
|
130
|
+
if (bytesRead >= maxBytes) {
|
|
131
|
+
throw new Error('Varint is too long (max 5 bytes for 32-bit value)');
|
|
132
|
+
}
|
|
133
|
+
throw new Error('Incomplete varint: data ended before varint termination');
|
|
134
|
+
}
|
|
@@ -7,7 +7,7 @@ import type { ClientProtocolCircuitVerifier, PeerInfo, WorldStateSynchronizer }
|
|
|
7
7
|
import { BlockAttestation, BlockProposal, type Gossipable, P2PClientType, TopicType } from '@aztec/stdlib/p2p';
|
|
8
8
|
import { Tx } from '@aztec/stdlib/tx';
|
|
9
9
|
import { type TelemetryClient, WithTracer } from '@aztec/telemetry-client';
|
|
10
|
-
import { type Message, type PeerId } from '@libp2p/interface';
|
|
10
|
+
import { type Message, type PeerId, TopicValidatorResult } from '@libp2p/interface';
|
|
11
11
|
import { ENR } from '@nethermindeth/enr';
|
|
12
12
|
import type { P2PConfig } from '../../config.js';
|
|
13
13
|
import type { MemPools } from '../../mem_pools/interface.js';
|
|
@@ -17,6 +17,13 @@ import type { P2PReqRespConfig } from '../reqresp/config.js';
|
|
|
17
17
|
import { type ReqRespInterface, ReqRespSubProtocol, type ReqRespSubProtocolHandler, type ReqRespSubProtocolValidators, type SubProtocolMap } from '../reqresp/interface.js';
|
|
18
18
|
import { AuthRequest, StatusMessage } from '../reqresp/protocols/index.js';
|
|
19
19
|
import type { P2PBlockReceivedCallback, P2PService, PeerDiscoveryService } from '../service.js';
|
|
20
|
+
type ReceivedMessageValidationResult<T> = {
|
|
21
|
+
obj: T;
|
|
22
|
+
result: Exclude<TopicValidatorResult, TopicValidatorResult.Reject>;
|
|
23
|
+
} | {
|
|
24
|
+
obj?: undefined;
|
|
25
|
+
result: TopicValidatorResult.Reject;
|
|
26
|
+
};
|
|
20
27
|
/**
|
|
21
28
|
* Lib P2P implementation of the P2PService interface.
|
|
22
29
|
*/
|
|
@@ -107,6 +114,11 @@ export declare class LibP2PService<T extends P2PClientType = P2PClientType.Full>
|
|
|
107
114
|
* @returns The number of recipients the data was sent to.
|
|
108
115
|
*/
|
|
109
116
|
private publishToTopic;
|
|
117
|
+
/**
|
|
118
|
+
* Checks if this message has already been seen, based on its msgId computed from hashing the message data.
|
|
119
|
+
* Note that we do not rely on the seenCache from gossipsub since we want to keep a longer history of seen
|
|
120
|
+
* messages to avoid tx echoes across the network.
|
|
121
|
+
*/
|
|
110
122
|
protected preValidateReceivedMessage(msg: Message, msgId: string, source: PeerId): {
|
|
111
123
|
result: boolean;
|
|
112
124
|
topicType?: TopicType;
|
|
@@ -117,13 +129,7 @@ export declare class LibP2PService<T extends P2PClientType = P2PClientType.Full>
|
|
|
117
129
|
* @param data - The message data
|
|
118
130
|
*/
|
|
119
131
|
protected handleNewGossipMessage(msg: Message, msgId: string, source: PeerId): Promise<void>;
|
|
120
|
-
protected validateReceivedMessage<T>(validationFunc: () => Promise<
|
|
121
|
-
result: boolean;
|
|
122
|
-
obj: T;
|
|
123
|
-
}>, msgId: string, source: PeerId, topicType: TopicType): Promise<{
|
|
124
|
-
result: boolean;
|
|
125
|
-
obj: T | undefined;
|
|
126
|
-
}>;
|
|
132
|
+
protected validateReceivedMessage<T>(validationFunc: () => Promise<ReceivedMessageValidationResult<T>>, msgId: string, source: PeerId, topicType: TopicType): Promise<ReceivedMessageValidationResult<T>>;
|
|
127
133
|
protected handleGossipedTx(payloadData: Buffer, msgId: string, source: PeerId): Promise<void>;
|
|
128
134
|
/**
|
|
129
135
|
* Process Attestation From Peer
|
|
@@ -221,4 +227,5 @@ export declare class LibP2PService<T extends P2PClientType = P2PClientType.Full>
|
|
|
221
227
|
private sendToPeers;
|
|
222
228
|
private stopLibP2P;
|
|
223
229
|
}
|
|
230
|
+
export {};
|
|
224
231
|
//# sourceMappingURL=libp2p_service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libp2p_service.d.ts","sourceRoot":"","sources":["../../../src/services/libp2p/libp2p_service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,KAAK,MAAM,EAA6C,MAAM,uBAAuB,CAAC;AAI/F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,KAAK,EAAE,6BAA6B,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACvH,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,KAAK,UAAU,EACf,aAAa,EAGb,SAAS,EAIV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,EAAE,EAA0D,MAAM,kBAAkB,CAAC;AAG9F,OAAO,EAAkC,KAAK,eAAe,EAAE,UAAU,EAAa,MAAM,yBAAyB,CAAC;AActH,OAAO,EAAE,KAAK,OAAO,EAA4B,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"libp2p_service.d.ts","sourceRoot":"","sources":["../../../src/services/libp2p/libp2p_service.ts"],"names":[],"mappings":"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"}
|