@aztec/aztec 0.0.1-commit.f146247c → 0.0.1-commit.f224bb98b
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/bin/index.js +7 -3
- package/dest/cli/admin_api_key_store.d.ts +45 -0
- package/dest/cli/admin_api_key_store.d.ts.map +1 -0
- package/dest/cli/admin_api_key_store.js +98 -0
- package/dest/cli/aztec_start_action.d.ts +1 -1
- package/dest/cli/aztec_start_action.d.ts.map +1 -1
- package/dest/cli/aztec_start_action.js +51 -13
- package/dest/cli/aztec_start_options.d.ts +1 -1
- package/dest/cli/aztec_start_options.d.ts.map +1 -1
- package/dest/cli/aztec_start_options.js +25 -9
- package/dest/cli/cli.d.ts +1 -1
- package/dest/cli/cli.d.ts.map +1 -1
- package/dest/cli/cli.js +3 -4
- package/dest/cli/cmds/compile.d.ts +4 -0
- package/dest/cli/cmds/compile.d.ts.map +1 -0
- package/dest/cli/cmds/compile.js +165 -0
- package/dest/cli/cmds/profile.d.ts +4 -0
- package/dest/cli/cmds/profile.d.ts.map +1 -0
- package/dest/cli/cmds/profile.js +8 -0
- package/dest/cli/cmds/profile_flamegraph.d.ts +4 -0
- package/dest/cli/cmds/profile_flamegraph.d.ts.map +1 -0
- package/dest/cli/cmds/profile_flamegraph.js +51 -0
- package/dest/cli/cmds/profile_gates.d.ts +4 -0
- package/dest/cli/cmds/profile_gates.d.ts.map +1 -0
- package/dest/cli/cmds/profile_gates.js +57 -0
- package/dest/cli/cmds/profile_utils.d.ts +18 -0
- package/dest/cli/cmds/profile_utils.d.ts.map +1 -0
- package/dest/cli/cmds/profile_utils.js +50 -0
- package/dest/cli/cmds/standby.d.ts +27 -0
- package/dest/cli/cmds/standby.d.ts.map +1 -0
- package/dest/cli/cmds/standby.js +78 -0
- package/dest/cli/cmds/start_archiver.d.ts +2 -2
- package/dest/cli/cmds/start_archiver.d.ts.map +1 -1
- package/dest/cli/cmds/start_archiver.js +1 -1
- package/dest/cli/cmds/start_bot.d.ts +3 -3
- package/dest/cli/cmds/start_bot.d.ts.map +1 -1
- package/dest/cli/cmds/start_bot.js +9 -5
- package/dest/cli/cmds/start_node.d.ts +3 -2
- package/dest/cli/cmds/start_node.d.ts.map +1 -1
- package/dest/cli/cmds/start_node.js +77 -27
- package/dest/cli/cmds/start_prover_agent.js +2 -2
- package/dest/cli/cmds/start_prover_broker.d.ts +1 -1
- package/dest/cli/cmds/start_prover_broker.d.ts.map +1 -1
- package/dest/cli/cmds/start_prover_broker.js +8 -8
- package/dest/cli/cmds/utils/artifacts.d.ts +21 -0
- package/dest/cli/cmds/utils/artifacts.d.ts.map +1 -0
- package/dest/cli/cmds/utils/artifacts.js +24 -0
- package/dest/cli/cmds/utils/needs_recompile.d.ts +10 -0
- package/dest/cli/cmds/utils/needs_recompile.d.ts.map +1 -0
- package/dest/cli/cmds/utils/needs_recompile.js +124 -0
- package/dest/cli/cmds/utils/spawn.d.ts +3 -0
- package/dest/cli/cmds/utils/spawn.d.ts.map +1 -0
- package/dest/cli/cmds/utils/spawn.js +16 -0
- package/dest/cli/util.d.ts +7 -18
- package/dest/cli/util.d.ts.map +1 -1
- package/dest/cli/util.js +50 -86
- package/dest/examples/token.js +6 -6
- package/dest/local-network/banana_fpc.js +1 -1
- package/dest/local-network/local-network.d.ts +4 -2
- package/dest/local-network/local-network.d.ts.map +1 -1
- package/dest/local-network/local-network.js +50 -18
- package/dest/testing/anvil_test_watcher.d.ts +9 -1
- package/dest/testing/anvil_test_watcher.d.ts.map +1 -1
- package/dest/testing/anvil_test_watcher.js +52 -15
- package/dest/testing/index.d.ts +2 -1
- package/dest/testing/index.d.ts.map +1 -1
- package/dest/testing/index.js +1 -0
- package/dest/testing/token_allowed_setup.d.ts +7 -0
- package/dest/testing/token_allowed_setup.d.ts.map +1 -0
- package/dest/testing/token_allowed_setup.js +20 -0
- package/package.json +35 -34
- package/scripts/add_crate.sh +102 -0
- package/scripts/aztec.sh +11 -5
- package/scripts/init.sh +23 -19
- package/scripts/new.sh +48 -24
- package/scripts/setup_workspace.sh +68 -0
- package/src/bin/index.ts +7 -3
- package/src/cli/admin_api_key_store.ts +128 -0
- package/src/cli/aztec_start_action.ts +55 -9
- package/src/cli/aztec_start_options.ts +27 -8
- package/src/cli/cli.ts +3 -4
- package/src/cli/cmds/compile.ts +190 -0
- package/src/cli/cmds/profile.ts +25 -0
- package/src/cli/cmds/profile_flamegraph.ts +63 -0
- package/src/cli/cmds/profile_gates.ts +67 -0
- package/src/cli/cmds/profile_utils.ts +58 -0
- package/src/cli/cmds/standby.ts +111 -0
- package/src/cli/cmds/start_archiver.ts +1 -1
- package/src/cli/cmds/start_bot.ts +8 -5
- package/src/cli/cmds/start_node.ts +76 -33
- package/src/cli/cmds/start_prover_agent.ts +2 -2
- package/src/cli/cmds/start_prover_broker.ts +12 -15
- package/src/cli/cmds/utils/artifacts.ts +44 -0
- package/src/cli/cmds/utils/needs_recompile.ts +139 -0
- package/src/cli/cmds/utils/spawn.ts +16 -0
- package/src/cli/util.ts +57 -95
- package/src/examples/token.ts +8 -6
- package/src/local-network/banana_fpc.ts +1 -1
- package/src/local-network/local-network.ts +54 -17
- package/src/testing/anvil_test_watcher.ts +59 -15
- package/src/testing/index.ts +1 -0
- package/src/testing/token_allowed_setup.ts +19 -0
- package/dest/cli/cmds/start_prover_node.d.ts +0 -7
- package/dest/cli/cmds/start_prover_node.d.ts.map +0 -1
- package/dest/cli/cmds/start_prover_node.js +0 -108
- package/dest/cli/release_version.d.ts +0 -2
- package/dest/cli/release_version.d.ts.map +0 -1
- package/dest/cli/release_version.js +0 -14
- package/scripts/compile.sh +0 -44
- package/scripts/extract_function.js +0 -47
- package/scripts/flamegraph.sh +0 -59
- package/scripts/setup_project.sh +0 -31
- package/src/cli/cmds/start_prover_node.ts +0 -124
- package/src/cli/release_version.ts +0 -21
|
@@ -17,8 +17,11 @@ import { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
17
17
|
import { TestDateProvider } from '@aztec/foundation/timer';
|
|
18
18
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
19
19
|
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
20
|
+
import { SequencerState } from '@aztec/sequencer-client';
|
|
21
|
+
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
20
22
|
import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
|
|
21
|
-
import {
|
|
23
|
+
import { EmbeddedWallet } from '@aztec/wallets/embedded';
|
|
24
|
+
import { deployFundedSchnorrAccounts } from '@aztec/wallets/testing';
|
|
22
25
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
23
26
|
import { createPublicClient, fallback, http as httpViemTransport } from 'viem';
|
|
24
27
|
import { mnemonicToAccount, privateKeyToAddress } from 'viem/accounts';
|
|
@@ -27,6 +30,7 @@ import { createAccountLogs } from '../cli/util.js';
|
|
|
27
30
|
import { DefaultMnemonic } from '../mnemonic.js';
|
|
28
31
|
import { AnvilTestWatcher } from '../testing/anvil_test_watcher.js';
|
|
29
32
|
import { EpochTestSettler } from '../testing/epoch_test_settler.js';
|
|
33
|
+
import { getTokenAllowedSetupFunctions } from '../testing/token_allowed_setup.js';
|
|
30
34
|
import { getBananaFPCAddress, setupBananaFPC } from './banana_fpc.js';
|
|
31
35
|
import { getSponsoredFPCAddress } from './sponsored_fpc.js';
|
|
32
36
|
const logger = createLogger('local-network');
|
|
@@ -65,14 +69,21 @@ const localAnvil = foundry;
|
|
|
65
69
|
if ((config.l1RpcUrls?.length || 0) > 1) {
|
|
66
70
|
logger.warn(`Multiple L1 RPC URLs provided. Local networks will only use the first one: ${l1RpcUrl}`);
|
|
67
71
|
}
|
|
72
|
+
// The local network deploys a banana FPC with Token contracts, so include Token entries
|
|
73
|
+
// in the setup allowlist so FPC-based fee payments work out of the box.
|
|
74
|
+
const tokenAllowList = await getTokenAllowedSetupFunctions();
|
|
68
75
|
const aztecNodeConfig = {
|
|
69
76
|
...getConfigEnvVars(),
|
|
70
|
-
...config
|
|
77
|
+
...config,
|
|
78
|
+
txPublicSetupAllowListExtend: [
|
|
79
|
+
...tokenAllowList,
|
|
80
|
+
...config.txPublicSetupAllowListExtend ?? []
|
|
81
|
+
]
|
|
71
82
|
};
|
|
72
83
|
const hdAccount = mnemonicToAccount(config.l1Mnemonic || DefaultMnemonic);
|
|
73
|
-
if (aztecNodeConfig.
|
|
84
|
+
if (aztecNodeConfig.sequencerPublisherPrivateKeys == undefined || !aztecNodeConfig.sequencerPublisherPrivateKeys.length || aztecNodeConfig.sequencerPublisherPrivateKeys[0].getValue() === NULL_KEY) {
|
|
74
85
|
const privKey = hdAccount.getHdKey().privateKey;
|
|
75
|
-
aztecNodeConfig.
|
|
86
|
+
aztecNodeConfig.sequencerPublisherPrivateKeys = [
|
|
76
87
|
new SecretValue(`0x${Buffer.from(privKey).toString('hex')}`)
|
|
77
88
|
];
|
|
78
89
|
}
|
|
@@ -96,11 +107,15 @@ const localAnvil = foundry;
|
|
|
96
107
|
})();
|
|
97
108
|
const bananaFPC = await getBananaFPCAddress(initialAccounts);
|
|
98
109
|
const sponsoredFPC = await getSponsoredFPCAddress();
|
|
99
|
-
const
|
|
110
|
+
const prefundAddresses = (aztecNodeConfig.prefundAddresses ?? []).map((a)=>AztecAddress.fromString(a));
|
|
111
|
+
const fundedAddresses = [
|
|
100
112
|
...initialAccounts.map((a)=>a.address),
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
113
|
+
...initialAccounts.length ? [
|
|
114
|
+
bananaFPC,
|
|
115
|
+
sponsoredFPC
|
|
116
|
+
] : [],
|
|
117
|
+
...prefundAddresses
|
|
118
|
+
];
|
|
104
119
|
const { genesisArchiveRoot, prefilledPublicData, fundingNeeded } = await getGenesisValues(fundedAddresses);
|
|
105
120
|
const dateProvider = new TestDateProvider();
|
|
106
121
|
let cheatcodes;
|
|
@@ -140,6 +155,20 @@ const localAnvil = foundry;
|
|
|
140
155
|
}, {
|
|
141
156
|
prefilledPublicData
|
|
142
157
|
});
|
|
158
|
+
// Now that the node is up, let the watcher check for pending txs so it can skip unfilled slots faster when
|
|
159
|
+
// transactions are waiting in the mempool. Also let it check if the sequencer is actively building, to avoid
|
|
160
|
+
// warping time out from under an in-progress block.
|
|
161
|
+
watcher?.setGetPendingTxCount(()=>node.getPendingTxCount());
|
|
162
|
+
const sequencer = node.getSequencer()?.getSequencer();
|
|
163
|
+
if (sequencer) {
|
|
164
|
+
const idleStates = new Set([
|
|
165
|
+
SequencerState.STOPPED,
|
|
166
|
+
SequencerState.STOPPING,
|
|
167
|
+
SequencerState.IDLE,
|
|
168
|
+
SequencerState.SYNCHRONIZING
|
|
169
|
+
]);
|
|
170
|
+
watcher?.setIsSequencerBuilding(()=>!idleStates.has(sequencer.getState()));
|
|
171
|
+
}
|
|
143
172
|
let epochTestSettler;
|
|
144
173
|
if (!aztecNodeConfig.p2pEnabled) {
|
|
145
174
|
epochTestSettler = new EpochTestSettler(cheatcodes, rollupAddress, node.getBlockSource(), logger.createChild('epoch-settler'), {
|
|
@@ -148,17 +177,15 @@ const localAnvil = foundry;
|
|
|
148
177
|
await epochTestSettler.start();
|
|
149
178
|
}
|
|
150
179
|
if (initialAccounts.length) {
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
180
|
+
const wallet = await EmbeddedWallet.create(node, {
|
|
181
|
+
pxeConfig: {
|
|
182
|
+
proverEnabled: aztecNodeConfig.realProofs
|
|
183
|
+
},
|
|
184
|
+
ephemeral: true
|
|
185
|
+
});
|
|
155
186
|
userLog('Setting up funded test accounts...');
|
|
156
187
|
const accountManagers = await deployFundedSchnorrAccounts(wallet, initialAccounts);
|
|
157
|
-
const
|
|
158
|
-
account: manager,
|
|
159
|
-
secretKey: initialAccounts[i].secret
|
|
160
|
-
}));
|
|
161
|
-
const accLogs = await createAccountLogs(accountsWithSecrets, wallet);
|
|
188
|
+
const accLogs = await createAccountLogs(accountManagers, wallet);
|
|
162
189
|
userLog(accLogs.join(''));
|
|
163
190
|
await setupBananaFPC(initialAccounts, wallet, userLog);
|
|
164
191
|
userLog(`SponsoredFPC: ${await getSponsoredFPCAddress()}`);
|
|
@@ -189,6 +216,11 @@ const localAnvil = foundry;
|
|
|
189
216
|
...config.l1Contracts
|
|
190
217
|
}
|
|
191
218
|
};
|
|
192
|
-
const node = await AztecNodeService.createAndSync(aztecNodeConfig,
|
|
219
|
+
const node = await AztecNodeService.createAndSync(aztecNodeConfig, {
|
|
220
|
+
...deps,
|
|
221
|
+
proverNodeDeps: {
|
|
222
|
+
broker: deps.proverBroker
|
|
223
|
+
}
|
|
224
|
+
}, options);
|
|
193
225
|
return node;
|
|
194
226
|
}
|
|
@@ -21,14 +21,22 @@ export declare class AnvilTestWatcher {
|
|
|
21
21
|
private markingAsProvenRunningPromise?;
|
|
22
22
|
private logger;
|
|
23
23
|
private isMarkingAsProven;
|
|
24
|
+
private getPendingTxCount?;
|
|
25
|
+
private isSequencerBuilding?;
|
|
26
|
+
private unfilledSlotFirstSeen?;
|
|
24
27
|
constructor(cheatcodes: EthCheatCodes, rollupAddress: EthAddress, l1Client: ViemClient, dateProvider?: TestDateProvider | undefined);
|
|
25
28
|
setIsMarkingAsProven(isMarkingAsProven: boolean): void;
|
|
26
29
|
setisLocalNetwork(isLocalNetwork: boolean): void;
|
|
30
|
+
/** Sets a callback to check for pending txs, used to skip unfilled slots faster when txs are waiting. */
|
|
31
|
+
setGetPendingTxCount(fn: () => Promise<number>): void;
|
|
32
|
+
/** Sets a callback to check if the sequencer is actively building, to avoid warping while it works. */
|
|
33
|
+
setIsSequencerBuilding(fn: () => boolean): void;
|
|
27
34
|
start(): Promise<void>;
|
|
28
35
|
stop(): Promise<void>;
|
|
29
36
|
trigger(): Promise<void>;
|
|
30
37
|
markAsProven(): Promise<void>;
|
|
31
38
|
syncDateProviderToL1IfBehind(): Promise<void>;
|
|
32
39
|
warpTimeIfNeeded(): Promise<void>;
|
|
40
|
+
private warpToTimestamp;
|
|
33
41
|
}
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW52aWxfdGVzdF93YXRjaGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9hbnZpbF90ZXN0X3dhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdoRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2hFOzs7Ozs7R0FNRztBQUNILHFCQUFhLGdCQUFnQjtJQXlCekIsT0FBTyxDQUFDLFVBQVU7SUFHbEIsT0FBTyxDQUFDLFlBQVksQ0FBQztJQTNCdkIsT0FBTyxDQUFDLGNBQWMsQ0FBa0I7SUFFeEMsT0FBTyxDQUFDLE1BQU0sQ0FBc0Q7SUFDcEUsT0FBTyxDQUFDLGdCQUFnQixDQUFtQjtJQUMzQyxPQUFPLENBQUMsY0FBYyxDQUFVO0lBRWhDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFpQjtJQUM5QyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBaUI7SUFDakQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQWlCO0lBRXZELE9BQU8sQ0FBQyxNQUFNLENBQWlEO0lBRS9ELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBUTtJQUdqQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBd0I7SUFHbEQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQWdCO0lBRzVDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFxQztJQUVuRSxZQUNVLFVBQVUsRUFBRSxhQUFhLEVBQ2pDLGFBQWEsRUFBRSxVQUFVLEVBQ3pCLFFBQVEsRUFBRSxVQUFVLEVBQ1osWUFBWSxDQUFDLDhCQUFrQixFQWF4QztJQUVELG9CQUFvQixDQUFDLGlCQUFpQixFQUFFLE9BQU8sUUFHOUM7SUFFRCxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsT0FBTyxRQUV4QztJQUVELHlHQUF5RztJQUN6RyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBRTdDO0lBRUQsdUdBQXVHO0lBQ3ZHLHNCQUFzQixDQUFDLEVBQUUsRUFBRSxNQUFNLE9BQU8sUUFFdkM7SUFFSyxLQUFLLGtCQXlCVjtJQUVLLElBQUksa0JBSVQ7SUFFSyxPQUFPLGtCQUlaO0lBRUssWUFBWSxrQkFLakI7SUFFSyw0QkFBNEIsa0JBZWpDO0lBRUssZ0JBQWdCLGtCQXlEckI7WUFFYSxlQUFlO0NBTzlCIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anvil_test_watcher.d.ts","sourceRoot":"","sources":["../../src/testing/anvil_test_watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE;;;;;;GAMG;AACH,qBAAa,gBAAgB;
|
|
1
|
+
{"version":3,"file":"anvil_test_watcher.d.ts","sourceRoot":"","sources":["../../src/testing/anvil_test_watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAyBzB,OAAO,CAAC,UAAU;IAGlB,OAAO,CAAC,YAAY,CAAC;IA3BvB,OAAO,CAAC,cAAc,CAAkB;IAExC,OAAO,CAAC,MAAM,CAAsD;IACpE,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAU;IAEhC,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAC9C,OAAO,CAAC,uBAAuB,CAAC,CAAiB;IACjD,OAAO,CAAC,6BAA6B,CAAC,CAAiB;IAEvD,OAAO,CAAC,MAAM,CAAiD;IAE/D,OAAO,CAAC,iBAAiB,CAAQ;IAGjC,OAAO,CAAC,iBAAiB,CAAC,CAAwB;IAGlD,OAAO,CAAC,mBAAmB,CAAC,CAAgB;IAG5C,OAAO,CAAC,qBAAqB,CAAC,CAAqC;IAEnE,YACU,UAAU,EAAE,aAAa,EACjC,aAAa,EAAE,UAAU,EACzB,QAAQ,EAAE,UAAU,EACZ,YAAY,CAAC,8BAAkB,EAaxC;IAED,oBAAoB,CAAC,iBAAiB,EAAE,OAAO,QAG9C;IAED,iBAAiB,CAAC,cAAc,EAAE,OAAO,QAExC;IAED,yGAAyG;IACzG,oBAAoB,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,QAE7C;IAED,uGAAuG;IACvG,sBAAsB,CAAC,EAAE,EAAE,MAAM,OAAO,QAEvC;IAEK,KAAK,kBAyBV;IAEK,IAAI,kBAIT;IAEK,OAAO,kBAIZ;IAEK,YAAY,kBAKjB;IAEK,4BAA4B,kBAejC;IAEK,gBAAgB,kBAyDrB;YAEa,eAAe;CAO9B"}
|
|
@@ -22,6 +22,12 @@ import { getAddress, getContract } from 'viem';
|
|
|
22
22
|
markingAsProvenRunningPromise;
|
|
23
23
|
logger;
|
|
24
24
|
isMarkingAsProven;
|
|
25
|
+
// Optional callback to check if there are pending txs in the mempool.
|
|
26
|
+
getPendingTxCount;
|
|
27
|
+
// Optional callback to check if the sequencer is actively building a block.
|
|
28
|
+
isSequencerBuilding;
|
|
29
|
+
// Tracks when we first observed the current unfilled slot with pending txs (real wall time).
|
|
30
|
+
unfilledSlotFirstSeen;
|
|
25
31
|
constructor(cheatcodes, rollupAddress, l1Client, dateProvider){
|
|
26
32
|
this.cheatcodes = cheatcodes;
|
|
27
33
|
this.dateProvider = dateProvider;
|
|
@@ -45,6 +51,12 @@ import { getAddress, getContract } from 'viem';
|
|
|
45
51
|
setisLocalNetwork(isLocalNetwork) {
|
|
46
52
|
this.isLocalNetwork = isLocalNetwork;
|
|
47
53
|
}
|
|
54
|
+
/** Sets a callback to check for pending txs, used to skip unfilled slots faster when txs are waiting. */ setGetPendingTxCount(fn) {
|
|
55
|
+
this.getPendingTxCount = fn;
|
|
56
|
+
}
|
|
57
|
+
/** Sets a callback to check if the sequencer is actively building, to avoid warping while it works. */ setIsSequencerBuilding(fn) {
|
|
58
|
+
this.isSequencerBuilding = fn;
|
|
59
|
+
}
|
|
48
60
|
async start() {
|
|
49
61
|
if (this.filledRunningPromise) {
|
|
50
62
|
throw new Error('Watcher already watching for filled slot');
|
|
@@ -111,14 +123,8 @@ import { getAddress, getContract } from 'viem';
|
|
|
111
123
|
BigInt(nextSlot)
|
|
112
124
|
]));
|
|
113
125
|
if (BigInt(currentSlot) === checkpointLog.slotNumber) {
|
|
114
|
-
//
|
|
115
|
-
|
|
116
|
-
await this.cheatcodes.warp(nextSlotTimestamp, {
|
|
117
|
-
resetBlockInterval: true
|
|
118
|
-
});
|
|
119
|
-
} catch (e) {
|
|
120
|
-
this.logger.error(`Failed to warp to timestamp ${nextSlotTimestamp}: ${e}`);
|
|
121
|
-
}
|
|
126
|
+
// The current slot has been filled, we should jump to the next slot.
|
|
127
|
+
await this.warpToTimestamp(nextSlotTimestamp);
|
|
122
128
|
this.logger.info(`Slot ${currentSlot} was filled, jumped to next slot`);
|
|
123
129
|
return;
|
|
124
130
|
}
|
|
@@ -126,19 +132,50 @@ import { getAddress, getContract } from 'viem';
|
|
|
126
132
|
if (!this.isLocalNetwork) {
|
|
127
133
|
return;
|
|
128
134
|
}
|
|
135
|
+
// If there are pending txs and the sequencer missed them, warp quickly (after a 2s real-time debounce) so the
|
|
136
|
+
// sequencer can retry in the next slot. Without this, we'd have to wait a full real-time slot duration (~36s) for
|
|
137
|
+
// the dateProvider to catch up to the next slot timestamp. We skip the warp if the sequencer is actively building
|
|
138
|
+
// to avoid invalidating its in-progress work.
|
|
139
|
+
if (this.getPendingTxCount) {
|
|
140
|
+
const pendingTxs = await this.getPendingTxCount();
|
|
141
|
+
if (pendingTxs > 0) {
|
|
142
|
+
if (this.isSequencerBuilding?.()) {
|
|
143
|
+
this.unfilledSlotFirstSeen = undefined;
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const realNow = Date.now();
|
|
147
|
+
if (!this.unfilledSlotFirstSeen || this.unfilledSlotFirstSeen.slot !== currentSlot) {
|
|
148
|
+
this.unfilledSlotFirstSeen = {
|
|
149
|
+
slot: currentSlot,
|
|
150
|
+
realTime: realNow
|
|
151
|
+
};
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
if (realNow - this.unfilledSlotFirstSeen.realTime > 2000) {
|
|
155
|
+
await this.warpToTimestamp(nextSlotTimestamp);
|
|
156
|
+
this.unfilledSlotFirstSeen = undefined;
|
|
157
|
+
this.logger.info(`Slot ${currentSlot} was missed with pending txs, jumped to next slot`);
|
|
158
|
+
}
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Fallback: warp when the dateProvider time has passed the next slot timestamp.
|
|
129
163
|
const currentTimestamp = this.dateProvider?.now() ?? Date.now();
|
|
130
164
|
if (currentTimestamp > nextSlotTimestamp * 1000) {
|
|
131
|
-
|
|
132
|
-
await this.cheatcodes.warp(nextSlotTimestamp, {
|
|
133
|
-
resetBlockInterval: true
|
|
134
|
-
});
|
|
135
|
-
} catch (e) {
|
|
136
|
-
this.logger.error(`Failed to warp to timestamp ${nextSlotTimestamp}: ${e}`);
|
|
137
|
-
}
|
|
165
|
+
await this.warpToTimestamp(nextSlotTimestamp);
|
|
138
166
|
this.logger.info(`Slot ${currentSlot} was missed, jumped to next slot`);
|
|
139
167
|
}
|
|
140
168
|
} catch {
|
|
141
169
|
this.logger.error('mineIfSlotFilled failed');
|
|
142
170
|
}
|
|
143
171
|
}
|
|
172
|
+
async warpToTimestamp(timestamp) {
|
|
173
|
+
try {
|
|
174
|
+
await this.cheatcodes.warp(timestamp, {
|
|
175
|
+
resetBlockInterval: true
|
|
176
|
+
});
|
|
177
|
+
} catch (e) {
|
|
178
|
+
this.logger.error(`Failed to warp to timestamp ${timestamp}: ${e}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
144
181
|
}
|
package/dest/testing/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export { AnvilTestWatcher } from './anvil_test_watcher.js';
|
|
|
2
2
|
export { EthCheatCodes, RollupCheatCodes } from '@aztec/ethereum/test';
|
|
3
3
|
export { CheatCodes } from './cheat_codes.js';
|
|
4
4
|
export { EpochTestSettler } from './epoch_test_settler.js';
|
|
5
|
-
|
|
5
|
+
export { getTokenAllowedSetupFunctions } from './token_allowed_setup.js';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMEJBQTBCLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dest/testing/index.js
CHANGED
|
@@ -2,3 +2,4 @@ export { AnvilTestWatcher } from './anvil_test_watcher.js';
|
|
|
2
2
|
export { EthCheatCodes, RollupCheatCodes } from '@aztec/ethereum/test';
|
|
3
3
|
export { CheatCodes } from './cheat_codes.js';
|
|
4
4
|
export { EpochTestSettler } from './epoch_test_settler.js';
|
|
5
|
+
export { getTokenAllowedSetupFunctions } from './token_allowed_setup.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
|
|
2
|
+
/**
|
|
3
|
+
* Returns Token-specific allowlist entries needed for FPC-based fee payments.
|
|
4
|
+
* These are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getTokenAllowedSetupFunctions(): Promise<AllowedElement[]>;
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5fYWxsb3dlZF9zZXR1cC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RpbmcvdG9rZW5fYWxsb3dlZF9zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV0RTs7O0dBR0c7QUFDSCx3QkFBc0IsNkJBQTZCLElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBUy9FIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token_allowed_setup.d.ts","sourceRoot":"","sources":["../../src/testing/token_allowed_setup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE;;;GAGG;AACH,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAS/E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TokenContractArtifact } from '@aztec/noir-contracts.js/Token';
|
|
2
|
+
import { buildAllowedElement } from '@aztec/p2p/msg_validators';
|
|
3
|
+
import { getContractClassFromArtifact } from '@aztec/stdlib/contract';
|
|
4
|
+
/**
|
|
5
|
+
* Returns Token-specific allowlist entries needed for FPC-based fee payments.
|
|
6
|
+
* These are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
|
|
7
|
+
*/ export async function getTokenAllowedSetupFunctions() {
|
|
8
|
+
const tokenClassId = (await getContractClassFromArtifact(TokenContractArtifact)).id;
|
|
9
|
+
const target = {
|
|
10
|
+
classId: tokenClassId
|
|
11
|
+
};
|
|
12
|
+
return Promise.all([
|
|
13
|
+
// Token: needed for private transfers via FPC (transfer_to_public enqueues this)
|
|
14
|
+
buildAllowedElement(TokenContractArtifact, target, '_increase_public_balance', {
|
|
15
|
+
onlySelf: true
|
|
16
|
+
}),
|
|
17
|
+
// Token: needed for public transfers via FPC (fee_entrypoint_public enqueues this)
|
|
18
|
+
buildAllowedElement(TokenContractArtifact, target, 'transfer_in_public')
|
|
19
|
+
]);
|
|
20
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/aztec",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.f224bb98b",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -28,39 +28,40 @@
|
|
|
28
28
|
"../package.common.json"
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@aztec/accounts": "0.0.1-commit.
|
|
32
|
-
"@aztec/archiver": "0.0.1-commit.
|
|
33
|
-
"@aztec/aztec-faucet": "0.0.1-commit.
|
|
34
|
-
"@aztec/aztec-node": "0.0.1-commit.
|
|
35
|
-
"@aztec/aztec.js": "0.0.1-commit.
|
|
36
|
-
"@aztec/bb-prover": "0.0.1-commit.
|
|
37
|
-
"@aztec/bb.js": "0.0.1-commit.
|
|
38
|
-
"@aztec/blob-client": "0.0.1-commit.
|
|
39
|
-
"@aztec/bot": "0.0.1-commit.
|
|
40
|
-
"@aztec/builder": "0.0.1-commit.
|
|
41
|
-
"@aztec/cli": "0.0.1-commit.
|
|
42
|
-
"@aztec/constants": "0.0.1-commit.
|
|
43
|
-
"@aztec/entrypoints": "0.0.1-commit.
|
|
44
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
45
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
46
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
47
|
-
"@aztec/l1-artifacts": "0.0.1-commit.
|
|
48
|
-
"@aztec/node-lib": "0.0.1-commit.
|
|
49
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
50
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
51
|
-
"@aztec/p2p": "0.0.1-commit.
|
|
52
|
-
"@aztec/p2p-bootstrap": "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/stdlib": "0.0.1-commit.
|
|
59
|
-
"@aztec/telemetry-client": "0.0.1-commit.
|
|
60
|
-
"@aztec/
|
|
61
|
-
"@aztec/
|
|
62
|
-
"@aztec/
|
|
63
|
-
"@aztec/world-state": "0.0.1-commit.
|
|
31
|
+
"@aztec/accounts": "0.0.1-commit.f224bb98b",
|
|
32
|
+
"@aztec/archiver": "0.0.1-commit.f224bb98b",
|
|
33
|
+
"@aztec/aztec-faucet": "0.0.1-commit.f224bb98b",
|
|
34
|
+
"@aztec/aztec-node": "0.0.1-commit.f224bb98b",
|
|
35
|
+
"@aztec/aztec.js": "0.0.1-commit.f224bb98b",
|
|
36
|
+
"@aztec/bb-prover": "0.0.1-commit.f224bb98b",
|
|
37
|
+
"@aztec/bb.js": "0.0.1-commit.f224bb98b",
|
|
38
|
+
"@aztec/blob-client": "0.0.1-commit.f224bb98b",
|
|
39
|
+
"@aztec/bot": "0.0.1-commit.f224bb98b",
|
|
40
|
+
"@aztec/builder": "0.0.1-commit.f224bb98b",
|
|
41
|
+
"@aztec/cli": "0.0.1-commit.f224bb98b",
|
|
42
|
+
"@aztec/constants": "0.0.1-commit.f224bb98b",
|
|
43
|
+
"@aztec/entrypoints": "0.0.1-commit.f224bb98b",
|
|
44
|
+
"@aztec/ethereum": "0.0.1-commit.f224bb98b",
|
|
45
|
+
"@aztec/foundation": "0.0.1-commit.f224bb98b",
|
|
46
|
+
"@aztec/kv-store": "0.0.1-commit.f224bb98b",
|
|
47
|
+
"@aztec/l1-artifacts": "0.0.1-commit.f224bb98b",
|
|
48
|
+
"@aztec/node-lib": "0.0.1-commit.f224bb98b",
|
|
49
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.f224bb98b",
|
|
50
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.f224bb98b",
|
|
51
|
+
"@aztec/p2p": "0.0.1-commit.f224bb98b",
|
|
52
|
+
"@aztec/p2p-bootstrap": "0.0.1-commit.f224bb98b",
|
|
53
|
+
"@aztec/protocol-contracts": "0.0.1-commit.f224bb98b",
|
|
54
|
+
"@aztec/prover-client": "0.0.1-commit.f224bb98b",
|
|
55
|
+
"@aztec/prover-node": "0.0.1-commit.f224bb98b",
|
|
56
|
+
"@aztec/pxe": "0.0.1-commit.f224bb98b",
|
|
57
|
+
"@aztec/sequencer-client": "0.0.1-commit.f224bb98b",
|
|
58
|
+
"@aztec/stdlib": "0.0.1-commit.f224bb98b",
|
|
59
|
+
"@aztec/telemetry-client": "0.0.1-commit.f224bb98b",
|
|
60
|
+
"@aztec/txe": "0.0.1-commit.f224bb98b",
|
|
61
|
+
"@aztec/validator-ha-signer": "0.0.1-commit.f224bb98b",
|
|
62
|
+
"@aztec/wallets": "0.0.1-commit.f224bb98b",
|
|
63
|
+
"@aztec/world-state": "0.0.1-commit.f224bb98b",
|
|
64
|
+
"@iarna/toml": "^2.2.5",
|
|
64
65
|
"@types/chalk": "^2.2.0",
|
|
65
66
|
"abitype": "^0.8.11",
|
|
66
67
|
"chalk": "^5.3.0",
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Creates a contract+test crate pair and adds them to an existing workspace.
|
|
5
|
+
# Usage: add_crate.sh <crate_name>
|
|
6
|
+
# Must be called from a workspace root that already has Nargo.toml with [workspace].
|
|
7
|
+
|
|
8
|
+
crate_name=$1
|
|
9
|
+
|
|
10
|
+
if [ -z "$crate_name" ]; then
|
|
11
|
+
echo "Error: crate name is required"
|
|
12
|
+
exit 1
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
if [[ "$crate_name" == *"/"* ]] || [[ "$crate_name" == *"\\"* ]]; then
|
|
16
|
+
echo "Error: crate name must not contain path separators"
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
contract_dir="${crate_name}_contract"
|
|
21
|
+
test_dir="${crate_name}_test"
|
|
22
|
+
|
|
23
|
+
if [ -d "$contract_dir" ]; then
|
|
24
|
+
echo "Error: directory '$contract_dir' already exists"
|
|
25
|
+
exit 1
|
|
26
|
+
fi
|
|
27
|
+
if [ -d "$test_dir" ]; then
|
|
28
|
+
echo "Error: directory '$test_dir' already exists"
|
|
29
|
+
exit 1
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
# Get the actual aztec version for the git tag.
|
|
33
|
+
AZTEC_VERSION=$(jq -r '.version' $(dirname $0)/../package.json)
|
|
34
|
+
|
|
35
|
+
# Create contract crate
|
|
36
|
+
mkdir -p "$contract_dir/src"
|
|
37
|
+
cat > "$contract_dir/Nargo.toml" << CEOF
|
|
38
|
+
[package]
|
|
39
|
+
name = "${crate_name}_contract"
|
|
40
|
+
type = "contract"
|
|
41
|
+
|
|
42
|
+
[dependencies]
|
|
43
|
+
aztec = { git="https://github.com/AztecProtocol/aztec-nr", tag="v${AZTEC_VERSION}", directory="aztec" }
|
|
44
|
+
CEOF
|
|
45
|
+
|
|
46
|
+
cat > "$contract_dir/src/main.nr" << 'EOF'
|
|
47
|
+
use aztec::macros::aztec;
|
|
48
|
+
|
|
49
|
+
#[aztec]
|
|
50
|
+
pub contract Main {
|
|
51
|
+
use aztec::macros::functions::{external, initializer};
|
|
52
|
+
|
|
53
|
+
#[initializer]
|
|
54
|
+
#[external("private")]
|
|
55
|
+
fn constructor() {}
|
|
56
|
+
}
|
|
57
|
+
EOF
|
|
58
|
+
|
|
59
|
+
# Create test crate
|
|
60
|
+
mkdir -p "$test_dir/src"
|
|
61
|
+
cat > "$test_dir/Nargo.toml" << TEOF
|
|
62
|
+
[package]
|
|
63
|
+
name = "${crate_name}_test"
|
|
64
|
+
type = "lib"
|
|
65
|
+
|
|
66
|
+
[dependencies]
|
|
67
|
+
aztec = { git="https://github.com/AztecProtocol/aztec-nr", tag="v${AZTEC_VERSION}", directory="aztec" }
|
|
68
|
+
${crate_name}_contract = { path = "../${contract_dir}" }
|
|
69
|
+
TEOF
|
|
70
|
+
|
|
71
|
+
cat > "$test_dir/src/lib.nr" << 'NOIR'
|
|
72
|
+
use aztec::test::helpers::test_environment::TestEnvironment;
|
|
73
|
+
use __CRATE_NAME___contract::Main;
|
|
74
|
+
|
|
75
|
+
#[test]
|
|
76
|
+
unconstrained fn test_constructor() {
|
|
77
|
+
let mut env = TestEnvironment::new();
|
|
78
|
+
let deployer = env.create_light_account();
|
|
79
|
+
|
|
80
|
+
// Deploy the contract with the default constructor:
|
|
81
|
+
let contract_address = env.deploy("@__CRATE_NAME___contract/Main").with_private_initializer(
|
|
82
|
+
deployer,
|
|
83
|
+
Main::interface().constructor(),
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
// Deploy without an initializer:
|
|
87
|
+
let contract_address = env.deploy("@__CRATE_NAME___contract/Main").without_initializer();
|
|
88
|
+
}
|
|
89
|
+
NOIR
|
|
90
|
+
|
|
91
|
+
sed -i "s/__CRATE_NAME__/${crate_name}/g" "$test_dir/src/lib.nr"
|
|
92
|
+
|
|
93
|
+
# Add members to workspace Nargo.toml
|
|
94
|
+
if grep -q 'members\s*=\s*\[\s*\]' Nargo.toml; then
|
|
95
|
+
# Empty array: members = []
|
|
96
|
+
sed -i "s|members\s*=\s*\[\s*\]|members = [\"${contract_dir}\", \"${test_dir}\"]|" Nargo.toml
|
|
97
|
+
else
|
|
98
|
+
# Non-empty array: add before closing ]
|
|
99
|
+
sed -i "s|\(members\s*=\s*\[.*\)\]|\1, \"${contract_dir}\", \"${test_dir}\"]|" Nargo.toml
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
echo "Created crates '${contract_dir}' and '${test_dir}'"
|
package/scripts/aztec.sh
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
set -euo pipefail
|
|
3
|
-
shopt -s inherit_errexit
|
|
4
3
|
|
|
5
4
|
# Re-execute using correct version if we have an .aztecrc file.
|
|
6
5
|
if [ "${AZTEC_VERSIONED:-0}" -eq 0 ] && [ -f .aztecrc ] && command -v aztec-up &>/dev/null; then
|
|
@@ -21,13 +20,16 @@ function aztec {
|
|
|
21
20
|
|
|
22
21
|
case $cmd in
|
|
23
22
|
test)
|
|
24
|
-
|
|
23
|
+
# Attempt to compile, no-op if there are no changes
|
|
24
|
+
node --no-warnings "$script_dir/../dest/bin/index.js" compile
|
|
25
|
+
|
|
26
|
+
export LOG_LEVEL="${LOG_LEVEL:-"error;trace:contract_log"}"
|
|
25
27
|
aztec start --txe --port 8081 &
|
|
26
28
|
server_pid=$!
|
|
27
29
|
trap 'kill $server_pid &>/dev/null || true' EXIT
|
|
28
30
|
while ! nc -z 127.0.0.1 8081 &>/dev/null; do sleep 0.2; done
|
|
29
31
|
export NARGO_FOREIGN_CALL_TIMEOUT=300000
|
|
30
|
-
nargo test --silence-warnings
|
|
32
|
+
nargo test --silence-warnings --oracle-resolver http://127.0.0.1:8081 --test-threads 16 "$@"
|
|
31
33
|
;;
|
|
32
34
|
start)
|
|
33
35
|
if [ "${1:-}" == "--local-network" ]; then
|
|
@@ -47,16 +49,20 @@ case $cmd in
|
|
|
47
49
|
export ETHEREUM_HOSTS=${ETHEREUM_HOSTS:-"http://127.0.0.1:${ANVIL_PORT}"}
|
|
48
50
|
|
|
49
51
|
anvil --version
|
|
50
|
-
anvil --silent &
|
|
52
|
+
anvil --silent --port "$ANVIL_PORT" &
|
|
51
53
|
anvil_pid=$!
|
|
52
54
|
trap 'kill $anvil_pid &>/dev/null' EXIT
|
|
53
55
|
fi
|
|
54
56
|
|
|
55
57
|
aztec start "$@"
|
|
56
58
|
;;
|
|
57
|
-
|
|
59
|
+
new|init)
|
|
58
60
|
$script_dir/${cmd}.sh "$@"
|
|
59
61
|
;;
|
|
62
|
+
flamegraph)
|
|
63
|
+
echo "Warning: 'aztec flamegraph' is deprecated. Use 'aztec profile flamegraph' instead." >&2
|
|
64
|
+
aztec profile flamegraph "$@"
|
|
65
|
+
;;
|
|
60
66
|
*)
|
|
61
67
|
aztec $cmd "$@"
|
|
62
68
|
;;
|
package/scripts/init.sh
CHANGED
|
@@ -1,35 +1,39 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
|
|
4
|
-
NARGO=${NARGO:-nargo}
|
|
5
4
|
script_path=$(realpath $(dirname "$0"))
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
# Parse arguments
|
|
7
|
+
while [[ $# -gt 0 ]]; do
|
|
8
|
+
case $1 in
|
|
9
|
+
--help|-h)
|
|
10
|
+
cat << 'EOF'
|
|
10
11
|
Aztec Init - Create a new Aztec Noir project in the current directory
|
|
11
12
|
|
|
12
|
-
Usage: aztec init
|
|
13
|
+
Usage: aztec init
|
|
13
14
|
|
|
14
15
|
Options:
|
|
15
|
-
--name <NAME> Name of the package [default: current directory name]
|
|
16
|
-
--lib Use a library template
|
|
17
16
|
-h, --help Print help
|
|
18
17
|
|
|
19
|
-
This command creates a new Aztec Noir project in the current directory
|
|
20
|
-
|
|
18
|
+
This command creates a new Aztec Noir project in the current directory with
|
|
19
|
+
a workspace containing a contract crate and a test crate, and automatically
|
|
20
|
+
adds the Aztec.nr dependency to both.
|
|
21
21
|
|
|
22
|
+
If a workspace already exists in the current directory, use
|
|
23
|
+
'aztec new <name>' instead to add another contract.
|
|
22
24
|
EOF
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
exit 0
|
|
26
|
+
;;
|
|
27
|
+
*)
|
|
28
|
+
echo "Error: unexpected argument '$1'"
|
|
29
|
+
echo "Usage: aztec init"
|
|
30
|
+
echo "Run 'aztec init --help' for more information"
|
|
31
|
+
exit 1
|
|
32
|
+
;;
|
|
33
|
+
esac
|
|
28
34
|
done
|
|
29
35
|
|
|
30
|
-
|
|
31
|
-
$NARGO init "$@"
|
|
36
|
+
package_name="$(basename $(pwd))"
|
|
32
37
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
fi
|
|
38
|
+
echo "Initializing Aztec contract project..."
|
|
39
|
+
$script_path/setup_workspace.sh "$package_name"
|