@aztec/cli 0.0.1-commit.b655e406 → 0.0.1-commit.bf2612ae

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 (172) hide show
  1. package/README.md +1 -1
  2. package/dest/cmds/aztec_node/block_number.d.ts +1 -1
  3. package/dest/cmds/aztec_node/get_block.d.ts +1 -1
  4. package/dest/cmds/aztec_node/get_block.d.ts.map +1 -1
  5. package/dest/cmds/aztec_node/get_block.js +2 -1
  6. package/dest/cmds/aztec_node/get_current_min_fee.d.ts +3 -0
  7. package/dest/cmds/aztec_node/get_current_min_fee.d.ts.map +1 -0
  8. package/dest/cmds/aztec_node/{get_current_base_fee.js → get_current_min_fee.js} +2 -2
  9. package/dest/cmds/aztec_node/get_l1_to_l2_message_witness.d.ts +1 -1
  10. package/dest/cmds/aztec_node/get_logs.d.ts +3 -2
  11. package/dest/cmds/aztec_node/get_logs.d.ts.map +1 -1
  12. package/dest/cmds/aztec_node/get_node_info.d.ts +1 -1
  13. package/dest/cmds/aztec_node/index.d.ts +1 -1
  14. package/dest/cmds/aztec_node/index.js +3 -3
  15. package/dest/cmds/contracts/index.d.ts +1 -1
  16. package/dest/cmds/contracts/inspect_contract.d.ts +1 -1
  17. package/dest/cmds/contracts/inspect_contract.d.ts.map +1 -1
  18. package/dest/cmds/contracts/inspect_contract.js +4 -10
  19. package/dest/cmds/contracts/parse_parameter_struct.d.ts +1 -1
  20. package/dest/cmds/infrastructure/index.d.ts +1 -1
  21. package/dest/cmds/infrastructure/index.d.ts.map +1 -1
  22. package/dest/cmds/infrastructure/index.js +0 -1
  23. package/dest/cmds/infrastructure/sequencers.d.ts +1 -2
  24. package/dest/cmds/infrastructure/sequencers.d.ts.map +1 -1
  25. package/dest/cmds/infrastructure/sequencers.js +11 -4
  26. package/dest/cmds/infrastructure/setup_l2_contract.d.ts +1 -1
  27. package/dest/cmds/infrastructure/setup_l2_contract.js +1 -1
  28. package/dest/cmds/l1/advance_epoch.d.ts +1 -1
  29. package/dest/cmds/l1/assume_proven_through.d.ts +3 -2
  30. package/dest/cmds/l1/assume_proven_through.d.ts.map +1 -1
  31. package/dest/cmds/l1/assume_proven_through.js +3 -4
  32. package/dest/cmds/l1/bridge_erc20.d.ts +1 -1
  33. package/dest/cmds/l1/bridge_erc20.d.ts.map +1 -1
  34. package/dest/cmds/l1/bridge_erc20.js +2 -1
  35. package/dest/cmds/l1/create_l1_account.d.ts +1 -1
  36. package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts +4 -0
  37. package/dest/cmds/l1/deploy_l1_contracts_cmd.d.ts.map +1 -0
  38. package/dest/cmds/l1/{deploy_l1_contracts.js → deploy_l1_contracts_cmd.js} +39 -4
  39. package/dest/cmds/l1/deploy_new_rollup.d.ts +4 -4
  40. package/dest/cmds/l1/deploy_new_rollup.d.ts.map +1 -1
  41. package/dest/cmds/l1/deploy_new_rollup.js +3 -3
  42. package/dest/cmds/l1/get_l1_addresses.d.ts +1 -1
  43. package/dest/cmds/l1/get_l1_addresses.d.ts.map +1 -1
  44. package/dest/cmds/l1/get_l1_addresses.js +5 -2
  45. package/dest/cmds/l1/get_l1_balance.d.ts +1 -1
  46. package/dest/cmds/l1/get_l1_balance.js +4 -2
  47. package/dest/cmds/l1/governance_utils.d.ts +5 -5
  48. package/dest/cmds/l1/governance_utils.d.ts.map +1 -1
  49. package/dest/cmds/l1/governance_utils.js +3 -1
  50. package/dest/cmds/l1/index.d.ts +1 -2
  51. package/dest/cmds/l1/index.d.ts.map +1 -1
  52. package/dest/cmds/l1/index.js +13 -10
  53. package/dest/cmds/l1/prover_stats.d.ts +1 -1
  54. package/dest/cmds/l1/prover_stats.d.ts.map +1 -1
  55. package/dest/cmds/l1/prover_stats.js +32 -30
  56. package/dest/cmds/l1/trigger_seed_snapshot.d.ts +2 -2
  57. package/dest/cmds/l1/trigger_seed_snapshot.d.ts.map +1 -1
  58. package/dest/cmds/l1/trigger_seed_snapshot.js +2 -1
  59. package/dest/cmds/l1/update_l1_validators.d.ts +7 -7
  60. package/dest/cmds/l1/update_l1_validators.d.ts.map +1 -1
  61. package/dest/cmds/l1/update_l1_validators.js +54 -15
  62. package/dest/cmds/misc/compute_selector.d.ts +1 -1
  63. package/dest/cmds/misc/example_contracts.d.ts +1 -1
  64. package/dest/cmds/misc/generate_bootnode_enr.d.ts +1 -1
  65. package/dest/cmds/misc/generate_p2p_private_key.d.ts +1 -1
  66. package/dest/cmds/misc/generate_secret_and_hash.d.ts +1 -1
  67. package/dest/cmds/misc/generate_secret_and_hash.js +1 -1
  68. package/dest/cmds/misc/generate_secret_key.d.ts +1 -1
  69. package/dest/cmds/misc/get_canonical_sponsored_fpc_address.d.ts +1 -1
  70. package/dest/cmds/misc/index.d.ts +1 -1
  71. package/dest/cmds/misc/index.d.ts.map +1 -1
  72. package/dest/cmds/misc/index.js +1 -1
  73. package/dest/cmds/misc/update/common.d.ts +1 -1
  74. package/dest/cmds/misc/update/github.d.ts +1 -1
  75. package/dest/cmds/misc/update/noir.d.ts +1 -1
  76. package/dest/cmds/misc/update/npm.d.ts +1 -1
  77. package/dest/cmds/misc/update/npm.js +1 -1
  78. package/dest/cmds/misc/update/utils.d.ts +1 -1
  79. package/dest/cmds/misc/update.d.ts +1 -1
  80. package/dest/cmds/validator_keys/add.d.ts +1 -1
  81. package/dest/cmds/validator_keys/add.d.ts.map +1 -1
  82. package/dest/cmds/validator_keys/add.js +20 -7
  83. package/dest/cmds/validator_keys/generate_bls_keypair.d.ts +1 -1
  84. package/dest/cmds/validator_keys/generate_bls_keypair.d.ts.map +1 -1
  85. package/dest/cmds/validator_keys/generate_bls_keypair.js +3 -2
  86. package/dest/cmds/validator_keys/index.d.ts +1 -1
  87. package/dest/cmds/validator_keys/index.d.ts.map +1 -1
  88. package/dest/cmds/validator_keys/index.js +16 -4
  89. package/dest/cmds/validator_keys/new.d.ts +7 -4
  90. package/dest/cmds/validator_keys/new.d.ts.map +1 -1
  91. package/dest/cmds/validator_keys/new.js +90 -16
  92. package/dest/cmds/validator_keys/shared.d.ts +4 -4
  93. package/dest/cmds/validator_keys/shared.d.ts.map +1 -1
  94. package/dest/cmds/validator_keys/shared.js +31 -28
  95. package/dest/cmds/validator_keys/staker.d.ts +38 -0
  96. package/dest/cmds/validator_keys/staker.d.ts.map +1 -0
  97. package/dest/cmds/validator_keys/staker.js +210 -0
  98. package/dest/cmds/validator_keys/utils.d.ts +25 -0
  99. package/dest/cmds/validator_keys/utils.d.ts.map +1 -0
  100. package/dest/cmds/validator_keys/utils.js +52 -0
  101. package/dest/config/cached_fetch.d.ts +1 -1
  102. package/dest/config/chain_l2_config.d.ts +13 -38
  103. package/dest/config/chain_l2_config.d.ts.map +1 -1
  104. package/dest/config/chain_l2_config.js +33 -463
  105. package/dest/config/enrich_env.d.ts +1 -1
  106. package/dest/config/generated/networks.d.ts +205 -0
  107. package/dest/config/generated/networks.d.ts.map +1 -0
  108. package/dest/config/generated/networks.js +206 -0
  109. package/dest/config/get_l1_config.d.ts +3 -2
  110. package/dest/config/get_l1_config.d.ts.map +1 -1
  111. package/dest/config/get_l1_config.js +3 -1
  112. package/dest/config/index.d.ts +1 -1
  113. package/dest/config/network_config.d.ts +7 -4
  114. package/dest/config/network_config.d.ts.map +1 -1
  115. package/dest/config/network_config.js +65 -29
  116. package/dest/utils/aztec.d.ts +7 -13
  117. package/dest/utils/aztec.d.ts.map +1 -1
  118. package/dest/utils/aztec.js +19 -40
  119. package/dest/utils/commands.d.ts +8 -7
  120. package/dest/utils/commands.d.ts.map +1 -1
  121. package/dest/utils/commands.js +6 -5
  122. package/dest/utils/encoding.d.ts +1 -1
  123. package/dest/utils/encoding.js +1 -1
  124. package/dest/utils/github.d.ts +1 -1
  125. package/dest/utils/index.d.ts +1 -1
  126. package/dest/utils/inspect.d.ts +3 -2
  127. package/dest/utils/inspect.d.ts.map +1 -1
  128. package/dest/utils/inspect.js +4 -1
  129. package/dest/utils/setup_contracts.d.ts +1 -1
  130. package/package.json +44 -31
  131. package/public_include_metric_prefixes.json +1 -0
  132. package/src/cmds/aztec_node/get_block.ts +2 -1
  133. package/src/cmds/aztec_node/{get_current_base_fee.ts → get_current_min_fee.ts} +2 -2
  134. package/src/cmds/aztec_node/get_logs.ts +3 -2
  135. package/src/cmds/aztec_node/index.ts +3 -3
  136. package/src/cmds/contracts/inspect_contract.ts +4 -11
  137. package/src/cmds/infrastructure/index.ts +0 -1
  138. package/src/cmds/infrastructure/sequencers.ts +7 -5
  139. package/src/cmds/infrastructure/setup_l2_contract.ts +1 -1
  140. package/src/cmds/l1/assume_proven_through.ts +4 -4
  141. package/src/cmds/l1/bridge_erc20.ts +2 -1
  142. package/src/cmds/l1/{deploy_l1_contracts.ts → deploy_l1_contracts_cmd.ts} +39 -22
  143. package/src/cmds/l1/deploy_new_rollup.ts +4 -9
  144. package/src/cmds/l1/get_l1_addresses.ts +4 -2
  145. package/src/cmds/l1/get_l1_balance.ts +2 -2
  146. package/src/cmds/l1/governance_utils.ts +3 -8
  147. package/src/cmds/l1/index.ts +12 -21
  148. package/src/cmds/l1/prover_stats.ts +42 -31
  149. package/src/cmds/l1/trigger_seed_snapshot.ts +2 -1
  150. package/src/cmds/l1/update_l1_validators.ts +48 -27
  151. package/src/cmds/misc/generate_secret_and_hash.ts +1 -1
  152. package/src/cmds/misc/index.ts +1 -1
  153. package/src/cmds/misc/update/npm.ts +1 -1
  154. package/src/cmds/validator_keys/add.ts +20 -10
  155. package/src/cmds/validator_keys/generate_bls_keypair.ts +3 -2
  156. package/src/cmds/validator_keys/index.ts +67 -21
  157. package/src/cmds/validator_keys/new.ts +110 -23
  158. package/src/cmds/validator_keys/shared.ts +32 -27
  159. package/src/cmds/validator_keys/staker.ts +301 -0
  160. package/src/cmds/validator_keys/utils.ts +81 -0
  161. package/src/config/chain_l2_config.ts +34 -604
  162. package/src/config/generated/networks.ts +210 -0
  163. package/src/config/get_l1_config.ts +4 -1
  164. package/src/config/network_config.ts +75 -30
  165. package/src/utils/aztec.ts +24 -83
  166. package/src/utils/commands.ts +6 -5
  167. package/src/utils/encoding.ts +1 -1
  168. package/src/utils/inspect.ts +6 -2
  169. package/dest/cmds/aztec_node/get_current_base_fee.d.ts +0 -3
  170. package/dest/cmds/aztec_node/get_current_base_fee.d.ts.map +0 -1
  171. package/dest/cmds/l1/deploy_l1_contracts.d.ts +0 -4
  172. package/dest/cmds/l1/deploy_l1_contracts.d.ts.map +0 -1
@@ -0,0 +1,210 @@
1
+ // Auto-generated from spartan/environments/network-defaults.yml
2
+ // Do not edit manually - run yarn generate to regenerate
3
+
4
+ export const devnetConfig = {
5
+ ETHEREUM_SLOT_DURATION: 12,
6
+ AZTEC_SLOT_DURATION: 36,
7
+ AZTEC_TARGET_COMMITTEE_SIZE: 48,
8
+ AZTEC_ACTIVATION_THRESHOLD: 100000000000000000000,
9
+ AZTEC_EJECTION_THRESHOLD: 50000000000000000000,
10
+ AZTEC_LOCAL_EJECTION_THRESHOLD: 98000000000000000000,
11
+ AZTEC_EXIT_DELAY_SECONDS: 172800,
12
+ AZTEC_INBOX_LAG: 1,
13
+ AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
14
+ AZTEC_MANA_TARGET: 100000000,
15
+ AZTEC_PROVING_COST_PER_MANA: 100,
16
+ AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
17
+ AZTEC_SLASHER_FLAVOR: 'tally',
18
+ AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
19
+ AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 5,
20
+ AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
21
+ AZTEC_SLASHING_VETOER: '0x0000000000000000000000000000000000000000',
22
+ AZTEC_SLASHING_DISABLE_DURATION: 432000,
23
+ AZTEC_SLASH_AMOUNT_SMALL: 10000000000000000000,
24
+ AZTEC_SLASH_AMOUNT_MEDIUM: 20000000000000000000,
25
+ AZTEC_SLASH_AMOUNT_LARGE: 50000000000000000000,
26
+ AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 300,
27
+ SLASH_MIN_PENALTY_PERCENTAGE: 0.5,
28
+ SLASH_MAX_PENALTY_PERCENTAGE: 2,
29
+ SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
30
+ SLASH_MAX_PAYLOAD_SIZE: 50,
31
+ SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
32
+ P2P_ENABLED: true,
33
+ BOOTSTRAP_NODES: '',
34
+ SEQ_MIN_TX_PER_BLOCK: 0,
35
+ SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
36
+ DATA_STORE_MAP_SIZE_KB: 134217728,
37
+ ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
38
+ NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
39
+ NULLIFIER_TREE_MAP_SIZE_KB: 1073741824,
40
+ PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
41
+ PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
42
+ SENTINEL_ENABLED: true,
43
+ AZTEC_EPOCH_DURATION: 8,
44
+ AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 1,
45
+ AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 1,
46
+ AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 1,
47
+ L1_CHAIN_ID: 11155111,
48
+ TEST_ACCOUNTS: true,
49
+ SPONSORED_FPC: true,
50
+ TRANSACTIONS_DISABLED: false,
51
+ SEQ_MAX_TX_PER_BLOCK: 32,
52
+ PROVER_REAL_PROOFS: false,
53
+ PXE_PROVER_ENABLED: false,
54
+ SYNC_SNAPSHOTS_URLS: '',
55
+ SKIP_ARCHIVER_INITIAL_SYNC: false,
56
+ BLOB_ALLOW_EMPTY_SOURCES: false,
57
+ P2P_MAX_PENDING_TX_COUNT: 1000,
58
+ P2P_TX_POOL_DELETE_TXS_AFTER_REORG: false,
59
+ AUTO_UPDATE: 'none',
60
+ AUTO_UPDATE_URL: '',
61
+ PUBLIC_OTEL_OPT_OUT: true,
62
+ PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: '',
63
+ PUBLIC_OTEL_COLLECT_FROM: '',
64
+ SLASH_PRUNE_PENALTY: 10000000000000000000,
65
+ SLASH_DATA_WITHHOLDING_PENALTY: 10000000000000000000,
66
+ SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.9,
67
+ SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 1,
68
+ SLASH_INACTIVITY_PENALTY: 10000000000000000000,
69
+ SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 10000000000000000000,
70
+ SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY: 10000000000000000000,
71
+ SLASH_UNKNOWN_PENALTY: 10000000000000000000,
72
+ SLASH_INVALID_BLOCK_PENALTY: 10000000000000000000,
73
+ SLASH_GRACE_PERIOD_L2_SLOTS: 0,
74
+ } as const;
75
+
76
+ export const testnetConfig = {
77
+ ETHEREUM_SLOT_DURATION: 12,
78
+ AZTEC_EPOCH_DURATION: 32,
79
+ AZTEC_TARGET_COMMITTEE_SIZE: 48,
80
+ AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2,
81
+ AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 2,
82
+ AZTEC_EXIT_DELAY_SECONDS: 172800,
83
+ AZTEC_INBOX_LAG: 1,
84
+ AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
85
+ AZTEC_PROVING_COST_PER_MANA: 100,
86
+ AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
87
+ AZTEC_SLASHER_FLAVOR: 'tally',
88
+ AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
89
+ AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 5,
90
+ AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
91
+ AZTEC_SLASHING_DISABLE_DURATION: 432000,
92
+ AZTEC_SLASH_AMOUNT_SMALL: 10000000000000000000,
93
+ AZTEC_SLASH_AMOUNT_MEDIUM: 20000000000000000000,
94
+ AZTEC_SLASH_AMOUNT_LARGE: 50000000000000000000,
95
+ SLASH_MIN_PENALTY_PERCENTAGE: 0.5,
96
+ SLASH_MAX_PENALTY_PERCENTAGE: 2,
97
+ SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
98
+ SLASH_MAX_PAYLOAD_SIZE: 50,
99
+ SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
100
+ P2P_ENABLED: true,
101
+ BOOTSTRAP_NODES: '',
102
+ SEQ_MIN_TX_PER_BLOCK: 0,
103
+ SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
104
+ DATA_STORE_MAP_SIZE_KB: 134217728,
105
+ ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
106
+ NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
107
+ NULLIFIER_TREE_MAP_SIZE_KB: 1073741824,
108
+ PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
109
+ PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
110
+ SENTINEL_ENABLED: true,
111
+ AZTEC_SLOT_DURATION: 72,
112
+ AZTEC_ACTIVATION_THRESHOLD: 2E+23,
113
+ AZTEC_EJECTION_THRESHOLD: 1E+23,
114
+ AZTEC_LOCAL_EJECTION_THRESHOLD: 1.99E+23,
115
+ AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 2,
116
+ AZTEC_SLASHING_VETOER: '0xdfe19Da6a717b7088621d8bBB66be59F2d78e924',
117
+ AZTEC_SLASHING_QUORUM: 33,
118
+ AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 100,
119
+ AZTEC_GOVERNANCE_PROPOSER_QUORUM: 60,
120
+ AZTEC_MANA_TARGET: 150000000,
121
+ L1_CHAIN_ID: 11155111,
122
+ TEST_ACCOUNTS: false,
123
+ SPONSORED_FPC: true,
124
+ TRANSACTIONS_DISABLED: false,
125
+ SEQ_MAX_TX_PER_BLOCK: 8,
126
+ PROVER_REAL_PROOFS: true,
127
+ P2P_TX_POOL_DELETE_TXS_AFTER_REORG: true,
128
+ SLASH_PRUNE_PENALTY: 10000000000000000000,
129
+ SLASH_DATA_WITHHOLDING_PENALTY: 10000000000000000000,
130
+ SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.9,
131
+ SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 1,
132
+ SLASH_INACTIVITY_PENALTY: 10000000000000000000,
133
+ SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 10000000000000000000,
134
+ SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY: 10000000000000000000,
135
+ SLASH_UNKNOWN_PENALTY: 10000000000000000000,
136
+ SLASH_INVALID_BLOCK_PENALTY: 10000000000000000000,
137
+ SLASH_GRACE_PERIOD_L2_SLOTS: 64,
138
+ } as const;
139
+
140
+ export const mainnetConfig = {
141
+ ETHEREUM_SLOT_DURATION: 12,
142
+ AZTEC_EPOCH_DURATION: 32,
143
+ AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2,
144
+ AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 2,
145
+ AZTEC_INBOX_LAG: 1,
146
+ AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
147
+ AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
148
+ AZTEC_SLASHER_FLAVOR: 'tally',
149
+ AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
150
+ AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
151
+ SLASH_MIN_PENALTY_PERCENTAGE: 0.5,
152
+ SLASH_MAX_PENALTY_PERCENTAGE: 2,
153
+ SLASH_OFFENSE_EXPIRATION_ROUNDS: 4,
154
+ SLASH_MAX_PAYLOAD_SIZE: 50,
155
+ SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4,
156
+ P2P_ENABLED: true,
157
+ BOOTSTRAP_NODES: '',
158
+ SEQ_MIN_TX_PER_BLOCK: 0,
159
+ SEQ_BUILD_CHECKPOINT_IF_EMPTY: true,
160
+ DATA_STORE_MAP_SIZE_KB: 134217728,
161
+ ARCHIVER_STORE_MAP_SIZE_KB: 1073741824,
162
+ NOTE_HASH_TREE_MAP_SIZE_KB: 1073741824,
163
+ NULLIFIER_TREE_MAP_SIZE_KB: 1073741824,
164
+ PUBLIC_DATA_TREE_MAP_SIZE_KB: 1073741824,
165
+ PUBLIC_OTEL_INCLUDE_METRICS: 'aztec.validator,aztec.tx_collector,aztec.mempool,aztec.p2p.gossip.agg_,aztec.ivc_verifier.agg_',
166
+ SENTINEL_ENABLED: true,
167
+ AZTEC_SLOT_DURATION: 72,
168
+ AZTEC_TARGET_COMMITTEE_SIZE: 24,
169
+ AZTEC_ACTIVATION_THRESHOLD: 2E+23,
170
+ AZTEC_EJECTION_THRESHOLD: 1E+23,
171
+ AZTEC_LOCAL_EJECTION_THRESHOLD: 1.96E+23,
172
+ AZTEC_SLASH_AMOUNT_SMALL: 2E+21,
173
+ AZTEC_SLASH_AMOUNT_MEDIUM: 2E+21,
174
+ AZTEC_SLASH_AMOUNT_LARGE: 2E+21,
175
+ AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 34,
176
+ AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 28,
177
+ AZTEC_SLASHING_VETOER: '0xBbB4aF368d02827945748b28CD4b2D42e4A37480',
178
+ AZTEC_SLASHING_QUORUM: 65,
179
+ AZTEC_GOVERNANCE_PROPOSER_QUORUM: 600,
180
+ AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 1000,
181
+ AZTEC_MANA_TARGET: 0,
182
+ AZTEC_PROVING_COST_PER_MANA: 0,
183
+ AZTEC_EXIT_DELAY_SECONDS: 345600,
184
+ AZTEC_SLASHING_DISABLE_DURATION: 259200,
185
+ L1_CHAIN_ID: 1,
186
+ TEST_ACCOUNTS: false,
187
+ SPONSORED_FPC: false,
188
+ TRANSACTIONS_DISABLED: true,
189
+ SEQ_MAX_TX_PER_BLOCK: 0,
190
+ PROVER_REAL_PROOFS: true,
191
+ SYNC_SNAPSHOTS_URLS: 'https://aztec-labs-snapshots.com/mainnet/',
192
+ BLOB_ALLOW_EMPTY_SOURCES: true,
193
+ P2P_MAX_PENDING_TX_COUNT: 0,
194
+ P2P_TX_POOL_DELETE_TXS_AFTER_REORG: true,
195
+ AUTO_UPDATE: 'notify',
196
+ AUTO_UPDATE_URL: 'https://storage.googleapis.com/aztec-mainnet/auto-update/mainnet.json',
197
+ PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: 'https://telemetry.alpha-testnet.aztec-labs.com/v1/metrics',
198
+ PUBLIC_OTEL_COLLECT_FROM: 'sequencer',
199
+ SLASH_PRUNE_PENALTY: 0,
200
+ SLASH_DATA_WITHHOLDING_PENALTY: 0,
201
+ SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.8,
202
+ SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 2,
203
+ SLASH_INACTIVITY_PENALTY: 2E+21,
204
+ SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 2E+21,
205
+ SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY: 2E+21,
206
+ SLASH_UNKNOWN_PENALTY: 2E+21,
207
+ SLASH_INVALID_BLOCK_PENALTY: 2E+21,
208
+ SLASH_GRACE_PERIOD_L2_SLOTS: 1200,
209
+ } as const;
210
+
@@ -1,4 +1,7 @@
1
- import { type L1ContractAddresses, RegistryContract, getL1ContractsConfig, getPublicClient } from '@aztec/ethereum';
1
+ import { getPublicClient } from '@aztec/ethereum/client';
2
+ import { RegistryContract } from '@aztec/ethereum/contracts';
3
+ import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
4
+ import { getL1ContractsConfig } from '@aztec/ethereum/queries';
2
5
  import { EthAddress } from '@aztec/foundation/eth-address';
3
6
 
4
7
  export async function getL1Config(
@@ -8,27 +8,67 @@ import { enrichEthAddressVar, enrichVar } from './enrich_env.js';
8
8
 
9
9
  const DEFAULT_CONFIG_URL =
10
10
  'https://raw.githubusercontent.com/AztecProtocol/networks/refs/heads/main/network_config.json';
11
+ const FALLBACK_CONFIG_URL = 'https://metadata.aztec.network/network_config.json';
11
12
  const NETWORK_CONFIG_CACHE_DURATION_MS = 60 * 60 * 1000; // 1 hour
12
13
 
13
14
  /**
14
15
  * Fetches remote network configuration from GitHub with caching support.
15
- * Uses the reusable cachedFetch utility.
16
+ * Uses the reusable cachedFetch utility. Falls back to metadata.aztec.network if the default URL fails.
16
17
  *
17
18
  * @param networkName - The network name to fetch config for
18
19
  * @param cacheDir - Optional cache directory for storing fetched config
19
- * @returns Remote configuration for the specified network, or undefined if not found/error
20
+ * @returns Remote configuration for the specified network, or undefined if network not found in config
21
+ * @throws Error if both primary and fallback URLs fail to fetch
20
22
  */
21
23
  export async function getNetworkConfig(
22
24
  networkName: NetworkNames,
23
25
  cacheDir?: string,
24
26
  ): Promise<NetworkConfig | undefined> {
25
- let url: URL | undefined;
27
+ // Try with the primary URL (env var or default)
26
28
  const configLocation = process.env.NETWORK_CONFIG_LOCATION || DEFAULT_CONFIG_URL;
27
29
 
28
- if (!configLocation) {
29
- return undefined;
30
+ let primaryError: Error | undefined;
31
+ let config: NetworkConfig | undefined;
32
+
33
+ // First try the primary config location
34
+ try {
35
+ config = await fetchNetworkConfigFromUrl(configLocation, networkName, cacheDir);
36
+ } catch (error) {
37
+ primaryError = error as Error;
30
38
  }
31
39
 
40
+ // If primary fails and we were using the default URL, try the fallback
41
+ if (!config && configLocation === DEFAULT_CONFIG_URL) {
42
+ try {
43
+ config = await fetchNetworkConfigFromUrl(FALLBACK_CONFIG_URL, networkName, cacheDir);
44
+ } catch {
45
+ // Both failed - throw the primary error
46
+ if (primaryError) {
47
+ throw primaryError;
48
+ }
49
+ }
50
+ } else if (primaryError) {
51
+ // Primary failed and no fallback to try
52
+ throw primaryError;
53
+ }
54
+
55
+ return config;
56
+ }
57
+
58
+ /**
59
+ * Helper function to fetch network config from a specific URL.
60
+ * @param configLocation - The URL or file path to fetch from
61
+ * @param networkName - The network name to fetch config for
62
+ * @param cacheDir - Optional cache directory for storing fetched config
63
+ * @returns Remote configuration for the specified network, or undefined if network not found in config, or undefined if URL invalid
64
+ * @throws Error if fetch/parse fails
65
+ */
66
+ async function fetchNetworkConfigFromUrl(
67
+ configLocation: string,
68
+ networkName: NetworkNames,
69
+ cacheDir?: string,
70
+ ): Promise<NetworkConfig | undefined> {
71
+ let url: URL | undefined;
32
72
  try {
33
73
  if (configLocation.includes('://')) {
34
74
  url = new URL(configLocation);
@@ -43,31 +83,27 @@ export async function getNetworkConfig(
43
83
  return undefined;
44
84
  }
45
85
 
46
- try {
47
- let rawConfig: any;
48
-
49
- if (url.protocol === 'http:' || url.protocol === 'https:') {
50
- rawConfig = await cachedFetch(url.href, {
51
- cacheDurationMs: NETWORK_CONFIG_CACHE_DURATION_MS,
52
- cacheFile: cacheDir ? join(cacheDir, networkName, 'network_config.json') : undefined,
53
- });
54
- } else if (url.protocol === 'file:') {
55
- rawConfig = JSON.parse(await readFile(url.pathname, 'utf-8'));
56
- } else {
57
- throw new Error('Unsupported Aztec network config protocol: ' + url.href);
58
- }
86
+ let rawConfig: any;
87
+
88
+ if (url.protocol === 'http:' || url.protocol === 'https:') {
89
+ rawConfig = await cachedFetch(url.href, {
90
+ cacheDurationMs: NETWORK_CONFIG_CACHE_DURATION_MS,
91
+ cacheFile: cacheDir ? join(cacheDir, networkName, 'network_config.json') : undefined,
92
+ });
93
+ } else if (url.protocol === 'file:') {
94
+ rawConfig = JSON.parse(await readFile(url.pathname, 'utf-8'));
95
+ } else {
96
+ throw new Error('Unsupported Aztec network config protocol: ' + url.href);
97
+ }
59
98
 
60
- if (!rawConfig) {
61
- return undefined;
62
- }
99
+ if (!rawConfig) {
100
+ return undefined;
101
+ }
63
102
 
64
- const networkConfigMap = NetworkConfigMapSchema.parse(rawConfig);
65
- if (networkName in networkConfigMap) {
66
- return networkConfigMap[networkName];
67
- } else {
68
- return undefined;
69
- }
70
- } catch {
103
+ const networkConfigMap = NetworkConfigMapSchema.parse(rawConfig);
104
+ if (networkName in networkConfigMap) {
105
+ return networkConfigMap[networkName];
106
+ } else {
71
107
  return undefined;
72
108
  }
73
109
  }
@@ -75,9 +111,11 @@ export async function getNetworkConfig(
75
111
  /**
76
112
  * Enriches environment variables with remote network configuration.
77
113
  * This function is called before node config initialization to set env vars
78
- * from the remote config, following the same pattern as enrichEnvironmentWithChainConfig().
114
+ * from the remote config.
79
115
  *
80
116
  * @param networkName - The network name to fetch remote config for
117
+ * @throws Error if network config fetch fails (network errors, parse errors, etc.)
118
+ * Does not throw if the network simply doesn't exist in the config - just returns without enriching
81
119
  */
82
120
  export async function enrichEnvironmentWithNetworkConfig(networkName: NetworkNames) {
83
121
  if (networkName === 'local') {
@@ -88,7 +126,7 @@ export async function enrichEnvironmentWithNetworkConfig(networkName: NetworkNam
88
126
  const networkConfig = await getNetworkConfig(networkName, cacheDir);
89
127
 
90
128
  if (!networkConfig) {
91
- return;
129
+ return; // Network not found in config, continue without enriching
92
130
  }
93
131
 
94
132
  enrichVar('BOOTSTRAP_NODES', networkConfig.bootnodes.join(','));
@@ -99,4 +137,11 @@ export async function enrichEnvironmentWithNetworkConfig(networkName: NetworkNam
99
137
  if (networkConfig.feeAssetHandlerAddress) {
100
138
  enrichEthAddressVar('FEE_ASSET_HANDLER_CONTRACT_ADDRESS', networkConfig.feeAssetHandlerAddress.toString());
101
139
  }
140
+
141
+ if (networkConfig.blobFileStoreUrls?.length) {
142
+ enrichVar('BLOB_FILE_STORE_URLS', networkConfig.blobFileStoreUrls.join(','));
143
+ }
144
+ if (networkConfig.blockDurationMs !== undefined) {
145
+ enrichVar('SEQ_BLOCK_DURATION_MS', String(networkConfig.blockDurationMs));
146
+ }
102
147
  }
@@ -6,23 +6,23 @@ import {
6
6
  loadContractArtifact,
7
7
  } from '@aztec/aztec.js/abi';
8
8
  import { EthAddress } from '@aztec/aztec.js/addresses';
9
- import {
10
- type DeployL1ContractsReturnType,
11
- type L1ContractsConfig,
12
- type Operator,
13
- RollupContract,
14
- } from '@aztec/ethereum';
9
+ import type { L1ContractsConfig } from '@aztec/ethereum/config';
10
+ import { RollupContract } from '@aztec/ethereum/contracts';
11
+ import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
15
12
  import { SecretValue } from '@aztec/foundation/config';
16
- import { Fr } from '@aztec/foundation/fields';
17
- import type { LogFn, Logger } from '@aztec/foundation/log';
13
+ import { Fr } from '@aztec/foundation/curves/bn254';
14
+ import { type LogFn, createLogger } from '@aztec/foundation/log';
18
15
  import type { NoirPackageConfig } from '@aztec/foundation/noir';
19
16
  import { protocolContractsHash } from '@aztec/protocol-contracts';
20
17
 
21
18
  import TOML from '@iarna/toml';
22
19
  import { readFile } from 'fs/promises';
20
+ import type { HDAccount, Hex, PrivateKeyAccount } from 'viem';
23
21
 
24
22
  import { encodeArgs } from './encoding.js';
25
23
 
24
+ const logger = createLogger('cli:utils:aztec');
25
+
26
26
  /**
27
27
  * Helper to get an ABI function or throw error if it doesn't exist.
28
28
  * @param artifact - Contract's build artifact in JSON format.
@@ -37,89 +37,32 @@ export function getFunctionAbi(artifact: ContractArtifact, fnName: string): Func
37
37
  return fn;
38
38
  }
39
39
 
40
- /**
41
- * Function to execute the 'deployRollupContracts' command.
42
- * @param rpcUrls - The RPC URL of the ethereum node.
43
- * @param chainId - The chain ID of the L1 host.
44
- * @param privateKey - The private key to be used in contract deployment.
45
- * @param mnemonic - The mnemonic to be used in contract deployment.
46
- */
47
- export async function deployAztecContracts(
48
- rpcUrls: string[],
49
- chainId: number,
50
- privateKey: string | undefined,
51
- mnemonic: string,
52
- mnemonicIndex: number,
53
- salt: number | undefined,
54
- initialValidators: Operator[],
55
- genesisArchiveRoot: Fr,
56
- feeJuicePortalInitialBalance: bigint,
57
- acceleratedTestDeployments: boolean,
58
- config: L1ContractsConfig,
59
- existingToken: EthAddress | undefined,
60
- realVerifier: boolean,
61
- createVerificationJson: string | false,
62
- debugLogger: Logger,
63
- ): Promise<DeployL1ContractsReturnType> {
64
- const { createEthereumChain, deployL1Contracts } = await import('@aztec/ethereum');
65
- const { mnemonicToAccount, privateKeyToAccount } = await import('viem/accounts');
66
-
67
- const account = !privateKey
68
- ? mnemonicToAccount(mnemonic!, { addressIndex: mnemonicIndex })
69
- : privateKeyToAccount(addLeadingHex(privateKey));
70
- const chain = createEthereumChain(rpcUrls, chainId);
71
-
72
- const { getVKTreeRoot } = await import('@aztec/noir-protocol-circuits-types/vk-tree');
73
-
74
- const result = await deployL1Contracts(
75
- chain.rpcUrls,
76
- account,
77
- chain.chainInfo,
78
- debugLogger,
79
- {
80
- vkTreeRoot: getVKTreeRoot(),
81
- protocolContractsHash,
82
- genesisArchiveRoot,
83
- salt,
84
- initialValidators,
85
- acceleratedTestDeployments,
86
- feeJuicePortalInitialBalance,
87
- realVerifier,
88
- existingTokenAddress: existingToken,
89
- ...config,
90
- },
91
- config,
92
- createVerificationJson,
93
- );
94
-
95
- return result;
96
- }
97
-
98
40
  export async function deployNewRollupContracts(
99
41
  registryAddress: EthAddress,
100
42
  rpcUrls: string[],
101
- chainId: number,
102
43
  privateKey: string | undefined,
44
+ chainId: number,
103
45
  mnemonic: string,
104
46
  mnemonicIndex: number,
105
- salt: number | undefined,
106
47
  initialValidators: Operator[],
107
48
  genesisArchiveRoot: Fr,
108
49
  feeJuicePortalInitialBalance: bigint,
109
50
  config: L1ContractsConfig,
110
51
  realVerifier: boolean,
111
- createVerificationJson: string | false,
112
- logger: Logger,
113
52
  ): Promise<{ rollup: RollupContract; slashFactoryAddress: EthAddress }> {
114
- const { createEthereumChain, deployRollupForUpgrade, createExtendedL1Client } = await import('@aztec/ethereum');
53
+ const { deployRollupForUpgrade } = await import('@aztec/ethereum/deploy-aztec-l1-contracts');
115
54
  const { mnemonicToAccount, privateKeyToAccount } = await import('viem/accounts');
116
55
  const { getVKTreeRoot } = await import('@aztec/noir-protocol-circuits-types/vk-tree');
117
56
 
118
- const account = !privateKey
119
- ? mnemonicToAccount(mnemonic!, { addressIndex: mnemonicIndex })
120
- : privateKeyToAccount(addLeadingHex(privateKey));
121
- const chain = createEthereumChain(rpcUrls, chainId);
122
- const client = createExtendedL1Client(rpcUrls, account, chain.chainInfo, undefined, mnemonicIndex);
57
+ let account: HDAccount | PrivateKeyAccount;
58
+ if (privateKey) {
59
+ account = privateKeyToAccount(addLeadingHex(privateKey));
60
+ } else {
61
+ account = mnemonicToAccount(mnemonic!, { addressIndex: mnemonicIndex });
62
+ const privateKeyBuf = account.getHdKey().privateKey;
63
+ const privateKeyHex = Buffer.from(privateKeyBuf!).toString('hex');
64
+ privateKey = `0x${privateKeyHex}`;
65
+ }
123
66
 
124
67
  if (!initialValidators || initialValidators.length === 0) {
125
68
  // initialize the new rollup with Amin's validator address.
@@ -138,9 +81,11 @@ export async function deployNewRollupContracts(
138
81
  }
139
82
 
140
83
  const { rollup, slashFactoryAddress } = await deployRollupForUpgrade(
141
- client,
84
+ privateKey as Hex,
85
+ rpcUrls[0],
86
+ chainId,
87
+ registryAddress,
142
88
  {
143
- salt,
144
89
  vkTreeRoot: getVKTreeRoot(),
145
90
  protocolContractsHash,
146
91
  genesisArchiveRoot,
@@ -149,13 +94,9 @@ export async function deployNewRollupContracts(
149
94
  realVerifier,
150
95
  ...config,
151
96
  },
152
- registryAddress,
153
- logger,
154
- config,
155
- createVerificationJson,
156
97
  );
157
98
 
158
- return { rollup, slashFactoryAddress };
99
+ return { rollup, slashFactoryAddress: EthAddress.fromString(slashFactoryAddress!) };
159
100
  }
160
101
 
161
102
  /**
@@ -1,11 +1,12 @@
1
- import { FunctionSelector } from '@aztec/aztec.js/abi';
2
- import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
3
- import { Fr } from '@aztec/aztec.js/fields';
4
- import { LogId } from '@aztec/aztec.js/log';
5
- import { TxHash } from '@aztec/aztec.js/tx';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { EthAddress } from '@aztec/foundation/eth-address';
6
3
  import type { LogFn } from '@aztec/foundation/log';
7
4
  import type { PXE } from '@aztec/pxe/server';
5
+ import { FunctionSelector } from '@aztec/stdlib/abi/function-selector';
6
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
8
7
  import { PublicKeys } from '@aztec/stdlib/keys';
8
+ import { LogId } from '@aztec/stdlib/logs/log-id';
9
+ import { TxHash } from '@aztec/stdlib/tx/tx-hash';
9
10
 
10
11
  import { type Command, CommanderError, InvalidArgumentError, Option } from 'commander';
11
12
  import { lookup } from 'dns/promises';
@@ -1,4 +1,4 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import type { ABIParameter, AbiType, StructType } from '@aztec/stdlib/abi';
3
3
 
4
4
  /**
@@ -1,10 +1,11 @@
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
1
2
  import type { LogFn } from '@aztec/foundation/log';
2
3
  import type { AztecNode } from '@aztec/stdlib/interfaces/client';
3
4
  import type { TxHash } from '@aztec/stdlib/tx';
4
5
 
5
6
  export async function inspectBlock(
6
7
  aztecNode: AztecNode,
7
- blockNumber: number,
8
+ blockNumber: BlockNumber,
8
9
  log: LogFn,
9
10
  opts: { showTxs?: boolean } = {},
10
11
  ) {
@@ -43,7 +44,10 @@ export async function inspectTx(
43
44
  const [receipt, effectsInBlock] = await Promise.all([aztecNode.getTxReceipt(txHash), aztecNode.getTxEffect(txHash)]);
44
45
  // Base tx data
45
46
  log(`Tx ${txHash.toString()}`);
46
- log(` Status: ${receipt.status} ${effectsInBlock ? `(${effectsInBlock.data.revertCode.getDescription()})` : ''}`);
47
+ log(` Status: ${receipt.status}`);
48
+ if (receipt.executionResult) {
49
+ log(` Execution result: ${receipt.executionResult}`);
50
+ }
47
51
  if (receipt.error) {
48
52
  log(` Error: ${receipt.error}`);
49
53
  }
@@ -1,3 +0,0 @@
1
- import type { LogFn, Logger } from '@aztec/foundation/log';
2
- export declare function getCurrentBaseFee(nodeUrl: string, debugLogger: Logger, log: LogFn): Promise<void>;
3
- //# sourceMappingURL=get_current_base_fee.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get_current_base_fee.d.ts","sourceRoot":"","sources":["../../../src/cmds/aztec_node/get_current_base_fee.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE3D,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,iBAIvF"}
@@ -1,4 +0,0 @@
1
- import type { EthAddress } from '@aztec/aztec.js/addresses';
2
- import type { LogFn, Logger } from '@aztec/foundation/log';
3
- export declare function deployL1Contracts(rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, salt: number | undefined, testAccounts: boolean, sponsoredFPC: boolean, acceleratedTestDeployments: boolean, json: boolean, createVerificationJson: string | false, initialValidators: EthAddress[], realVerifier: boolean, existingToken: EthAddress | undefined, log: LogFn, debugLogger: Logger): Promise<void>;
4
- //# sourceMappingURL=deploy_l1_contracts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deploy_l1_contracts.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/deploy_l1_contracts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAM3D,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,YAAY,EAAE,OAAO,EACrB,YAAY,EAAE,OAAO,EACrB,0BAA0B,EAAE,OAAO,EACnC,IAAI,EAAE,OAAO,EACb,sBAAsB,EAAE,MAAM,GAAG,KAAK,EACtC,iBAAiB,EAAE,UAAU,EAAE,EAC/B,YAAY,EAAE,OAAO,EACrB,aAAa,EAAE,UAAU,GAAG,SAAS,EACrC,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBA8DpB"}