@aztec/p2p 0.47.0 → 0.48.0

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.
Files changed (37) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +2 -6
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +1 -1
  4. package/dest/client/index.js +2 -2
  5. package/dest/client/mocks.d.ts +5 -3
  6. package/dest/client/mocks.d.ts.map +1 -1
  7. package/dest/client/mocks.js +18 -9
  8. package/dest/client/p2p_client.d.ts +5 -3
  9. package/dest/client/p2p_client.d.ts.map +1 -1
  10. package/dest/client/p2p_client.js +19 -6
  11. package/dest/config.d.ts +12 -12
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +89 -25
  14. package/dest/service/libp2p_service.d.ts +2 -3
  15. package/dest/service/libp2p_service.d.ts.map +1 -1
  16. package/dest/service/libp2p_service.js +20 -32
  17. package/dest/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  18. package/dest/tx_pool/aztec_kv_tx_pool.js +24 -6
  19. package/dest/tx_pool/instrumentation.d.ts +4 -2
  20. package/dest/tx_pool/instrumentation.d.ts.map +1 -1
  21. package/dest/tx_pool/instrumentation.js +21 -8
  22. package/dest/tx_pool/memory_tx_pool.d.ts.map +1 -1
  23. package/dest/tx_pool/memory_tx_pool.js +13 -5
  24. package/package.json +6 -6
  25. package/src/bootstrap/bootstrap.ts +2 -9
  26. package/src/client/index.ts +1 -1
  27. package/src/client/mocks.ts +20 -7
  28. package/src/client/p2p_client.ts +19 -4
  29. package/src/config.ts +116 -55
  30. package/src/service/libp2p_service.ts +21 -34
  31. package/src/tx_pool/aztec_kv_tx_pool.ts +24 -5
  32. package/src/tx_pool/instrumentation.ts +23 -8
  33. package/src/tx_pool/memory_tx_pool.ts +16 -4
  34. package/dest/service/tx_messages.d.ts +0 -32
  35. package/dest/service/tx_messages.d.ts.map +0 -1
  36. package/dest/service/tx_messages.js +0 -121
  37. package/src/service/tx_messages.ts +0 -143
@@ -1,121 +0,0 @@
1
- import { EncryptedNoteTxL2Logs, EncryptedTxL2Logs, Tx, UnencryptedTxL2Logs } from '@aztec/circuit-types';
2
- import { ClientIvcProof, PrivateKernelTailCircuitPublicInputs, PublicCallRequest } from '@aztec/circuits.js';
3
- import { numToUInt32BE } from '@aztec/foundation/serialize';
4
- export const TX_MESSAGE_TOPIC = '';
5
- export class AztecTxMessageCreator {
6
- constructor(version) {
7
- this.topic = `/aztec/tx/${version.toString()}`;
8
- }
9
- createTxMessage(tx) {
10
- const messageData = toTxMessage(tx);
11
- return { topic: this.topic, data: messageData };
12
- }
13
- getTopic() {
14
- return this.topic;
15
- }
16
- }
17
- /**
18
- * Decode a POOLED_TRANSACTIONS message into the original transaction objects.
19
- * @param message - The binary message to be decoded.
20
- * @returns - The array of transactions originally encoded into the message.
21
- */
22
- export function decodeTransactionsMessage(message) {
23
- const lengthSize = 4;
24
- let offset = 0;
25
- const txs = [];
26
- while (offset < message.length) {
27
- const dataSize = message.readUInt32BE(offset);
28
- const totalSizeOfMessage = lengthSize + dataSize;
29
- txs.push(fromTxMessage(message.subarray(offset, offset + totalSizeOfMessage)));
30
- offset += totalSizeOfMessage;
31
- }
32
- return txs;
33
- }
34
- /**
35
- * Creates a tx 'message' for sending to a peer.
36
- * @param tx - The transaction to convert to a message.
37
- * @returns - The message.
38
- */
39
- export function toTxMessage(tx) {
40
- // eslint-disable-next-line jsdoc/require-jsdoc
41
- const createMessageComponent = (obj) => {
42
- if (!obj) {
43
- // specify a length of 0 bytes
44
- return numToUInt32BE(0);
45
- }
46
- const buffer = obj.toBuffer();
47
- return Buffer.concat([numToUInt32BE(buffer.length), buffer]);
48
- };
49
- // eslint-disable-next-line jsdoc/require-jsdoc
50
- const createMessageComponents = (obj) => {
51
- if (!obj || !obj.length) {
52
- // specify a length of 0 bytes
53
- return numToUInt32BE(0);
54
- }
55
- const allComponents = Buffer.concat(obj.map(createMessageComponent));
56
- return Buffer.concat([numToUInt32BE(obj.length), allComponents]);
57
- };
58
- const messageBuffer = Buffer.concat([
59
- createMessageComponent(tx.data),
60
- createMessageComponent(tx.clientIvcProof),
61
- createMessageComponent(tx.noteEncryptedLogs),
62
- createMessageComponent(tx.encryptedLogs),
63
- createMessageComponent(tx.unencryptedLogs),
64
- createMessageComponents(tx.enqueuedPublicFunctionCalls),
65
- createMessageComponent(tx.publicTeardownFunctionCall),
66
- ]);
67
- const messageLength = numToUInt32BE(messageBuffer.length);
68
- return Buffer.concat([messageLength, messageBuffer]);
69
- }
70
- /**
71
- * Reproduces a transaction from a transaction 'message'
72
- * @param buffer - The message buffer to convert to a tx.
73
- * @returns - The reproduced transaction.
74
- */
75
- export function fromTxMessage(buffer) {
76
- // eslint-disable-next-line jsdoc/require-jsdoc
77
- const toObject = (objectBuffer, factory) => {
78
- const objectSize = objectBuffer.readUint32BE(0);
79
- return {
80
- remainingData: objectBuffer.subarray(objectSize + 4),
81
- obj: objectSize === 0 ? undefined : factory.fromBuffer(objectBuffer.subarray(4, objectSize + 4)),
82
- };
83
- };
84
- // eslint-disable-next-line jsdoc/require-jsdoc
85
- const toObjectArray = (objectBuffer, factory) => {
86
- const output = [];
87
- const numItems = objectBuffer.readUint32BE(0);
88
- let workingBuffer = objectBuffer.subarray(4);
89
- for (let i = 0; i < numItems; i++) {
90
- const obj = toObject(workingBuffer, factory);
91
- workingBuffer = obj.remainingData;
92
- if (obj !== undefined) {
93
- output.push(obj.obj);
94
- }
95
- }
96
- return {
97
- remainingData: workingBuffer,
98
- objects: output,
99
- };
100
- };
101
- // this is the opposite of the 'toMessage' function
102
- // so the first 4 bytes is the complete length, skip it
103
- const publicInputs = toObject(buffer.subarray(4), PrivateKernelTailCircuitPublicInputs);
104
- const clientIvcProof = toObject(publicInputs.remainingData, ClientIvcProof);
105
- const noteEncryptedLogs = toObject(clientIvcProof.remainingData, EncryptedNoteTxL2Logs);
106
- if (!noteEncryptedLogs.obj) {
107
- noteEncryptedLogs.obj = new EncryptedNoteTxL2Logs([]);
108
- }
109
- const encryptedLogs = toObject(noteEncryptedLogs.remainingData, EncryptedTxL2Logs);
110
- if (!encryptedLogs.obj) {
111
- encryptedLogs.obj = new EncryptedTxL2Logs([]);
112
- }
113
- const unencryptedLogs = toObject(encryptedLogs.remainingData, UnencryptedTxL2Logs);
114
- if (!unencryptedLogs.obj) {
115
- unencryptedLogs.obj = new UnencryptedTxL2Logs([]);
116
- }
117
- const publicCalls = toObjectArray(unencryptedLogs.remainingData, PublicCallRequest);
118
- const publicTeardownCall = toObject(publicCalls.remainingData, PublicCallRequest);
119
- return new Tx(publicInputs.obj, clientIvcProof.obj, noteEncryptedLogs.obj, encryptedLogs.obj, unencryptedLogs.obj, publicCalls.objects, publicTeardownCall.obj);
120
- }
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfbWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZS90eF9tZXNzYWdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekcsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQ0FBb0MsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUk1RCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7QUFFbkMsTUFBTSxPQUFPLHFCQUFxQjtJQUVoQyxZQUFZLE9BQWU7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxhQUFhLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxlQUFlLENBQUMsRUFBTTtRQUNwQixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUFDLE9BQWU7SUFDdkQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLE1BQU0sR0FBRyxHQUFTLEVBQUUsQ0FBQztJQUNyQixPQUFPLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDL0IsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENB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
@@ -1,143 +0,0 @@
1
- import { EncryptedNoteTxL2Logs, EncryptedTxL2Logs, Tx, UnencryptedTxL2Logs } from '@aztec/circuit-types';
2
- import { ClientIvcProof, PrivateKernelTailCircuitPublicInputs, PublicCallRequest } from '@aztec/circuits.js';
3
- import { numToUInt32BE } from '@aztec/foundation/serialize';
4
-
5
- import { type SemVer } from 'semver';
6
-
7
- export const TX_MESSAGE_TOPIC = '';
8
-
9
- export class AztecTxMessageCreator {
10
- private readonly topic: string;
11
- constructor(version: SemVer) {
12
- this.topic = `/aztec/tx/${version.toString()}`;
13
- }
14
-
15
- createTxMessage(tx: Tx) {
16
- const messageData = toTxMessage(tx);
17
-
18
- return { topic: this.topic, data: messageData };
19
- }
20
-
21
- getTopic() {
22
- return this.topic;
23
- }
24
- }
25
-
26
- /**
27
- * Decode a POOLED_TRANSACTIONS message into the original transaction objects.
28
- * @param message - The binary message to be decoded.
29
- * @returns - The array of transactions originally encoded into the message.
30
- */
31
- export function decodeTransactionsMessage(message: Buffer) {
32
- const lengthSize = 4;
33
- let offset = 0;
34
- const txs: Tx[] = [];
35
- while (offset < message.length) {
36
- const dataSize = message.readUInt32BE(offset);
37
- const totalSizeOfMessage = lengthSize + dataSize;
38
- txs.push(fromTxMessage(message.subarray(offset, offset + totalSizeOfMessage)));
39
- offset += totalSizeOfMessage;
40
- }
41
- return txs;
42
- }
43
-
44
- /**
45
- * Creates a tx 'message' for sending to a peer.
46
- * @param tx - The transaction to convert to a message.
47
- * @returns - The message.
48
- */
49
- export function toTxMessage(tx: Tx): Buffer {
50
- // eslint-disable-next-line jsdoc/require-jsdoc
51
- const createMessageComponent = (obj?: { toBuffer: () => Buffer }) => {
52
- if (!obj) {
53
- // specify a length of 0 bytes
54
- return numToUInt32BE(0);
55
- }
56
- const buffer = obj.toBuffer();
57
- return Buffer.concat([numToUInt32BE(buffer.length), buffer]);
58
- };
59
- // eslint-disable-next-line jsdoc/require-jsdoc
60
- const createMessageComponents = (obj?: { toBuffer: () => Buffer }[]) => {
61
- if (!obj || !obj.length) {
62
- // specify a length of 0 bytes
63
- return numToUInt32BE(0);
64
- }
65
- const allComponents = Buffer.concat(obj.map(createMessageComponent));
66
- return Buffer.concat([numToUInt32BE(obj.length), allComponents]);
67
- };
68
- const messageBuffer = Buffer.concat([
69
- createMessageComponent(tx.data),
70
- createMessageComponent(tx.clientIvcProof),
71
- createMessageComponent(tx.noteEncryptedLogs),
72
- createMessageComponent(tx.encryptedLogs),
73
- createMessageComponent(tx.unencryptedLogs),
74
- createMessageComponents(tx.enqueuedPublicFunctionCalls),
75
- createMessageComponent(tx.publicTeardownFunctionCall),
76
- ]);
77
- const messageLength = numToUInt32BE(messageBuffer.length);
78
- return Buffer.concat([messageLength, messageBuffer]);
79
- }
80
-
81
- /**
82
- * Reproduces a transaction from a transaction 'message'
83
- * @param buffer - The message buffer to convert to a tx.
84
- * @returns - The reproduced transaction.
85
- */
86
- export function fromTxMessage(buffer: Buffer): Tx {
87
- // eslint-disable-next-line jsdoc/require-jsdoc
88
- const toObject = <T>(objectBuffer: Buffer, factory: { fromBuffer: (b: Buffer) => T }) => {
89
- const objectSize = objectBuffer.readUint32BE(0);
90
- return {
91
- remainingData: objectBuffer.subarray(objectSize + 4),
92
- obj: objectSize === 0 ? undefined : factory.fromBuffer(objectBuffer.subarray(4, objectSize + 4)),
93
- };
94
- };
95
-
96
- // eslint-disable-next-line jsdoc/require-jsdoc
97
- const toObjectArray = <T>(objectBuffer: Buffer, factory: { fromBuffer: (b: Buffer) => T }) => {
98
- const output: T[] = [];
99
- const numItems = objectBuffer.readUint32BE(0);
100
- let workingBuffer = objectBuffer.subarray(4);
101
- for (let i = 0; i < numItems; i++) {
102
- const obj = toObject<T>(workingBuffer, factory);
103
- workingBuffer = obj.remainingData;
104
- if (obj !== undefined) {
105
- output.push(obj.obj!);
106
- }
107
- }
108
- return {
109
- remainingData: workingBuffer,
110
- objects: output,
111
- };
112
- };
113
- // this is the opposite of the 'toMessage' function
114
- // so the first 4 bytes is the complete length, skip it
115
- const publicInputs = toObject(buffer.subarray(4), PrivateKernelTailCircuitPublicInputs);
116
- const clientIvcProof = toObject(publicInputs.remainingData, ClientIvcProof);
117
-
118
- const noteEncryptedLogs = toObject(clientIvcProof.remainingData, EncryptedNoteTxL2Logs);
119
- if (!noteEncryptedLogs.obj) {
120
- noteEncryptedLogs.obj = new EncryptedNoteTxL2Logs([]);
121
- }
122
- const encryptedLogs = toObject(noteEncryptedLogs.remainingData, EncryptedTxL2Logs);
123
- if (!encryptedLogs.obj) {
124
- encryptedLogs.obj = new EncryptedTxL2Logs([]);
125
- }
126
- const unencryptedLogs = toObject(encryptedLogs.remainingData, UnencryptedTxL2Logs);
127
- if (!unencryptedLogs.obj) {
128
- unencryptedLogs.obj = new UnencryptedTxL2Logs([]);
129
- }
130
-
131
- const publicCalls = toObjectArray(unencryptedLogs.remainingData, PublicCallRequest);
132
-
133
- const publicTeardownCall = toObject(publicCalls.remainingData, PublicCallRequest);
134
- return new Tx(
135
- publicInputs.obj!,
136
- clientIvcProof.obj!,
137
- noteEncryptedLogs.obj,
138
- encryptedLogs.obj,
139
- unencryptedLogs.obj,
140
- publicCalls.objects,
141
- publicTeardownCall.obj!,
142
- );
143
- }