@aztec/cli 0.0.0-test.0

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 (218) hide show
  1. package/README.md +449 -0
  2. package/dest/cmds/contracts/index.d.ts +4 -0
  3. package/dest/cmds/contracts/index.d.ts.map +1 -0
  4. package/dest/cmds/contracts/index.js +12 -0
  5. package/dest/cmds/contracts/inspect_contract.d.ts +3 -0
  6. package/dest/cmds/contracts/inspect_contract.d.ts.map +1 -0
  7. package/dest/cmds/contracts/inspect_contract.js +37 -0
  8. package/dest/cmds/contracts/parse_parameter_struct.d.ts +3 -0
  9. package/dest/cmds/contracts/parse_parameter_struct.d.ts.map +1 -0
  10. package/dest/cmds/contracts/parse_parameter_struct.js +13 -0
  11. package/dest/cmds/devnet/bootstrap_network.d.ts +3 -0
  12. package/dest/cmds/devnet/bootstrap_network.d.ts.map +1 -0
  13. package/dest/cmds/devnet/bootstrap_network.js +196 -0
  14. package/dest/cmds/devnet/faucet.d.ts +4 -0
  15. package/dest/cmds/devnet/faucet.d.ts.map +1 -0
  16. package/dest/cmds/devnet/faucet.js +26 -0
  17. package/dest/cmds/devnet/index.d.ts +4 -0
  18. package/dest/cmds/devnet/index.d.ts.map +1 -0
  19. package/dest/cmds/devnet/index.js +14 -0
  20. package/dest/cmds/infrastructure/index.d.ts +4 -0
  21. package/dest/cmds/infrastructure/index.d.ts.map +1 -0
  22. package/dest/cmds/infrastructure/index.js +24 -0
  23. package/dest/cmds/infrastructure/sequencers.d.ts +13 -0
  24. package/dest/cmds/infrastructure/sequencers.d.ts.map +1 -0
  25. package/dest/cmds/infrastructure/sequencers.js +93 -0
  26. package/dest/cmds/infrastructure/setup_l2_contract.d.ts +3 -0
  27. package/dest/cmds/infrastructure/setup_l2_contract.d.ts.map +1 -0
  28. package/dest/cmds/infrastructure/setup_l2_contract.js +43 -0
  29. package/dest/cmds/l1/advance_epoch.d.ts +3 -0
  30. package/dest/cmds/l1/advance_epoch.d.ts.map +1 -0
  31. package/dest/cmds/l1/advance_epoch.js +10 -0
  32. package/dest/cmds/l1/assume_proven_through.d.ts +3 -0
  33. package/dest/cmds/l1/assume_proven_through.d.ts.map +1 -0
  34. package/dest/cmds/l1/assume_proven_through.js +12 -0
  35. package/dest/cmds/l1/bridge_erc20.d.ts +4 -0
  36. package/dest/cmds/l1/bridge_erc20.d.ts.map +1 -0
  37. package/dest/cmds/l1/bridge_erc20.js +31 -0
  38. package/dest/cmds/l1/create_l1_account.d.ts +3 -0
  39. package/dest/cmds/l1/create_l1_account.d.ts.map +1 -0
  40. package/dest/cmds/l1/create_l1_account.js +15 -0
  41. package/dest/cmds/l1/deploy_l1_contracts.d.ts +4 -0
  42. package/dest/cmds/l1/deploy_l1_contracts.d.ts.map +1 -0
  43. package/dest/cmds/l1/deploy_l1_contracts.js +29 -0
  44. package/dest/cmds/l1/deploy_l1_verifier.d.ts +5 -0
  45. package/dest/cmds/l1/deploy_l1_verifier.d.ts.map +1 -0
  46. package/dest/cmds/l1/deploy_l1_verifier.js +54 -0
  47. package/dest/cmds/l1/deploy_new_rollup.d.ts +4 -0
  48. package/dest/cmds/l1/deploy_new_rollup.d.ts.map +1 -0
  49. package/dest/cmds/l1/deploy_new_rollup.js +19 -0
  50. package/dest/cmds/l1/get_l1_addresses.d.ts +4 -0
  51. package/dest/cmds/l1/get_l1_addresses.d.ts.map +1 -0
  52. package/dest/cmds/l1/get_l1_addresses.js +18 -0
  53. package/dest/cmds/l1/get_l1_balance.d.ts +4 -0
  54. package/dest/cmds/l1/get_l1_balance.d.ts.map +1 -0
  55. package/dest/cmds/l1/get_l1_balance.js +33 -0
  56. package/dest/cmds/l1/governance_utils.d.ts +50 -0
  57. package/dest/cmds/l1/governance_utils.d.ts.map +1 -0
  58. package/dest/cmds/l1/governance_utils.js +85 -0
  59. package/dest/cmds/l1/index.d.ts +4 -0
  60. package/dest/cmds/l1/index.d.ts.map +1 -0
  61. package/dest/cmds/l1/index.js +208 -0
  62. package/dest/cmds/l1/prover_stats.d.ts +14 -0
  63. package/dest/cmds/l1/prover_stats.d.ts.map +1 -0
  64. package/dest/cmds/l1/prover_stats.js +145 -0
  65. package/dest/cmds/l1/update_l1_validators.d.ts +30 -0
  66. package/dest/cmds/l1/update_l1_validators.d.ts.map +1 -0
  67. package/dest/cmds/l1/update_l1_validators.js +186 -0
  68. package/dest/cmds/misc/compute_selector.d.ts +3 -0
  69. package/dest/cmds/misc/compute_selector.d.ts.map +1 -0
  70. package/dest/cmds/misc/compute_selector.js +5 -0
  71. package/dest/cmds/misc/example_contracts.d.ts +3 -0
  72. package/dest/cmds/misc/example_contracts.d.ts.map +1 -0
  73. package/dest/cmds/misc/example_contracts.js +6 -0
  74. package/dest/cmds/misc/generate_bootnode_enr.d.ts +3 -0
  75. package/dest/cmds/misc/generate_bootnode_enr.d.ts.map +1 -0
  76. package/dest/cmds/misc/generate_bootnode_enr.js +5 -0
  77. package/dest/cmds/misc/generate_p2p_private_key.d.ts +3 -0
  78. package/dest/cmds/misc/generate_p2p_private_key.d.ts.map +1 -0
  79. package/dest/cmds/misc/generate_p2p_private_key.js +7 -0
  80. package/dest/cmds/misc/generate_secret_and_hash.d.ts +3 -0
  81. package/dest/cmds/misc/generate_secret_and_hash.d.ts.map +1 -0
  82. package/dest/cmds/misc/generate_secret_and_hash.js +11 -0
  83. package/dest/cmds/misc/generate_secret_key.d.ts +5 -0
  84. package/dest/cmds/misc/generate_secret_key.d.ts.map +1 -0
  85. package/dest/cmds/misc/generate_secret_key.js +6 -0
  86. package/dest/cmds/misc/index.d.ts +4 -0
  87. package/dest/cmds/misc/index.d.ts.map +1 -0
  88. package/dest/cmds/misc/index.js +44 -0
  89. package/dest/cmds/misc/setup_contracts.d.ts +7 -0
  90. package/dest/cmds/misc/setup_contracts.d.ts.map +1 -0
  91. package/dest/cmds/misc/setup_contracts.js +27 -0
  92. package/dest/cmds/misc/update/common.d.ts +17 -0
  93. package/dest/cmds/misc/update/common.d.ts.map +1 -0
  94. package/dest/cmds/misc/update/common.js +3 -0
  95. package/dest/cmds/misc/update/github.d.ts +4 -0
  96. package/dest/cmds/misc/update/github.d.ts.map +1 -0
  97. package/dest/cmds/misc/update/github.js +3 -0
  98. package/dest/cmds/misc/update/noir.d.ts +10 -0
  99. package/dest/cmds/misc/update/noir.d.ts.map +1 -0
  100. package/dest/cmds/misc/update/noir.js +45 -0
  101. package/dest/cmds/misc/update/npm.d.ts +34 -0
  102. package/dest/cmds/misc/update/npm.d.ts.map +1 -0
  103. package/dest/cmds/misc/update/npm.js +127 -0
  104. package/dest/cmds/misc/update/utils.d.ts +14 -0
  105. package/dest/cmds/misc/update/utils.d.ts.map +1 -0
  106. package/dest/cmds/misc/update/utils.js +38 -0
  107. package/dest/cmds/misc/update.d.ts +3 -0
  108. package/dest/cmds/misc/update.d.ts.map +1 -0
  109. package/dest/cmds/misc/update.js +52 -0
  110. package/dest/cmds/pxe/add_contract.d.ts +5 -0
  111. package/dest/cmds/pxe/add_contract.d.ts.map +1 -0
  112. package/dest/cmds/pxe/add_contract.js +29 -0
  113. package/dest/cmds/pxe/block_number.d.ts +3 -0
  114. package/dest/cmds/pxe/block_number.d.ts.map +1 -0
  115. package/dest/cmds/pxe/block_number.js +10 -0
  116. package/dest/cmds/pxe/get_account.d.ts +4 -0
  117. package/dest/cmds/pxe/get_account.d.ts.map +1 -0
  118. package/dest/cmds/pxe/get_account.js +10 -0
  119. package/dest/cmds/pxe/get_accounts.d.ts +3 -0
  120. package/dest/cmds/pxe/get_accounts.d.ts.map +1 -0
  121. package/dest/cmds/pxe/get_accounts.js +25 -0
  122. package/dest/cmds/pxe/get_block.d.ts +3 -0
  123. package/dest/cmds/pxe/get_block.d.ts.map +1 -0
  124. package/dest/cmds/pxe/get_block.js +9 -0
  125. package/dest/cmds/pxe/get_contract_data.d.ts +4 -0
  126. package/dest/cmds/pxe/get_contract_data.d.ts.map +1 -0
  127. package/dest/cmds/pxe/get_contract_data.js +31 -0
  128. package/dest/cmds/pxe/get_current_base_fee.d.ts +3 -0
  129. package/dest/cmds/pxe/get_current_base_fee.d.ts.map +1 -0
  130. package/dest/cmds/pxe/get_current_base_fee.js +7 -0
  131. package/dest/cmds/pxe/get_l1_to_l2_message_witness.d.ts +4 -0
  132. package/dest/cmds/pxe/get_l1_to_l2_message_witness.d.ts.map +1 -0
  133. package/dest/cmds/pxe/get_l1_to_l2_message_witness.js +11 -0
  134. package/dest/cmds/pxe/get_logs.d.ts +4 -0
  135. package/dest/cmds/pxe/get_logs.d.ts.map +1 -0
  136. package/dest/cmds/pxe/get_logs.js +51 -0
  137. package/dest/cmds/pxe/get_node_info.d.ts +3 -0
  138. package/dest/cmds/pxe/get_node_info.d.ts.map +1 -0
  139. package/dest/cmds/pxe/get_node_info.js +61 -0
  140. package/dest/cmds/pxe/get_pxe_info.d.ts +3 -0
  141. package/dest/cmds/pxe/get_pxe_info.d.ts.map +1 -0
  142. package/dest/cmds/pxe/get_pxe_info.js +11 -0
  143. package/dest/cmds/pxe/index.d.ts +4 -0
  144. package/dest/cmds/pxe/index.d.ts.map +1 -0
  145. package/dest/cmds/pxe/index.js +55 -0
  146. package/dest/utils/aztec.d.ts +68 -0
  147. package/dest/utils/aztec.d.ts.map +1 -0
  148. package/dest/utils/aztec.js +174 -0
  149. package/dest/utils/commands.d.ts +143 -0
  150. package/dest/utils/commands.d.ts.map +1 -0
  151. package/dest/utils/commands.js +303 -0
  152. package/dest/utils/encoding.d.ts +15 -0
  153. package/dest/utils/encoding.d.ts.map +1 -0
  154. package/dest/utils/encoding.js +103 -0
  155. package/dest/utils/github.d.ts +4 -0
  156. package/dest/utils/github.d.ts.map +1 -0
  157. package/dest/utils/github.js +3 -0
  158. package/dest/utils/index.d.ts +5 -0
  159. package/dest/utils/index.d.ts.map +1 -0
  160. package/dest/utils/index.js +4 -0
  161. package/dest/utils/inspect.d.ts +17 -0
  162. package/dest/utils/inspect.d.ts.map +1 -0
  163. package/dest/utils/inspect.js +177 -0
  164. package/package.json +125 -0
  165. package/src/cmds/contracts/index.ts +34 -0
  166. package/src/cmds/contracts/inspect_contract.ts +51 -0
  167. package/src/cmds/contracts/parse_parameter_struct.ts +27 -0
  168. package/src/cmds/devnet/bootstrap_network.ts +318 -0
  169. package/src/cmds/devnet/faucet.ts +33 -0
  170. package/src/cmds/devnet/index.ts +60 -0
  171. package/src/cmds/infrastructure/index.ts +55 -0
  172. package/src/cmds/infrastructure/sequencers.ts +103 -0
  173. package/src/cmds/infrastructure/setup_l2_contract.ts +47 -0
  174. package/src/cmds/l1/advance_epoch.ts +12 -0
  175. package/src/cmds/l1/assume_proven_through.ts +19 -0
  176. package/src/cmds/l1/bridge_erc20.ts +52 -0
  177. package/src/cmds/l1/create_l1_account.ts +17 -0
  178. package/src/cmds/l1/deploy_l1_contracts.ts +65 -0
  179. package/src/cmds/l1/deploy_l1_verifier.ts +105 -0
  180. package/src/cmds/l1/deploy_new_rollup.ts +58 -0
  181. package/src/cmds/l1/get_l1_addresses.ts +30 -0
  182. package/src/cmds/l1/get_l1_balance.ts +44 -0
  183. package/src/cmds/l1/governance_utils.ts +187 -0
  184. package/src/cmds/l1/index.ts +558 -0
  185. package/src/cmds/l1/prover_stats.ts +202 -0
  186. package/src/cmds/l1/update_l1_validators.ts +238 -0
  187. package/src/cmds/misc/compute_selector.ts +7 -0
  188. package/src/cmds/misc/example_contracts.ts +12 -0
  189. package/src/cmds/misc/generate_bootnode_enr.ts +12 -0
  190. package/src/cmds/misc/generate_p2p_private_key.ts +10 -0
  191. package/src/cmds/misc/generate_secret_and_hash.ts +15 -0
  192. package/src/cmds/misc/generate_secret_key.ts +5 -0
  193. package/src/cmds/misc/index.ts +92 -0
  194. package/src/cmds/misc/setup_contracts.ts +40 -0
  195. package/src/cmds/misc/update/common.ts +16 -0
  196. package/src/cmds/misc/update/github.ts +3 -0
  197. package/src/cmds/misc/update/noir.ts +57 -0
  198. package/src/cmds/misc/update/npm.ts +154 -0
  199. package/src/cmds/misc/update/utils.ts +50 -0
  200. package/src/cmds/misc/update.ts +78 -0
  201. package/src/cmds/pxe/add_contract.ts +41 -0
  202. package/src/cmds/pxe/block_number.ts +9 -0
  203. package/src/cmds/pxe/get_account.ts +16 -0
  204. package/src/cmds/pxe/get_accounts.ts +35 -0
  205. package/src/cmds/pxe/get_block.ts +10 -0
  206. package/src/cmds/pxe/get_contract_data.ts +51 -0
  207. package/src/cmds/pxe/get_current_base_fee.ts +9 -0
  208. package/src/cmds/pxe/get_l1_to_l2_message_witness.ts +25 -0
  209. package/src/cmds/pxe/get_logs.ts +66 -0
  210. package/src/cmds/pxe/get_node_info.ts +71 -0
  211. package/src/cmds/pxe/get_pxe_info.ts +13 -0
  212. package/src/cmds/pxe/index.ts +170 -0
  213. package/src/utils/aztec.ts +250 -0
  214. package/src/utils/commands.ts +384 -0
  215. package/src/utils/encoding.ts +117 -0
  216. package/src/utils/github.ts +3 -0
  217. package/src/utils/index.ts +4 -0
  218. package/src/utils/inspect.ts +208 -0
@@ -0,0 +1,208 @@
1
+ import type { AztecAddress, ContractArtifact, Fr } from '@aztec/aztec.js';
2
+ import type { LogFn } from '@aztec/foundation/log';
3
+ import { ProtocolContractAddress } from '@aztec/protocol-contracts';
4
+ import { siloNullifier } from '@aztec/stdlib/hash';
5
+ import type { PXE } from '@aztec/stdlib/interfaces/client';
6
+ import { type ExtendedNote, NoteStatus } from '@aztec/stdlib/note';
7
+ import type { TxHash } from '@aztec/stdlib/tx';
8
+
9
+ export async function inspectBlock(pxe: PXE, blockNumber: number, log: LogFn, opts: { showTxs?: boolean } = {}) {
10
+ const block = await pxe.getBlock(blockNumber);
11
+ if (!block) {
12
+ log(`No block found for block number ${blockNumber}`);
13
+ return;
14
+ }
15
+
16
+ const blockHash = await block.hash();
17
+ log(`Block ${blockNumber} (${blockHash.toString()})`);
18
+ log(` Total fees: ${block.header.totalFees.toBigInt()}`);
19
+ log(` Total mana used: ${block.header.totalManaUsed.toBigInt()}`);
20
+ log(
21
+ ` Fee per gas unit: DA=${block.header.globalVariables.gasFees.feePerDaGas.toBigInt()} L2=${block.header.globalVariables.gasFees.feePerL2Gas.toBigInt()}`,
22
+ );
23
+ log(` Coinbase: ${block.header.globalVariables.coinbase}`);
24
+ log(` Fee recipient: ${block.header.globalVariables.feeRecipient}`);
25
+ log(` Timestamp: ${new Date(block.header.globalVariables.timestamp.toNumber() * 500)}`);
26
+ if (opts.showTxs) {
27
+ log(``);
28
+ const artifactMap = await getKnownArtifacts(pxe);
29
+ for (const txHash of block.body.txEffects.map(tx => tx.txHash)) {
30
+ await inspectTx(pxe, txHash, log, { includeBlockInfo: false, artifactMap });
31
+ }
32
+ } else {
33
+ log(` Transactions: ${block.body.txEffects.length}`);
34
+ }
35
+ }
36
+
37
+ export async function inspectTx(
38
+ pxe: PXE,
39
+ txHash: TxHash,
40
+ log: LogFn,
41
+ opts: { includeBlockInfo?: boolean; artifactMap?: ArtifactMap } = {},
42
+ ) {
43
+ const [receipt, effectsInBlock, getNotes] = await Promise.all([
44
+ pxe.getTxReceipt(txHash),
45
+ pxe.getTxEffect(txHash),
46
+ pxe.getNotes({ txHash, status: NoteStatus.ACTIVE_OR_NULLIFIED }),
47
+ ]);
48
+ // Base tx data
49
+ log(`Tx ${txHash.toString()}`);
50
+ log(` Status: ${receipt.status} ${effectsInBlock ? `(${effectsInBlock.data.revertCode.getDescription()})` : ''}`);
51
+ if (receipt.error) {
52
+ log(` Error: ${receipt.error}`);
53
+ }
54
+
55
+ if (!effectsInBlock) {
56
+ return;
57
+ }
58
+
59
+ const effects = effectsInBlock.data;
60
+ const artifactMap = opts?.artifactMap ?? (await getKnownArtifacts(pxe));
61
+
62
+ if (opts.includeBlockInfo) {
63
+ log(` Block: ${receipt.blockNumber} (${receipt.blockHash?.toString()})`);
64
+ }
65
+ if (receipt.transactionFee) {
66
+ log(` Fee: ${receipt.transactionFee.toString()}`);
67
+ }
68
+
69
+ // Public logs
70
+ const publicLogs = effects.publicLogs;
71
+ if (publicLogs.length > 0) {
72
+ log(' Logs:');
73
+ for (const publicLog of publicLogs) {
74
+ log(` ${publicLog.toHumanReadable()}`);
75
+ }
76
+ }
77
+
78
+ // Public data writes
79
+ const writes = effects.publicDataWrites;
80
+ if (writes.length > 0) {
81
+ log(' Public data writes:');
82
+ for (const write of writes) {
83
+ log(` Leaf ${write.leafSlot.toString()} = ${write.value.toString()}`);
84
+ }
85
+ }
86
+
87
+ // Created notes
88
+ const notes = effects.noteHashes;
89
+ if (notes.length > 0) {
90
+ log(' Created notes:');
91
+ log(` Total: ${notes.length}. Found: ${getNotes.length}.`);
92
+ if (getNotes.length) {
93
+ log(' Found notes:');
94
+ for (const note of getNotes) {
95
+ inspectNote(note, artifactMap, log);
96
+ }
97
+ }
98
+ }
99
+
100
+ // Nullifiers
101
+ const nullifierCount = effects.nullifiers.length;
102
+ const { deployNullifiers, initNullifiers, classNullifiers } = await getKnownNullifiers(pxe, artifactMap);
103
+ if (nullifierCount > 0) {
104
+ log(' Nullifiers:');
105
+ for (const nullifier of effects.nullifiers) {
106
+ const [note] = await pxe.getNotes({ siloedNullifier: nullifier });
107
+ const deployed = deployNullifiers[nullifier.toString()];
108
+ const initialized = initNullifiers[nullifier.toString()];
109
+ const registered = classNullifiers[nullifier.toString()];
110
+ if (nullifier.toBuffer().equals(txHash.toBuffer())) {
111
+ log(` Transaction hash nullifier ${nullifier.toShortString()}`);
112
+ } else if (note) {
113
+ inspectNote(note, artifactMap, log, `Nullifier ${nullifier.toShortString()} for note`);
114
+ } else if (deployed) {
115
+ log(
116
+ ` Contract ${toFriendlyAddress(deployed, artifactMap)} deployed via nullifier ${nullifier.toShortString()}`,
117
+ );
118
+ } else if (initialized) {
119
+ log(
120
+ ` Contract ${toFriendlyAddress(
121
+ initialized,
122
+ artifactMap,
123
+ )} initialized via nullifier ${nullifier.toShortString()}`,
124
+ );
125
+ } else if (registered) {
126
+ log(` Class ${registered} registered via nullifier ${nullifier.toShortString()}`);
127
+ } else {
128
+ log(` Unknown nullifier ${nullifier.toString()}`);
129
+ }
130
+ }
131
+ }
132
+
133
+ // L2 to L1 messages
134
+ if (effects.l2ToL1Msgs.length > 0) {
135
+ log(` L2 to L1 messages:`);
136
+ for (const msg of effects.l2ToL1Msgs) {
137
+ log(` ${msg.toString()}`);
138
+ }
139
+ }
140
+ }
141
+
142
+ function inspectNote(note: ExtendedNote, artifactMap: ArtifactMap, log: LogFn, text = 'Note') {
143
+ const artifact = artifactMap[note.contractAddress.toString()];
144
+ const contract = artifact?.name ?? note.contractAddress.toString();
145
+ const type = artifact?.notes[note.noteTypeId.toString()]?.typ ?? note.noteTypeId.toField().toShortString();
146
+ log(` ${text} type ${type} at ${contract}`);
147
+ log(` Owner: ${toFriendlyAddress(note.owner, artifactMap)}`);
148
+ for (const field of note.note.items) {
149
+ log(` ${field.toString()}`);
150
+ }
151
+ }
152
+
153
+ function toFriendlyAddress(address: AztecAddress, artifactMap: ArtifactMap) {
154
+ const artifact = artifactMap[address.toString()];
155
+ if (!artifact) {
156
+ return address.toString();
157
+ }
158
+
159
+ return `${artifact.name}<${address.toString()}>`;
160
+ }
161
+
162
+ async function getKnownNullifiers(pxe: PXE, artifactMap: ArtifactMap) {
163
+ const knownContracts = await pxe.getContracts();
164
+ const deployerAddress = ProtocolContractAddress.ContractInstanceDeployer;
165
+ const registererAddress = ProtocolContractAddress.ContractClassRegisterer;
166
+ const initNullifiers: Record<string, AztecAddress> = {};
167
+ const deployNullifiers: Record<string, AztecAddress> = {};
168
+ const classNullifiers: Record<string, string> = {};
169
+ for (const contract of knownContracts) {
170
+ initNullifiers[siloNullifier(contract, contract.toField()).toString()] = contract;
171
+ deployNullifiers[siloNullifier(deployerAddress, contract.toField()).toString()] = contract;
172
+ }
173
+ for (const artifact of Object.values(artifactMap)) {
174
+ classNullifiers[
175
+ siloNullifier(registererAddress, artifact.classId).toString()
176
+ ] = `${artifact.name}Class<${artifact.classId}>`;
177
+ }
178
+ return { initNullifiers, deployNullifiers, classNullifiers };
179
+ }
180
+
181
+ type ArtifactMap = Record<string, ContractArtifactWithClassId>;
182
+ type ContractArtifactWithClassId = ContractArtifact & { classId: Fr };
183
+ async function getKnownArtifacts(pxe: PXE): Promise<ArtifactMap> {
184
+ const knownContractAddresses = await pxe.getContracts();
185
+ const knownContracts = (
186
+ await Promise.all(knownContractAddresses.map(contractAddress => pxe.getContractMetadata(contractAddress)))
187
+ ).map(contractMetadata => contractMetadata.contractInstance);
188
+ const classIds = [...new Set(knownContracts.map(contract => contract?.currentContractClassId))];
189
+ const knownArtifacts = (
190
+ await Promise.all(classIds.map(classId => (classId ? pxe.getContractClassMetadata(classId) : undefined)))
191
+ ).map(contractClassMetadata =>
192
+ contractClassMetadata
193
+ ? { ...contractClassMetadata.artifact, classId: contractClassMetadata.contractClass?.id }
194
+ : undefined,
195
+ );
196
+ const map: Record<string, ContractArtifactWithClassId> = {};
197
+ for (const instance of knownContracts) {
198
+ if (instance) {
199
+ const artifact = knownArtifacts.find(a =>
200
+ a?.classId?.equals(instance.currentContractClassId),
201
+ ) as ContractArtifactWithClassId;
202
+ if (artifact) {
203
+ map[instance.address.toString()] = artifact;
204
+ }
205
+ }
206
+ }
207
+ return map;
208
+ }