Skip to content

Commit 80cfe99

Browse files
committed
Merge
2 parents 980e5ef + 915db70 commit 80cfe99

39 files changed

+740
-508
lines changed

packages/contract-verification/src/artifact/generate-payload.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { NoirCompiledContract } from "@aztec/aztec.js";
2-
import { VerifyArtifactPayload } from "types.js";
2+
import { VerifyArtifactPayload } from "../types.js";
33

44
export const generateVerifyArtifactPayload = (
5-
artifactObj: { default: NoirCompiledContract } | NoirCompiledContract
5+
artifactObj: { default: NoirCompiledContract } | NoirCompiledContract,
66
): VerifyArtifactPayload => {
77
const artifactJson = (artifactObj as { default: NoirCompiledContract })
88
.default
@@ -17,5 +17,5 @@ export const generateVerifyArtifactPayload = (
1717
export const generateVerifyArtifactUrl = (
1818
apiBaseUrl: string,
1919
contractClassId: string,
20-
version: number
20+
version: number,
2121
) => `${apiBaseUrl}/l2/contract-classes/${contractClassId}/versions/${version}`;

packages/contract-verification/src/artifact/verify-payload.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
loadContractArtifact,
55
} from "@aztec/aztec.js";
66
import { ChicmozL2ContractClassRegisteredEvent } from "@chicmoz-pkg/types";
7-
import { VerifyArtifactPayload } from "types.js";
7+
import { VerifyArtifactPayload } from "../types.js";
88

99
export type VerificationResult = {
1010
isMatchingByteCode: boolean;
@@ -13,15 +13,15 @@ export type VerificationResult = {
1313

1414
export const verifyArtifactPayload = async (
1515
artifactPayload: VerifyArtifactPayload,
16-
storedArtifact: ChicmozL2ContractClassRegisteredEvent
16+
storedArtifact: ChicmozL2ContractClassRegisteredEvent,
1717
): Promise<VerificationResult> => {
1818
const parsedArtifact = JSON.parse(
19-
artifactPayload.stringifiedArtifactJson
19+
artifactPayload.stringifiedArtifactJson,
2020
) as NoirCompiledContract;
2121
const loadedArtifact = loadContractArtifact(parsedArtifact);
2222
const contractClass = await getContractClassFromArtifact(loadedArtifact);
2323
const isMatchingByteCode = storedArtifact.packedBytecode.equals(
24-
contractClass.packedBytecode
24+
contractClass.packedBytecode,
2525
);
2626
return {
2727
isMatchingByteCode,

packages/contract-verification/src/instance-deployment/generate-payload.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { NoirCompiledContract } from "@aztec/aztec.js";
2-
import { VerifyInstanceDeploymentPayload } from "types.js";
2+
import {
3+
VerifyInstanceDeploymentPayload,
4+
verifyInstanceDeploymentPayloadSchema,
5+
} from "../types.js";
36

47
export const generateVerifyInstancePayload = ({
58
publicKeysString,
@@ -23,7 +26,7 @@ export const generateVerifyInstancePayload = ({
2326
if (salt.length !== 66) {
2427
throw new Error(`Invalid salt length: ${salt.length}`);
2528
}
26-
return {
29+
return verifyInstanceDeploymentPayloadSchema.parse({
2730
publicKeysString,
2831
deployer,
2932
salt,
@@ -32,13 +35,13 @@ export const generateVerifyInstancePayload = ({
3235
? JSON.stringify(
3336
(artifactObj as { default: NoirCompiledContract }).default
3437
? (artifactObj as { default: NoirCompiledContract }).default
35-
: artifactObj
38+
: artifactObj,
3639
)
3740
: undefined,
38-
};
41+
});
3942
};
4043

4144
export const generateVerifyInstanceUrl = (
4245
apiBaseUrl: string,
43-
address: string
44-
) => `${apiBaseUrl}/l2/contract-instances/${address}/verified-deployment`;
46+
address: string,
47+
) => `${apiBaseUrl}/l2/contract-instances/${address}`;

packages/contract-verification/src/instance-deployment/verify-payload.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export const verifyInstanceDeploymentPayload = async (
1717
instanceAddress: string;
1818
stringifiedArtifactJson: string;
1919
contractClassId: string;
20-
}
20+
},
2121
): Promise<boolean> => {
2222
const {
2323
stringifiedArtifactJson,
@@ -28,13 +28,13 @@ export const verifyInstanceDeploymentPayload = async (
2828
publicKeysString,
2929
} = payload;
3030
const artifact = loadContractArtifact(
31-
JSON.parse(stringifiedArtifactJson) as unknown as NoirCompiledContract
31+
JSON.parse(stringifiedArtifactJson) as unknown as NoirCompiledContract,
3232
);
3333

3434
const initFn = artifact.functions.find((fn) => fn.name === "constructor");
3535
const initializationHash = await computeInitializationHash(
3636
initFn,
37-
constructorArgs
37+
constructorArgs,
3838
);
3939
const saltedHash = await computeSaltedInitializationHash({
4040
initializationHash,
+12-7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { chicmozL2ContractInstanceVerifiedDeploymentArgumentsSchema } from "@chicmoz-pkg/types";
12
import { z } from "zod";
23

34
export type VerifyArtifactPayload = {
@@ -8,13 +9,17 @@ export type IsTokenArtifactResult = {
89
contractName: string;
910
details: string;
1011
};
11-
export const verifyInstanceDeploymentPayloadSchema = z.object({
12-
stringifiedArtifactJson: z.string().optional(),
13-
publicKeysString: z.string(),
14-
salt: z.string(),
15-
deployer: z.string(),
16-
constructorArgs: z.string().array(),
17-
});
12+
13+
export const verifyInstanceDeploymentPayloadSchema = z.lazy(() =>
14+
z.object({
15+
...chicmozL2ContractInstanceVerifiedDeploymentArgumentsSchema.omit({
16+
id: true,
17+
address: true,
18+
}).shape,
19+
stringifiedArtifactJson: z.string().optional(),
20+
}),
21+
);
22+
1823
export type VerifyInstanceDeploymentPayload = z.infer<
1924
typeof verifyInstanceDeploymentPayloadSchema
2025
>;

packages/types/src/aztec/l2Contract.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,17 @@ export type ChicmozL2ContractInstanceDeployedEvent = z.infer<
2323
typeof chicmozL2ContractInstanceDeployedEventSchema
2424
>;
2525

26-
export const chicmozL2ContractInstanceVerifiedDeploymentArguments = z.object({
26+
export const chicmozL2ContractInstanceVerifiedDeploymentArgumentsSchema = z.object({
2727
id: z.string().uuid().optional(),
2828
address: aztecAddressSchema,
2929
salt: frSchema,
3030
deployer: aztecAddressSchema,
3131
publicKeysString: z.string(),
32-
constructorArgs: z.string(),
32+
constructorArgs: z.string().array(),
3333
});
3434

3535
export type ChicmozL2ContractInstanceVerifiedDeploymentArgumnetsSchema = z.infer<
36-
typeof chicmozL2ContractInstanceVerifiedDeploymentArguments
36+
typeof chicmozL2ContractInstanceVerifiedDeploymentArgumentsSchema
3737
>;
3838

3939
export const chicmozL2ContractClassRegisteredEventSchema = z.object({

packages/types/src/aztec/special.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ import { chicmozL2BlockSchema } from "./l2Block.js";
77
import {
88
chicmozL2ContractClassRegisteredEventSchema,
99
chicmozL2ContractInstanceDeployedEventSchema,
10-
chicmozL2ContractInstanceVerifiedDeploymentArguments,
10+
chicmozL2ContractInstanceVerifiedDeploymentArgumentsSchema,
1111
} from "./l2Contract.js";
1212
import { chicmozL2TxEffectSchema } from "./l2TxEffect.js";
1313

14-
export const chicmozL2ContractInstanceDeployerMetadata = z.object({
14+
export const chicmozL2ContractInstanceDeployerMetadataSchema = z.object({
15+
// TODO: update schema with better/more info
1516
address: z.lazy(
1617
() => chicmozL2ContractInstanceDeployedEventSchema.shape.address
1718
),
@@ -21,19 +22,21 @@ export const chicmozL2ContractInstanceDeployerMetadata = z.object({
2122
creatorContact: z.string(),
2223
appUrl: z.string(),
2324
repoUrl: z.string(),
25+
uploadedAt: z.coerce.date(),
26+
reviewedAt: z.coerce.date().optional(),
2427
});
2528

26-
export type ChicmozL2VerifiedContractInctanceData = z.infer<
27-
typeof chicmozL2ContractInstanceDeployerMetadata
29+
export type ChicmozL2ContractInstanceDeployerMetadata = z.infer<
30+
typeof chicmozL2ContractInstanceDeployerMetadataSchema
2831
>;
2932

3033
export const chicmozL2ContractInstanceDeluxeSchema = z.object({
3134
...chicmozL2ContractInstanceDeployedEventSchema.shape,
3235
...chicmozL2ContractClassRegisteredEventSchema.shape,
3336
blockHeight: chicmozL2BlockSchema.shape.height.optional(),
34-
deployerMetadata: chicmozL2ContractInstanceDeployerMetadata.optional(),
37+
deployerMetadata: chicmozL2ContractInstanceDeployerMetadataSchema.optional(),
3538
verifiedDeploymentArguments:
36-
chicmozL2ContractInstanceVerifiedDeploymentArguments.optional(),
39+
chicmozL2ContractInstanceVerifiedDeploymentArgumentsSchema.optional(),
3740
});
3841

3942
export type ChicmozL2ContractInstanceDeluxe = z.infer<

services/event-cannon/src/cannon/scenarios/deploy-and-interact-token-contract.ts

+51-25
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
1-
import { Contract, DeploySentTx, waitForPXE } from "@aztec/aztec.js";
1+
import {
2+
AztecAddress,
3+
Contract,
4+
DeploySentTx,
5+
waitForPXE,
6+
} from "@aztec/aztec.js";
7+
import { TokenContract } from "@aztec/noir-contracts.js/Token";
8+
import * as tokenContractArtifactJson from "@aztec/noir-contracts.js/artifacts/token_contract-Token" assert { type: "json" };
29
import { logger } from "../../logger.js";
310
import { getAztecNodeClient, getPxe, getWallets } from "../pxe.js";
411
import {
512
deployContract,
613
logAndWaitForTx,
7-
registerContractClassArtifact,
14+
verifyContractInstanceDeployment,
815
} from "./utils/index.js";
9-
import { TokenContract } from "@aztec/noir-contracts.js/Token";
10-
import * as tokenContractArtifactJson from "@aztec/noir-contracts.js/artifacts/token_contract-Token" assert { type: "json" };
1116

1217
export async function run() {
1318
logger.info("===== TOKEN CONTRACT =====");
@@ -19,47 +24,68 @@ export async function run() {
1924
const tokenAdmin = namedWallets.alice.getAddress();
2025

2126
const contractLoggingName = "Token Contract";
27+
const constructorArgs: [AztecAddress, string, string, number] = [
28+
tokenAdmin,
29+
"lol",
30+
"LOL",
31+
9,
32+
];
2233
const tokenContract = await deployContract({
2334
contractLoggingName,
2435
deployFn: (): DeploySentTx<TokenContract> => {
2536
return TokenContract.deploy(
2637
deployerWallet,
27-
tokenAdmin,
28-
"lol",
29-
"LOL",
30-
9
38+
constructorArgs[0],
39+
constructorArgs[1],
40+
constructorArgs[2],
41+
constructorArgs[3],
3142
).send();
3243
},
3344
node: getAztecNodeClient(),
3445
});
3546

36-
registerContractClassArtifact(
47+
verifyContractInstanceDeployment({
3748
contractLoggingName,
38-
tokenContractArtifactJson,
39-
tokenContract.instance.contractClassId.toString(),
40-
tokenContract.instance.version
41-
).catch((err) => {
42-
logger.error(err);
49+
contractInstanceAddress: tokenContract.address.toString(),
50+
verifyArgs: {
51+
artifactObj: tokenContractArtifactJson,
52+
publicKeysString: tokenContract.instance.publicKeys.toString(),
53+
deployer: tokenContract.instance.deployer.toString(),
54+
salt: tokenContract.instance.salt.toString(),
55+
constructorArgs: constructorArgs.map((arg) => arg.toString()),
56+
},
57+
deployerMetadata: {
58+
contractIdentifier: contractLoggingName,
59+
details: "Token contract",
60+
creatorName: "Event Cannon",
61+
creatorContact:
62+
"email: [email protected], discord: test#1234, telegram: @test",
63+
appUrl: "https://aztec.network",
64+
repoUrl: "https://github.com/AztecProtocol/aztec-packages",
65+
reviewedAt: new Date(),
66+
},
67+
}).catch((err) => {
68+
logger.error(`Failed to verify contract instance deployment: ${err}`);
4369
});
4470

4571
await Promise.all([
4672
logAndWaitForTx(
4773
tokenContract.methods
4874
.mint_to_public(namedWallets.alice.getAddress(), 1000)
4975
.send(),
50-
"Mint to Alice"
76+
"Mint to Alice",
5177
),
5278
logAndWaitForTx(
5379
tokenContract.methods
5480
.mint_to_public(namedWallets.bob.getAddress(), 1000)
5581
.send(),
56-
"Mint to Bob"
82+
"Mint to Bob",
5783
),
5884
logAndWaitForTx(
5985
tokenContract.methods
6086
.mint_to_public(namedWallets.charlie.getAddress(), 1000)
6187
.send(),
62-
"Mint to Charlie"
88+
"Mint to Charlie",
6389
),
6490
]);
6591
const [balanceAlice, balanceBob, balanceCharlie] = await Promise.all([
@@ -83,19 +109,19 @@ export async function run() {
83109
const aliceContract = (await Contract.at(
84110
tokenContract.address,
85111
TokenContract.artifact,
86-
namedWallets.alice
112+
namedWallets.alice,
87113
)) as TokenContract;
88114

89115
const bobsTokenContract = (await Contract.at(
90116
tokenContract.address,
91117
TokenContract.artifact,
92-
namedWallets.bob
118+
namedWallets.bob,
93119
)) as TokenContract;
94120

95121
const charliesTokenContract = (await Contract.at(
96122
tokenContract.address,
97123
TokenContract.artifact,
98-
namedWallets.charlie
124+
namedWallets.charlie,
99125
)) as TokenContract;
100126

101127
let bobNonce = 0;
@@ -105,10 +131,10 @@ export async function run() {
105131
namedWallets.bob.getAddress(),
106132
namedWallets.alice.getAddress(),
107133
100,
108-
bobNonce
134+
bobNonce,
109135
)
110136
.send(),
111-
"Public transfer from Alice to Bob"
137+
"Public transfer from Alice to Bob",
112138
);
113139
bobNonce++;
114140

@@ -130,7 +156,7 @@ export async function run() {
130156
charliesTokenContract.methods
131157
.transfer_to_private(namedWallets.alice.getAddress(), 100)
132158
.send(),
133-
"Public to private transfer from Charlie to Alice"
159+
"Public to private transfer from Charlie to Alice",
134160
);
135161

136162
let aliceNonce = 0;
@@ -140,10 +166,10 @@ export async function run() {
140166
namedWallets.alice.getAddress(),
141167
namedWallets.bob.getAddress(),
142168
100,
143-
aliceNonce
169+
aliceNonce,
144170
)
145171
.send(),
146-
"Private transfer from Bob to Alice"
172+
"Private transfer from Bob to Alice",
147173
);
148174
aliceNonce++;
149175

0 commit comments

Comments
 (0)