@aztec/end-to-end 0.0.1-commit.e0f15ab9b → 0.0.1-commit.e304674f1
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/README.md +27 -0
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +11 -26
- package/dest/e2e_epochs/epochs_test.js +3 -3
- package/dest/e2e_fees/fees_test.js +1 -1
- package/dest/e2e_p2p/inactivity_slash_test.js +3 -3
- package/dest/e2e_p2p/p2p_network.d.ts +5 -7
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +8 -12
- package/dest/e2e_p2p/reqresp/utils.js +1 -1
- package/dest/e2e_p2p/shared.d.ts +5 -7
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +16 -42
- package/dest/fixtures/authwit_proxy.d.ts +1 -1
- package/dest/fixtures/authwit_proxy.d.ts.map +1 -1
- package/dest/fixtures/authwit_proxy.js +4 -0
- package/dest/fixtures/e2e_prover_test.d.ts +1 -1
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +4 -7
- package/dest/fixtures/setup.d.ts +5 -4
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +7 -6
- package/dest/fixtures/setup_p2p_test.d.ts +6 -6
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +8 -8
- package/dest/fixtures/token_utils.d.ts +1 -1
- package/dest/fixtures/token_utils.d.ts.map +1 -1
- package/dest/fixtures/token_utils.js +2 -5
- package/dest/legacy-jest-resolver.d.cts +3 -0
- package/dest/legacy-jest-resolver.d.cts.map +1 -0
- package/dest/spartan/setup_test_wallets.d.ts +1 -1
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +58 -40
- package/dest/test-wallet/test_wallet.d.ts +6 -7
- package/dest/test-wallet/test_wallet.d.ts.map +1 -1
- package/dest/test-wallet/test_wallet.js +36 -27
- package/package.json +40 -39
- package/src/bench/client_flows/client_flows_benchmark.ts +29 -21
- package/src/e2e_epochs/epochs_test.ts +3 -3
- package/src/e2e_fees/fees_test.ts +1 -1
- package/src/e2e_p2p/inactivity_slash_test.ts +3 -3
- package/src/e2e_p2p/p2p_network.ts +16 -23
- package/src/e2e_p2p/reqresp/utils.ts +1 -1
- package/src/e2e_p2p/shared.ts +16 -57
- package/src/fixtures/authwit_proxy.ts +4 -0
- package/src/fixtures/e2e_prover_test.ts +7 -6
- package/src/fixtures/setup.ts +12 -13
- package/src/fixtures/setup_p2p_test.ts +9 -9
- package/src/fixtures/token_utils.ts +1 -4
- package/src/legacy-jest-resolver.cjs +135 -0
- package/src/spartan/setup_test_wallets.ts +59 -36
- package/src/test-wallet/test_wallet.ts +53 -28
|
@@ -11,6 +11,7 @@ import { getPXEConfig } from '@aztec/pxe/config';
|
|
|
11
11
|
import { createPXE } from '@aztec/pxe/server';
|
|
12
12
|
import { getContractInstanceFromInstantiationParams } from '@aztec/stdlib/contract';
|
|
13
13
|
import { deriveSigningKey } from '@aztec/stdlib/keys';
|
|
14
|
+
import { SimulationOverrides } from '@aztec/stdlib/tx';
|
|
14
15
|
import { mergeExecutionPayloads } from '@aztec/stdlib/tx';
|
|
15
16
|
import { BaseWallet } from '@aztec/wallet-sdk/base-wallet';
|
|
16
17
|
import { AztecNodeProxy, ProvenTx } from './utils.js';
|
|
@@ -65,22 +66,29 @@ import { AztecNodeProxy, ProvenTx } from './utils.js';
|
|
|
65
66
|
};
|
|
66
67
|
return this.createAccount(accountData);
|
|
67
68
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
69
|
+
/**
|
|
70
|
+
* Builds contract overrides for all provided addresses by replacing their account contracts with stub implementations.
|
|
71
|
+
*/ async buildAccountOverrides(addresses) {
|
|
72
|
+
const accounts = await this.getAccounts();
|
|
73
|
+
const contracts = {};
|
|
74
|
+
const filtered = accounts.filter((acc)=>addresses.some((addr)=>addr.equals(acc.item)));
|
|
75
|
+
for (const account of filtered){
|
|
76
|
+
const address = account.item;
|
|
77
|
+
const originalAccount = await this.getAccountFromAddress(address);
|
|
78
|
+
const completeAddress = originalAccount.getCompleteAddress();
|
|
79
|
+
const contractInstance = await this.pxe.getContractInstance(completeAddress.address);
|
|
80
|
+
if (!contractInstance) {
|
|
81
|
+
throw new Error(`No contract instance found for address: ${completeAddress.address} during account override building. This is a bug!`);
|
|
82
|
+
}
|
|
83
|
+
const stubInstance = await getContractInstanceFromInstantiationParams(StubAccountContractArtifact, {
|
|
84
|
+
salt: Fr.random()
|
|
85
|
+
});
|
|
86
|
+
contracts[address.toString()] = {
|
|
87
|
+
instance: stubInstance,
|
|
88
|
+
artifact: StubAccountContractArtifact
|
|
89
|
+
};
|
|
74
90
|
}
|
|
75
|
-
|
|
76
|
-
const instance = await getContractInstanceFromInstantiationParams(StubAccountContractArtifact, {
|
|
77
|
-
salt: Fr.random()
|
|
78
|
-
});
|
|
79
|
-
return {
|
|
80
|
-
account: stubAccount,
|
|
81
|
-
instance,
|
|
82
|
-
artifact: StubAccountContractArtifact
|
|
83
|
-
};
|
|
91
|
+
return contracts;
|
|
84
92
|
}
|
|
85
93
|
accounts;
|
|
86
94
|
/**
|
|
@@ -144,6 +152,7 @@ import { AztecNodeProxy, ProvenTx } from './utils.js';
|
|
|
144
152
|
async simulateViaEntrypoint(executionPayload, opts) {
|
|
145
153
|
const { from, feeOptions, scopes, skipTxValidation, skipFeeEnforcement } = opts;
|
|
146
154
|
const skipKernels = this.simulationMode !== 'full';
|
|
155
|
+
const useOverride = this.simulationMode === 'kernelless-override';
|
|
147
156
|
const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
|
|
148
157
|
const finalExecutionPayload = feeExecutionPayload ? mergeExecutionPayloads([
|
|
149
158
|
feeExecutionPayload,
|
|
@@ -152,23 +161,19 @@ import { AztecNodeProxy, ProvenTx } from './utils.js';
|
|
|
152
161
|
const chainInfo = await this.getChainInfo();
|
|
153
162
|
let overrides;
|
|
154
163
|
let txRequest;
|
|
164
|
+
if (useOverride) {
|
|
165
|
+
const accountOverrides = await this.buildAccountOverrides(this.scopesFrom(from, opts.additionalScopes));
|
|
166
|
+
overrides = new SimulationOverrides(accountOverrides);
|
|
167
|
+
}
|
|
155
168
|
if (from === NO_FROM) {
|
|
156
169
|
const entrypoint = new DefaultEntrypoint();
|
|
157
170
|
txRequest = await entrypoint.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo);
|
|
158
171
|
} else {
|
|
159
|
-
const useOverride = this.simulationMode === 'kernelless-override';
|
|
160
172
|
let fromAccount;
|
|
161
173
|
if (useOverride) {
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
contracts: {
|
|
166
|
-
[from.toString()]: {
|
|
167
|
-
instance,
|
|
168
|
-
artifact
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
};
|
|
174
|
+
const originalAccount = await this.getAccountFromAddress(from);
|
|
175
|
+
const completeAddress = originalAccount.getCompleteAddress();
|
|
176
|
+
fromAccount = createStubAccount(completeAddress);
|
|
172
177
|
} else {
|
|
173
178
|
fromAccount = await this.getAccountFromAddress(from);
|
|
174
179
|
}
|
|
@@ -190,7 +195,11 @@ import { AztecNodeProxy, ProvenTx } from './utils.js';
|
|
|
190
195
|
});
|
|
191
196
|
}
|
|
192
197
|
async proveTx(exec, opts) {
|
|
193
|
-
const fee = await this.completeFeeOptions(
|
|
198
|
+
const fee = await this.completeFeeOptions({
|
|
199
|
+
from: opts.from,
|
|
200
|
+
feePayer: exec.feePayer,
|
|
201
|
+
gasSettings: opts.fee?.gasSettings
|
|
202
|
+
});
|
|
194
203
|
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(exec, opts.from, fee);
|
|
195
204
|
const txProvingResult = await this.pxe.proveTx(txRequest, this.scopesFrom(opts.from, opts.additionalScopes));
|
|
196
205
|
return new ProvenTx(this.aztecNode, await txProvingResult.toTx(), txProvingResult.getOffchainEffects(), txProvingResult.stats);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/end-to-end",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.e304674f1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"inherits": [
|
|
@@ -26,44 +26,44 @@
|
|
|
26
26
|
"formatting": "run -T prettier --check ./src && run -T eslint ./src"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@aztec/accounts": "0.0.1-commit.
|
|
30
|
-
"@aztec/archiver": "0.0.1-commit.
|
|
31
|
-
"@aztec/aztec": "0.0.1-commit.
|
|
32
|
-
"@aztec/aztec-node": "0.0.1-commit.
|
|
33
|
-
"@aztec/aztec.js": "0.0.1-commit.
|
|
34
|
-
"@aztec/bb-prover": "0.0.1-commit.
|
|
35
|
-
"@aztec/bb.js": "0.0.1-commit.
|
|
36
|
-
"@aztec/blob-client": "0.0.1-commit.
|
|
37
|
-
"@aztec/blob-lib": "0.0.1-commit.
|
|
38
|
-
"@aztec/bot": "0.0.1-commit.
|
|
39
|
-
"@aztec/cli": "0.0.1-commit.
|
|
40
|
-
"@aztec/constants": "0.0.1-commit.
|
|
41
|
-
"@aztec/entrypoints": "0.0.1-commit.
|
|
42
|
-
"@aztec/epoch-cache": "0.0.1-commit.
|
|
43
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
44
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
45
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
46
|
-
"@aztec/l1-artifacts": "0.0.1-commit.
|
|
47
|
-
"@aztec/node-keystore": "0.0.1-commit.
|
|
48
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
49
|
-
"@aztec/noir-noirc_abi": "0.0.1-commit.
|
|
50
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
51
|
-
"@aztec/noir-test-contracts.js": "0.0.1-commit.
|
|
52
|
-
"@aztec/p2p": "0.0.1-commit.
|
|
53
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
54
|
-
"@aztec/prover-client": "0.0.1-commit.
|
|
55
|
-
"@aztec/prover-node": "0.0.1-commit.
|
|
56
|
-
"@aztec/pxe": "0.0.1-commit.
|
|
57
|
-
"@aztec/sequencer-client": "0.0.1-commit.
|
|
58
|
-
"@aztec/simulator": "0.0.1-commit.
|
|
59
|
-
"@aztec/slasher": "0.0.1-commit.
|
|
60
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
61
|
-
"@aztec/telemetry-client": "0.0.1-commit.
|
|
62
|
-
"@aztec/validator-client": "0.0.1-commit.
|
|
63
|
-
"@aztec/validator-ha-signer": "0.0.1-commit.
|
|
64
|
-
"@aztec/wallet-sdk": "0.0.1-commit.
|
|
65
|
-
"@aztec/wallets": "0.0.1-commit.
|
|
66
|
-
"@aztec/world-state": "0.0.1-commit.
|
|
29
|
+
"@aztec/accounts": "0.0.1-commit.e304674f1",
|
|
30
|
+
"@aztec/archiver": "0.0.1-commit.e304674f1",
|
|
31
|
+
"@aztec/aztec": "0.0.1-commit.e304674f1",
|
|
32
|
+
"@aztec/aztec-node": "0.0.1-commit.e304674f1",
|
|
33
|
+
"@aztec/aztec.js": "0.0.1-commit.e304674f1",
|
|
34
|
+
"@aztec/bb-prover": "0.0.1-commit.e304674f1",
|
|
35
|
+
"@aztec/bb.js": "0.0.1-commit.e304674f1",
|
|
36
|
+
"@aztec/blob-client": "0.0.1-commit.e304674f1",
|
|
37
|
+
"@aztec/blob-lib": "0.0.1-commit.e304674f1",
|
|
38
|
+
"@aztec/bot": "0.0.1-commit.e304674f1",
|
|
39
|
+
"@aztec/cli": "0.0.1-commit.e304674f1",
|
|
40
|
+
"@aztec/constants": "0.0.1-commit.e304674f1",
|
|
41
|
+
"@aztec/entrypoints": "0.0.1-commit.e304674f1",
|
|
42
|
+
"@aztec/epoch-cache": "0.0.1-commit.e304674f1",
|
|
43
|
+
"@aztec/ethereum": "0.0.1-commit.e304674f1",
|
|
44
|
+
"@aztec/foundation": "0.0.1-commit.e304674f1",
|
|
45
|
+
"@aztec/kv-store": "0.0.1-commit.e304674f1",
|
|
46
|
+
"@aztec/l1-artifacts": "0.0.1-commit.e304674f1",
|
|
47
|
+
"@aztec/node-keystore": "0.0.1-commit.e304674f1",
|
|
48
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.e304674f1",
|
|
49
|
+
"@aztec/noir-noirc_abi": "0.0.1-commit.e304674f1",
|
|
50
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.e304674f1",
|
|
51
|
+
"@aztec/noir-test-contracts.js": "0.0.1-commit.e304674f1",
|
|
52
|
+
"@aztec/p2p": "0.0.1-commit.e304674f1",
|
|
53
|
+
"@aztec/protocol-contracts": "0.0.1-commit.e304674f1",
|
|
54
|
+
"@aztec/prover-client": "0.0.1-commit.e304674f1",
|
|
55
|
+
"@aztec/prover-node": "0.0.1-commit.e304674f1",
|
|
56
|
+
"@aztec/pxe": "0.0.1-commit.e304674f1",
|
|
57
|
+
"@aztec/sequencer-client": "0.0.1-commit.e304674f1",
|
|
58
|
+
"@aztec/simulator": "0.0.1-commit.e304674f1",
|
|
59
|
+
"@aztec/slasher": "0.0.1-commit.e304674f1",
|
|
60
|
+
"@aztec/stdlib": "0.0.1-commit.e304674f1",
|
|
61
|
+
"@aztec/telemetry-client": "0.0.1-commit.e304674f1",
|
|
62
|
+
"@aztec/validator-client": "0.0.1-commit.e304674f1",
|
|
63
|
+
"@aztec/validator-ha-signer": "0.0.1-commit.e304674f1",
|
|
64
|
+
"@aztec/wallet-sdk": "0.0.1-commit.e304674f1",
|
|
65
|
+
"@aztec/wallets": "0.0.1-commit.e304674f1",
|
|
66
|
+
"@aztec/world-state": "0.0.1-commit.e304674f1",
|
|
67
67
|
"@iarna/toml": "^2.2.5",
|
|
68
68
|
"@jest/globals": "^30.0.0",
|
|
69
69
|
"@noble/curves": "=1.0.0",
|
|
@@ -159,6 +159,7 @@
|
|
|
159
159
|
"moduleNameMapper": {
|
|
160
160
|
"^(\\.{1,2}/.*)\\.[cm]?js$": "$1"
|
|
161
161
|
},
|
|
162
|
+
"resolver": "<rootDir>/legacy-jest-resolver.cjs",
|
|
162
163
|
"testRegex": "./src/.*\\.test\\.(js|mjs|ts)$",
|
|
163
164
|
"rootDir": "./src",
|
|
164
165
|
"testTimeout": 120000,
|
|
@@ -250,11 +250,14 @@ export class ClientFlowsBenchmark {
|
|
|
250
250
|
|
|
251
251
|
async applyDeployBananaToken() {
|
|
252
252
|
this.logger.info('Applying banana token deployment');
|
|
253
|
-
const {
|
|
254
|
-
|
|
255
|
-
|
|
253
|
+
const { contract: bananaCoin, instance: bananaCoinInstance } = await BananaCoin.deploy(
|
|
254
|
+
this.adminWallet,
|
|
255
|
+
this.adminAddress,
|
|
256
|
+
'BC',
|
|
257
|
+
'BC',
|
|
258
|
+
18n,
|
|
259
|
+
).send({
|
|
256
260
|
from: this.adminAddress,
|
|
257
|
-
wait: { returnReceipt: true },
|
|
258
261
|
});
|
|
259
262
|
this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
|
|
260
263
|
this.bananaCoin = bananaCoin;
|
|
@@ -263,11 +266,14 @@ export class ClientFlowsBenchmark {
|
|
|
263
266
|
|
|
264
267
|
async applyDeployCandyBarToken() {
|
|
265
268
|
this.logger.info('Applying candy bar token deployment');
|
|
266
|
-
const {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
+
const { contract: candyBarCoin, instance: candyBarCoinInstance } = await TokenContract.deploy(
|
|
270
|
+
this.adminWallet,
|
|
271
|
+
this.adminAddress,
|
|
272
|
+
'CBC',
|
|
273
|
+
'CBC',
|
|
274
|
+
18n,
|
|
275
|
+
).send({
|
|
269
276
|
from: this.adminAddress,
|
|
270
|
-
wait: { returnReceipt: true },
|
|
271
277
|
});
|
|
272
278
|
this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
|
|
273
279
|
this.candyBarCoin = candyBarCoin;
|
|
@@ -280,11 +286,12 @@ export class ClientFlowsBenchmark {
|
|
|
280
286
|
expect((await this.context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
|
|
281
287
|
|
|
282
288
|
const bananaCoin = this.bananaCoin;
|
|
283
|
-
const {
|
|
284
|
-
|
|
285
|
-
|
|
289
|
+
const { contract: bananaFPC, instance: bananaFPCInstance } = await FPCContract.deploy(
|
|
290
|
+
this.adminWallet,
|
|
291
|
+
bananaCoin.address,
|
|
292
|
+
this.adminAddress,
|
|
293
|
+
).send({
|
|
286
294
|
from: this.adminAddress,
|
|
287
|
-
wait: { returnReceipt: true },
|
|
288
295
|
});
|
|
289
296
|
|
|
290
297
|
this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
|
|
@@ -348,20 +355,21 @@ export class ClientFlowsBenchmark {
|
|
|
348
355
|
|
|
349
356
|
public async applyDeployAmm() {
|
|
350
357
|
this.logger.info('Applying AMM deployment');
|
|
351
|
-
const {
|
|
352
|
-
|
|
353
|
-
|
|
358
|
+
const { contract: liquidityToken, instance: liquidityTokenInstance } = await TokenContract.deploy(
|
|
359
|
+
this.adminWallet,
|
|
360
|
+
this.adminAddress,
|
|
361
|
+
'LPT',
|
|
362
|
+
'LPT',
|
|
363
|
+
18n,
|
|
364
|
+
).send({
|
|
354
365
|
from: this.adminAddress,
|
|
355
|
-
wait: { returnReceipt: true },
|
|
356
366
|
});
|
|
357
|
-
const {
|
|
358
|
-
receipt: { contract: amm, instance: ammInstance },
|
|
359
|
-
} = await AMMContract.deploy(
|
|
367
|
+
const { contract: amm, instance: ammInstance } = await AMMContract.deploy(
|
|
360
368
|
this.adminWallet,
|
|
361
369
|
this.bananaCoin.address,
|
|
362
370
|
this.candyBarCoin.address,
|
|
363
371
|
liquidityToken.address,
|
|
364
|
-
).send({ from: this.adminAddress
|
|
372
|
+
).send({ from: this.adminAddress });
|
|
365
373
|
this.logger.info(`AMM deployed at ${amm.address}`);
|
|
366
374
|
await liquidityToken.methods.set_minter(amm.address, true).send({ from: this.adminAddress });
|
|
367
375
|
this.liquidityToken = liquidityToken;
|
|
@@ -379,7 +387,7 @@ export class ClientFlowsBenchmark {
|
|
|
379
387
|
// The private fee paying method assembled on the app side requires knowledge of the maximum
|
|
380
388
|
// fee the user is willing to pay
|
|
381
389
|
const maxFeesPerGas = (await this.aztecNode.getCurrentMinFees()).mul(1.5);
|
|
382
|
-
const gasSettings = GasSettings.
|
|
390
|
+
const gasSettings = GasSettings.fallback({ maxFeesPerGas });
|
|
383
391
|
return new PrivateFeePaymentMethod(this.bananaFPC.address, sender, wallet, gasSettings);
|
|
384
392
|
}
|
|
385
393
|
|
|
@@ -145,7 +145,7 @@ export class EpochsTestContext {
|
|
|
145
145
|
proverId: EthAddress.fromNumber(1),
|
|
146
146
|
worldStateCheckpointHistory: WORLD_STATE_CHECKPOINT_HISTORY,
|
|
147
147
|
exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
|
|
148
|
-
|
|
148
|
+
slasherEnabled: false,
|
|
149
149
|
l1PublishingTime,
|
|
150
150
|
...opts,
|
|
151
151
|
},
|
|
@@ -223,7 +223,7 @@ export class EpochsTestContext {
|
|
|
223
223
|
},
|
|
224
224
|
},
|
|
225
225
|
{
|
|
226
|
-
|
|
226
|
+
genesis: this.context.genesis,
|
|
227
227
|
dontStart: opts.dontStart,
|
|
228
228
|
},
|
|
229
229
|
),
|
|
@@ -278,7 +278,7 @@ export class EpochsTestContext {
|
|
|
278
278
|
slashingProtectionDb: opts.slashingProtectionDb,
|
|
279
279
|
},
|
|
280
280
|
{
|
|
281
|
-
|
|
281
|
+
genesis: this.context.genesis,
|
|
282
282
|
...opts,
|
|
283
283
|
},
|
|
284
284
|
),
|
|
@@ -193,7 +193,7 @@ export class FeesTest {
|
|
|
193
193
|
this.wallet = this.context.wallet;
|
|
194
194
|
this.aztecNode = this.context.aztecNodeService;
|
|
195
195
|
this.aztecNodeAdmin = this.context.aztecNodeService;
|
|
196
|
-
this.gasSettings = GasSettings.
|
|
196
|
+
this.gasSettings = GasSettings.fallback({ maxFeesPerGas: (await this.aztecNode.getCurrentMinFees()).mul(2) });
|
|
197
197
|
this.cheatCodes = this.context.cheatCodes;
|
|
198
198
|
this.accounts = deployedAccounts.map(a => a.address);
|
|
199
199
|
this.accounts.forEach((a, i) => this.logger.verbose(`Account ${i} address: ${a}`));
|
|
@@ -58,6 +58,7 @@ export class P2PInactivityTest {
|
|
|
58
58
|
basePort: BOOT_NODE_UDP_PORT,
|
|
59
59
|
startProverNode: true,
|
|
60
60
|
initialConfig: {
|
|
61
|
+
anvilSlotsInAnEpoch: 4,
|
|
61
62
|
proverNodeConfig: { proverNodeEpochProvingDelayMs: AZTEC_SLOT_DURATION * 1000 },
|
|
62
63
|
aztecTargetCommitteeSize: COMMITTEE_SIZE,
|
|
63
64
|
aztecSlotDuration: AZTEC_SLOT_DURATION,
|
|
@@ -66,7 +67,6 @@ export class P2PInactivityTest {
|
|
|
66
67
|
listenAddress: '127.0.0.1',
|
|
67
68
|
minTxsPerBlock: 0,
|
|
68
69
|
aztecEpochDuration: EPOCH_DURATION,
|
|
69
|
-
validatorReexecute: false,
|
|
70
70
|
sentinelEnabled: true,
|
|
71
71
|
slashingQuorum: SLASHING_QUORUM,
|
|
72
72
|
slashingRoundSizeInEpochs: SLASHING_ROUND_SIZE_IN_EPOCHS,
|
|
@@ -108,7 +108,7 @@ export class P2PInactivityTest {
|
|
|
108
108
|
this.test.bootstrapNodeEnr,
|
|
109
109
|
NUM_NODES - this.inactiveNodeCount - Number(this.keepInitialNode),
|
|
110
110
|
BOOT_NODE_UDP_PORT,
|
|
111
|
-
this.test.
|
|
111
|
+
this.test.genesis,
|
|
112
112
|
this.dataDir,
|
|
113
113
|
undefined,
|
|
114
114
|
Number(this.keepInitialNode),
|
|
@@ -122,7 +122,7 @@ export class P2PInactivityTest {
|
|
|
122
122
|
this.test.bootstrapNodeEnr,
|
|
123
123
|
this.inactiveNodeCount,
|
|
124
124
|
BOOT_NODE_UDP_PORT,
|
|
125
|
-
this.test.
|
|
125
|
+
this.test.genesis,
|
|
126
126
|
this.dataDir,
|
|
127
127
|
undefined,
|
|
128
128
|
NUM_NODES - this.inactiveNodeCount,
|
|
@@ -3,12 +3,7 @@ import type { AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
|
|
|
3
3
|
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
4
4
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
5
5
|
import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
|
|
6
|
-
import {
|
|
7
|
-
type EmpireSlashingProposerContract,
|
|
8
|
-
GSEContract,
|
|
9
|
-
RollupContract,
|
|
10
|
-
type TallySlashingProposerContract,
|
|
11
|
-
} from '@aztec/ethereum/contracts';
|
|
6
|
+
import { GSEContract, RollupContract, type SlashingProposerContract } from '@aztec/ethereum/contracts';
|
|
12
7
|
import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
13
8
|
import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
|
|
14
9
|
import { MultiAdderArtifact } from '@aztec/ethereum/l1-artifacts';
|
|
@@ -24,9 +19,8 @@ import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
|
|
|
24
19
|
import type { BootstrapNode } from '@aztec/p2p/bootstrap';
|
|
25
20
|
import { createBootstrapNodeFromPrivateKey, getBootstrapNodeEnr } from '@aztec/p2p/test-helpers';
|
|
26
21
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
27
|
-
import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
28
22
|
import { TopicType } from '@aztec/stdlib/p2p';
|
|
29
|
-
import type {
|
|
23
|
+
import type { GenesisData } from '@aztec/stdlib/world-state';
|
|
30
24
|
import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
|
|
31
25
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
32
26
|
|
|
@@ -77,7 +71,7 @@ export class P2PNetworkTest {
|
|
|
77
71
|
public validators: Operator[] = [];
|
|
78
72
|
|
|
79
73
|
public deployedAccounts: InitialAccountData[] = [];
|
|
80
|
-
public
|
|
74
|
+
public genesis: GenesisData | undefined;
|
|
81
75
|
|
|
82
76
|
// The re-execution test needs a wallet and a spam contract
|
|
83
77
|
public wallet?: TestWallet;
|
|
@@ -124,7 +118,7 @@ export class P2PNetworkTest {
|
|
|
124
118
|
initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
|
|
125
119
|
slashingRoundSizeInEpochs:
|
|
126
120
|
initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
|
|
127
|
-
|
|
121
|
+
slasherEnabled: initialValidatorConfig.slasherEnabled ?? true,
|
|
128
122
|
aztecTargetCommitteeSize: numberOfValidators,
|
|
129
123
|
metricsPort: metricsPort,
|
|
130
124
|
numberOfInitialFundedAccounts: 2,
|
|
@@ -137,7 +131,7 @@ export class P2PNetworkTest {
|
|
|
137
131
|
aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
|
|
138
132
|
slashingRoundSizeInEpochs:
|
|
139
133
|
initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
|
|
140
|
-
|
|
134
|
+
slasherEnabled: initialValidatorConfig.slasherEnabled ?? true,
|
|
141
135
|
|
|
142
136
|
ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
|
|
143
137
|
aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
|
|
@@ -360,7 +354,7 @@ export class P2PNetworkTest {
|
|
|
360
354
|
...this.setupOptions,
|
|
361
355
|
fundSponsoredFPC: true,
|
|
362
356
|
skipAccountDeployment: true,
|
|
363
|
-
|
|
357
|
+
slasherEnabled: this.setupOptions.slasherEnabled ?? this.deployL1ContractsArgs.slasherEnabled ?? false,
|
|
364
358
|
aztecTargetCommitteeSize: 0,
|
|
365
359
|
l1ContractsArgs: this.deployL1ContractsArgs,
|
|
366
360
|
},
|
|
@@ -372,8 +366,13 @@ export class P2PNetworkTest {
|
|
|
372
366
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
373
367
|
const initialFundedAccounts = [...this.context.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
|
|
374
368
|
|
|
375
|
-
const {
|
|
376
|
-
|
|
369
|
+
const { genesis } = await getGenesisValues(
|
|
370
|
+
initialFundedAccounts,
|
|
371
|
+
undefined,
|
|
372
|
+
undefined,
|
|
373
|
+
this.context.genesis!.genesisTimestamp,
|
|
374
|
+
);
|
|
375
|
+
this.genesis = genesis;
|
|
377
376
|
|
|
378
377
|
const rollupContract = RollupContract.getFromL1ContractsValues(this.context.deployL1ContractsValues);
|
|
379
378
|
this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider).start();
|
|
@@ -468,8 +467,7 @@ export class P2PNetworkTest {
|
|
|
468
467
|
async getContracts(): Promise<{
|
|
469
468
|
rollup: RollupContract;
|
|
470
469
|
slasherContract: GetContractReturnType<typeof SlasherAbi, ViemClient>;
|
|
471
|
-
slashingProposer:
|
|
472
|
-
slashFactory: SlashFactoryContract;
|
|
470
|
+
slashingProposer: SlashingProposerContract | undefined;
|
|
473
471
|
}> {
|
|
474
472
|
if (!this.ctx.deployL1ContractsValues) {
|
|
475
473
|
throw new Error('DeployAztecL1ContractsValues not set');
|
|
@@ -486,14 +484,9 @@ export class P2PNetworkTest {
|
|
|
486
484
|
client: this.ctx.deployL1ContractsValues.l1Client,
|
|
487
485
|
});
|
|
488
486
|
|
|
489
|
-
// Get the actual slashing proposer from rollup
|
|
487
|
+
// Get the actual slashing proposer from rollup
|
|
490
488
|
const slashingProposer = await rollup.getSlashingProposer();
|
|
491
489
|
|
|
492
|
-
|
|
493
|
-
this.ctx.deployL1ContractsValues.l1Client,
|
|
494
|
-
getAddress(this.ctx.deployL1ContractsValues.l1ContractAddresses.slashFactoryAddress!.toString()),
|
|
495
|
-
);
|
|
496
|
-
|
|
497
|
-
return { rollup, slasherContract, slashingProposer, slashFactory };
|
|
490
|
+
return { rollup, slasherContract, slashingProposer };
|
|
498
491
|
}
|
|
499
492
|
}
|
package/src/e2e_p2p/shared.ts
CHANGED
|
@@ -7,11 +7,7 @@ import type { Logger } from '@aztec/aztec.js/log';
|
|
|
7
7
|
import { TxHash } from '@aztec/aztec.js/tx';
|
|
8
8
|
import type { RollupCheatCodes } from '@aztec/aztec/testing';
|
|
9
9
|
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
10
|
-
import type {
|
|
11
|
-
EmpireSlashingProposerContract,
|
|
12
|
-
RollupContract,
|
|
13
|
-
TallySlashingProposerContract,
|
|
14
|
-
} from '@aztec/ethereum/contracts';
|
|
10
|
+
import type { RollupContract, SlashingProposerContract } from '@aztec/ethereum/contracts';
|
|
15
11
|
import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
16
12
|
import { timesAsync, unique } from '@aztec/foundation/collection';
|
|
17
13
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
@@ -22,7 +18,6 @@ import { TestContract, TestContractArtifact } from '@aztec/noir-test-contracts.j
|
|
|
22
18
|
import { getPXEConfig, getPXEConfig as getRpcConfig } from '@aztec/pxe/server';
|
|
23
19
|
import { getRoundForOffense } from '@aztec/slasher';
|
|
24
20
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
25
|
-
import type { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
26
21
|
|
|
27
22
|
import { submitTxsTo } from '../shared/submit-transactions.js';
|
|
28
23
|
import { TestWallet } from '../test-wallet/test_wallet.js';
|
|
@@ -99,7 +94,7 @@ export async function prepareTransactions(
|
|
|
99
94
|
}
|
|
100
95
|
|
|
101
96
|
export function awaitProposalExecution(
|
|
102
|
-
slashingProposer:
|
|
97
|
+
slashingProposer: SlashingProposerContract,
|
|
103
98
|
timeoutSeconds: number,
|
|
104
99
|
logger: Logger,
|
|
105
100
|
): Promise<bigint> {
|
|
@@ -109,24 +104,12 @@ export function awaitProposalExecution(
|
|
|
109
104
|
reject(new Error(`Timeout waiting for proposal execution after ${timeoutSeconds}s`));
|
|
110
105
|
}, timeoutSeconds * 1000);
|
|
111
106
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
logger.warn(`Proposal ${args.payload} from round ${args.round} executed`);
|
|
115
|
-
clearTimeout(timeout);
|
|
116
|
-
unwatch();
|
|
117
|
-
resolve(args.round);
|
|
118
|
-
});
|
|
119
|
-
} else if (slashingProposer.type === 'tally') {
|
|
120
|
-
const unwatch = slashingProposer.listenToRoundExecuted(args => {
|
|
121
|
-
logger.warn(`Slash from round ${args.round} executed`);
|
|
122
|
-
clearTimeout(timeout);
|
|
123
|
-
unwatch();
|
|
124
|
-
resolve(args.round);
|
|
125
|
-
});
|
|
126
|
-
} else {
|
|
107
|
+
const unwatch = slashingProposer.listenToRoundExecuted(args => {
|
|
108
|
+
logger.warn(`Slash from round ${args.round} executed`);
|
|
127
109
|
clearTimeout(timeout);
|
|
128
|
-
|
|
129
|
-
|
|
110
|
+
unwatch();
|
|
111
|
+
resolve(args.round);
|
|
112
|
+
});
|
|
130
113
|
});
|
|
131
114
|
}
|
|
132
115
|
|
|
@@ -245,7 +228,6 @@ export async function awaitCommitteeKicked({
|
|
|
245
228
|
rollup,
|
|
246
229
|
cheatCodes,
|
|
247
230
|
committee,
|
|
248
|
-
slashFactory,
|
|
249
231
|
slashingProposer,
|
|
250
232
|
slashingRoundSize,
|
|
251
233
|
aztecSlotDuration,
|
|
@@ -256,8 +238,7 @@ export async function awaitCommitteeKicked({
|
|
|
256
238
|
rollup: RollupContract;
|
|
257
239
|
cheatCodes: RollupCheatCodes;
|
|
258
240
|
committee: readonly `0x${string}`[];
|
|
259
|
-
|
|
260
|
-
slashingProposer: EmpireSlashingProposerContract | TallySlashingProposerContract | undefined;
|
|
241
|
+
slashingProposer: SlashingProposerContract | undefined;
|
|
261
242
|
slashingRoundSize: number;
|
|
262
243
|
aztecSlotDuration: number;
|
|
263
244
|
aztecEpochDuration: number;
|
|
@@ -270,36 +251,14 @@ export async function awaitCommitteeKicked({
|
|
|
270
251
|
|
|
271
252
|
await cheatCodes.debugRollup();
|
|
272
253
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
const events = await slashFactory.getSlashPayloadCreatedEvents();
|
|
282
|
-
return events.length > 0 ? events : undefined;
|
|
283
|
-
},
|
|
284
|
-
'slash payload created',
|
|
285
|
-
120,
|
|
286
|
-
1,
|
|
287
|
-
);
|
|
288
|
-
expect(slashPayloadEvents.length).toBe(1);
|
|
289
|
-
// The uniqueness check is needed since a validator may be slashed more than once on the same round (eg because they let two epochs be pruned)
|
|
290
|
-
expect(unique(slashPayloadEvents[0].slashes.map(slash => slash.validator.toString()))).toHaveLength(
|
|
291
|
-
committee.length,
|
|
292
|
-
);
|
|
293
|
-
} else {
|
|
294
|
-
// Use the slash offset to ensure we are in the right epoch for tally
|
|
295
|
-
const slashOffsetInRounds = await slashingProposer.getSlashOffsetInRounds();
|
|
296
|
-
const slashingRoundSizeInEpochs = slashingRoundSize / aztecEpochDuration;
|
|
297
|
-
const slashingOffsetInEpochs = Number(slashOffsetInRounds) * slashingRoundSizeInEpochs;
|
|
298
|
-
const firstEpochInOffenseRound = offenseEpoch - (offenseEpoch % slashingRoundSizeInEpochs);
|
|
299
|
-
const targetEpoch = firstEpochInOffenseRound + slashingOffsetInEpochs;
|
|
300
|
-
logger.info(`Advancing to epoch ${targetEpoch} so we start slashing`);
|
|
301
|
-
await cheatCodes.advanceToEpoch(EpochNumber(targetEpoch), { offset: -aztecSlotDuration / 2 });
|
|
302
|
-
}
|
|
254
|
+
// Use the slash offset to ensure we are in the right epoch for tally
|
|
255
|
+
const slashOffsetInRounds = await slashingProposer.getSlashOffsetInRounds();
|
|
256
|
+
const slashingRoundSizeInEpochs = slashingRoundSize / aztecEpochDuration;
|
|
257
|
+
const slashingOffsetInEpochs = Number(slashOffsetInRounds) * slashingRoundSizeInEpochs;
|
|
258
|
+
const firstEpochInOffenseRound = offenseEpoch - (offenseEpoch % slashingRoundSizeInEpochs);
|
|
259
|
+
const targetEpoch = firstEpochInOffenseRound + slashingOffsetInEpochs;
|
|
260
|
+
logger.info(`Advancing to epoch ${targetEpoch} so we start slashing`);
|
|
261
|
+
await cheatCodes.advanceToEpoch(EpochNumber(targetEpoch), { offset: -aztecSlotDuration / 2 });
|
|
303
262
|
|
|
304
263
|
const attestersPre = await rollup.getAttesters();
|
|
305
264
|
expect(attestersPre.length).toBe(committee.length);
|
|
@@ -17,6 +17,10 @@ async function buildProxyCall(proxy: GenericProxyContract, action: ContractFunct
|
|
|
17
17
|
return proxy.methods.forward_private_3(call.to, call.selector, call.args);
|
|
18
18
|
} else if (argCount === 4) {
|
|
19
19
|
return proxy.methods.forward_private_4(call.to, call.selector, call.args);
|
|
20
|
+
} else if (argCount === 5) {
|
|
21
|
+
return proxy.methods.forward_private_5(call.to, call.selector, call.args);
|
|
22
|
+
} else if (argCount === 6) {
|
|
23
|
+
return proxy.methods.forward_private_6(call.to, call.selector, call.args);
|
|
20
24
|
}
|
|
21
25
|
throw new Error(`No forward_private_${argCount} method on proxy`);
|
|
22
26
|
}
|