@aztec/cli 0.16.9 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2
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/README.md +9 -15
- package/dest/cmds/contracts/index.js +12 -0
- package/dest/cmds/contracts/inspect_contract.js +37 -0
- package/dest/cmds/contracts/parse_parameter_struct.js +13 -0
- package/dest/cmds/devnet/bootstrap_network.js +193 -0
- package/dest/cmds/devnet/faucet.js +26 -0
- package/dest/cmds/devnet/index.js +12 -0
- package/dest/cmds/infrastructure/index.js +22 -0
- package/dest/cmds/infrastructure/sequencers.js +93 -0
- package/dest/cmds/infrastructure/setup_protocol_contract.js +31 -0
- package/dest/cmds/l1/advance_epoch.js +10 -0
- package/dest/cmds/l1/assume_proven_through.js +12 -0
- package/dest/cmds/l1/bridge_erc20.js +31 -0
- package/dest/cmds/l1/create_l1_account.js +15 -0
- package/dest/cmds/l1/deploy_l1_contracts.js +25 -0
- package/dest/cmds/l1/deploy_l1_verifier.js +54 -0
- package/dest/cmds/l1/get_l1_balance.js +33 -0
- package/dest/cmds/l1/index.js +127 -0
- package/dest/cmds/l1/prover_stats.js +145 -0
- package/dest/cmds/l1/update_l1_validators.js +186 -0
- package/dest/cmds/misc/compute_selector.js +5 -0
- package/dest/cmds/misc/example_contracts.js +6 -0
- package/dest/cmds/misc/generate_p2p_private_key.js +7 -0
- package/dest/cmds/misc/generate_secret_and_hash.js +11 -0
- package/dest/cmds/misc/generate_secret_key.js +6 -0
- package/dest/cmds/misc/index.js +36 -0
- package/dest/cmds/misc/setup_contracts.js +25 -0
- package/dest/cmds/misc/update/common.js +3 -0
- package/dest/cmds/misc/update/github.js +3 -0
- package/dest/cmds/misc/update/noir.js +45 -0
- package/dest/cmds/misc/update/npm.js +127 -0
- package/dest/cmds/misc/update/utils.js +38 -0
- package/dest/cmds/misc/update.js +52 -0
- package/dest/cmds/pxe/add_contract.js +27 -0
- package/dest/cmds/pxe/block_number.js +10 -0
- package/dest/cmds/pxe/get_account.js +10 -0
- package/dest/cmds/pxe/get_accounts.js +25 -0
- package/dest/cmds/pxe/get_block.js +9 -0
- package/dest/cmds/pxe/get_contract_data.js +31 -0
- package/dest/cmds/pxe/get_current_base_fee.js +7 -0
- package/dest/cmds/pxe/get_l1_to_l2_message_witness.js +11 -0
- package/dest/cmds/pxe/get_logs.js +51 -0
- package/dest/cmds/pxe/get_node_info.js +61 -0
- package/dest/cmds/pxe/get_pxe_info.js +11 -0
- package/dest/cmds/pxe/index.js +55 -0
- package/dest/utils/aztec.js +162 -0
- package/dest/utils/commands.js +303 -0
- package/dest/utils/encoding.js +110 -0
- package/dest/utils/github.js +3 -0
- package/dest/utils/index.js +4 -0
- package/dest/utils/inspect.js +177 -0
- package/package.json +70 -21
- package/src/cmds/contracts/index.ts +34 -0
- package/src/cmds/contracts/inspect_contract.ts +51 -0
- package/src/cmds/contracts/parse_parameter_struct.ts +27 -0
- package/src/cmds/devnet/bootstrap_network.ts +306 -0
- package/src/cmds/devnet/faucet.ts +33 -0
- package/src/cmds/devnet/index.ts +52 -0
- package/src/cmds/infrastructure/index.ts +54 -0
- package/src/cmds/infrastructure/sequencers.ts +100 -0
- package/src/cmds/infrastructure/setup_protocol_contract.ts +36 -0
- package/src/cmds/l1/advance_epoch.ts +12 -0
- package/src/cmds/l1/assume_proven_through.ts +25 -0
- package/src/cmds/l1/bridge_erc20.ts +53 -0
- package/src/cmds/l1/create_l1_account.ts +17 -0
- package/src/cmds/l1/deploy_l1_contracts.ts +55 -0
- package/src/cmds/l1/deploy_l1_verifier.ts +105 -0
- package/src/cmds/l1/get_l1_balance.ts +41 -0
- package/src/cmds/l1/index.ts +415 -0
- package/src/cmds/l1/prover_stats.ts +192 -0
- package/src/cmds/l1/update_l1_validators.ts +238 -0
- package/src/cmds/misc/compute_selector.ts +7 -0
- package/src/cmds/misc/example_contracts.ts +12 -0
- package/src/cmds/misc/generate_p2p_private_key.ts +10 -0
- package/src/cmds/misc/generate_secret_and_hash.ts +15 -0
- package/src/cmds/misc/generate_secret_key.ts +5 -0
- package/src/cmds/misc/index.ts +70 -0
- package/src/cmds/misc/setup_contracts.ts +38 -0
- package/src/cmds/misc/update/common.ts +16 -0
- package/src/cmds/misc/update/github.ts +3 -0
- package/src/cmds/misc/update/noir.ts +57 -0
- package/src/cmds/misc/update/npm.ts +154 -0
- package/src/cmds/misc/update/utils.ts +50 -0
- package/src/cmds/misc/update.ts +78 -0
- package/src/cmds/pxe/add_contract.ts +39 -0
- package/src/cmds/pxe/block_number.ts +9 -0
- package/src/cmds/pxe/get_account.ts +16 -0
- package/src/cmds/pxe/get_accounts.ts +35 -0
- package/src/cmds/pxe/get_block.ts +10 -0
- package/src/cmds/pxe/get_contract_data.ts +49 -0
- package/src/cmds/pxe/get_current_base_fee.ts +9 -0
- package/src/cmds/pxe/get_l1_to_l2_message_witness.ts +25 -0
- package/src/cmds/pxe/get_logs.ts +66 -0
- package/src/cmds/pxe/get_node_info.ts +71 -0
- package/src/cmds/pxe/get_pxe_info.ts +13 -0
- package/src/cmds/pxe/index.ts +170 -0
- package/src/utils/aztec.ts +218 -0
- package/src/utils/commands.ts +384 -0
- package/src/utils/encoding.ts +123 -0
- package/src/utils/github.ts +3 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/inspect.ts +207 -0
- package/dest/bin/index.d.ts +0 -3
- package/dest/bin/index.d.ts.map +0 -1
- package/dest/bin/index.js +0 -18
- package/dest/client.d.ts +0 -17
- package/dest/client.d.ts.map +0 -1
- package/dest/client.js +0 -60
- package/dest/cmds/add_contract.d.ts +0 -7
- package/dest/cmds/add_contract.d.ts.map +0 -1
- package/dest/cmds/add_contract.js +0 -15
- package/dest/cmds/add_note.d.ts +0 -8
- package/dest/cmds/add_note.d.ts.map +0 -1
- package/dest/cmds/add_note.js +0 -13
- package/dest/cmds/block_number.d.ts +0 -6
- package/dest/cmds/block_number.d.ts.map +0 -1
- package/dest/cmds/block_number.js +0 -10
- package/dest/cmds/call.d.ts +0 -7
- package/dest/cmds/call.d.ts.map +0 -1
- package/dest/cmds/call.js +0 -18
- package/dest/cmds/check_deploy.d.ts +0 -7
- package/dest/cmds/check_deploy.d.ts.map +0 -1
- package/dest/cmds/check_deploy.js +0 -16
- package/dest/cmds/compute_selector.d.ts +0 -6
- package/dest/cmds/compute_selector.d.ts.map +0 -1
- package/dest/cmds/compute_selector.js +0 -9
- package/dest/cmds/create_account.d.ts +0 -7
- package/dest/cmds/create_account.d.ts.map +0 -1
- package/dest/cmds/create_account.js +0 -30
- package/dest/cmds/deploy.d.ts +0 -7
- package/dest/cmds/deploy.d.ts.map +0 -1
- package/dest/cmds/deploy.js +0 -58
- package/dest/cmds/deploy_l1_contracts.d.ts +0 -6
- package/dest/cmds/deploy_l1_contracts.d.ts.map +0 -1
- package/dest/cmds/deploy_l1_contracts.js +0 -15
- package/dest/cmds/example_contracts.d.ts +0 -6
- package/dest/cmds/example_contracts.d.ts.map +0 -1
- package/dest/cmds/example_contracts.js +0 -10
- package/dest/cmds/generate_p2p_private_key.d.ts +0 -6
- package/dest/cmds/generate_p2p_private_key.d.ts.map +0 -1
- package/dest/cmds/generate_p2p_private_key.js +0 -11
- package/dest/cmds/generate_private_key.d.ts +0 -6
- package/dest/cmds/generate_private_key.d.ts.map +0 -1
- package/dest/cmds/generate_private_key.js +0 -22
- package/dest/cmds/get_account.d.ts +0 -7
- package/dest/cmds/get_account.d.ts.map +0 -1
- package/dest/cmds/get_account.js +0 -15
- package/dest/cmds/get_accounts.d.ts +0 -6
- package/dest/cmds/get_accounts.d.ts.map +0 -1
- package/dest/cmds/get_accounts.js +0 -18
- package/dest/cmds/get_contract_data.d.ts +0 -7
- package/dest/cmds/get_contract_data.d.ts.map +0 -1
- package/dest/cmds/get_contract_data.js +0 -28
- package/dest/cmds/get_logs.d.ts +0 -7
- package/dest/cmds/get_logs.d.ts.map +0 -1
- package/dest/cmds/get_logs.js +0 -54
- package/dest/cmds/get_node_info.d.ts +0 -6
- package/dest/cmds/get_node_info.d.ts.map +0 -1
- package/dest/cmds/get_node_info.js +0 -15
- package/dest/cmds/get_recipient.d.ts +0 -7
- package/dest/cmds/get_recipient.d.ts.map +0 -1
- package/dest/cmds/get_recipient.js +0 -15
- package/dest/cmds/get_recipients.d.ts +0 -6
- package/dest/cmds/get_recipients.d.ts.map +0 -1
- package/dest/cmds/get_recipients.js +0 -18
- package/dest/cmds/get_tx_receipt.d.ts +0 -7
- package/dest/cmds/get_tx_receipt.d.ts.map +0 -1
- package/dest/cmds/get_tx_receipt.js +0 -16
- package/dest/cmds/inspect_contract.d.ts +0 -6
- package/dest/cmds/inspect_contract.d.ts.map +0 -1
- package/dest/cmds/inspect_contract.js +0 -19
- package/dest/cmds/parse_parameter_struct.d.ts +0 -6
- package/dest/cmds/parse_parameter_struct.d.ts.map +0 -1
- package/dest/cmds/parse_parameter_struct.js +0 -20
- package/dest/cmds/register_account.d.ts +0 -7
- package/dest/cmds/register_account.d.ts.map +0 -1
- package/dest/cmds/register_account.js +0 -13
- package/dest/cmds/register_recipient.d.ts +0 -7
- package/dest/cmds/register_recipient.d.ts.map +0 -1
- package/dest/cmds/register_recipient.js +0 -11
- package/dest/cmds/send.d.ts +0 -7
- package/dest/cmds/send.d.ts.map +0 -1
- package/dest/cmds/send.js +0 -26
- package/dest/cmds/unbox.d.ts +0 -6
- package/dest/cmds/unbox.d.ts.map +0 -1
- package/dest/cmds/unbox.js +0 -9
- package/dest/encoding.d.ts +0 -15
- package/dest/encoding.d.ts.map +0 -1
- package/dest/encoding.js +0 -114
- package/dest/github.d.ts +0 -4
- package/dest/github.d.ts.map +0 -1
- package/dest/github.js +0 -4
- package/dest/index.d.ts +0 -10
- package/dest/index.d.ts.map +0 -1
- package/dest/index.js +0 -321
- package/dest/parse_args.d.ts +0 -105
- package/dest/parse_args.d.ts.map +0 -1
- package/dest/parse_args.js +0 -233
- package/dest/test/mocks.d.ts +0 -3
- package/dest/test/mocks.d.ts.map +0 -1
- package/dest/test/mocks.js +0 -65
- package/dest/unbox.d.ts +0 -14
- package/dest/unbox.d.ts.map +0 -1
- package/dest/unbox.js +0 -276
- package/dest/update/common.d.ts +0 -17
- package/dest/update/common.d.ts.map +0 -1
- package/dest/update/common.js +0 -2
- package/dest/update/noir.d.ts +0 -10
- package/dest/update/noir.d.ts.map +0 -1
- package/dest/update/noir.js +0 -63
- package/dest/update/npm.d.ts +0 -34
- package/dest/update/npm.d.ts.map +0 -1
- package/dest/update/npm.js +0 -125
- package/dest/update/update.d.ts +0 -3
- package/dest/update/update.d.ts.map +0 -1
- package/dest/update/update.js +0 -58
- package/dest/utils.d.ts +0 -70
- package/dest/utils.d.ts.map +0 -1
- package/dest/utils.js +0 -168
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { NoteStatus } from '@aztec/circuit-types';
|
|
2
|
+
import { siloNullifier } from '@aztec/circuits.js/hash';
|
|
3
|
+
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
4
|
+
export async function inspectBlock(pxe, blockNumber, log, opts = {}) {
|
|
5
|
+
const block = await pxe.getBlock(blockNumber);
|
|
6
|
+
if (!block) {
|
|
7
|
+
log(`No block found for block number ${blockNumber}`);
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const blockHash = await block.hash();
|
|
11
|
+
log(`Block ${blockNumber} (${blockHash.toString()})`);
|
|
12
|
+
log(` Total fees: ${block.header.totalFees.toBigInt()}`);
|
|
13
|
+
log(` Total mana used: ${block.header.totalManaUsed.toBigInt()}`);
|
|
14
|
+
log(` Fee per gas unit: DA=${block.header.globalVariables.gasFees.feePerDaGas.toBigInt()} L2=${block.header.globalVariables.gasFees.feePerL2Gas.toBigInt()}`);
|
|
15
|
+
log(` Coinbase: ${block.header.globalVariables.coinbase}`);
|
|
16
|
+
log(` Fee recipient: ${block.header.globalVariables.feeRecipient}`);
|
|
17
|
+
log(` Timestamp: ${new Date(block.header.globalVariables.timestamp.toNumber() * 500)}`);
|
|
18
|
+
if (opts.showTxs) {
|
|
19
|
+
log(``);
|
|
20
|
+
const artifactMap = await getKnownArtifacts(pxe);
|
|
21
|
+
for (const txHash of block.body.txEffects.map((tx)=>tx.txHash)){
|
|
22
|
+
await inspectTx(pxe, txHash, log, {
|
|
23
|
+
includeBlockInfo: false,
|
|
24
|
+
artifactMap
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
} else {
|
|
28
|
+
log(` Transactions: ${block.body.txEffects.length}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export async function inspectTx(pxe, txHash, log, opts = {}) {
|
|
32
|
+
const [receipt, effectsInBlock, getNotes] = await Promise.all([
|
|
33
|
+
pxe.getTxReceipt(txHash),
|
|
34
|
+
pxe.getTxEffect(txHash),
|
|
35
|
+
pxe.getNotes({
|
|
36
|
+
txHash,
|
|
37
|
+
status: NoteStatus.ACTIVE_OR_NULLIFIED
|
|
38
|
+
})
|
|
39
|
+
]);
|
|
40
|
+
// Base tx data
|
|
41
|
+
log(`Tx ${txHash.toString()}`);
|
|
42
|
+
log(` Status: ${receipt.status} ${effectsInBlock ? `(${effectsInBlock.data.revertCode.getDescription()})` : ''}`);
|
|
43
|
+
if (receipt.error) {
|
|
44
|
+
log(` Error: ${receipt.error}`);
|
|
45
|
+
}
|
|
46
|
+
if (!effectsInBlock) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const effects = effectsInBlock.data;
|
|
50
|
+
const artifactMap = opts?.artifactMap ?? await getKnownArtifacts(pxe);
|
|
51
|
+
if (opts.includeBlockInfo) {
|
|
52
|
+
log(` Block: ${receipt.blockNumber} (${receipt.blockHash?.toString()})`);
|
|
53
|
+
}
|
|
54
|
+
if (receipt.transactionFee) {
|
|
55
|
+
log(` Fee: ${receipt.transactionFee.toString()}`);
|
|
56
|
+
}
|
|
57
|
+
// Public logs
|
|
58
|
+
const publicLogs = effects.publicLogs;
|
|
59
|
+
if (publicLogs.length > 0) {
|
|
60
|
+
log(' Logs:');
|
|
61
|
+
for (const publicLog of publicLogs){
|
|
62
|
+
log(` ${publicLog.toHumanReadable()}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Public data writes
|
|
66
|
+
const writes = effects.publicDataWrites;
|
|
67
|
+
if (writes.length > 0) {
|
|
68
|
+
log(' Public data writes:');
|
|
69
|
+
for (const write of writes){
|
|
70
|
+
log(` Leaf ${write.leafSlot.toString()} = ${write.value.toString()}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Created notes
|
|
74
|
+
const notes = effects.noteHashes;
|
|
75
|
+
if (notes.length > 0) {
|
|
76
|
+
log(' Created notes:');
|
|
77
|
+
log(` Total: ${notes.length}. Found: ${getNotes.length}.`);
|
|
78
|
+
if (getNotes.length) {
|
|
79
|
+
log(' Found notes:');
|
|
80
|
+
for (const note of getNotes){
|
|
81
|
+
inspectNote(note, artifactMap, log);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Nullifiers
|
|
86
|
+
const nullifierCount = effects.nullifiers.length;
|
|
87
|
+
const { deployNullifiers, initNullifiers, classNullifiers } = await getKnownNullifiers(pxe, artifactMap);
|
|
88
|
+
if (nullifierCount > 0) {
|
|
89
|
+
log(' Nullifiers:');
|
|
90
|
+
for (const nullifier of effects.nullifiers){
|
|
91
|
+
const [note] = await pxe.getNotes({
|
|
92
|
+
siloedNullifier: nullifier
|
|
93
|
+
});
|
|
94
|
+
const deployed = deployNullifiers[nullifier.toString()];
|
|
95
|
+
const initialized = initNullifiers[nullifier.toString()];
|
|
96
|
+
const registered = classNullifiers[nullifier.toString()];
|
|
97
|
+
if (nullifier.toBuffer().equals(txHash.toBuffer())) {
|
|
98
|
+
log(` Transaction hash nullifier ${nullifier.toShortString()}`);
|
|
99
|
+
} else if (note) {
|
|
100
|
+
inspectNote(note, artifactMap, log, `Nullifier ${nullifier.toShortString()} for note`);
|
|
101
|
+
} else if (deployed) {
|
|
102
|
+
log(` Contract ${toFriendlyAddress(deployed, artifactMap)} deployed via nullifier ${nullifier.toShortString()}`);
|
|
103
|
+
} else if (initialized) {
|
|
104
|
+
log(` Contract ${toFriendlyAddress(initialized, artifactMap)} initialized via nullifier ${nullifier.toShortString()}`);
|
|
105
|
+
} else if (registered) {
|
|
106
|
+
log(` Class ${registered} registered via nullifier ${nullifier.toShortString()}`);
|
|
107
|
+
} else {
|
|
108
|
+
log(` Unknown nullifier ${nullifier.toString()}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// L2 to L1 messages
|
|
113
|
+
if (effects.l2ToL1Msgs.length > 0) {
|
|
114
|
+
log(` L2 to L1 messages:`);
|
|
115
|
+
for (const msg of effects.l2ToL1Msgs){
|
|
116
|
+
log(` ${msg.toString()}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function inspectNote(note, artifactMap, log, text = 'Note') {
|
|
121
|
+
const artifact = artifactMap[note.contractAddress.toString()];
|
|
122
|
+
const contract = artifact?.name ?? note.contractAddress.toString();
|
|
123
|
+
const type = artifact?.notes[note.noteTypeId.toString()]?.typ ?? note.noteTypeId.toField().toShortString();
|
|
124
|
+
log(` ${text} type ${type} at ${contract}`);
|
|
125
|
+
log(` Owner: ${toFriendlyAddress(note.owner, artifactMap)}`);
|
|
126
|
+
for (const field of note.note.items){
|
|
127
|
+
log(` ${field.toString()}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function toFriendlyAddress(address, artifactMap) {
|
|
131
|
+
const artifact = artifactMap[address.toString()];
|
|
132
|
+
if (!artifact) {
|
|
133
|
+
return address.toString();
|
|
134
|
+
}
|
|
135
|
+
return `${artifact.name}<${address.toString()}>`;
|
|
136
|
+
}
|
|
137
|
+
async function getKnownNullifiers(pxe, artifactMap) {
|
|
138
|
+
const knownContracts = await pxe.getContracts();
|
|
139
|
+
const deployerAddress = ProtocolContractAddress.ContractInstanceDeployer;
|
|
140
|
+
const registererAddress = ProtocolContractAddress.ContractClassRegisterer;
|
|
141
|
+
const initNullifiers = {};
|
|
142
|
+
const deployNullifiers = {};
|
|
143
|
+
const classNullifiers = {};
|
|
144
|
+
for (const contract of knownContracts){
|
|
145
|
+
initNullifiers[siloNullifier(contract, contract.toField()).toString()] = contract;
|
|
146
|
+
deployNullifiers[siloNullifier(deployerAddress, contract.toField()).toString()] = contract;
|
|
147
|
+
}
|
|
148
|
+
for (const artifact of Object.values(artifactMap)){
|
|
149
|
+
classNullifiers[siloNullifier(registererAddress, artifact.classId).toString()] = `${artifact.name}Class<${artifact.classId}>`;
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
initNullifiers,
|
|
153
|
+
deployNullifiers,
|
|
154
|
+
classNullifiers
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
async function getKnownArtifacts(pxe) {
|
|
158
|
+
const knownContractAddresses = await pxe.getContracts();
|
|
159
|
+
const knownContracts = (await Promise.all(knownContractAddresses.map((contractAddress)=>pxe.getContractMetadata(contractAddress)))).map((contractMetadata)=>contractMetadata.contractInstance);
|
|
160
|
+
const classIds = [
|
|
161
|
+
...new Set(knownContracts.map((contract)=>contract?.contractClassId))
|
|
162
|
+
];
|
|
163
|
+
const knownArtifacts = (await Promise.all(classIds.map((classId)=>classId ? pxe.getContractClassMetadata(classId) : undefined))).map((contractClassMetadata)=>contractClassMetadata ? {
|
|
164
|
+
...contractClassMetadata.artifact,
|
|
165
|
+
classId: contractClassMetadata.contractClass?.id
|
|
166
|
+
} : undefined);
|
|
167
|
+
const map = {};
|
|
168
|
+
for (const instance of knownContracts){
|
|
169
|
+
if (instance) {
|
|
170
|
+
const artifact = knownArtifacts.find((a)=>a?.classId?.equals(instance.contractClassId));
|
|
171
|
+
if (artifact) {
|
|
172
|
+
map[instance.address.toString()] = artifact;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return map;
|
|
177
|
+
}
|
package/package.json
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
"
|
|
5
|
+
"exports": {
|
|
6
|
+
"./contracts": "./dest/cmds/contracts/index.js",
|
|
7
|
+
"./devnet": "./dest/cmds/devnet/index.js",
|
|
8
|
+
"./infrastructure": "./dest/cmds/infrastructure/index.js",
|
|
9
|
+
"./l1": "./dest/cmds/l1/index.js",
|
|
10
|
+
"./pxe": "./dest/cmds/pxe/index.js",
|
|
11
|
+
"./cli-utils": "./dest/utils/index.js",
|
|
12
|
+
"./misc": "./dest/cmds/misc/index.js",
|
|
13
|
+
"./setup-contracts": "./dest/cmds/misc/setup_contracts.js",
|
|
14
|
+
"./utils": "./dest/utils/index.js",
|
|
15
|
+
"./inspect": "./dest/utils/inspect.js"
|
|
8
16
|
},
|
|
9
17
|
"typedocOptions": {
|
|
10
18
|
"entryPoints": [
|
|
11
|
-
"./
|
|
19
|
+
"./dest/builder/index.js"
|
|
12
20
|
],
|
|
13
21
|
"name": "Aztec CLI",
|
|
14
22
|
"tsconfig": "./tsconfig.json"
|
|
@@ -19,8 +27,7 @@
|
|
|
19
27
|
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
20
28
|
"formatting": "run -T prettier --check ./src && run -T eslint ./src",
|
|
21
29
|
"formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
|
|
22
|
-
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules
|
|
23
|
-
"start": "node --no-warnings ./dest/bin/index.js"
|
|
30
|
+
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
|
|
24
31
|
},
|
|
25
32
|
"inherits": [
|
|
26
33
|
"../package.common.json"
|
|
@@ -31,38 +38,80 @@
|
|
|
31
38
|
"^(\\.{1,2}/.*)\\.[cm]?js$": "$1"
|
|
32
39
|
},
|
|
33
40
|
"testRegex": "./src/.*\\.test\\.(js|mjs|ts)$",
|
|
34
|
-
"rootDir": "./src"
|
|
41
|
+
"rootDir": "./src",
|
|
42
|
+
"extensionsToTreatAsEsm": [
|
|
43
|
+
".ts"
|
|
44
|
+
],
|
|
45
|
+
"transform": {
|
|
46
|
+
"^.+\\.tsx?$": [
|
|
47
|
+
"@swc/jest",
|
|
48
|
+
{
|
|
49
|
+
"jsc": {
|
|
50
|
+
"parser": {
|
|
51
|
+
"syntax": "typescript",
|
|
52
|
+
"decorators": true
|
|
53
|
+
},
|
|
54
|
+
"transform": {
|
|
55
|
+
"decoratorVersion": "2022-03"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
"reporters": [
|
|
62
|
+
"default"
|
|
63
|
+
],
|
|
64
|
+
"testTimeout": 30000,
|
|
65
|
+
"setupFiles": [
|
|
66
|
+
"../../foundation/src/jest/setup.mjs"
|
|
67
|
+
]
|
|
35
68
|
},
|
|
36
69
|
"dependencies": {
|
|
37
|
-
"@aztec/
|
|
38
|
-
"@aztec/
|
|
39
|
-
"@aztec/
|
|
40
|
-
"@aztec/
|
|
41
|
-
"@aztec/
|
|
42
|
-
"@aztec/
|
|
43
|
-
"@
|
|
70
|
+
"@aztec/archiver": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
|
|
71
|
+
"@aztec/aztec.js": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
|
|
72
|
+
"@aztec/circuit-types": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
|
|
73
|
+
"@aztec/foundation": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
|
|
74
|
+
"@aztec/l1-artifacts": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
|
|
75
|
+
"@aztec/types": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
|
|
76
|
+
"@iarna/toml": "^2.2.5",
|
|
44
77
|
"@libp2p/peer-id-factory": "^3.0.4",
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"lodash.startcase": "^4.4.0",
|
|
49
|
-
"node-fetch": "^3.3.2",
|
|
78
|
+
"commander": "^12.1.0",
|
|
79
|
+
"lodash.chunk": "^4.2.0",
|
|
80
|
+
"lodash.groupby": "^4.6.0",
|
|
50
81
|
"semver": "^7.5.4",
|
|
82
|
+
"source-map-support": "^0.5.21",
|
|
51
83
|
"tslib": "^2.4.0",
|
|
52
|
-
"viem": "
|
|
84
|
+
"viem": "2.22.8"
|
|
53
85
|
},
|
|
54
86
|
"devDependencies": {
|
|
87
|
+
"@aztec/accounts": "workspace:^",
|
|
88
|
+
"@aztec/circuits.js": "workspace:^",
|
|
89
|
+
"@aztec/ethereum": "workspace:^",
|
|
90
|
+
"@aztec/protocol-contracts": "workspace:^",
|
|
55
91
|
"@jest/globals": "^29.5.0",
|
|
56
92
|
"@types/jest": "^29.5.0",
|
|
93
|
+
"@types/lodash.chunk": "^4.2.9",
|
|
94
|
+
"@types/lodash.groupby": "^4.6.9",
|
|
57
95
|
"@types/lodash.startcase": "^4.4.7",
|
|
58
96
|
"@types/node": "^18.7.23",
|
|
59
97
|
"@types/semver": "^7.5.2",
|
|
98
|
+
"@types/source-map-support": "^0.5.10",
|
|
60
99
|
"jest": "^29.5.0",
|
|
61
100
|
"jest-mock-extended": "^3.0.5",
|
|
62
101
|
"ts-jest": "^29.1.0",
|
|
63
102
|
"ts-node": "^10.9.1",
|
|
64
103
|
"typescript": "^5.0.4"
|
|
65
104
|
},
|
|
105
|
+
"peerDependencies": {
|
|
106
|
+
"@aztec/accounts": "workspace:^",
|
|
107
|
+
"@aztec/bb-prover": "workspace:^",
|
|
108
|
+
"@aztec/circuits.js": "workspace:^",
|
|
109
|
+
"@aztec/ethereum": "workspace:^",
|
|
110
|
+
"@aztec/l1-artifacts": "workspace:^",
|
|
111
|
+
"@aztec/noir-contracts.js": "workspace:^",
|
|
112
|
+
"@aztec/noir-protocol-circuits-types": "workspace:^",
|
|
113
|
+
"@aztec/protocol-contracts": "workspace:^"
|
|
114
|
+
},
|
|
66
115
|
"files": [
|
|
67
116
|
"dest",
|
|
68
117
|
"src",
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type LogFn, type Logger } from '@aztec/foundation/log';
|
|
2
|
+
|
|
3
|
+
import { type Command } from 'commander';
|
|
4
|
+
|
|
5
|
+
export function injectCommands(program: Command, log: LogFn, debugLogger: Logger) {
|
|
6
|
+
program
|
|
7
|
+
.command('inspect-contract')
|
|
8
|
+
.description('Shows list of external callable functions for a contract')
|
|
9
|
+
.argument(
|
|
10
|
+
'<contractArtifactFile>',
|
|
11
|
+
`A compiled Noir contract's artifact in JSON format or name of a contract artifact exported by @aztec/noir-contracts.js`,
|
|
12
|
+
)
|
|
13
|
+
.action(async (contractArtifactFile: string) => {
|
|
14
|
+
const { inspectContract } = await import('./inspect_contract.js');
|
|
15
|
+
await inspectContract(contractArtifactFile, debugLogger, log);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// Helper for users to decode hex strings into structs if needed.
|
|
19
|
+
program
|
|
20
|
+
.command('parse-parameter-struct')
|
|
21
|
+
.description("Helper for parsing an encoded string into a contract's parameter struct.")
|
|
22
|
+
.argument('<encodedString>', 'The encoded hex string')
|
|
23
|
+
.requiredOption(
|
|
24
|
+
'-c, --contract-artifact <fileLocation>',
|
|
25
|
+
"A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts.js",
|
|
26
|
+
)
|
|
27
|
+
.requiredOption('-p, --parameter <parameterName>', 'The name of the struct parameter to decode into')
|
|
28
|
+
.action(async (encodedString, options) => {
|
|
29
|
+
const { parseParameterStruct } = await import('./parse_parameter_struct.js');
|
|
30
|
+
await parseParameterStruct(encodedString, options.contractArtifact, options.parameter, log);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
return program;
|
|
34
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { getContractClassFromArtifact } from '@aztec/circuits.js';
|
|
2
|
+
import {
|
|
3
|
+
type FunctionArtifact,
|
|
4
|
+
FunctionSelector,
|
|
5
|
+
decodeFunctionSignature,
|
|
6
|
+
decodeFunctionSignatureWithParameterNames,
|
|
7
|
+
} from '@aztec/foundation/abi';
|
|
8
|
+
import { sha256 } from '@aztec/foundation/crypto';
|
|
9
|
+
import { type LogFn, type Logger } from '@aztec/foundation/log';
|
|
10
|
+
|
|
11
|
+
import { getContractArtifact } from '../../utils/aztec.js';
|
|
12
|
+
|
|
13
|
+
export async function inspectContract(contractArtifactFile: string, debugLogger: Logger, log: LogFn) {
|
|
14
|
+
const contractArtifact = await getContractArtifact(contractArtifactFile, log);
|
|
15
|
+
const contractFns = contractArtifact.functions.filter(f => f.name !== 'compute_note_hash_and_optionally_a_nullifier');
|
|
16
|
+
if (contractFns.length === 0) {
|
|
17
|
+
log(`No functions found for contract ${contractArtifact.name}`);
|
|
18
|
+
}
|
|
19
|
+
const contractClass = await getContractClassFromArtifact(contractArtifact);
|
|
20
|
+
const bytecodeLengthInFields = 1 + Math.ceil(contractClass.packedBytecode.length / 31);
|
|
21
|
+
|
|
22
|
+
log(`Contract class details:`);
|
|
23
|
+
log(`\tidentifier: ${contractClass.id.toString()}`);
|
|
24
|
+
log(`\tartifact hash: ${contractClass.artifactHash.toString()}`);
|
|
25
|
+
log(`\tprivate function tree root: ${contractClass.privateFunctionsRoot.toString()}`);
|
|
26
|
+
log(`\tpublic bytecode commitment: ${contractClass.publicBytecodeCommitment.toString()}`);
|
|
27
|
+
log(`\tpublic bytecode length: ${contractClass.packedBytecode.length} bytes (${bytecodeLengthInFields} fields)`);
|
|
28
|
+
|
|
29
|
+
const externalFunctions = contractFns.filter(f => !f.isInternal);
|
|
30
|
+
if (externalFunctions.length > 0) {
|
|
31
|
+
log(`\nExternal functions:`);
|
|
32
|
+
await Promise.all(externalFunctions.map(f => logFunction(f, log)));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const internalFunctions = contractFns.filter(f => f.isInternal);
|
|
36
|
+
if (internalFunctions.length > 0) {
|
|
37
|
+
log(`\nInternal functions:`);
|
|
38
|
+
await Promise.all(internalFunctions.map(f => logFunction(f, log)));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
async function logFunction(fn: FunctionArtifact, log: LogFn) {
|
|
43
|
+
const signatureWithParameterNames = decodeFunctionSignatureWithParameterNames(fn.name, fn.parameters);
|
|
44
|
+
const signature = decodeFunctionSignature(fn.name, fn.parameters);
|
|
45
|
+
const selector = await FunctionSelector.fromSignature(signature);
|
|
46
|
+
const bytecodeSize = fn.bytecode.length;
|
|
47
|
+
const bytecodeHash = sha256(fn.bytecode).toString('hex');
|
|
48
|
+
log(
|
|
49
|
+
`${fn.functionType} ${signatureWithParameterNames} \n\tfunction signature: ${signature}\n\tselector: ${selector}\n\tbytecode: ${bytecodeSize} bytes (sha256 ${bytecodeHash})`,
|
|
50
|
+
);
|
|
51
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type StructType } from '@aztec/foundation/abi';
|
|
2
|
+
import { jsonStringify } from '@aztec/foundation/json-rpc';
|
|
3
|
+
import { type LogFn } from '@aztec/foundation/log';
|
|
4
|
+
|
|
5
|
+
import { getContractArtifact } from '../../utils/aztec.js';
|
|
6
|
+
import { parseStructString } from '../../utils/encoding.js';
|
|
7
|
+
|
|
8
|
+
export async function parseParameterStruct(
|
|
9
|
+
encodedString: string,
|
|
10
|
+
contractArtifactPath: string,
|
|
11
|
+
parameterName: string,
|
|
12
|
+
log: LogFn,
|
|
13
|
+
) {
|
|
14
|
+
const contractArtifact = await getContractArtifact(contractArtifactPath, log);
|
|
15
|
+
const parameterAbitype = contractArtifact.functions
|
|
16
|
+
.map(({ parameters }) => parameters)
|
|
17
|
+
.flat()
|
|
18
|
+
.find(({ name, type }) => name === parameterName && type.kind === 'struct');
|
|
19
|
+
|
|
20
|
+
if (!parameterAbitype) {
|
|
21
|
+
log(`No struct parameter found with name ${parameterName}`);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const data = parseStructString(encodedString, parameterAbitype.type as StructType);
|
|
26
|
+
log(`\nStruct Data: \n${jsonStringify(data, true)}\n`);
|
|
27
|
+
}
|