@aztec/aztec 0.0.1-commit.358457c → 0.0.1-commit.381b1a9

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.
Files changed (60) hide show
  1. package/dest/bin/index.js +2 -2
  2. package/dest/cli/aztec_start_action.d.ts +1 -1
  3. package/dest/cli/aztec_start_action.d.ts.map +1 -1
  4. package/dest/cli/aztec_start_action.js +11 -6
  5. package/dest/cli/aztec_start_options.d.ts +1 -1
  6. package/dest/cli/aztec_start_options.d.ts.map +1 -1
  7. package/dest/cli/aztec_start_options.js +1 -2
  8. package/dest/cli/cmds/compile.d.ts +1 -1
  9. package/dest/cli/cmds/compile.d.ts.map +1 -1
  10. package/dest/cli/cmds/compile.js +0 -92
  11. package/dest/cli/cmds/standby.d.ts +32 -0
  12. package/dest/cli/cmds/standby.d.ts.map +1 -0
  13. package/dest/cli/cmds/standby.js +97 -0
  14. package/dest/cli/cmds/start_node.d.ts +3 -2
  15. package/dest/cli/cmds/start_node.d.ts.map +1 -1
  16. package/dest/cli/cmds/start_node.js +21 -17
  17. package/dest/cli/cmds/start_prover_broker.d.ts +1 -1
  18. package/dest/cli/cmds/start_prover_broker.d.ts.map +1 -1
  19. package/dest/cli/cmds/start_prover_broker.js +12 -6
  20. package/dest/cli/util.d.ts +3 -5
  21. package/dest/cli/util.d.ts.map +1 -1
  22. package/dest/cli/util.js +37 -78
  23. package/dest/examples/token.js +4 -4
  24. package/dest/local-network/banana_fpc.js +1 -1
  25. package/dest/local-network/local-network.d.ts +1 -1
  26. package/dest/local-network/local-network.d.ts.map +1 -1
  27. package/dest/local-network/local-network.js +18 -5
  28. package/dest/testing/epoch_test_settler.d.ts +1 -1
  29. package/dest/testing/epoch_test_settler.d.ts.map +1 -1
  30. package/dest/testing/epoch_test_settler.js +3 -4
  31. package/dest/testing/index.d.ts +2 -1
  32. package/dest/testing/index.d.ts.map +1 -1
  33. package/dest/testing/index.js +1 -0
  34. package/dest/testing/token_allowed_setup.d.ts +7 -0
  35. package/dest/testing/token_allowed_setup.d.ts.map +1 -0
  36. package/dest/testing/token_allowed_setup.js +20 -0
  37. package/package.json +34 -34
  38. package/scripts/aztec.sh +1 -0
  39. package/scripts/init.sh +13 -23
  40. package/scripts/new.sh +16 -17
  41. package/scripts/setup_project.sh +31 -0
  42. package/src/bin/index.ts +2 -2
  43. package/src/cli/aztec_start_action.ts +9 -6
  44. package/src/cli/aztec_start_options.ts +1 -2
  45. package/src/cli/cmds/compile.ts +0 -104
  46. package/src/cli/cmds/standby.ts +132 -0
  47. package/src/cli/cmds/start_node.ts +32 -24
  48. package/src/cli/cmds/start_prover_broker.ts +14 -14
  49. package/src/cli/util.ts +41 -74
  50. package/src/examples/token.ts +6 -4
  51. package/src/local-network/banana_fpc.ts +1 -1
  52. package/src/local-network/local-network.ts +13 -3
  53. package/src/testing/epoch_test_settler.ts +3 -4
  54. package/src/testing/index.ts +1 -0
  55. package/src/testing/token_allowed_setup.ts +19 -0
  56. package/dest/cli/release_version.d.ts +0 -2
  57. package/dest/cli/release_version.d.ts.map +0 -1
  58. package/dest/cli/release_version.js +0 -14
  59. package/scripts/setup_workspace.sh +0 -124
  60. package/src/cli/release_version.ts +0 -21
@@ -32,7 +32,9 @@ async function main() {
32
32
  logger.info(`Fetched Alice and Bob accounts: ${alice.toString()}, ${bob.toString()}`);
33
33
 
34
34
  logger.info('Deploying Token...');
35
- const token = await TokenContract.deploy(wallet, alice, 'TokenName', 'TokenSymbol', 18).send({ from: alice });
35
+ const { contract: token } = await TokenContract.deploy(wallet, alice, 'TokenName', 'TokenSymbol', 18).send({
36
+ from: alice,
37
+ });
36
38
  logger.info('Token deployed');
37
39
 
38
40
  // Mint tokens to Alice
@@ -41,7 +43,7 @@ async function main() {
41
43
 
42
44
  logger.info(`${ALICE_MINT_BALANCE} tokens were successfully minted by Alice and transferred to private`);
43
45
 
44
- const balanceAfterMint = await token.methods.balance_of_private(alice).simulate({ from: alice });
46
+ const { result: balanceAfterMint } = await token.methods.balance_of_private(alice).simulate({ from: alice });
45
47
  logger.info(`Tokens successfully minted. New Alice's balance: ${balanceAfterMint}`);
46
48
 
47
49
  // We will now transfer tokens from Alice to Bob
@@ -49,10 +51,10 @@ async function main() {
49
51
  await token.methods.transfer(bob, TRANSFER_AMOUNT).send({ from: alice });
50
52
 
51
53
  // Check the new balances
52
- const aliceBalance = await token.methods.balance_of_private(alice).simulate({ from: alice });
54
+ const { result: aliceBalance } = await token.methods.balance_of_private(alice).simulate({ from: alice });
53
55
  logger.info(`Alice's balance ${aliceBalance}`);
54
56
 
55
- const bobBalance = await token.methods.balance_of_private(bob).simulate({ from: bob });
57
+ const { result: bobBalance } = await token.methods.balance_of_private(bob).simulate({ from: bob });
56
58
  logger.info(`Bob's balance ${bobBalance}`);
57
59
  }
58
60
 
@@ -48,7 +48,7 @@ export async function getBananaFPCAddress(initialAccounts: InitialAccountData[])
48
48
  export async function setupBananaFPC(initialAccounts: InitialAccountData[], wallet: Wallet, log: LogFn) {
49
49
  const bananaCoinAddress = await getBananaCoinAddress(initialAccounts);
50
50
  const admin = getBananaAdmin(initialAccounts);
51
- const [bananaCoin, fpc] = await Promise.all([
51
+ const [{ contract: bananaCoin }, { contract: fpc }] = await Promise.all([
52
52
  TokenContract.deploy(wallet, admin, bananaCoinArgs.name, bananaCoinArgs.symbol, bananaCoinArgs.decimal).send({
53
53
  from: admin,
54
54
  contractAddressSalt: BANANA_COIN_SALT,
@@ -19,6 +19,7 @@ import { DateProvider, TestDateProvider } from '@aztec/foundation/timer';
19
19
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
20
20
  import { protocolContractsHash } from '@aztec/protocol-contracts';
21
21
  import { SequencerState } from '@aztec/sequencer-client';
22
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
22
23
  import type { ProvingJobBroker } from '@aztec/stdlib/interfaces/server';
23
24
  import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
24
25
  import {
@@ -38,6 +39,7 @@ import { createAccountLogs } from '../cli/util.js';
38
39
  import { DefaultMnemonic } from '../mnemonic.js';
39
40
  import { AnvilTestWatcher } from '../testing/anvil_test_watcher.js';
40
41
  import { EpochTestSettler } from '../testing/epoch_test_settler.js';
42
+ import { getTokenAllowedSetupFunctions } from '../testing/token_allowed_setup.js';
41
43
  import { getBananaFPCAddress, setupBananaFPC } from './banana_fpc.js';
42
44
  import { getSponsoredFPCAddress } from './sponsored_fpc.js';
43
45
 
@@ -101,9 +103,14 @@ export async function createLocalNetwork(config: Partial<LocalNetworkConfig> = {
101
103
  logger.warn(`Multiple L1 RPC URLs provided. Local networks will only use the first one: ${l1RpcUrl}`);
102
104
  }
103
105
 
106
+ // The local network deploys a banana FPC with Token contracts, so include Token entries
107
+ // in the setup allowlist so FPC-based fee payments work out of the box.
108
+ const tokenAllowList = await getTokenAllowedSetupFunctions();
109
+
104
110
  const aztecNodeConfig: AztecNodeConfig = {
105
111
  ...getConfigEnvVars(),
106
112
  ...config,
113
+ txPublicSetupAllowListExtend: [...tokenAllowList, ...(config.txPublicSetupAllowListExtend ?? [])],
107
114
  };
108
115
  const hdAccount = mnemonicToAccount(config.l1Mnemonic || DefaultMnemonic);
109
116
  if (
@@ -138,9 +145,12 @@ export async function createLocalNetwork(config: Partial<LocalNetworkConfig> = {
138
145
 
139
146
  const bananaFPC = await getBananaFPCAddress(initialAccounts);
140
147
  const sponsoredFPC = await getSponsoredFPCAddress();
141
- const fundedAddresses = initialAccounts.length
142
- ? [...initialAccounts.map(a => a.address), bananaFPC, sponsoredFPC]
143
- : [];
148
+ const prefundAddresses = (aztecNodeConfig.prefundAddresses ?? []).map(a => AztecAddress.fromString(a));
149
+ const fundedAddresses = [
150
+ ...initialAccounts.map(a => a.address),
151
+ ...(initialAccounts.length ? [bananaFPC, sponsoredFPC] : []),
152
+ ...prefundAddresses,
153
+ ];
144
154
  const { genesisArchiveRoot, prefilledPublicData, fundingNeeded } = await getGenesisValues(fundedAddresses);
145
155
 
146
156
  const dateProvider = new TestDateProvider();
@@ -4,7 +4,7 @@ import { type EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
4
4
  import type { Logger } from '@aztec/foundation/log';
5
5
  import { EpochMonitor } from '@aztec/prover-node';
6
6
  import type { EthAddress, L2BlockSource } from '@aztec/stdlib/block';
7
- import { computeL2ToL1MembershipWitnessFromMessagesInEpoch } from '@aztec/stdlib/messaging';
7
+ import { computeEpochOutHash } from '@aztec/stdlib/messaging';
8
8
 
9
9
  export class EpochTestSettler {
10
10
  private rollupCheatCodes: RollupCheatCodes;
@@ -51,9 +51,8 @@ export class EpochTestSettler {
51
51
  messagesInEpoch[checkpointIndex].push(block.body.txEffects.map(txEffect => txEffect.l2ToL1Msgs));
52
52
  }
53
53
 
54
- const [firstMessage] = messagesInEpoch.flat(3);
55
- if (firstMessage) {
56
- const { root: outHash } = computeL2ToL1MembershipWitnessFromMessagesInEpoch(messagesInEpoch, firstMessage);
54
+ const outHash = computeEpochOutHash(messagesInEpoch);
55
+ if (!outHash.isZero()) {
57
56
  await this.rollupCheatCodes.insertOutbox(epoch, outHash.toBigInt());
58
57
  } else {
59
58
  this.log.info(`No L2 to L1 messages in epoch ${epoch}`);
@@ -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,19 @@
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
+ import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
5
+
6
+ /**
7
+ * Returns Token-specific allowlist entries needed for FPC-based fee payments.
8
+ * These are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
9
+ */
10
+ export async function getTokenAllowedSetupFunctions(): Promise<AllowedElement[]> {
11
+ const tokenClassId = (await getContractClassFromArtifact(TokenContractArtifact)).id;
12
+ const target = { classId: tokenClassId };
13
+ return Promise.all([
14
+ // Token: needed for private transfers via FPC (transfer_to_public enqueues this)
15
+ buildAllowedElement(TokenContractArtifact, target, '_increase_public_balance', { onlySelf: true }),
16
+ // Token: needed for public transfers via FPC (fee_entrypoint_public enqueues this)
17
+ buildAllowedElement(TokenContractArtifact, target, 'transfer_in_public'),
18
+ ]);
19
+ }
@@ -1,2 +0,0 @@
1
- export declare const getCliVersion: () => any;
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsZWFzZV92ZXJzaW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL3JlbGVhc2VfdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxlQUFPLE1BQU0sYUFBYSxXQWV6QixDQUFDIn0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"release_version.d.ts","sourceRoot":"","sources":["../../src/cli/release_version.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,aAAa,WAezB,CAAC"}
@@ -1,14 +0,0 @@
1
- import { fileURLToPath } from '@aztec/foundation/url';
2
- import { readFileSync } from 'fs';
3
- import { dirname, resolve } from 'path';
4
- export const getCliVersion = ()=>{
5
- const packageJsonPath = resolve(dirname(fileURLToPath(import.meta.url)), '../../package.json');
6
- const cliVersion = JSON.parse(readFileSync(packageJsonPath).toString()).version;
7
- // If the version is 0.1.0, this is a placeholder version and we are in a docker container; query release please for the latest version
8
- if (cliVersion === '0.1.0') {
9
- const releasePleasePath = resolve(dirname(fileURLToPath(import.meta.url)), '../../../../.release-please-manifest.json');
10
- const releaseVersion = JSON.parse(readFileSync(releasePleasePath).toString())['.'];
11
- return releaseVersion;
12
- }
13
- return cliVersion;
14
- };
@@ -1,124 +0,0 @@
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'"
@@ -1,21 +0,0 @@
1
- import { fileURLToPath } from '@aztec/foundation/url';
2
-
3
- import { readFileSync } from 'fs';
4
- import { dirname, resolve } from 'path';
5
-
6
- export const getCliVersion = () => {
7
- const packageJsonPath = resolve(dirname(fileURLToPath(import.meta.url)), '../../package.json');
8
- const cliVersion: string = JSON.parse(readFileSync(packageJsonPath).toString()).version;
9
-
10
- // If the version is 0.1.0, this is a placeholder version and we are in a docker container; query release please for the latest version
11
- if (cliVersion === '0.1.0') {
12
- const releasePleasePath = resolve(
13
- dirname(fileURLToPath(import.meta.url)),
14
- '../../../../.release-please-manifest.json',
15
- );
16
- const releaseVersion = JSON.parse(readFileSync(releasePleasePath).toString())['.'];
17
- return releaseVersion;
18
- }
19
-
20
- return cliVersion;
21
- };