@aztec/aztec 0.0.1-commit.c80b6263 → 0.0.1-commit.c949de6bc
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 +5 -1
- 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 +46 -10
- 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 +23 -6
- package/dest/cli/cli.d.ts +1 -1
- package/dest/cli/cli.d.ts.map +1 -1
- package/dest/cli/cli.js +0 -1
- 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 +160 -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/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 +1 -1
- package/dest/cli/cmds/start_node.d.ts.map +1 -1
- package/dest/cli/cmds/start_node.js +62 -10
- 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 +2 -2
- 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/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 +5 -14
- package/dest/cli/util.d.ts.map +1 -1
- package/dest/cli/util.js +13 -8
- package/dest/examples/token.js +2 -2
- 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 +32 -13
- 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/package.json +34 -34
- package/scripts/aztec.sh +8 -5
- package/scripts/init.sh +23 -13
- package/scripts/new.sh +17 -16
- package/scripts/setup_workspace.sh +124 -0
- package/src/bin/index.ts +5 -1
- package/src/cli/admin_api_key_store.ts +128 -0
- package/src/cli/aztec_start_action.ts +50 -6
- package/src/cli/aztec_start_options.ts +25 -5
- package/src/cli/cli.ts +0 -1
- package/src/cli/cmds/compile.ts +184 -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/start_bot.ts +8 -5
- package/src/cli/cmds/start_node.ts +51 -9
- package/src/cli/cmds/start_prover_agent.ts +2 -2
- package/src/cli/cmds/start_prover_broker.ts +5 -1
- package/src/cli/cmds/utils/artifacts.ts +44 -0
- package/src/cli/cmds/utils/spawn.ts +16 -0
- package/src/cli/util.ts +16 -21
- package/src/examples/token.ts +2 -2
- package/src/local-network/local-network.ts +41 -14
- package/src/testing/anvil_test_watcher.ts +59 -15
- 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/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
|
@@ -6,6 +6,7 @@ import { type BlobClientInterface } from '@aztec/blob-client/client';
|
|
|
6
6
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
7
7
|
import type { LogFn } from '@aztec/foundation/log';
|
|
8
8
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
9
|
+
import type { ProvingJobBroker } from '@aztec/stdlib/interfaces/server';
|
|
9
10
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
10
11
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
11
12
|
import { type Hex } from 'viem';
|
|
@@ -38,7 +39,7 @@ export declare function deployContractsToL1(aztecNodeConfig: AztecNodeConfig, pr
|
|
|
38
39
|
dateGatedRelayerAddress?: EthAddress | undefined;
|
|
39
40
|
} & {
|
|
40
41
|
rollupAddress: EthAddress;
|
|
41
|
-
} & {
|
|
42
|
+
} & Pick<import("@aztec/ethereum/l1-contract-addresses").L1ContractAddresses, "rollupAddress"> & {
|
|
42
43
|
rollupAddress: EthAddress;
|
|
43
44
|
}>;
|
|
44
45
|
/** Local network settings. */
|
|
@@ -65,7 +66,8 @@ export declare function createAztecNode(config?: Partial<AztecNodeConfig>, deps?
|
|
|
65
66
|
telemetry?: TelemetryClient;
|
|
66
67
|
blobClient?: BlobClientInterface;
|
|
67
68
|
dateProvider?: DateProvider;
|
|
69
|
+
proverBroker?: ProvingJobBroker;
|
|
68
70
|
}, options?: {
|
|
69
71
|
prefilledPublicData?: PublicDataTreeLeaf[];
|
|
70
72
|
}): Promise<AztecNodeService>;
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbmV0d29yay5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvY2FsLW5ldHdvcmsvbG9jYWwtbmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQVN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBb0IsTUFBTSx5QkFBeUIsQ0FBQztBQUl6RSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUQsT0FBTyxFQUNMLEtBQUssZUFBZSxFQUdyQixNQUFNLHlCQUF5QixDQUFDO0FBS2pDLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBMkQsTUFBTSxNQUFNLENBQUM7QUFlekY7Ozs7R0FJRztBQUNILHdCQUFzQixtQkFBbUIsQ0FDdkMsZUFBZSxFQUFFLGVBQWUsRUFDaEMsVUFBVSxFQUFFLEdBQUcsRUFDZixJQUFJLEdBQUU7SUFDSixrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUN4Qiw0QkFBNEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUNsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQlA7QUFFRCw4QkFBOEI7QUFDOUIsTUFBTSxNQUFNLGtCQUFrQixHQUFHLGVBQWUsR0FBRztJQUNqRCwwREFBMEQ7SUFDMUQsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQiw2REFBNkQ7SUFDN0QsWUFBWSxFQUFFLE9BQU8sQ0FBQztDQUN2QixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILHdCQUFzQixrQkFBa0IsQ0FBQyxNQUFNLHlDQUFrQyxFQUFFLE9BQU8sRUFBRSxLQUFLOzs7R0FnSmhHO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQXNCLGVBQWUsQ0FDbkMsTUFBTSxHQUFFLE9BQU8sQ0FBQyxlQUFlLENBQU0sRUFDckMsSUFBSSxHQUFFO0lBQ0osU0FBUyxDQUFDLEVBQUUsZUFBZSxDQUFDO0lBQzVCLFVBQVUsQ0FBQyxFQUFFLG1CQUFtQixDQUFDO0lBQ2pDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQztJQUM1QixZQUFZLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQztDQUM1QixFQUNOLE9BQU8sR0FBRTtJQUFFLG1CQUFtQixDQUFDLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQTtDQUFPLDZCQWU3RCJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-network.d.ts","sourceRoot":"","sources":["../../src/local-network/local-network.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,KAAK,eAAe,EAAoB,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAE5C,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,2BAA2B,CAAC;AASvF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAoB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"local-network.d.ts","sourceRoot":"","sources":["../../src/local-network/local-network.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,KAAK,eAAe,EAAoB,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAE5C,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,2BAA2B,CAAC;AASvF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAoB,MAAM,yBAAyB,CAAC;AAIzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAE,KAAK,GAAG,EAA2D,MAAM,MAAM,CAAC;AAezF;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,GAAG,EACf,IAAI,GAAE;IACJ,kBAAkB,CAAC,EAAE,EAAE,CAAC;IACxB,4BAA4B,CAAC,EAAE,MAAM,CAAC;CAClC;;;;;;;;;;;;;;;;;;;;;;;GAoBP;AAED,8BAA8B;AAC9B,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG;IACjD,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,yCAAkC,EAAE,OAAO,EAAE,KAAK;;;GAgJhG;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,EACrC,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAC;CAC5B,EACN,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAAO,6BAe7D"}
|
|
@@ -17,8 +17,10 @@ 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';
|
|
20
21
|
import { getConfigEnvVars as getTelemetryClientConfig, initTelemetryClient } from '@aztec/telemetry-client';
|
|
21
|
-
import {
|
|
22
|
+
import { EmbeddedWallet } from '@aztec/wallets/embedded';
|
|
23
|
+
import { deployFundedSchnorrAccounts } from '@aztec/wallets/testing';
|
|
22
24
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
23
25
|
import { createPublicClient, fallback, http as httpViemTransport } from 'viem';
|
|
24
26
|
import { mnemonicToAccount, privateKeyToAddress } from 'viem/accounts';
|
|
@@ -70,9 +72,9 @@ const localAnvil = foundry;
|
|
|
70
72
|
...config
|
|
71
73
|
};
|
|
72
74
|
const hdAccount = mnemonicToAccount(config.l1Mnemonic || DefaultMnemonic);
|
|
73
|
-
if (aztecNodeConfig.
|
|
75
|
+
if (aztecNodeConfig.sequencerPublisherPrivateKeys == undefined || !aztecNodeConfig.sequencerPublisherPrivateKeys.length || aztecNodeConfig.sequencerPublisherPrivateKeys[0].getValue() === NULL_KEY) {
|
|
74
76
|
const privKey = hdAccount.getHdKey().privateKey;
|
|
75
|
-
aztecNodeConfig.
|
|
77
|
+
aztecNodeConfig.sequencerPublisherPrivateKeys = [
|
|
76
78
|
new SecretValue(`0x${Buffer.from(privKey).toString('hex')}`)
|
|
77
79
|
];
|
|
78
80
|
}
|
|
@@ -140,6 +142,20 @@ const localAnvil = foundry;
|
|
|
140
142
|
}, {
|
|
141
143
|
prefilledPublicData
|
|
142
144
|
});
|
|
145
|
+
// Now that the node is up, let the watcher check for pending txs so it can skip unfilled slots faster when
|
|
146
|
+
// transactions are waiting in the mempool. Also let it check if the sequencer is actively building, to avoid
|
|
147
|
+
// warping time out from under an in-progress block.
|
|
148
|
+
watcher?.setGetPendingTxCount(()=>node.getPendingTxCount());
|
|
149
|
+
const sequencer = node.getSequencer()?.getSequencer();
|
|
150
|
+
if (sequencer) {
|
|
151
|
+
const idleStates = new Set([
|
|
152
|
+
SequencerState.STOPPED,
|
|
153
|
+
SequencerState.STOPPING,
|
|
154
|
+
SequencerState.IDLE,
|
|
155
|
+
SequencerState.SYNCHRONIZING
|
|
156
|
+
]);
|
|
157
|
+
watcher?.setIsSequencerBuilding(()=>!idleStates.has(sequencer.getState()));
|
|
158
|
+
}
|
|
143
159
|
let epochTestSettler;
|
|
144
160
|
if (!aztecNodeConfig.p2pEnabled) {
|
|
145
161
|
epochTestSettler = new EpochTestSettler(cheatcodes, rollupAddress, node.getBlockSource(), logger.createChild('epoch-settler'), {
|
|
@@ -148,17 +164,15 @@ const localAnvil = foundry;
|
|
|
148
164
|
await epochTestSettler.start();
|
|
149
165
|
}
|
|
150
166
|
if (initialAccounts.length) {
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
167
|
+
const wallet = await EmbeddedWallet.create(node, {
|
|
168
|
+
pxeConfig: {
|
|
169
|
+
proverEnabled: aztecNodeConfig.realProofs
|
|
170
|
+
},
|
|
171
|
+
ephemeral: true
|
|
172
|
+
});
|
|
155
173
|
userLog('Setting up funded test accounts...');
|
|
156
174
|
const accountManagers = await deployFundedSchnorrAccounts(wallet, initialAccounts);
|
|
157
|
-
const
|
|
158
|
-
account: manager,
|
|
159
|
-
secretKey: initialAccounts[i].secret
|
|
160
|
-
}));
|
|
161
|
-
const accLogs = await createAccountLogs(accountsWithSecrets, wallet);
|
|
175
|
+
const accLogs = await createAccountLogs(accountManagers, wallet);
|
|
162
176
|
userLog(accLogs.join(''));
|
|
163
177
|
await setupBananaFPC(initialAccounts, wallet, userLog);
|
|
164
178
|
userLog(`SponsoredFPC: ${await getSponsoredFPCAddress()}`);
|
|
@@ -189,6 +203,11 @@ const localAnvil = foundry;
|
|
|
189
203
|
...config.l1Contracts
|
|
190
204
|
}
|
|
191
205
|
};
|
|
192
|
-
const node = await AztecNodeService.createAndSync(aztecNodeConfig,
|
|
206
|
+
const node = await AztecNodeService.createAndSync(aztecNodeConfig, {
|
|
207
|
+
...deps,
|
|
208
|
+
proverNodeDeps: {
|
|
209
|
+
broker: deps.proverBroker
|
|
210
|
+
}
|
|
211
|
+
}, options);
|
|
193
212
|
return node;
|
|
194
213
|
}
|
|
@@ -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/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.c949de6bc",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -28,39 +28,39 @@
|
|
|
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.c949de6bc",
|
|
32
|
+
"@aztec/archiver": "0.0.1-commit.c949de6bc",
|
|
33
|
+
"@aztec/aztec-faucet": "0.0.1-commit.c949de6bc",
|
|
34
|
+
"@aztec/aztec-node": "0.0.1-commit.c949de6bc",
|
|
35
|
+
"@aztec/aztec.js": "0.0.1-commit.c949de6bc",
|
|
36
|
+
"@aztec/bb-prover": "0.0.1-commit.c949de6bc",
|
|
37
|
+
"@aztec/bb.js": "0.0.1-commit.c949de6bc",
|
|
38
|
+
"@aztec/blob-client": "0.0.1-commit.c949de6bc",
|
|
39
|
+
"@aztec/bot": "0.0.1-commit.c949de6bc",
|
|
40
|
+
"@aztec/builder": "0.0.1-commit.c949de6bc",
|
|
41
|
+
"@aztec/cli": "0.0.1-commit.c949de6bc",
|
|
42
|
+
"@aztec/constants": "0.0.1-commit.c949de6bc",
|
|
43
|
+
"@aztec/entrypoints": "0.0.1-commit.c949de6bc",
|
|
44
|
+
"@aztec/ethereum": "0.0.1-commit.c949de6bc",
|
|
45
|
+
"@aztec/foundation": "0.0.1-commit.c949de6bc",
|
|
46
|
+
"@aztec/kv-store": "0.0.1-commit.c949de6bc",
|
|
47
|
+
"@aztec/l1-artifacts": "0.0.1-commit.c949de6bc",
|
|
48
|
+
"@aztec/node-lib": "0.0.1-commit.c949de6bc",
|
|
49
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.c949de6bc",
|
|
50
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.c949de6bc",
|
|
51
|
+
"@aztec/p2p": "0.0.1-commit.c949de6bc",
|
|
52
|
+
"@aztec/p2p-bootstrap": "0.0.1-commit.c949de6bc",
|
|
53
|
+
"@aztec/protocol-contracts": "0.0.1-commit.c949de6bc",
|
|
54
|
+
"@aztec/prover-client": "0.0.1-commit.c949de6bc",
|
|
55
|
+
"@aztec/prover-node": "0.0.1-commit.c949de6bc",
|
|
56
|
+
"@aztec/pxe": "0.0.1-commit.c949de6bc",
|
|
57
|
+
"@aztec/sequencer-client": "0.0.1-commit.c949de6bc",
|
|
58
|
+
"@aztec/stdlib": "0.0.1-commit.c949de6bc",
|
|
59
|
+
"@aztec/telemetry-client": "0.0.1-commit.c949de6bc",
|
|
60
|
+
"@aztec/txe": "0.0.1-commit.c949de6bc",
|
|
61
|
+
"@aztec/validator-ha-signer": "0.0.1-commit.c949de6bc",
|
|
62
|
+
"@aztec/wallets": "0.0.1-commit.c949de6bc",
|
|
63
|
+
"@aztec/world-state": "0.0.1-commit.c949de6bc",
|
|
64
64
|
"@types/chalk": "^2.2.0",
|
|
65
65
|
"abitype": "^0.8.11",
|
|
66
66
|
"chalk": "^5.3.0",
|
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,13 @@ function aztec {
|
|
|
21
20
|
|
|
22
21
|
case $cmd in
|
|
23
22
|
test)
|
|
24
|
-
export LOG_LEVEL="${LOG_LEVEL:-error}"
|
|
23
|
+
export LOG_LEVEL="${LOG_LEVEL:-"error;trace:contract_log"}"
|
|
25
24
|
aztec start --txe --port 8081 &
|
|
26
25
|
server_pid=$!
|
|
27
26
|
trap 'kill $server_pid &>/dev/null || true' EXIT
|
|
28
27
|
while ! nc -z 127.0.0.1 8081 &>/dev/null; do sleep 0.2; done
|
|
29
28
|
export NARGO_FOREIGN_CALL_TIMEOUT=300000
|
|
30
|
-
nargo test --silence-warnings
|
|
29
|
+
nargo test --silence-warnings --oracle-resolver http://127.0.0.1:8081 --test-threads 16 "$@"
|
|
31
30
|
;;
|
|
32
31
|
start)
|
|
33
32
|
if [ "${1:-}" == "--local-network" ]; then
|
|
@@ -47,16 +46,20 @@ case $cmd in
|
|
|
47
46
|
export ETHEREUM_HOSTS=${ETHEREUM_HOSTS:-"http://127.0.0.1:${ANVIL_PORT}"}
|
|
48
47
|
|
|
49
48
|
anvil --version
|
|
50
|
-
anvil --silent &
|
|
49
|
+
anvil --silent --port "$ANVIL_PORT" &
|
|
51
50
|
anvil_pid=$!
|
|
52
51
|
trap 'kill $anvil_pid &>/dev/null' EXIT
|
|
53
52
|
fi
|
|
54
53
|
|
|
55
54
|
aztec start "$@"
|
|
56
55
|
;;
|
|
57
|
-
|
|
56
|
+
new|init)
|
|
58
57
|
$script_dir/${cmd}.sh "$@"
|
|
59
58
|
;;
|
|
59
|
+
flamegraph)
|
|
60
|
+
echo "Warning: 'aztec flamegraph' is deprecated. Use 'aztec profile flamegraph' instead." >&2
|
|
61
|
+
aztec profile flamegraph "$@"
|
|
62
|
+
;;
|
|
60
63
|
*)
|
|
61
64
|
aztec $cmd "$@"
|
|
62
65
|
;;
|
package/scripts/init.sh
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
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
|
|
|
6
|
+
name_arg=""
|
|
7
|
+
|
|
8
|
+
# Check for help first
|
|
7
9
|
for arg in "$@"; do
|
|
8
10
|
if [ "$arg" == "--help" ] || [ "$arg" == "-h" ]; then
|
|
9
11
|
cat << 'EOF'
|
|
@@ -13,23 +15,31 @@ Usage: aztec init [OPTIONS]
|
|
|
13
15
|
|
|
14
16
|
Options:
|
|
15
17
|
--name <NAME> Name of the package [default: current directory name]
|
|
16
|
-
--lib Use a library template
|
|
17
18
|
-h, --help Print help
|
|
18
19
|
|
|
19
|
-
This command creates a new Aztec Noir project in the current directory
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
This command creates a new Aztec Noir project in the current directory with
|
|
21
|
+
a workspace containing a contract crate and a test crate, and automatically
|
|
22
|
+
adds the Aztec.nr dependency to both.
|
|
22
23
|
EOF
|
|
23
24
|
exit 0
|
|
24
25
|
fi
|
|
25
|
-
if [ "$arg" == "--lib" ]; then
|
|
26
|
-
is_contract=0
|
|
27
|
-
fi
|
|
28
26
|
done
|
|
29
27
|
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
# Parse arguments
|
|
29
|
+
while [[ $# -gt 0 ]]; do
|
|
30
|
+
case $1 in
|
|
31
|
+
--name)
|
|
32
|
+
name_arg="$2"
|
|
33
|
+
shift 2
|
|
34
|
+
;;
|
|
35
|
+
*)
|
|
36
|
+
shift
|
|
37
|
+
;;
|
|
38
|
+
esac
|
|
39
|
+
done
|
|
40
|
+
|
|
41
|
+
# Derive package name: use --name if provided, otherwise use current directory name
|
|
42
|
+
package_name="${name_arg:-$(basename $(pwd))}"
|
|
32
43
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
fi
|
|
44
|
+
echo "Initializing Aztec contract project..."
|
|
45
|
+
$script_path/setup_workspace.sh "$package_name"
|
package/scripts/new.sh
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
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
|
-
|
|
6
|
+
name_arg=""
|
|
7
|
+
project_path=""
|
|
8
8
|
|
|
9
9
|
while [[ $# -gt 0 ]]; do
|
|
10
10
|
case $1 in
|
|
@@ -19,20 +19,16 @@ Arguments:
|
|
|
19
19
|
|
|
20
20
|
Options:
|
|
21
21
|
--name <NAME> Name of the package [default: package directory name]
|
|
22
|
-
--lib Create a library template instead of a contract
|
|
23
22
|
-h, --help Print help
|
|
24
23
|
|
|
25
|
-
This command creates a new Aztec Noir project
|
|
26
|
-
|
|
24
|
+
This command creates a new Aztec Noir project with a workspace containing
|
|
25
|
+
a contract crate and a test crate, and automatically adds the Aztec.nr
|
|
26
|
+
dependency to both.
|
|
27
27
|
EOF
|
|
28
28
|
exit 0
|
|
29
29
|
;;
|
|
30
|
-
--lib)
|
|
31
|
-
type_arg="--lib"
|
|
32
|
-
shift
|
|
33
|
-
;;
|
|
34
30
|
--name)
|
|
35
|
-
name_arg="
|
|
31
|
+
name_arg="$2"
|
|
36
32
|
shift 2
|
|
37
33
|
;;
|
|
38
34
|
*)
|
|
@@ -50,10 +46,15 @@ if [ -z "$project_path" ]; then
|
|
|
50
46
|
exit 1
|
|
51
47
|
fi
|
|
52
48
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if [ "$type_arg" == "--contract" ]; then
|
|
57
|
-
cd $project_path
|
|
58
|
-
$script_path/setup_project.sh
|
|
49
|
+
if [ -d "$project_path" ] && [ "$(ls -A $project_path 2>/dev/null)" ]; then
|
|
50
|
+
echo "Error: $project_path already exists and is not empty"
|
|
51
|
+
exit 1
|
|
59
52
|
fi
|
|
53
|
+
|
|
54
|
+
# Derive package name: use --name if provided, otherwise use directory basename
|
|
55
|
+
package_name="${name_arg:-$(basename $project_path)}"
|
|
56
|
+
|
|
57
|
+
echo "Creating new Aztec contract project at $project_path..."
|
|
58
|
+
mkdir -p "$project_path"
|
|
59
|
+
cd "$project_path"
|
|
60
|
+
$script_path/setup_workspace.sh "$package_name"
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Creates an Aztec contract workspace with a contract crate and a test crate.
|
|
5
|
+
# Usage: setup_workspace.sh <package_name>
|
|
6
|
+
# Must be called from the workspace root directory.
|
|
7
|
+
|
|
8
|
+
package_name=$1
|
|
9
|
+
|
|
10
|
+
if [ -z "$package_name" ]; then
|
|
11
|
+
echo "Error: package name is required"
|
|
12
|
+
exit 1
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
if [ -f "Nargo.toml" ]; then
|
|
16
|
+
echo "Error: Nargo.toml already exists in the current directory"
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
# Get the actual aztec version for the git tag.
|
|
21
|
+
AZTEC_VERSION=$(jq -r '.version' $(dirname $0)/../package.json)
|
|
22
|
+
|
|
23
|
+
# Create workspace root Nargo.toml
|
|
24
|
+
cat > Nargo.toml << 'EOF'
|
|
25
|
+
[workspace]
|
|
26
|
+
members = ["contract", "test"]
|
|
27
|
+
EOF
|
|
28
|
+
|
|
29
|
+
# Create contract crate
|
|
30
|
+
mkdir -p contract/src
|
|
31
|
+
cat > contract/Nargo.toml << CEOF
|
|
32
|
+
[package]
|
|
33
|
+
name = "${package_name}"
|
|
34
|
+
type = "contract"
|
|
35
|
+
|
|
36
|
+
[dependencies]
|
|
37
|
+
aztec = { git="https://github.com/AztecProtocol/aztec-nr", tag="v${AZTEC_VERSION}", directory="aztec" }
|
|
38
|
+
CEOF
|
|
39
|
+
|
|
40
|
+
cat > contract/src/main.nr << 'EOF'
|
|
41
|
+
use aztec::macros::aztec;
|
|
42
|
+
|
|
43
|
+
#[aztec]
|
|
44
|
+
pub contract Main {
|
|
45
|
+
use aztec::macros::functions::{external, initializer};
|
|
46
|
+
|
|
47
|
+
#[initializer]
|
|
48
|
+
#[external("private")]
|
|
49
|
+
fn constructor() {}
|
|
50
|
+
}
|
|
51
|
+
EOF
|
|
52
|
+
|
|
53
|
+
# Create test crate
|
|
54
|
+
mkdir -p test/src
|
|
55
|
+
cat > test/Nargo.toml << TEOF
|
|
56
|
+
[package]
|
|
57
|
+
name = "${package_name}_test"
|
|
58
|
+
type = "lib"
|
|
59
|
+
|
|
60
|
+
[dependencies]
|
|
61
|
+
aztec = { git="https://github.com/AztecProtocol/aztec-nr", tag="v${AZTEC_VERSION}", directory="aztec" }
|
|
62
|
+
${package_name} = { path = "../contract" }
|
|
63
|
+
TEOF
|
|
64
|
+
|
|
65
|
+
cat > test/src/lib.nr << 'NOIR'
|
|
66
|
+
use aztec::test::helpers::test_environment::TestEnvironment;
|
|
67
|
+
use __PACKAGE_NAME__::Main;
|
|
68
|
+
|
|
69
|
+
#[test]
|
|
70
|
+
unconstrained fn test_constructor() {
|
|
71
|
+
let mut env = TestEnvironment::new();
|
|
72
|
+
let deployer = env.create_light_account();
|
|
73
|
+
|
|
74
|
+
// Deploy the contract with the default constructor:
|
|
75
|
+
let contract_address = env.deploy("@__PACKAGE_NAME__/Main").with_private_initializer(
|
|
76
|
+
deployer,
|
|
77
|
+
Main::interface().constructor(),
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
// Deploy without an initializer:
|
|
81
|
+
let contract_address = env.deploy("@__PACKAGE_NAME__/Main").without_initializer();
|
|
82
|
+
}
|
|
83
|
+
NOIR
|
|
84
|
+
|
|
85
|
+
sed -i "s/__PACKAGE_NAME__/${package_name}/g" test/src/lib.nr
|
|
86
|
+
|
|
87
|
+
# Create README
|
|
88
|
+
cat > README.md << REOF
|
|
89
|
+
# ${package_name}
|
|
90
|
+
|
|
91
|
+
An Aztec Noir contract project.
|
|
92
|
+
|
|
93
|
+
## Compile
|
|
94
|
+
|
|
95
|
+
\`\`\`bash
|
|
96
|
+
aztec compile
|
|
97
|
+
\`\`\`
|
|
98
|
+
|
|
99
|
+
This compiles the contract in \`contract/\` and outputs artifacts to \`target/\`.
|
|
100
|
+
|
|
101
|
+
## Test
|
|
102
|
+
|
|
103
|
+
\`\`\`bash
|
|
104
|
+
aztec test
|
|
105
|
+
\`\`\`
|
|
106
|
+
|
|
107
|
+
This runs the tests in \`test/\`.
|
|
108
|
+
|
|
109
|
+
## Generate TypeScript bindings
|
|
110
|
+
|
|
111
|
+
\`\`\`bash
|
|
112
|
+
aztec codegen target -o src/artifacts
|
|
113
|
+
\`\`\`
|
|
114
|
+
|
|
115
|
+
This generates TypeScript contract artifacts from the compiled output in \`target/\` into \`src/artifacts/\`.
|
|
116
|
+
REOF
|
|
117
|
+
|
|
118
|
+
# Create .gitignore
|
|
119
|
+
cat > .gitignore << 'GEOF'
|
|
120
|
+
target/
|
|
121
|
+
codegenCache.json
|
|
122
|
+
GEOF
|
|
123
|
+
|
|
124
|
+
echo "Created Aztec contract workspace with crates '${package_name}' and '${package_name}_test'"
|