Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,24 +25,25 @@ pub fn publish_contract_instance_for_public_execution(context: &mut PrivateConte
// ../../yarn-project/node_modules/.bin/aztec-cli codegen
// target/contract_instance_registry_contract-ContractInstanceRegistry.json --nr -o
// ./contracts/contract_instance_registry_contract/src/interface
let mut serialized_args = [0; 16];
let mut serialized_args = [0; 17];
serialized_args[0] = instance.salt;
serialized_args[1] = instance.contract_class_id.to_field();
serialized_args[2] = instance.initialization_hash;
serialized_args[3] = instance.immutables_hash;

let serialized_public_keys = instance.public_keys.serialize();

for i in 0..12 {
serialized_args[i + 3] = serialized_public_keys[i];
serialized_args[i + 4] = serialized_public_keys[i];
}

serialized_args[15] = universal_deploy as Field;
serialized_args[16] = universal_deploy as Field;

let _call_result = context.call_private_function(
CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS,
comptime {
FunctionSelector::from_signature(
"publish_for_public_execution(Field,(Field),Field,(((Field,Field,bool)),((Field,Field,bool)),((Field,Field,bool)),((Field,Field,bool))),bool)",
"publish_for_public_execution(Field,(Field),Field,Field,(((Field,Field,bool)),((Field,Field,bool)),((Field,Field,bool)),((Field,Field,bool))),bool)",
)
},
serialized_args,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,21 +32,23 @@ pub contract ContractInstanceRegistry {
salt: Field,
contract_class_id: ContractClassId,
initialization_hash: Field,
immutables_hash: Field,
public_keys: PublicKeys,
deployer: AztecAddress,
}

// Custom serialization is required because we don't want to waste one field for the `is_infinite` flag of public
// key points (public key points will never be the infinity point).
impl ContractInstancePublished {
fn serialize_non_standard(self) -> [Field; 15] {
fn serialize_non_standard(self) -> [Field; 16] {
[
self.CONTRACT_INSTANCE_PUBLISHED_MAGIC_VALUE,
self.address.to_field(),
self.version.to_field(),
self.salt,
self.contract_class_id.to_field(),
self.initialization_hash,
self.immutables_hash,
self.public_keys.npk_m.serialize()[0],
self.public_keys.npk_m.serialize()[1],
self.public_keys.ivpk_m.serialize()[0],
Expand Down Expand Up @@ -77,7 +79,8 @@ pub contract ContractInstanceRegistry {

/// Publishes a new contract instance.
///
/// The caller provides deployment parameters (salt, class_id, init_hash, public_keys, universal_deploy).
/// The caller provides deployment parameters (salt, class_id, init_hash, immutables_hash, public_keys,
/// universal_deploy).
/// The `universal_deploy` flag controls whether the deployer address is bound into the contract address:
/// when true, deployer is zero (anyone can deploy the same instance); when false, deployer is the caller.
///
Expand All @@ -95,6 +98,7 @@ pub contract ContractInstanceRegistry {
salt: Field,
contract_class_id: ContractClassId,
initialization_hash: Field,
immutables_hash: Field,
public_keys: PublicKeys,
universal_deploy: bool,
) -> return_data aztec::protocol::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs {
Expand All @@ -103,7 +107,9 @@ pub contract ContractInstanceRegistry {
// body, I have removed that check.
assert_compatible_oracle_version();

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

Expand Down Expand Up @@ -146,17 +152,15 @@ pub contract ContractInstanceRegistry {
address,
public_keys,
initialization_hash,
immutables_hash,
salt,
deployer,
version: 1,
};
let payload = event.serialize_non_standard();
debug_log_format("ContractInstancePublished: {}", payload);
// We pad the payload with [0] to match the length required by emit_private_log. Since the log is not
// encrypted, padding with zero rather than a random value is acceptable (we don't care about privacy here).
let padded_log = payload.concat([0]);
let length = payload.len();
context.emit_private_log(padded_log, length);
context.emit_private_log(payload, length);

// MACRO CODE START
context.finish()
Expand Down Expand Up @@ -307,6 +311,7 @@ pub contract ContractInstanceRegistry {
pub _salt: Field,
pub _contract_class_id: ContractClassId,
pub _initialization_hash: Field,
pub _immutables_hash: Field,
pub _public_keys: PublicKeys,
pub _universal_deploy: bool,
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ pub contract ContractInstanceRegistry {
salt: Field,
contract_class_id: ContractClassId,
initialization_hash: Field,
immutables_hash: Field,
public_keys: PublicKeys,
universal_deploy: bool,
) {}
Expand Down
1 change: 1 addition & 0 deletions yarn-project/aztec.js/src/deployment/publish_instance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export function publishInstance(wallet: Wallet, instance: ContractInstanceWithAd
salt,
contractClassId,
instance.initializationHash,
instance.immutablesHash,
publicKeys,
isUniversalDeploy,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,22 +32,23 @@ describe('ContractInstanceTxValidator', () => {

/**
* Builds a PrivateLog encoding a ContractInstancePublishedEvent.
* Layout: [tag, address, version, salt, contractClassId, initializationHash, ...publicKeys(8 fields), deployer]
* Layout: [tag, address, version, salt, contractClassId, initializationHash, immutablesHash, ...publicKeys(8 fields), deployer]
*/
async function buildContractInstanceLog(opts?: { address?: AztecAddress }): Promise<PrivateLog> {
const salt = Fr.random();
const contractClassId = Fr.random();
const initializationHash = Fr.random();
const publicKeys = await PublicKeys.random();
const deployer = await AztecAddress.random();
const immutablesHash = Fr.random();

const instance = {
version: 1 as const,
salt,
currentContractClassId: contractClassId,
originalContractClassId: contractClassId,
initializationHash,
immutablesHash: Fr.ZERO,
immutablesHash,
publicKeys,
deployer,
};
Expand All @@ -71,6 +72,7 @@ describe('ContractInstanceTxValidator', () => {
salt,
contractClassId,
initializationHash,
immutablesHash,
...publicKeysFields,
deployer.toField(),
];
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1 +1 @@
1a7e1badb79abdd38c684b3c8306ffe7ecb33c69e3380d9855730aaaa83a21a821e212810f887382b564c453919235ecc04ff03f9c5127ac9a630a3fc62cfbbb0000000000000000000000000000000000000000000000000000000000000001108abf493e0af91750b53cd462defc3373f1a522e982af55b0c8ec7d20cf03931c2459719688b73599862bb4192cf567006eaf1fd7382d84f842a6f3616b326c0fb36d433fc86c98e17d214b1024303def3bb1e8fa412bc6e796eb1366b5f55b1366c504bbb3b3bb5d7246d9e082468eae37d93c38705b9eb4ef8bb76dc9b98005c6d6a962e4d7a458aa232dab86841ebcfe4d342556f270f6b2452fd87581bb1e415b163a4af0578cf70ab19e836504a74de9ea3e0c94373ca781436155bfc31fe218da6de686b7a39b092364894c6c2246fee50d0ff9832294cd6b792b8f421aa402e7eafa5c5d6ed9454c794e744eabf3b0c5ed84a35567fbe7509552181808afab9b331786e21a60f1f237a7a0f5457ce547160b82ace9a58a800b170fc1289752f4904779a603001cd6fab021079a04e18f0740eb0e1009088199178d1f26814d31374c3e5c551e28a5467feb67155bb2be160d80ca851babfa60501e61000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f
1a7e1badb79abdd38c684b3c8306ffe7ecb33c69e3380d9855730aaaa83a21a81d5e5f26df04985e1e10cc35598f2a5e235db5d5bc878f8313bd1b59638d202e0000000000000000000000000000000000000000000000000000000000000001207f9c32ffa6c3aa881955008630e8be37f6a4625d105e82c368b95717e0ea4920e4c2b3c8d6e6037459a9fc71fb8888df4d9719a5dbe500c8f518458d59a6a42640b9cc065e64d5c85cf711a6404f41b7cdfb51f85cbe121530f199421a3d04000000000000000000000000000000000000000000000000000000000000000016986a92fc54ef48775deb454855cac70efc5aef92914db722fcdc3c473732a9120fd2f810c1a2d4238c84ae847e484a1cc740bc4b853fba3ade1095f9b3f892111ce9d1f1c347d2dab00615dda914a69a0090eb6a9ba17f4f45d2011bae44370166a36c3ae2f0265d12aa6da4a5541c6419d73a4b047d3f2205f026c3a196d32734b57f09e8d1b48cdac204bdbe716a23aec7e93cdec73de26f5ae1a3187cad1a72299e3000e225612550ef3e0cabd4c1a677d5dd6cf042a815d56356092d721c3f37afec630f55d5e70195952108ff2a422b9a73d00b0e6a57de6214f409fe2b4dbb22e31855e426cbfaec9534450c7720b3bccd78b5fcc268c72b495a1e22000000000000000000000000000000000000000000000000000000000000000000000010
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export class ContractInstancePublishedEvent {
public readonly salt: Fr,
public readonly contractClassId: Fr,
public readonly initializationHash: Fr,
public readonly immutablesHash: Fr,
public readonly publicKeys: PublicKeys,
public readonly deployer: AztecAddress,
) {}
Expand All @@ -31,6 +32,7 @@ export class ContractInstancePublishedEvent {
const salt = reader.readObject(Fr);
const contractClassId = reader.readObject(Fr);
const initializationHash = reader.readObject(Fr);
const immutablesHash = reader.readObject(Fr);
const publicKeys = reader.readObject(PublicKeys);
const deployer = reader.readObject(AztecAddress);

Expand All @@ -40,6 +42,7 @@ export class ContractInstancePublishedEvent {
salt,
contractClassId,
initializationHash,
immutablesHash,
publicKeys,
deployer,
);
Expand All @@ -56,10 +59,10 @@ export class ContractInstancePublishedEvent {
currentContractClassId: this.contractClassId,
originalContractClassId: this.contractClassId,
initializationHash: this.initializationHash,
immutablesHash: this.immutablesHash,
publicKeys: this.publicKeys,
salt: this.salt,
deployer: this.deployer,
immutablesHash: Fr.zero(),
};
}

Expand Down
1 change: 1 addition & 0 deletions yarn-project/simulator/src/public/fixtures/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,7 @@ export async function addNewContractInstanceToTx(
new Fr(contractInstance.salt),
contractInstance.currentContractClassId,
contractInstance.initializationHash,
contractInstance.immutablesHash,
...publicKeysAsFields,
contractInstance.deployer.toField(),
];
Expand Down
Loading