@aztec/aztec-node 0.6.7 → 0.7.2
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/Dockerfile +15 -0
- package/package.json +10 -10
- package/.tsbuildinfo +0 -1
- package/dest/aztec-node/config.d.ts +0 -13
- package/dest/aztec-node/config.d.ts.map +0 -1
- package/dest/aztec-node/config.js +0 -18
- package/dest/aztec-node/http-node.d.ts +0 -149
- package/dest/aztec-node/http-node.d.ts.map +0 -1
- package/dest/aztec-node/http-node.js +0 -334
- package/dest/aztec-node/http-node.test.d.ts +0 -2
- package/dest/aztec-node/http-node.test.d.ts.map +0 -1
- package/dest/aztec-node/http-node.test.js +0 -386
- package/dest/aztec-node/server.d.ts +0 -187
- package/dest/aztec-node/server.d.ts.map +0 -1
- package/dest/aztec-node/server.js +0 -320
- package/dest/index.d.ts +0 -4
- package/dest/index.d.ts.map +0 -1
- package/dest/index.js +0 -4
|
@@ -1,386 +0,0 @@
|
|
|
1
|
-
import { AztecAddress, CircuitsWasm, EthAddress, Fr, FunctionSelector, HistoricBlockData } from '@aztec/circuits.js';
|
|
2
|
-
import { randomBytes } from '@aztec/foundation/crypto';
|
|
3
|
-
import { Pedersen } from '@aztec/merkle-tree';
|
|
4
|
-
import { ContractData, ExtendedContractData, L1ToL2Message, L2Block, L2BlockL2Logs, LogType, MerkleTreeId, SiblingPath, SimulationError, TxHash, mockTx, } from '@aztec/types';
|
|
5
|
-
import { jest } from '@jest/globals';
|
|
6
|
-
import { HttpNode } from './http-node.js';
|
|
7
|
-
const TEST_URL = 'http://aztec-node-url.com/';
|
|
8
|
-
const setFetchMock = (response, status = 200) => {
|
|
9
|
-
global.fetch = jest
|
|
10
|
-
.fn()
|
|
11
|
-
.mockImplementation((_input, _init) => {
|
|
12
|
-
return Promise.resolve({
|
|
13
|
-
status,
|
|
14
|
-
ok: true,
|
|
15
|
-
json: () => response,
|
|
16
|
-
arrayBuffer: () => response,
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
};
|
|
20
|
-
describe('HttpNode', () => {
|
|
21
|
-
let httpNode;
|
|
22
|
-
let pedersen;
|
|
23
|
-
beforeAll(async () => {
|
|
24
|
-
httpNode = new HttpNode(TEST_URL);
|
|
25
|
-
pedersen = new Pedersen(await CircuitsWasm.get());
|
|
26
|
-
});
|
|
27
|
-
afterEach(() => {
|
|
28
|
-
jest.clearAllMocks();
|
|
29
|
-
});
|
|
30
|
-
describe('isReady', () => {
|
|
31
|
-
it.each([true, false])('should return %s when the node is ready', async () => {
|
|
32
|
-
const response = { isReady: true };
|
|
33
|
-
setFetchMock(response);
|
|
34
|
-
const result = await httpNode.isReady();
|
|
35
|
-
expect(fetch).toHaveBeenCalledWith(TEST_URL);
|
|
36
|
-
expect(result).toBe(true);
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
describe('getBlocks', () => {
|
|
40
|
-
it('should fetch and parse blocks', async () => {
|
|
41
|
-
const block1 = L2Block.random(1);
|
|
42
|
-
const block2 = L2Block.random(2);
|
|
43
|
-
const response = {
|
|
44
|
-
blocks: [block1.encode(), block2.encode()],
|
|
45
|
-
};
|
|
46
|
-
setFetchMock(response);
|
|
47
|
-
const result = await httpNode.getBlocks(0, 3);
|
|
48
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}get-blocks?from=0&limit=3`);
|
|
49
|
-
expect(result).toEqual([block1, block2]);
|
|
50
|
-
});
|
|
51
|
-
it('should return an empty array if blocks are not available', async () => {
|
|
52
|
-
const response = { blocks: [] };
|
|
53
|
-
setFetchMock(response);
|
|
54
|
-
const result = await httpNode.getBlocks(0, 2);
|
|
55
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}get-blocks?from=0&limit=2`);
|
|
56
|
-
expect(result).toEqual([]);
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
describe('getBlock', () => {
|
|
60
|
-
it('should fetch and parse a block', async () => {
|
|
61
|
-
const block1 = L2Block.random(1);
|
|
62
|
-
const response = {
|
|
63
|
-
block: block1.encode(),
|
|
64
|
-
};
|
|
65
|
-
setFetchMock(response);
|
|
66
|
-
const result = await httpNode.getBlock(1);
|
|
67
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}get-block?number=1`);
|
|
68
|
-
expect(result).toEqual(block1);
|
|
69
|
-
});
|
|
70
|
-
it('should return undefined if the block is not available', async () => {
|
|
71
|
-
const response = { block: undefined };
|
|
72
|
-
setFetchMock(response);
|
|
73
|
-
const result = await httpNode.getBlock(2);
|
|
74
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}get-block?number=2`);
|
|
75
|
-
expect(result).toEqual(undefined);
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
describe('getBlockNumber', () => {
|
|
79
|
-
it('should fetch and return current block number', async () => {
|
|
80
|
-
const response = { blockNumber: 100 };
|
|
81
|
-
setFetchMock(response);
|
|
82
|
-
const result = await httpNode.getBlockNumber();
|
|
83
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}get-block-number`);
|
|
84
|
-
expect(result).toBe(100);
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
describe('getVersion', () => {
|
|
88
|
-
it('should fetch and return the version', async () => {
|
|
89
|
-
const response = { version: 5 };
|
|
90
|
-
setFetchMock(response);
|
|
91
|
-
const result = await httpNode.getVersion();
|
|
92
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}get-version`);
|
|
93
|
-
expect(result).toBe(5);
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
describe('getChainId', () => {
|
|
97
|
-
it('should fetch and return the chain ID', async () => {
|
|
98
|
-
const response = { chainId: 1234 };
|
|
99
|
-
setFetchMock(response);
|
|
100
|
-
const result = await httpNode.getChainId();
|
|
101
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}get-chain-id`);
|
|
102
|
-
expect(result).toBe(1234);
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
describe('getRollupAddress', () => {
|
|
106
|
-
it('should fetch and return the rollup address', async () => {
|
|
107
|
-
const addr = EthAddress.random();
|
|
108
|
-
const response = { rollupAddress: addr.toString() };
|
|
109
|
-
setFetchMock(response);
|
|
110
|
-
const result = await httpNode.getRollupAddress();
|
|
111
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}get-rollup-address`);
|
|
112
|
-
expect(result).toEqual(addr);
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
describe('getExtendedContractData', () => {
|
|
116
|
-
it('should fetch and return contract public data', async () => {
|
|
117
|
-
const extendedContractData = ExtendedContractData.random();
|
|
118
|
-
const response = {
|
|
119
|
-
contractData: extendedContractData.toBuffer(),
|
|
120
|
-
};
|
|
121
|
-
setFetchMock(response);
|
|
122
|
-
const result = await httpNode.getExtendedContractData(extendedContractData.contractData.contractAddress);
|
|
123
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}contract-data-and-bytecode?address=${extendedContractData.contractData.contractAddress.toString()}`);
|
|
124
|
-
expect(result).toEqual(extendedContractData);
|
|
125
|
-
});
|
|
126
|
-
it('should return undefined if contract data is not available', async () => {
|
|
127
|
-
const response = {
|
|
128
|
-
contractData: undefined,
|
|
129
|
-
};
|
|
130
|
-
setFetchMock(response);
|
|
131
|
-
const randomAddress = AztecAddress.random();
|
|
132
|
-
const result = await httpNode.getExtendedContractData(randomAddress);
|
|
133
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}contract-data-and-bytecode?address=${randomAddress.toString()}`);
|
|
134
|
-
expect(result).toEqual(undefined);
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
describe('getLogs', () => {
|
|
138
|
-
it.each(['encrypted', 'unencrypted'])('should fetch and return %s logs', async (logType) => {
|
|
139
|
-
const processedLogType = logType === 'encrypted' ? LogType.ENCRYPTED : LogType.UNENCRYPTED;
|
|
140
|
-
const from = 0;
|
|
141
|
-
const limit = 3;
|
|
142
|
-
const log1 = L2BlockL2Logs.random(2, 3, 4);
|
|
143
|
-
const log2 = L2BlockL2Logs.random(1, 5, 2);
|
|
144
|
-
const response = {
|
|
145
|
-
logs: [log1.toBuffer(), log2.toBuffer()],
|
|
146
|
-
};
|
|
147
|
-
setFetchMock(response);
|
|
148
|
-
const result = await httpNode.getLogs(from, limit, processedLogType);
|
|
149
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}get-logs?from=${from}&limit=${limit}&logType=${processedLogType}`);
|
|
150
|
-
expect(result).toEqual([log1, log2]);
|
|
151
|
-
});
|
|
152
|
-
it.each(['encrypted', 'unencrypted'])('should return an empty array if %s logs are not available', async (logType) => {
|
|
153
|
-
const processedLogType = logType === 'encrypted' ? LogType.ENCRYPTED : LogType.UNENCRYPTED;
|
|
154
|
-
const from = 0;
|
|
155
|
-
const limit = 2;
|
|
156
|
-
const response = {};
|
|
157
|
-
setFetchMock(response);
|
|
158
|
-
const result = await httpNode.getLogs(from, limit, processedLogType);
|
|
159
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}get-logs?from=${from}&limit=${limit}&logType=${processedLogType}`);
|
|
160
|
-
expect(result).toEqual([]);
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
describe('getContractData', () => {
|
|
164
|
-
it('should fetch and return contract data', async () => {
|
|
165
|
-
const contractData = ContractData.random();
|
|
166
|
-
const response = {
|
|
167
|
-
contractData: contractData.toBuffer(),
|
|
168
|
-
};
|
|
169
|
-
setFetchMock(response);
|
|
170
|
-
const result = await httpNode.getContractData(contractData.contractAddress);
|
|
171
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}contract-data?address=${contractData.contractAddress.toString()}`);
|
|
172
|
-
expect(result).toEqual(contractData);
|
|
173
|
-
});
|
|
174
|
-
it('should return undefined if contract data is not available', async () => {
|
|
175
|
-
const response = {
|
|
176
|
-
contractData: undefined,
|
|
177
|
-
};
|
|
178
|
-
setFetchMock(response);
|
|
179
|
-
const randomAddress = AztecAddress.random();
|
|
180
|
-
const result = await httpNode.getContractData(randomAddress);
|
|
181
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}contract-data?address=${randomAddress.toString()}`);
|
|
182
|
-
expect(result).toBeUndefined();
|
|
183
|
-
});
|
|
184
|
-
});
|
|
185
|
-
describe('sendTx', () => {
|
|
186
|
-
it('should submit a transaction to the p2p pool', async () => {
|
|
187
|
-
const tx = mockTx();
|
|
188
|
-
const irrelevantResponse = {};
|
|
189
|
-
setFetchMock(irrelevantResponse);
|
|
190
|
-
await httpNode.sendTx(tx);
|
|
191
|
-
const init = {
|
|
192
|
-
method: 'POST',
|
|
193
|
-
body: tx.toBuffer(),
|
|
194
|
-
};
|
|
195
|
-
const call = fetch.mock.calls[0];
|
|
196
|
-
expect(call[0].href).toBe(`${TEST_URL}tx`);
|
|
197
|
-
expect(call[1]).toStrictEqual(init);
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
describe('getPendingTxByHash', () => {
|
|
201
|
-
it('should fetch and return a pending tx', async () => {
|
|
202
|
-
const txHash = new TxHash(randomBytes(TxHash.SIZE));
|
|
203
|
-
const tx = mockTx();
|
|
204
|
-
const response = tx.toBuffer();
|
|
205
|
-
setFetchMock(response);
|
|
206
|
-
const result = await httpNode.getPendingTxByHash(txHash);
|
|
207
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}get-pending-tx?hash=${txHash}`);
|
|
208
|
-
expect(result).toEqual(tx);
|
|
209
|
-
});
|
|
210
|
-
it('should return undefined if the pending tx does not exist', async () => {
|
|
211
|
-
const txHash = new TxHash(randomBytes(TxHash.SIZE));
|
|
212
|
-
const response = undefined;
|
|
213
|
-
setFetchMock(response, 404);
|
|
214
|
-
const result = await httpNode.getPendingTxByHash(txHash);
|
|
215
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}get-pending-tx?hash=${txHash}`);
|
|
216
|
-
expect(result).toBeUndefined();
|
|
217
|
-
});
|
|
218
|
-
});
|
|
219
|
-
describe('findContractIndex', () => {
|
|
220
|
-
it('should fetch and return the index of the given contract', async () => {
|
|
221
|
-
const leafValue = Buffer.from('abc123', 'hex');
|
|
222
|
-
const index = '123456';
|
|
223
|
-
const response = { index };
|
|
224
|
-
setFetchMock(response);
|
|
225
|
-
const result = await httpNode.findContractIndex(leafValue);
|
|
226
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}contract-index?leaf=${leafValue.toString('hex')}`);
|
|
227
|
-
expect(result).toBe(BigInt(index));
|
|
228
|
-
});
|
|
229
|
-
it('should return undefined if the contract index is not found', async () => {
|
|
230
|
-
const leafValue = Buffer.from('def456', 'hex');
|
|
231
|
-
const response = {};
|
|
232
|
-
setFetchMock(response);
|
|
233
|
-
const result = await httpNode.findContractIndex(leafValue);
|
|
234
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}contract-index?leaf=${leafValue.toString('hex')}`);
|
|
235
|
-
expect(result).toBeUndefined();
|
|
236
|
-
});
|
|
237
|
-
});
|
|
238
|
-
describe('getContractPath', () => {
|
|
239
|
-
it('should fetch and return the sibling path for the given leaf index', async () => {
|
|
240
|
-
const leafIndex = BigInt(123456);
|
|
241
|
-
const siblingPath = SiblingPath.ZERO(3, Buffer.alloc(32), pedersen);
|
|
242
|
-
const response = { path: siblingPath.toBuffer().toString('hex') };
|
|
243
|
-
setFetchMock(response);
|
|
244
|
-
const result = await httpNode.getContractPath(leafIndex);
|
|
245
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}contract-path?leaf=${leafIndex.toString()}`);
|
|
246
|
-
expect(result).toEqual(siblingPath);
|
|
247
|
-
});
|
|
248
|
-
});
|
|
249
|
-
describe('findCommitmentIndex', () => {
|
|
250
|
-
it('should fetch and return the index of the given leaf', async () => {
|
|
251
|
-
const leafValue = Buffer.from('0123456789', 'hex');
|
|
252
|
-
const expectedIndex = BigInt(123);
|
|
253
|
-
const response = { index: expectedIndex.toString() };
|
|
254
|
-
setFetchMock(response);
|
|
255
|
-
const result = await httpNode.findCommitmentIndex(leafValue);
|
|
256
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}commitment-index?leaf=${leafValue.toString('hex')}`);
|
|
257
|
-
expect(result).toBe(expectedIndex);
|
|
258
|
-
});
|
|
259
|
-
it('should return undefined if the commitment index is not found', async () => {
|
|
260
|
-
const leafValue = Buffer.from('def456', 'hex');
|
|
261
|
-
const response = {};
|
|
262
|
-
setFetchMock(response);
|
|
263
|
-
const result = await httpNode.findCommitmentIndex(leafValue);
|
|
264
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}commitment-index?leaf=${leafValue.toString('hex')}`);
|
|
265
|
-
expect(result).toBeUndefined();
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
describe('getDataTreePath', () => {
|
|
269
|
-
it('should fetch and return the sibling path for the given leaf index', async () => {
|
|
270
|
-
const leafIndex = BigInt(123456);
|
|
271
|
-
const siblingPath = SiblingPath.ZERO(3, Buffer.alloc(32), pedersen);
|
|
272
|
-
const response = { path: siblingPath.toBuffer().toString('hex') };
|
|
273
|
-
setFetchMock(response);
|
|
274
|
-
const result = await httpNode.getDataTreePath(leafIndex);
|
|
275
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}data-path?leaf=${leafIndex.toString()}`);
|
|
276
|
-
expect(result).toEqual(siblingPath);
|
|
277
|
-
});
|
|
278
|
-
});
|
|
279
|
-
describe('getL1ToL2MessageAndIndex', () => {
|
|
280
|
-
it('should fetch and return the L1 to L2 message and index for the given message key', async () => {
|
|
281
|
-
const messageKey = new Fr(789);
|
|
282
|
-
const expectedMessage = L1ToL2Message.random();
|
|
283
|
-
const expectedIndex = BigInt(123);
|
|
284
|
-
const response = { message: expectedMessage.toBuffer().toString('hex'), index: expectedIndex.toString() };
|
|
285
|
-
setFetchMock(response);
|
|
286
|
-
const result = await httpNode.getL1ToL2MessageAndIndex(messageKey);
|
|
287
|
-
expect(fetch).toHaveBeenCalledWith(`${TEST_URL}l1-l2-message?messageKey=${messageKey.toString()}`);
|
|
288
|
-
expect(result).toEqual({
|
|
289
|
-
message: expectedMessage,
|
|
290
|
-
index: expectedIndex,
|
|
291
|
-
});
|
|
292
|
-
});
|
|
293
|
-
});
|
|
294
|
-
describe('getL1ToL2MessagesTreePath', () => {
|
|
295
|
-
it('should fetch and return the sibling path for the given leaf index', async () => {
|
|
296
|
-
const leafIndex = BigInt(123456);
|
|
297
|
-
const siblingPath = SiblingPath.ZERO(3, Buffer.alloc(32), pedersen);
|
|
298
|
-
const response = { path: siblingPath.toBuffer().toString('hex') };
|
|
299
|
-
setFetchMock(response);
|
|
300
|
-
const result = await httpNode.getL1ToL2MessagesTreePath(leafIndex);
|
|
301
|
-
const url = `${TEST_URL}l1-l2-path?leaf=${leafIndex.toString()}`;
|
|
302
|
-
expect(fetch).toHaveBeenCalledWith(url);
|
|
303
|
-
expect(result).toEqual(siblingPath);
|
|
304
|
-
});
|
|
305
|
-
});
|
|
306
|
-
describe('getPublicStorageAt', () => {
|
|
307
|
-
it('should fetch and return the storage value at the given contract slot', async () => {
|
|
308
|
-
const contractAddress = AztecAddress.random();
|
|
309
|
-
const slot = BigInt(789);
|
|
310
|
-
const storageValue = Buffer.from('0123456789', 'hex');
|
|
311
|
-
const response = { value: storageValue.toString('hex') };
|
|
312
|
-
setFetchMock(response);
|
|
313
|
-
const result = await httpNode.getPublicStorageAt(contractAddress, slot);
|
|
314
|
-
const url = `${TEST_URL}public-storage-at?address=${contractAddress}&slot=${slot.toString()}`;
|
|
315
|
-
expect(fetch).toHaveBeenCalledWith(url);
|
|
316
|
-
expect(result).toEqual(storageValue);
|
|
317
|
-
});
|
|
318
|
-
it('should return undefined if the storage value is not found', async () => {
|
|
319
|
-
const contractAddress = AztecAddress.random();
|
|
320
|
-
const slot = BigInt(987);
|
|
321
|
-
const response = {};
|
|
322
|
-
setFetchMock(response);
|
|
323
|
-
const result = await httpNode.getPublicStorageAt(contractAddress, slot);
|
|
324
|
-
const url = `${TEST_URL}public-storage-at?address=${contractAddress}&slot=${slot.toString()}`;
|
|
325
|
-
expect(fetch).toHaveBeenCalledWith(url);
|
|
326
|
-
expect(result).toBeUndefined();
|
|
327
|
-
});
|
|
328
|
-
});
|
|
329
|
-
describe('getTreeRoots', () => {
|
|
330
|
-
it('should fetch and return the current committed roots for the data trees', async () => {
|
|
331
|
-
const roots = {
|
|
332
|
-
[MerkleTreeId.CONTRACT_TREE]: Fr.random(),
|
|
333
|
-
[MerkleTreeId.PRIVATE_DATA_TREE]: Fr.random(),
|
|
334
|
-
[MerkleTreeId.NULLIFIER_TREE]: Fr.random(),
|
|
335
|
-
[MerkleTreeId.PUBLIC_DATA_TREE]: Fr.random(),
|
|
336
|
-
[MerkleTreeId.L1_TO_L2_MESSAGES_TREE]: Fr.random(),
|
|
337
|
-
[MerkleTreeId.BLOCKS_TREE]: Fr.random(),
|
|
338
|
-
};
|
|
339
|
-
const rootsInResponse = Object.fromEntries(Object.entries(roots).map(([key, value]) => [key, value.toString()]));
|
|
340
|
-
const response = { roots: rootsInResponse };
|
|
341
|
-
setFetchMock(response);
|
|
342
|
-
const result = await httpNode.getTreeRoots();
|
|
343
|
-
const url = `${TEST_URL}tree-roots`;
|
|
344
|
-
expect(fetch).toHaveBeenCalledWith(url);
|
|
345
|
-
expect(result).toEqual(roots);
|
|
346
|
-
});
|
|
347
|
-
});
|
|
348
|
-
describe('getHistoricBlockData', () => {
|
|
349
|
-
it('should fetch and return the current committed roots for the data trees', async () => {
|
|
350
|
-
const blockData = HistoricBlockData.random();
|
|
351
|
-
const response = { blockData };
|
|
352
|
-
setFetchMock(response);
|
|
353
|
-
const result = await httpNode.getHistoricBlockData();
|
|
354
|
-
const url = `${TEST_URL}historic-block-data`;
|
|
355
|
-
expect(fetch).toHaveBeenCalledWith(url);
|
|
356
|
-
expect(result).toEqual(blockData);
|
|
357
|
-
});
|
|
358
|
-
});
|
|
359
|
-
describe('simulatePublicCalls', () => {
|
|
360
|
-
it('should fetch a successful simulation response', async () => {
|
|
361
|
-
const tx = mockTx();
|
|
362
|
-
const response = {};
|
|
363
|
-
setFetchMock(response);
|
|
364
|
-
await httpNode.simulatePublicCalls(tx);
|
|
365
|
-
const init = {
|
|
366
|
-
method: 'POST',
|
|
367
|
-
body: tx.toBuffer(),
|
|
368
|
-
};
|
|
369
|
-
const call = fetch.mock.calls[0];
|
|
370
|
-
expect(call[0].href).toBe(`${TEST_URL}simulate-tx`);
|
|
371
|
-
expect(call[1]).toStrictEqual(init);
|
|
372
|
-
});
|
|
373
|
-
it('should fetch a simulation error', async () => {
|
|
374
|
-
const tx = mockTx();
|
|
375
|
-
const simulationError = new SimulationError('test error', [
|
|
376
|
-
{ contractAddress: AztecAddress.ZERO, functionSelector: FunctionSelector.empty() },
|
|
377
|
-
]);
|
|
378
|
-
const response = {
|
|
379
|
-
simulationError: simulationError.toJSON(),
|
|
380
|
-
};
|
|
381
|
-
setFetchMock(response);
|
|
382
|
-
await expect(httpNode.simulatePublicCalls(tx)).rejects.toThrow(simulationError);
|
|
383
|
-
});
|
|
384
|
-
});
|
|
385
|
-
});
|
|
386
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1ub2RlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWMtbm9kZS9odHRwLW5vZGUudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixhQUFhLEVBQ2IsT0FBTyxFQUNQLGFBQWEsRUFDYixPQUFPLEVBQ1AsWUFBWSxFQUNaLFdBQVcsRUFDWCxlQUFlLEVBQ2YsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxNQUFNLFFBQVEsR0FBRyw0QkFBNEIsQ0FBQztBQUU5QyxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQWEsRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFRLEVBQUU7SUFDekQsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJO1NBQ2hCLEVBQUUsRUFBdUI7U0FDekIsa0JBQWtCLENBQUMsQ0FBQyxNQUF5QixFQUFFLEtBQStCLEVBQUUsRUFBRTtRQUNqRixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDckIsTUFBTTtZQUNOLEVBQUUsRUFBRSxJQUFJO1lBQ1IsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVE7WUFDcEIsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVE7U0FDaEIsQ0FBQyxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxD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
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { CONTRACT_TREE_HEIGHT, EthAddress, Fr, HistoricBlockData, L1_TO_L2_MSG_TREE_HEIGHT, PRIVATE_DATA_TREE_HEIGHT } from '@aztec/circuits.js';
|
|
3
|
-
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
4
|
-
import { P2P } from '@aztec/p2p';
|
|
5
|
-
import { GlobalVariableBuilder, SequencerClient } from '@aztec/sequencer-client';
|
|
6
|
-
import { AztecNode, ContractData, ContractDataSource, ExtendedContractData, L1ToL2MessageAndIndex, L1ToL2MessageSource, L2Block, L2BlockL2Logs, L2BlockSource, L2LogsSource, L2Tx, LogType, MerkleTreeId, SiblingPath, Tx, TxHash } from '@aztec/types';
|
|
7
|
-
import { WorldStateSynchroniser } from '@aztec/world-state';
|
|
8
|
-
import { default as levelup } from 'levelup';
|
|
9
|
-
import { MemDown } from 'memdown';
|
|
10
|
-
import { AztecNodeConfig } from './config.js';
|
|
11
|
-
export declare const createMemDown: () => MemDown<any, any>;
|
|
12
|
-
/**
|
|
13
|
-
* The aztec node.
|
|
14
|
-
*/
|
|
15
|
-
export declare class AztecNodeService implements AztecNode {
|
|
16
|
-
protected p2pClient: P2P;
|
|
17
|
-
protected blockSource: L2BlockSource;
|
|
18
|
-
protected encryptedLogsSource: L2LogsSource;
|
|
19
|
-
protected unencryptedLogsSource: L2LogsSource;
|
|
20
|
-
protected contractDataSource: ContractDataSource;
|
|
21
|
-
protected l1ToL2MessageSource: L1ToL2MessageSource;
|
|
22
|
-
protected worldStateSynchroniser: WorldStateSynchroniser;
|
|
23
|
-
protected sequencer: SequencerClient;
|
|
24
|
-
protected chainId: number;
|
|
25
|
-
protected version: number;
|
|
26
|
-
protected globalVariableBuilder: GlobalVariableBuilder;
|
|
27
|
-
protected merkleTreesDb: levelup.LevelUp;
|
|
28
|
-
private log;
|
|
29
|
-
constructor(p2pClient: P2P, blockSource: L2BlockSource, encryptedLogsSource: L2LogsSource, unencryptedLogsSource: L2LogsSource, contractDataSource: ContractDataSource, l1ToL2MessageSource: L1ToL2MessageSource, worldStateSynchroniser: WorldStateSynchroniser, sequencer: SequencerClient, chainId: number, version: number, globalVariableBuilder: GlobalVariableBuilder, merkleTreesDb: levelup.LevelUp, log?: import("@aztec/foundation/log").DebugLogger);
|
|
30
|
-
/**
|
|
31
|
-
* Initialises the Aztec Node, wait for component to sync.
|
|
32
|
-
* @param config - The configuration to be used by the aztec node.
|
|
33
|
-
* @returns - A fully synced Aztec Node for use in development/testing.
|
|
34
|
-
*/
|
|
35
|
-
static createAndSync(config: AztecNodeConfig): Promise<AztecNodeService>;
|
|
36
|
-
/**
|
|
37
|
-
* Method to determine if the node is ready to accept transactions.
|
|
38
|
-
* @returns - Flag indicating the readiness for tx submission.
|
|
39
|
-
*/
|
|
40
|
-
isReady(): Promise<boolean>;
|
|
41
|
-
/**
|
|
42
|
-
* Get the a given block.
|
|
43
|
-
* @param number - The block number being requested.
|
|
44
|
-
* @returns The blocks requested.
|
|
45
|
-
*/
|
|
46
|
-
getBlock(number: number): Promise<L2Block | undefined>;
|
|
47
|
-
/**
|
|
48
|
-
* Method to request blocks. Will attempt to return all requested blocks but will return only those available.
|
|
49
|
-
* @param from - The start of the range of blocks to return.
|
|
50
|
-
* @param limit - The maximum number of blocks to obtain.
|
|
51
|
-
* @returns The blocks requested.
|
|
52
|
-
*/
|
|
53
|
-
getBlocks(from: number, limit: number): Promise<L2Block[]>;
|
|
54
|
-
/**
|
|
55
|
-
* Method to fetch the current block number.
|
|
56
|
-
* @returns The block number.
|
|
57
|
-
*/
|
|
58
|
-
getBlockNumber(): Promise<number>;
|
|
59
|
-
/**
|
|
60
|
-
* Method to fetch the version of the rollup the node is connected to.
|
|
61
|
-
* @returns The rollup version.
|
|
62
|
-
*/
|
|
63
|
-
getVersion(): Promise<number>;
|
|
64
|
-
/**
|
|
65
|
-
* Method to fetch the chain id of the base-layer for the rollup.
|
|
66
|
-
* @returns The chain id.
|
|
67
|
-
*/
|
|
68
|
-
getChainId(): Promise<number>;
|
|
69
|
-
/**
|
|
70
|
-
* Method to fetch the rollup contract address at the base-layer.
|
|
71
|
-
* @returns The rollup address.
|
|
72
|
-
*/
|
|
73
|
-
getRollupAddress(): Promise<EthAddress>;
|
|
74
|
-
/**
|
|
75
|
-
* Get the extended contract data for this contract.
|
|
76
|
-
* @param contractAddress - The contract data address.
|
|
77
|
-
* @returns The extended contract data or undefined if not found.
|
|
78
|
-
*/
|
|
79
|
-
getExtendedContractData(contractAddress: AztecAddress): Promise<ExtendedContractData | undefined>;
|
|
80
|
-
/**
|
|
81
|
-
* Lookup the contract data for this contract.
|
|
82
|
-
* Contains the ethereum portal address .
|
|
83
|
-
* @param contractAddress - The contract data address.
|
|
84
|
-
* @returns The contract's address & portal address.
|
|
85
|
-
*/
|
|
86
|
-
getContractData(contractAddress: AztecAddress): Promise<ContractData | undefined>;
|
|
87
|
-
/**
|
|
88
|
-
* Gets up to `limit` amount of logs starting from `from`.
|
|
89
|
-
* @param from - Number of the L2 block to which corresponds the first logs to be returned.
|
|
90
|
-
* @param limit - The maximum number of logs to return.
|
|
91
|
-
* @param logType - Specifies whether to return encrypted or unencrypted logs.
|
|
92
|
-
* @returns The requested logs.
|
|
93
|
-
*/
|
|
94
|
-
getLogs(from: number, limit: number, logType: LogType): Promise<L2BlockL2Logs[]>;
|
|
95
|
-
/**
|
|
96
|
-
* Method to submit a transaction to the p2p pool.
|
|
97
|
-
* @param tx - The transaction to be submitted.
|
|
98
|
-
*/
|
|
99
|
-
sendTx(tx: Tx): Promise<void>;
|
|
100
|
-
getTx(txHash: TxHash): Promise<L2Tx | undefined>;
|
|
101
|
-
/**
|
|
102
|
-
* Method to stop the aztec node.
|
|
103
|
-
*/
|
|
104
|
-
stop(): Promise<void>;
|
|
105
|
-
/**
|
|
106
|
-
* Method to retrieve pending txs.
|
|
107
|
-
* @returns - The pending txs.
|
|
108
|
-
*/
|
|
109
|
-
getPendingTxs(): Promise<Tx[]>;
|
|
110
|
-
/**
|
|
111
|
-
* Method to retrieve a single pending tx.
|
|
112
|
-
* @param txHash - The transaction hash to return.
|
|
113
|
-
* @returns - The pending tx if it exists.
|
|
114
|
-
*/
|
|
115
|
-
getPendingTxByHash(txHash: TxHash): Promise<Tx | undefined>;
|
|
116
|
-
/**
|
|
117
|
-
* Find the index of the given contract.
|
|
118
|
-
* @param leafValue - The value to search for.
|
|
119
|
-
* @returns The index of the given leaf in the contracts tree or undefined if not found.
|
|
120
|
-
*/
|
|
121
|
-
findContractIndex(leafValue: Buffer): Promise<bigint | undefined>;
|
|
122
|
-
/**
|
|
123
|
-
* Returns the sibling path for the given index in the contract tree.
|
|
124
|
-
* @param leafIndex - The index of the leaf for which the sibling path is required.
|
|
125
|
-
* @returns The sibling path for the leaf index.
|
|
126
|
-
*/
|
|
127
|
-
getContractPath(leafIndex: bigint): Promise<SiblingPath<typeof CONTRACT_TREE_HEIGHT>>;
|
|
128
|
-
/**
|
|
129
|
-
* Find the index of the given commitment.
|
|
130
|
-
* @param leafValue - The value to search for.
|
|
131
|
-
* @returns The index of the given leaf in the private data tree or undefined if not found.
|
|
132
|
-
*/
|
|
133
|
-
findCommitmentIndex(leafValue: Buffer): Promise<bigint | undefined>;
|
|
134
|
-
/**
|
|
135
|
-
* Returns the sibling path for the given index in the data tree.
|
|
136
|
-
* @param leafIndex - The index of the leaf for which the sibling path is required.
|
|
137
|
-
* @returns The sibling path for the leaf index.
|
|
138
|
-
*/
|
|
139
|
-
getDataTreePath(leafIndex: bigint): Promise<SiblingPath<typeof PRIVATE_DATA_TREE_HEIGHT>>;
|
|
140
|
-
/**
|
|
141
|
-
* Gets a confirmed/consumed L1 to L2 message for the given message key
|
|
142
|
-
* and its index in the merkle tree.
|
|
143
|
-
* @param messageKey - The message key.
|
|
144
|
-
* @returns The map containing the message and index.
|
|
145
|
-
*/
|
|
146
|
-
getL1ToL2MessageAndIndex(messageKey: Fr): Promise<L1ToL2MessageAndIndex>;
|
|
147
|
-
/**
|
|
148
|
-
* Returns the sibling path for a leaf in the committed l1 to l2 data tree.
|
|
149
|
-
* @param leafIndex - Index of the leaf in the tree.
|
|
150
|
-
* @returns The sibling path.
|
|
151
|
-
*/
|
|
152
|
-
getL1ToL2MessagesTreePath(leafIndex: bigint): Promise<SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>>;
|
|
153
|
-
/**
|
|
154
|
-
* Gets the storage value at the given contract slot.
|
|
155
|
-
* @param contract - Address of the contract to query.
|
|
156
|
-
* @param slot - Slot to query.
|
|
157
|
-
* @returns Storage value at the given contract slot (or undefined if not found).
|
|
158
|
-
* Note: Aztec's version of `eth_getStorageAt`.
|
|
159
|
-
*/
|
|
160
|
-
getPublicStorageAt(contract: AztecAddress, slot: bigint): Promise<Buffer | undefined>;
|
|
161
|
-
/**
|
|
162
|
-
* Returns the current committed roots for the data trees.
|
|
163
|
-
* @returns The current committed roots for the data trees.
|
|
164
|
-
*/
|
|
165
|
-
getTreeRoots(): Promise<Record<MerkleTreeId, Fr>>;
|
|
166
|
-
/**
|
|
167
|
-
* Returns the currently committed historic block data.
|
|
168
|
-
* @returns The current committed block data.
|
|
169
|
-
*/
|
|
170
|
-
getHistoricBlockData(): Promise<HistoricBlockData>;
|
|
171
|
-
/**
|
|
172
|
-
* Simulates the public part of a transaction with the current state.
|
|
173
|
-
* @param tx - The transaction to simulate.
|
|
174
|
-
**/
|
|
175
|
-
simulatePublicCalls(tx: Tx): Promise<void>;
|
|
176
|
-
/**
|
|
177
|
-
* Returns an instance of MerkleTreeOperations having first ensured the world state is fully synched
|
|
178
|
-
* @returns An instance of a committed MerkleTreeOperations
|
|
179
|
-
*/
|
|
180
|
-
private getWorldState;
|
|
181
|
-
/**
|
|
182
|
-
* Ensure we fully sync the world state
|
|
183
|
-
* @returns A promise that fulfils once the world state is synced
|
|
184
|
-
*/
|
|
185
|
-
private syncWorldState;
|
|
186
|
-
}
|
|
187
|
-
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"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"}
|