@aztec-labs/protocol-contracts 6.0.0-nightly.20260829

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 (80) hide show
  1. package/README.md +7 -0
  2. package/artifacts/ContractClassRegistry.d.json.ts +5 -0
  3. package/artifacts/ContractClassRegistry.json +4206 -0
  4. package/artifacts/ContractInstanceRegistry.d.json.ts +5 -0
  5. package/artifacts/ContractInstanceRegistry.json +5544 -0
  6. package/artifacts/FeeJuice.d.json.ts +5 -0
  7. package/artifacts/FeeJuice.json +7356 -0
  8. package/dest/class-registry/contract_class_published_event.d.ts +20 -0
  9. package/dest/class-registry/contract_class_published_event.d.ts.map +1 -0
  10. package/dest/class-registry/contract_class_published_event.js +58 -0
  11. package/dest/class-registry/index.d.ts +6 -0
  12. package/dest/class-registry/index.d.ts.map +1 -0
  13. package/dest/class-registry/index.js +15 -0
  14. package/dest/class-registry/lazy.d.ts +7 -0
  15. package/dest/class-registry/lazy.d.ts.map +1 -0
  16. package/dest/class-registry/lazy.js +24 -0
  17. package/dest/fee-juice/index.d.ts +15 -0
  18. package/dest/fee-juice/index.d.ts.map +1 -0
  19. package/dest/fee-juice/index.js +26 -0
  20. package/dest/fee-juice/lazy.d.ts +6 -0
  21. package/dest/fee-juice/lazy.d.ts.map +1 -0
  22. package/dest/fee-juice/lazy.js +23 -0
  23. package/dest/index.d.ts +3 -0
  24. package/dest/index.d.ts.map +1 -0
  25. package/dest/index.js +2 -0
  26. package/dest/instance-registry/contract_instance_published_event.d.ts +22 -0
  27. package/dest/instance-registry/contract_instance_published_event.d.ts.map +1 -0
  28. package/dest/instance-registry/contract_instance_published_event.js +60 -0
  29. package/dest/instance-registry/contract_instance_updated_event.d.ts +17 -0
  30. package/dest/instance-registry/contract_instance_updated_event.d.ts.map +1 -0
  31. package/dest/instance-registry/contract_instance_updated_event.js +35 -0
  32. package/dest/instance-registry/index.d.ts +7 -0
  33. package/dest/instance-registry/index.d.ts.map +1 -0
  34. package/dest/instance-registry/index.js +15 -0
  35. package/dest/instance-registry/lazy.d.ts +8 -0
  36. package/dest/instance-registry/lazy.d.ts.map +1 -0
  37. package/dest/instance-registry/lazy.js +25 -0
  38. package/dest/make_protocol_contract.d.ts +9 -0
  39. package/dest/make_protocol_contract.d.ts.map +1 -0
  40. package/dest/make_protocol_contract.js +39 -0
  41. package/dest/protocol_contract.d.ts +20 -0
  42. package/dest/protocol_contract.d.ts.map +1 -0
  43. package/dest/protocol_contract.js +8 -0
  44. package/dest/protocol_contract_data.d.ts +28 -0
  45. package/dest/protocol_contract_data.d.ts.map +1 -0
  46. package/dest/protocol_contract_data.js +91 -0
  47. package/dest/provider/bundle.d.ts +9 -0
  48. package/dest/provider/bundle.d.ts.map +1 -0
  49. package/dest/provider/bundle.js +14 -0
  50. package/dest/provider/lazy.d.ts +7 -0
  51. package/dest/provider/lazy.d.ts.map +1 -0
  52. package/dest/provider/lazy.js +17 -0
  53. package/dest/provider/protocol_contracts_provider.d.ts +7 -0
  54. package/dest/provider/protocol_contracts_provider.d.ts.map +1 -0
  55. package/dest/provider/protocol_contracts_provider.js +1 -0
  56. package/dest/scripts/cleanup_artifacts.js +16 -0
  57. package/dest/scripts/generate_data.js +214 -0
  58. package/dest/tests/fixtures.d.ts +4 -0
  59. package/dest/tests/fixtures.d.ts.map +1 -0
  60. package/dest/tests/fixtures.js +16 -0
  61. package/package.json +107 -0
  62. package/src/class-registry/__snapshots__/README.md +9 -0
  63. package/src/class-registry/contract_class_published_event.ts +77 -0
  64. package/src/class-registry/index.ts +21 -0
  65. package/src/class-registry/lazy.ts +31 -0
  66. package/src/fee-juice/index.ts +37 -0
  67. package/src/fee-juice/lazy.ts +29 -0
  68. package/src/index.ts +2 -0
  69. package/src/instance-registry/__snapshots__/README.md +9 -0
  70. package/src/instance-registry/contract_instance_published_event.ts +74 -0
  71. package/src/instance-registry/contract_instance_updated_event.ts +44 -0
  72. package/src/instance-registry/index.ts +23 -0
  73. package/src/instance-registry/lazy.ts +32 -0
  74. package/src/make_protocol_contract.ts +50 -0
  75. package/src/protocol_contract.ts +35 -0
  76. package/src/protocol_contract_data.ts +101 -0
  77. package/src/provider/bundle.ts +21 -0
  78. package/src/provider/lazy.ts +21 -0
  79. package/src/provider/protocol_contracts_provider.ts +7 -0
  80. package/src/tests/fixtures.ts +19 -0
@@ -0,0 +1,31 @@
1
+ import { type ContractArtifact, loadContractArtifact } from '@aztec-labs/stdlib/abi';
2
+
3
+ import { makeProtocolContract } from '../make_protocol_contract.js';
4
+ import type { ProtocolContract } from '../protocol_contract.js';
5
+
6
+ export * from './contract_class_published_event.js';
7
+
8
+ let protocolContract: ProtocolContract;
9
+ let protocolContractArtifact: ContractArtifact;
10
+
11
+ export async function getContractClassRegistryArtifact(): Promise<ContractArtifact> {
12
+ if (!protocolContractArtifact) {
13
+ // Cannot assert this import as it's incompatible with bundlers like vite
14
+ // https://github.com/vitejs/vite/issues/19095#issuecomment-2566074352
15
+ // Even if now supported by all major browsers, the MIME type is replaced with
16
+ // "text/javascript"
17
+ // In the meantime, this lazy import is INCOMPATIBLE WITH NODEJS
18
+ const { default: contractClassRegistryJson } = await import('../../artifacts/ContractClassRegistry.json');
19
+ protocolContractArtifact = loadContractArtifact(contractClassRegistryJson);
20
+ }
21
+ return protocolContractArtifact;
22
+ }
23
+
24
+ /** Returns the canonical deployment of the auth registry. */
25
+ export async function getCanonicalClassRegistry(): Promise<ProtocolContract> {
26
+ if (!protocolContract) {
27
+ const contractClassRegistryArtifact = await getContractClassRegistryArtifact();
28
+ protocolContract = makeProtocolContract('ContractClassRegistry', contractClassRegistryArtifact);
29
+ }
30
+ return protocolContract;
31
+ }
@@ -0,0 +1,37 @@
1
+ import type { Fr } from '@aztec-labs/foundation/curves/bn254';
2
+ import { loadContractArtifact } from '@aztec-labs/stdlib/abi';
3
+ import type { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
4
+ import { computePublicDataTreeLeafSlot, deriveStorageSlotInMap } from '@aztec-labs/stdlib/hash';
5
+ import type { NoirCompiledContract } from '@aztec-labs/stdlib/noir';
6
+
7
+ import FeeJuiceJson from '../../artifacts/FeeJuice.json' with { type: 'json' };
8
+ import { makeProtocolContract } from '../make_protocol_contract.js';
9
+ import type { ProtocolContract } from '../protocol_contract.js';
10
+ import { ProtocolContractAddress } from '../protocol_contract_data.js';
11
+
12
+ export const FeeJuiceArtifact = loadContractArtifact(FeeJuiceJson as NoirCompiledContract);
13
+
14
+ let protocolContract: ProtocolContract;
15
+
16
+ /** Returns the canonical deployment of the contract. */
17
+ export function getCanonicalFeeJuice(): Promise<ProtocolContract> {
18
+ if (!protocolContract) {
19
+ protocolContract = makeProtocolContract('FeeJuice', FeeJuiceArtifact);
20
+ }
21
+ return Promise.resolve(protocolContract);
22
+ }
23
+
24
+ /**
25
+ * Computes the storage slot within the Fee Juice contract for the balance of the fee payer.
26
+ */
27
+ export function computeFeePayerBalanceStorageSlot(feePayer: AztecAddress): Promise<Fr> {
28
+ return deriveStorageSlotInMap(FeeJuiceArtifact.storageLayout.balances.slot, feePayer);
29
+ }
30
+
31
+ /**
32
+ * Computes the leaf slot in the public data tree for the balance of the fee payer in the Fee Juice.
33
+ */
34
+ export async function computeFeePayerBalanceLeafSlot(feePayer: AztecAddress): Promise<Fr> {
35
+ const balanceSlot = await computeFeePayerBalanceStorageSlot(feePayer);
36
+ return computePublicDataTreeLeafSlot(ProtocolContractAddress.FeeJuice, balanceSlot);
37
+ }
@@ -0,0 +1,29 @@
1
+ import { type ContractArtifact, loadContractArtifact } from '@aztec-labs/stdlib/abi';
2
+
3
+ import { makeProtocolContract } from '../make_protocol_contract.js';
4
+ import type { ProtocolContract } from '../protocol_contract.js';
5
+
6
+ let protocolContract: ProtocolContract;
7
+ let protocolContractArtifact: ContractArtifact;
8
+
9
+ export async function getFeeJuiceArtifact(): Promise<ContractArtifact> {
10
+ if (!protocolContractArtifact) {
11
+ // Cannot assert this import as it's incompatible with bundlers like vite
12
+ // https://github.com/vitejs/vite/issues/19095#issuecomment-2566074352
13
+ // Even if now supported by all major browsers, the MIME type is replaced with
14
+ // "text/javascript"
15
+ // In the meantime, this lazy import is INCOMPATIBLE WITH NODEJS
16
+ const { default: feeJuiceJson } = await import('../../artifacts/FeeJuice.json');
17
+ protocolContractArtifact = loadContractArtifact(feeJuiceJson);
18
+ }
19
+ return protocolContractArtifact;
20
+ }
21
+
22
+ /** Returns the canonical deployment of the auth registry. */
23
+ export async function getCanonicalFeeJuice(): Promise<ProtocolContract> {
24
+ if (!protocolContract) {
25
+ const feeJuiceArtifact = await getFeeJuiceArtifact();
26
+ protocolContract = makeProtocolContract('FeeJuice', feeJuiceArtifact);
27
+ }
28
+ return protocolContract;
29
+ }
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './protocol_contract.js';
2
+ export * from './protocol_contract_data.js';
@@ -0,0 +1,9 @@
1
+ # How to update these snapshots
2
+
3
+ (You probably need to have done a `./bootstrap.sh` at some point)
4
+
5
+ From the root:
6
+
7
+ `cd yarn-project/protocol-contracts`
8
+
9
+ `yarn test -u`
@@ -0,0 +1,74 @@
1
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
2
+ import { BufferReader } from '@aztec-labs/foundation/serialize';
3
+ import { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
4
+ import type { ContractInstanceWithAddress } from '@aztec-labs/stdlib/contract';
5
+ import { PublicKeys } from '@aztec-labs/stdlib/keys';
6
+ import type { PrivateLog } from '@aztec-labs/stdlib/logs';
7
+
8
+ import { CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG } from '../protocol_contract_data.js';
9
+
10
+ /** Event emitted from the ContractInstanceRegistry. */
11
+ export class ContractInstancePublishedEvent {
12
+ constructor(
13
+ public readonly address: AztecAddress,
14
+ public readonly version: number,
15
+ public readonly salt: Fr,
16
+ public readonly contractClassId: Fr,
17
+ public readonly initializationHash: Fr,
18
+ public readonly immutablesHash: Fr,
19
+ public readonly publicKeys: PublicKeys,
20
+ public readonly deployer: AztecAddress,
21
+ ) {}
22
+
23
+ static isContractInstancePublishedEvent(log: PrivateLog) {
24
+ return log.fields[0].equals(CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG);
25
+ }
26
+
27
+ static fromLog(log: PrivateLog) {
28
+ const bufferWithoutTag = log.toBuffer().subarray(32);
29
+ const reader = new BufferReader(bufferWithoutTag);
30
+ const address = reader.readObject(AztecAddress);
31
+ const version = reader.readObject(Fr).toNumber();
32
+ const salt = reader.readObject(Fr);
33
+ const contractClassId = reader.readObject(Fr);
34
+ const initializationHash = reader.readObject(Fr);
35
+ const immutablesHash = reader.readObject(Fr);
36
+ const publicKeys = reader.readObject(PublicKeys);
37
+ const deployer = reader.readObject(AztecAddress);
38
+
39
+ return new ContractInstancePublishedEvent(
40
+ address,
41
+ version,
42
+ salt,
43
+ contractClassId,
44
+ initializationHash,
45
+ immutablesHash,
46
+ publicKeys,
47
+ deployer,
48
+ );
49
+ }
50
+
51
+ toContractInstance(): ContractInstanceWithAddress {
52
+ if (this.version !== 2) {
53
+ throw new Error(`Unexpected contract instance version ${this.version}`);
54
+ }
55
+
56
+ return {
57
+ address: this.address,
58
+ version: this.version,
59
+ currentContractClassId: this.contractClassId,
60
+ originalContractClassId: this.contractClassId,
61
+ initializationHash: this.initializationHash,
62
+ immutablesHash: this.immutablesHash,
63
+ publicKeys: this.publicKeys,
64
+ salt: this.salt,
65
+ deployer: this.deployer,
66
+ };
67
+ }
68
+
69
+ public static extractContractInstanceEvents(logs: PrivateLog[]): ContractInstancePublishedEvent[] {
70
+ return logs
71
+ .filter(log => ContractInstancePublishedEvent.isContractInstancePublishedEvent(log))
72
+ .map(log => ContractInstancePublishedEvent.fromLog(log));
73
+ }
74
+ }
@@ -0,0 +1,44 @@
1
+ import { CONTRACT_INSTANCE_UPDATED_MAGIC_VALUE } from '@aztec-labs/constants';
2
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
3
+ import { FieldReader } from '@aztec-labs/foundation/serialize';
4
+ import { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
5
+ import type { ContractInstanceUpdateWithAddress } from '@aztec-labs/stdlib/contract';
6
+ import type { PublicLog } from '@aztec-labs/stdlib/logs';
7
+ import type { UInt64 } from '@aztec-labs/stdlib/types';
8
+
9
+ import { ProtocolContractAddress } from '../protocol_contract_data.js';
10
+
11
+ /** Event emitted from the ContractInstanceRegistry. */
12
+ export class ContractInstanceUpdatedEvent {
13
+ constructor(
14
+ public readonly address: AztecAddress,
15
+ public readonly prevContractClassId: Fr,
16
+ public readonly newContractClassId: Fr,
17
+ public readonly timestampOfChange: UInt64,
18
+ ) {}
19
+
20
+ static isContractInstanceUpdatedEvent(log: PublicLog) {
21
+ return (
22
+ log.contractAddress.equals(ProtocolContractAddress.ContractInstanceRegistry) &&
23
+ log.fields[0].toBigInt() === CONTRACT_INSTANCE_UPDATED_MAGIC_VALUE
24
+ );
25
+ }
26
+
27
+ static fromLog(log: PublicLog) {
28
+ const reader = new FieldReader(log.fields.slice(1) /* remove tag */);
29
+ const address = reader.readObject(AztecAddress);
30
+ const prevContractClassId = reader.readField();
31
+ const newContractClassId = reader.readField();
32
+ const timestampOfChange = reader.readField().toBigInt();
33
+ return new ContractInstanceUpdatedEvent(address, prevContractClassId, newContractClassId, timestampOfChange);
34
+ }
35
+
36
+ toContractInstanceUpdate(): ContractInstanceUpdateWithAddress {
37
+ return {
38
+ address: this.address,
39
+ prevContractClassId: this.prevContractClassId,
40
+ newContractClassId: this.newContractClassId,
41
+ timestampOfChange: this.timestampOfChange,
42
+ };
43
+ }
44
+ }
@@ -0,0 +1,23 @@
1
+ import { loadContractArtifact } from '@aztec-labs/stdlib/abi';
2
+ import type { NoirCompiledContract } from '@aztec-labs/stdlib/noir';
3
+
4
+ import ContractInstanceRegistryJson from '../../artifacts/ContractInstanceRegistry.json' with { type: 'json' };
5
+ import { makeProtocolContract } from '../make_protocol_contract.js';
6
+ import type { ProtocolContract } from '../protocol_contract.js';
7
+
8
+ export * from './contract_instance_published_event.js';
9
+ export * from './contract_instance_updated_event.js';
10
+
11
+ export const ContractInstanceRegistryArtifact = loadContractArtifact(
12
+ ContractInstanceRegistryJson as NoirCompiledContract,
13
+ );
14
+
15
+ let protocolContract: ProtocolContract;
16
+
17
+ /** Returns the canonical deployment of the contract. */
18
+ export function getCanonicalInstanceRegistry(): Promise<ProtocolContract> {
19
+ if (!protocolContract) {
20
+ protocolContract = makeProtocolContract('ContractInstanceRegistry', ContractInstanceRegistryArtifact);
21
+ }
22
+ return Promise.resolve(protocolContract);
23
+ }
@@ -0,0 +1,32 @@
1
+ import { type ContractArtifact, loadContractArtifact } from '@aztec-labs/stdlib/abi';
2
+
3
+ import { makeProtocolContract } from '../make_protocol_contract.js';
4
+ import type { ProtocolContract } from '../protocol_contract.js';
5
+
6
+ export * from './contract_instance_published_event.js';
7
+ export * from './contract_instance_updated_event.js';
8
+
9
+ let protocolContract: ProtocolContract;
10
+ let protocolContractArtifact: ContractArtifact;
11
+
12
+ export async function getContractInstanceRegistryArtifact(): Promise<ContractArtifact> {
13
+ if (!protocolContractArtifact) {
14
+ // Cannot assert this import as it's incompatible with bundlers like vite
15
+ // https://github.com/vitejs/vite/issues/19095#issuecomment-2566074352
16
+ // Even if now supported by all major browsers, the MIME type is replaced with
17
+ // "text/javascript"
18
+ // In the meantime, this lazy import is INCOMPATIBLE WITH NODEJS
19
+ const { default: contractInstanceRegistryJson } = await import('../../artifacts/ContractInstanceRegistry.json');
20
+ protocolContractArtifact = loadContractArtifact(contractInstanceRegistryJson);
21
+ }
22
+ return protocolContractArtifact;
23
+ }
24
+
25
+ /** Returns the canonical deployment of the auth registry. */
26
+ export async function getCanonicalInstanceRegistry(): Promise<ProtocolContract> {
27
+ if (!protocolContract) {
28
+ const contractInstanceRegistryArtifact = await getContractInstanceRegistryArtifact();
29
+ protocolContract = makeProtocolContract('ContractInstanceRegistry', contractInstanceRegistryArtifact);
30
+ }
31
+ return protocolContract;
32
+ }
@@ -0,0 +1,50 @@
1
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
2
+ import type { ContractArtifact } from '@aztec-labs/stdlib/abi';
3
+ import { PublicKeys } from '@aztec-labs/stdlib/keys';
4
+
5
+ import type { ProtocolContract } from './protocol_contract.js';
6
+ import {
7
+ ProtocolContractAddress,
8
+ ProtocolContractClassId,
9
+ ProtocolContractClassIdPreimage,
10
+ ProtocolContractInitializationHash,
11
+ type ProtocolContractName,
12
+ ProtocolContractPrivateFunctions,
13
+ ProtocolContractSalt,
14
+ } from './protocol_contract_data.js';
15
+
16
+ /**
17
+ * Reconstructs a ProtocolContract from precomputed data without performing any hash computations.
18
+ * Internal to the protocol-contracts package — not part of the public API.
19
+ */
20
+ export function makeProtocolContract(name: ProtocolContractName, artifact: ContractArtifact): ProtocolContract {
21
+ const address = ProtocolContractAddress[name];
22
+ const salt = ProtocolContractSalt[name];
23
+ const classId = ProtocolContractClassId[name];
24
+ const { artifactHash, privateFunctionsRoot, publicBytecodeCommitment } = ProtocolContractClassIdPreimage[name];
25
+ const initializationHash = ProtocolContractInitializationHash[name];
26
+
27
+ const contractClass = {
28
+ id: classId,
29
+ version: 1 as const,
30
+ artifactHash,
31
+ privateFunctionsRoot,
32
+ publicBytecodeCommitment,
33
+ packedBytecode: artifact.functions.find(f => f.name === 'public_dispatch')?.bytecode ?? Buffer.alloc(0),
34
+ privateFunctions: ProtocolContractPrivateFunctions[name],
35
+ };
36
+
37
+ const instance = {
38
+ version: 2 as const,
39
+ currentContractClassId: classId,
40
+ originalContractClassId: classId,
41
+ initializationHash,
42
+ immutablesHash: Fr.ZERO, // Protocol Contracts Have No Immutables
43
+ publicKeys: PublicKeys.default(),
44
+ salt,
45
+ deployer: address,
46
+ address,
47
+ };
48
+
49
+ return { instance, contractClass, artifact, address };
50
+ }
@@ -0,0 +1,35 @@
1
+ import type { Fr } from '@aztec-labs/foundation/curves/bn254';
2
+ import type { ContractArtifact } from '@aztec-labs/stdlib/abi';
3
+ import type { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
4
+ import type {
5
+ ContractClassIdPreimage,
6
+ ContractClassWithId,
7
+ ContractInstanceWithAddress,
8
+ } from '@aztec-labs/stdlib/contract';
9
+
10
+ import { ProtocolContractAddress, ProtocolContractClassId } from './protocol_contract_data.js';
11
+
12
+ /** Represents a canonical contract in the protocol. */
13
+ export interface ProtocolContract {
14
+ /** Canonical deployed instance. */
15
+ instance: ContractInstanceWithAddress;
16
+ /** Contract class of this contract. */
17
+ contractClass: ContractClassWithId & ContractClassIdPreimage;
18
+ /** Complete contract artifact. */
19
+ artifact: ContractArtifact;
20
+ /** Deployment address for the canonical instance. */
21
+ address: AztecAddress;
22
+ }
23
+
24
+ export function isProtocolContract(address: AztecAddress) {
25
+ return Object.values(ProtocolContractAddress).some(a => a.equals(address));
26
+ }
27
+
28
+ const protocolContractClassIds = new Set(Object.values(ProtocolContractClassId).map(id => id.toString()));
29
+
30
+ /** Returns whether the given contract class id belongs to a bundled protocol contract. */
31
+ export function isProtocolContractClass(classId: Fr): boolean {
32
+ return protocolContractClassIds.has(classId.toString());
33
+ }
34
+
35
+ export { type ProtocolContractsProvider } from './provider/protocol_contracts_provider.js';
@@ -0,0 +1,101 @@
1
+
2
+ // GENERATED FILE - DO NOT EDIT. RUN `yarn generate` or `yarn generate:data`
3
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
4
+ import { FunctionSelector } from '@aztec-labs/stdlib/abi';
5
+ import { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
6
+ import { ProtocolContracts } from '@aztec-labs/stdlib/tx';
7
+
8
+
9
+ export const protocolContractNames = [
10
+ 'ContractInstanceRegistry',
11
+ 'ContractClassRegistry',
12
+ 'FeeJuice'
13
+ ] as const;
14
+
15
+ export type ProtocolContractName = typeof protocolContractNames[number];
16
+
17
+
18
+
19
+ export const ProtocolContractSalt: Record<ProtocolContractName, Fr> = {
20
+ ContractInstanceRegistry: new Fr(1),
21
+ ContractClassRegistry: new Fr(1),
22
+ FeeJuice: new Fr(1)
23
+ };
24
+
25
+
26
+
27
+ export const ProtocolContractAddress: Record<ProtocolContractName, AztecAddress> = {
28
+ ContractInstanceRegistry: AztecAddress.fromBigIntUnsafe(2n),
29
+ ContractClassRegistry: AztecAddress.fromBigIntUnsafe(1n),
30
+ FeeJuice: AztecAddress.fromBigIntUnsafe(3n)
31
+ };
32
+
33
+
34
+
35
+ export const ProtocolContractDerivedAddress = {
36
+ ContractInstanceRegistry: AztecAddress.fromStringUnsafe('0x2d822c19c286cf1b249431a6c5ffb1864f627b469a6386574da83f44800d6c17'),
37
+ ContractClassRegistry: AztecAddress.fromStringUnsafe('0x1bbb52d2b4ac8c634f4b5026f2228580627c918895c369495f71caae13d996fe'),
38
+ FeeJuice: AztecAddress.fromStringUnsafe('0x1df1b0934b368c073f61d3cdb2de064766cd44ea4429f7920959f4a7758ef208')
39
+ };
40
+
41
+
42
+
43
+ export const ProtocolContractClassId: Record<ProtocolContractName, Fr> = {
44
+ ContractInstanceRegistry: Fr.fromString('0x28d8b9fff43315ce084cbd127532c8a1bb562fe1f147aee518c2c8ca822dcd4a'),
45
+ ContractClassRegistry: Fr.fromString('0x0026d0944a8b8204b840c37cf238b145bdd6b1af9daf59eeb5e689022a708e5e'),
46
+ FeeJuice: Fr.fromString('0x013e4ae6015db998dabfe78684c8b9e2fe413d316b36395091f53b9ea40f15ed')
47
+ };
48
+
49
+ export const ProtocolContractClassIdPreimage: Record<ProtocolContractName, { artifactHash: Fr; privateFunctionsRoot: Fr; publicBytecodeCommitment: Fr }> = {
50
+ ContractInstanceRegistry: {
51
+ artifactHash: Fr.fromString('0x19835337f0aee2e9042f3a0ae0d334bdb39ecb22794b40d2670d26b2ca72b98f'),
52
+ privateFunctionsRoot: Fr.fromString('0x05bb912d9d2871492d76c610472544d8219df70aa874768f9667e99861d7971f'),
53
+ publicBytecodeCommitment: Fr.fromString('0x1fd8380bb220e7d13db681da7e62c93b03add6754895a84c51d13fcde03e8d25'),
54
+ },
55
+ ContractClassRegistry: {
56
+ artifactHash: Fr.fromString('0x0d0ef0a61d9c829c306eee702aa7914299d58e7d3fc9f11d5aebd38c838fa1d0'),
57
+ privateFunctionsRoot: Fr.fromString('0x119c77be6d76c221642b63a337d94bf7b6ed8f872927ef3645c7e6b5002baa34'),
58
+ publicBytecodeCommitment: Fr.fromString('0x0ce4c618c3ed7f3a20410e618c06bb701e150af7fe28a3e92f68e7733809f33e'),
59
+ },
60
+ FeeJuice: {
61
+ artifactHash: Fr.fromString('0x100f61126a468cb2c4b5bad99a769256f7944830ea7b396225975a8628bd37a6'),
62
+ privateFunctionsRoot: Fr.fromString('0x1c4bf54a4a33e3b9eae6f816dfc81e128d76d2646807a5443598c8adbd47f81f'),
63
+ publicBytecodeCommitment: Fr.fromString('0x2968eb109f722c701d59d171c32d32b79199841f0044d6bbd77dc43bd513a770'),
64
+ }
65
+ };
66
+
67
+ export const ProtocolContractInitializationHash: Record<ProtocolContractName, Fr> = {
68
+ ContractInstanceRegistry: Fr.fromString('0x0000000000000000000000000000000000000000000000000000000000000000'),
69
+ ContractClassRegistry: Fr.fromString('0x0000000000000000000000000000000000000000000000000000000000000000'),
70
+ FeeJuice: Fr.fromString('0x0000000000000000000000000000000000000000000000000000000000000000')
71
+ };
72
+
73
+ export const ProtocolContractPrivateFunctions: Record<ProtocolContractName, { selector: FunctionSelector; vkHash: Fr }[]> = {
74
+ ContractInstanceRegistry: [{ selector: FunctionSelector.fromField(Fr.fromString('0x0000000000000000000000000000000000000000000000000000000077cff62f')), vkHash: Fr.fromString('0x19172c0acecd517dd8995c2e36178ca2aa16cbe001c3606d8cd848776ab80d23') }],
75
+ ContractClassRegistry: [{ selector: FunctionSelector.fromField(Fr.fromString('0x000000000000000000000000000000000000000000000000000000006934ed0d')), vkHash: Fr.fromString('0x1241fdbf61631c59b977bb6a520cafe3169604036705b8680dea59f05fb71251') }],
76
+ FeeJuice: [{ selector: FunctionSelector.fromField(Fr.fromString('0x00000000000000000000000000000000000000000000000000000000cbe67243')), vkHash: Fr.fromString('0x0bdf2e5c4467f295f8defb436546a7f2e642e7fe75786d0d54aef497b76527a1') }, { selector: FunctionSelector.fromField(Fr.fromString('0x00000000000000000000000000000000000000000000000000000000e8d374b6')), vkHash: Fr.fromString('0x2616a94d2d2981737c31ed7d74b9fd32ddc8376bf436dd60fb2507662b47c6dd') }]
77
+ };
78
+
79
+
80
+
81
+ export const ProtocolContractsList = new ProtocolContracts([
82
+ AztecAddress.fromStringUnsafe('0x1bbb52d2b4ac8c634f4b5026f2228580627c918895c369495f71caae13d996fe'),
83
+ AztecAddress.fromStringUnsafe('0x2d822c19c286cf1b249431a6c5ffb1864f627b469a6386574da83f44800d6c17'),
84
+ AztecAddress.fromStringUnsafe('0x1df1b0934b368c073f61d3cdb2de064766cd44ea4429f7920959f4a7758ef208'),
85
+ AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000'),
86
+ AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000'),
87
+ AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000'),
88
+ AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000'),
89
+ AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000'),
90
+ AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000'),
91
+ AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000'),
92
+ AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000')
93
+ ]);
94
+
95
+ export const protocolContractsHash = Fr.fromString('0x14cec0ae6f31e913c3be04691c6d49c3ec07b3f2d024c9558693ea62fc530bbf');
96
+
97
+
98
+
99
+ export const CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG = Fr.fromHexString('0x1a7e1badb79abdd38c684b3c8306ffe7ecb33c69e3380d9855730aaaa83a21a8');
100
+
101
+
@@ -0,0 +1,21 @@
1
+ import type { ContractArtifact } from '@aztec-labs/stdlib/abi';
2
+
3
+ import { ContractClassRegistryArtifact } from '../class-registry/index.js';
4
+ import { FeeJuiceArtifact } from '../fee-juice/index.js';
5
+ import { ContractInstanceRegistryArtifact } from '../instance-registry/index.js';
6
+ import { makeProtocolContract } from '../make_protocol_contract.js';
7
+ import type { ProtocolContract } from '../protocol_contract.js';
8
+ import type { ProtocolContractName } from '../protocol_contract_data.js';
9
+ import type { ProtocolContractsProvider } from './protocol_contracts_provider.js';
10
+
11
+ export const ProtocolContractArtifact: Record<ProtocolContractName, ContractArtifact> = {
12
+ ContractInstanceRegistry: ContractInstanceRegistryArtifact,
13
+ ContractClassRegistry: ContractClassRegistryArtifact,
14
+ FeeJuice: FeeJuiceArtifact,
15
+ };
16
+
17
+ export class BundledProtocolContractsProvider implements ProtocolContractsProvider {
18
+ getProtocolContractArtifact(name: ProtocolContractName): Promise<ProtocolContract> {
19
+ return Promise.resolve(makeProtocolContract(name, ProtocolContractArtifact[name]));
20
+ }
21
+ }
@@ -0,0 +1,21 @@
1
+ import { getCanonicalClassRegistry } from '../class-registry/lazy.js';
2
+ import { getCanonicalFeeJuice } from '../fee-juice/lazy.js';
3
+ import { getCanonicalInstanceRegistry } from '../instance-registry/lazy.js';
4
+ import type { ProtocolContract } from '../protocol_contract.js';
5
+ import type { ProtocolContractName } from '../protocol_contract_data.js';
6
+ import type { ProtocolContractsProvider } from './protocol_contracts_provider.js';
7
+
8
+ export class LazyProtocolContractsProvider implements ProtocolContractsProvider {
9
+ getProtocolContractArtifact(name: ProtocolContractName): Promise<ProtocolContract> {
10
+ switch (name) {
11
+ case 'ContractInstanceRegistry':
12
+ return getCanonicalInstanceRegistry();
13
+ case 'ContractClassRegistry':
14
+ return getCanonicalClassRegistry();
15
+ case 'FeeJuice':
16
+ return getCanonicalFeeJuice();
17
+ default:
18
+ throw new Error(`Unknown protocol contract name: ${name}`);
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,7 @@
1
+ import type { ProtocolContract } from '../protocol_contract.js';
2
+ import type { ProtocolContractName } from '../protocol_contract_data.js';
3
+
4
+ /** Returns the canonical deployment of a given artifact. */
5
+ export interface ProtocolContractsProvider {
6
+ getProtocolContractArtifact(name: ProtocolContractName): Promise<ProtocolContract>;
7
+ }
@@ -0,0 +1,19 @@
1
+ import { readFileSync } from 'fs';
2
+ import { dirname, resolve } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+
5
+ // Generated from end-to-end/src/automine/contracts/deploy/contract_class_registration.test.ts with AZTEC_GENERATE_TEST_DATA=1
6
+ export function getSampleContractClassPublishedEventPayload(): Buffer {
7
+ const path = getPathToFixture('ContractClassPublishedEventData.hex');
8
+ return Buffer.from(readFileSync(path).toString(), 'hex');
9
+ }
10
+
11
+ // Generated from end-to-end/src/automine/contracts/deploy/contract_class_registration.test.ts with AZTEC_GENERATE_TEST_DATA=1
12
+ export function getSampleContractInstancePublishedEventPayload(): Buffer {
13
+ const path = getPathToFixture('ContractInstancePublishedEventData.hex');
14
+ return Buffer.from(readFileSync(path).toString(), 'hex');
15
+ }
16
+
17
+ export function getPathToFixture(name: string) {
18
+ return resolve(dirname(fileURLToPath(import.meta.url)), `../../fixtures/${name}`);
19
+ }