Skip to content

Commit 65a5e6b

Browse files
committed
update publish contract instance
1 parent 3af8652 commit 65a5e6b

9 files changed

Lines changed: 34 additions & 16 deletions

File tree

noir-projects/aztec-nr/aztec/src/publish_contract_instance.nr

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,25 @@ pub fn publish_contract_instance_for_public_execution(context: &mut PrivateConte
2525
// ../../yarn-project/node_modules/.bin/aztec-cli codegen
2626
// target/contract_instance_registry_contract-ContractInstanceRegistry.json --nr -o
2727
// ./contracts/contract_instance_registry_contract/src/interface
28-
let mut serialized_args = [0; 16];
28+
let mut serialized_args = [0; 17];
2929
serialized_args[0] = instance.salt;
3030
serialized_args[1] = instance.contract_class_id.to_field();
3131
serialized_args[2] = instance.initialization_hash;
32+
serialized_args[3] = instance.immutables_hash;
3233

3334
let serialized_public_keys = instance.public_keys.serialize();
3435

3536
for i in 0..12 {
36-
serialized_args[i + 3] = serialized_public_keys[i];
37+
serialized_args[i + 4] = serialized_public_keys[i];
3738
}
3839

39-
serialized_args[15] = universal_deploy as Field;
40+
serialized_args[16] = universal_deploy as Field;
4041

4142
let _call_result = context.call_private_function(
4243
CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS,
4344
comptime {
4445
FunctionSelector::from_signature(
45-
"publish_for_public_execution(Field,(Field),Field,(((Field,Field,bool)),((Field,Field,bool)),((Field,Field,bool)),((Field,Field,bool))),bool)",
46+
"publish_for_public_execution(Field,(Field),Field,Field,(((Field,Field,bool)),((Field,Field,bool)),((Field,Field,bool)),((Field,Field,bool))),bool)",
4647
)
4748
},
4849
serialized_args,

noir-projects/noir-contracts/contracts/protocol/contract_instance_registry_contract/src/main.nr

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,23 @@ pub contract ContractInstanceRegistry {
3232
salt: Field,
3333
contract_class_id: ContractClassId,
3434
initialization_hash: Field,
35+
immutables_hash: Field,
3536
public_keys: PublicKeys,
3637
deployer: AztecAddress,
3738
}
3839

3940
// Custom serialization is required because we don't want to waste one field for the `is_infinite` flag of public
4041
// key points (public key points will never be the infinity point).
4142
impl ContractInstancePublished {
42-
fn serialize_non_standard(self) -> [Field; 15] {
43+
fn serialize_non_standard(self) -> [Field; 16] {
4344
[
4445
self.CONTRACT_INSTANCE_PUBLISHED_MAGIC_VALUE,
4546
self.address.to_field(),
4647
self.version.to_field(),
4748
self.salt,
4849
self.contract_class_id.to_field(),
4950
self.initialization_hash,
51+
self.immutables_hash,
5052
self.public_keys.npk_m.serialize()[0],
5153
self.public_keys.npk_m.serialize()[1],
5254
self.public_keys.ivpk_m.serialize()[0],
@@ -77,7 +79,8 @@ pub contract ContractInstanceRegistry {
7779

7880
/// Publishes a new contract instance.
7981
///
80-
/// The caller provides deployment parameters (salt, class_id, init_hash, public_keys, universal_deploy).
82+
/// The caller provides deployment parameters (salt, class_id, init_hash, immutables_hash, public_keys,
83+
/// universal_deploy).
8184
/// The `universal_deploy` flag controls whether the deployer address is bound into the contract address:
8285
/// when true, deployer is zero (anyone can deploy the same instance); when false, deployer is the caller.
8386
///
@@ -95,6 +98,7 @@ pub contract ContractInstanceRegistry {
9598
salt: Field,
9699
contract_class_id: ContractClassId,
97100
initialization_hash: Field,
101+
immutables_hash: Field,
98102
public_keys: PublicKeys,
99103
universal_deploy: bool,
100104
) -> return_data aztec::protocol::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs {
@@ -103,7 +107,9 @@ pub contract ContractInstanceRegistry {
103107
// body, I have removed that check.
104108
assert_compatible_oracle_version();
105109

106-
let serialized_params: [Field; 16] = [salt, contract_class_id.to_field(), initialization_hash]
110+
// 4 prefix fields (salt, class_id, init_hash, immutables_hash) + 12 public-key fields + 1 universal_deploy
111+
// flag.
112+
let serialized_params: [Field; 17] = [salt, contract_class_id.to_field(), initialization_hash, immutables_hash]
107113
.concat(public_keys.serialize())
108114
.concat([universal_deploy.to_field()]);
109115

@@ -146,17 +152,15 @@ pub contract ContractInstanceRegistry {
146152
address,
147153
public_keys,
148154
initialization_hash,
155+
immutables_hash,
149156
salt,
150157
deployer,
151158
version: 2,
152159
};
153160
let payload = event.serialize_non_standard();
154161
debug_log_format("ContractInstancePublished: {}", payload);
155-
// We pad the payload with [0] to match the length required by emit_private_log. Since the log is not
156-
// encrypted, padding with zero rather than a random value is acceptable (we don't care about privacy here).
157-
let padded_log = payload.concat([0]);
158162
let length = payload.len();
159-
context.emit_private_log(padded_log, length);
163+
context.emit_private_log(payload, length);
160164

161165
// MACRO CODE START
162166
context.finish()
@@ -307,6 +311,7 @@ pub contract ContractInstanceRegistry {
307311
pub _salt: Field,
308312
pub _contract_class_id: ContractClassId,
309313
pub _initialization_hash: Field,
314+
pub _immutables_hash: Field,
310315
pub _public_keys: PublicKeys,
311316
pub _universal_deploy: bool,
312317
}

noir-projects/noir-contracts/contracts/protocol_interface/contract_instance_registry_interface/src/main.nr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ pub contract ContractInstanceRegistry {
2525
salt: Field,
2626
contract_class_id: ContractClassId,
2727
initialization_hash: Field,
28+
immutables_hash: Field,
2829
public_keys: PublicKeys,
2930
universal_deploy: bool,
3031
) {}

yarn-project/aztec.js/src/deployment/publish_instance.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export function publishInstance(wallet: Wallet, instance: ContractInstanceWithAd
1717
salt,
1818
contractClassId,
1919
instance.initializationHash,
20+
instance.immutablesHash,
2021
publicKeys,
2122
isUniversalDeploy,
2223
);

yarn-project/p2p/src/msg_validators/tx_validator/contract_instance_validator.test.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,23 @@ describe('ContractInstanceTxValidator', () => {
3232

3333
/**
3434
* Builds a PrivateLog encoding a ContractInstancePublishedEvent.
35-
* Layout: [tag, address, version, salt, contractClassId, initializationHash, ...publicKeys(8 fields), deployer]
35+
* Layout: [tag, address, version, salt, contractClassId, initializationHash, immutablesHash, ...publicKeys(8 fields), deployer]
3636
*/
3737
async function buildContractInstanceLog(opts?: { address?: AztecAddress }): Promise<PrivateLog> {
3838
const salt = Fr.random();
3939
const contractClassId = Fr.random();
4040
const initializationHash = Fr.random();
4141
const publicKeys = await PublicKeys.random();
4242
const deployer = await AztecAddress.random();
43+
const immutablesHash = Fr.random();
4344

4445
const instance = {
4546
version: 2 as const,
4647
salt,
4748
currentContractClassId: contractClassId,
4849
originalContractClassId: contractClassId,
4950
initializationHash,
50-
immutablesHash: Fr.ZERO,
51+
immutablesHash,
5152
publicKeys,
5253
deployer,
5354
};
@@ -71,6 +72,7 @@ describe('ContractInstanceTxValidator', () => {
7172
salt,
7273
contractClassId,
7374
initializationHash,
75+
immutablesHash,
7476
...publicKeysFields,
7577
deployer.toField(),
7678
];

yarn-project/protocol-contracts/fixtures/ContractClassPublishedEventData.hex

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
1a7e1badb79abdd38c684b3c8306ffe7ecb33c69e3380d9855730aaaa83a21a821e212810f887382b564c453919235ecc04ff03f9c5127ac9a630a3fc62cfbbb0000000000000000000000000000000000000000000000000000000000000002108abf493e0af91750b53cd462defc3373f1a522e982af55b0c8ec7d20cf03931c2459719688b73599862bb4192cf567006eaf1fd7382d84f842a6f3616b326c0fb36d433fc86c98e17d214b1024303def3bb1e8fa412bc6e796eb1366b5f55b1366c504bbb3b3bb5d7246d9e082468eae37d93c38705b9eb4ef8bb76dc9b98005c6d6a962e4d7a458aa232dab86841ebcfe4d342556f270f6b2452fd87581bb1e415b163a4af0578cf70ab19e836504a74de9ea3e0c94373ca781436155bfc31fe218da6de686b7a39b092364894c6c2246fee50d0ff9832294cd6b792b8f421aa402e7eafa5c5d6ed9454c794e744eabf3b0c5ed84a35567fbe7509552181808afab9b331786e21a60f1f237a7a0f5457ce547160b82ace9a58a800b170fc1289752f4904779a603001cd6fab021079a04e18f0740eb0e1009088199178d1f26814d31374c3e5c551e28a5467feb67155bb2be160d80ca851babfa60501e61000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f
1+
<<<<<<< HEAD
2+
1a7e1badb79abdd38c684b3c8306ffe7ecb33c69e3380d9855730aaaa83a21a821e212810f887382b564c453919235ecc04ff03f9c5127ac9a630a3fc62cfbbb0000000000000000000000000000000000000000000000000000000000000002108abf493e0af91750b53cd462defc3373f1a522e982af55b0c8ec7d20cf03931c2459719688b73599862bb4192cf567006eaf1fd7382d84f842a6f3616b326c0fb36d433fc86c98e17d214b1024303def3bb1e8fa412bc6e796eb1366b5f55b1366c504bbb3b3bb5d7246d9e082468eae37d93c38705b9eb4ef8bb76dc9b98005c6d6a962e4d7a458aa232dab86841ebcfe4d342556f270f6b2452fd87581bb1e415b163a4af0578cf70ab19e836504a74de9ea3e0c94373ca781436155bfc31fe218da6de686b7a39b092364894c6c2246fee50d0ff9832294cd6b792b8f421aa402e7eafa5c5d6ed9454c794e744eabf3b0c5ed84a35567fbe7509552181808afab9b331786e21a60f1f237a7a0f5457ce547160b82ace9a58a800b170fc1289752f4904779a603001cd6fab021079a04e18f0740eb0e1009088199178d1f26814d31374c3e5c551e28a5467feb67155bb2be160d80ca851babfa60501e61000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f
3+
=======
4+
1a7e1badb79abdd38c684b3c8306ffe7ecb33c69e3380d9855730aaaa83a21a81d5e5f26df04985e1e10cc35598f2a5e235db5d5bc878f8313bd1b59638d202e0000000000000000000000000000000000000000000000000000000000000001207f9c32ffa6c3aa881955008630e8be37f6a4625d105e82c368b95717e0ea4920e4c2b3c8d6e6037459a9fc71fb8888df4d9719a5dbe500c8f518458d59a6a42640b9cc065e64d5c85cf711a6404f41b7cdfb51f85cbe121530f199421a3d04000000000000000000000000000000000000000000000000000000000000000016986a92fc54ef48775deb454855cac70efc5aef92914db722fcdc3c473732a9120fd2f810c1a2d4238c84ae847e484a1cc740bc4b853fba3ade1095f9b3f892111ce9d1f1c347d2dab00615dda914a69a0090eb6a9ba17f4f45d2011bae44370166a36c3ae2f0265d12aa6da4a5541c6419d73a4b047d3f2205f026c3a196d32734b57f09e8d1b48cdac204bdbe716a23aec7e93cdec73de26f5ae1a3187cad1a72299e3000e225612550ef3e0cabd4c1a677d5dd6cf042a815d56356092d721c3f37afec630f55d5e70195952108ff2a422b9a73d00b0e6a57de6214f409fe2b4dbb22e31855e426cbfaec9534450c7720b3bccd78b5fcc268c72b495a1e22000000000000000000000000000000000000000000000000000000000000000000000010
5+
>>>>>>> 0d5c37bd6c (update publish contract instance)

yarn-project/protocol-contracts/src/instance-registry/contract_instance_published_event.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export class ContractInstancePublishedEvent {
1515
public readonly salt: Fr,
1616
public readonly contractClassId: Fr,
1717
public readonly initializationHash: Fr,
18+
public readonly immutablesHash: Fr,
1819
public readonly publicKeys: PublicKeys,
1920
public readonly deployer: AztecAddress,
2021
) {}
@@ -31,6 +32,7 @@ export class ContractInstancePublishedEvent {
3132
const salt = reader.readObject(Fr);
3233
const contractClassId = reader.readObject(Fr);
3334
const initializationHash = reader.readObject(Fr);
35+
const immutablesHash = reader.readObject(Fr);
3436
const publicKeys = reader.readObject(PublicKeys);
3537
const deployer = reader.readObject(AztecAddress);
3638

@@ -40,6 +42,7 @@ export class ContractInstancePublishedEvent {
4042
salt,
4143
contractClassId,
4244
initializationHash,
45+
immutablesHash,
4346
publicKeys,
4447
deployer,
4548
);
@@ -56,10 +59,10 @@ export class ContractInstancePublishedEvent {
5659
currentContractClassId: this.contractClassId,
5760
originalContractClassId: this.contractClassId,
5861
initializationHash: this.initializationHash,
62+
immutablesHash: this.immutablesHash,
5963
publicKeys: this.publicKeys,
6064
salt: this.salt,
6165
deployer: this.deployer,
62-
immutablesHash: Fr.zero(),
6366
};
6467
}
6568

yarn-project/simulator/src/public/fixtures/utils.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ export async function addNewContractInstanceToTx(
252252
new Fr(contractInstance.salt),
253253
contractInstance.currentContractClassId,
254254
contractInstance.initializationHash,
255+
contractInstance.immutablesHash,
255256
...publicKeysAsFields,
256257
contractInstance.deployer.toField(),
257258
];

0 commit comments

Comments
 (0)