@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.
- package/dest/bootstrap/bootstrap.d.ts +2 -6
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +1 -1
- package/dest/client/index.js +2 -2
- package/dest/client/mocks.d.ts +5 -3
- package/dest/client/mocks.d.ts.map +1 -1
- package/dest/client/mocks.js +18 -9
- package/dest/client/p2p_client.d.ts +5 -3
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +19 -6
- package/dest/config.d.ts +12 -12
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +89 -25
- package/dest/service/libp2p_service.d.ts +2 -3
- package/dest/service/libp2p_service.d.ts.map +1 -1
- package/dest/service/libp2p_service.js +20 -32
- package/dest/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/tx_pool/aztec_kv_tx_pool.js +24 -6
- package/dest/tx_pool/instrumentation.d.ts +4 -2
- package/dest/tx_pool/instrumentation.d.ts.map +1 -1
- package/dest/tx_pool/instrumentation.js +21 -8
- package/dest/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/tx_pool/memory_tx_pool.js +13 -5
- package/package.json +6 -6
- package/src/bootstrap/bootstrap.ts +2 -9
- package/src/client/index.ts +1 -1
- package/src/client/mocks.ts +20 -7
- package/src/client/p2p_client.ts +19 -4
- package/src/config.ts +116 -55
- package/src/service/libp2p_service.ts +21 -34
- package/src/tx_pool/aztec_kv_tx_pool.ts +24 -5
- package/src/tx_pool/instrumentation.ts +23 -8
- package/src/tx_pool/memory_tx_pool.ts +16 -4
- package/dest/service/tx_messages.d.ts +0 -32
- package/dest/service/tx_messages.d.ts.map +0 -1
- package/dest/service/tx_messages.js +0 -121
- 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
|
-
}
|