-
Notifications
You must be signed in to change notification settings - Fork 327
/
Copy pathdeploy.nr
31 lines (26 loc) · 1.52 KB
/
deploy.nr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use crate::{context::PrivateContext, oracle::get_contract_instance::get_contract_instance};
use dep::protocol_types::{address::AztecAddress, abis::function_selector::FunctionSelector, constants::DEPLOYER_CONTRACT_ADDRESS};
// Calls `deploy` on the deployer contract to deploy a new instance.
pub fn deploy_contract(context: &mut PrivateContext, target: AztecAddress) {
let instance = get_contract_instance(target);
let universal_deploy = instance.deployer.is_zero();
if !universal_deploy {
assert(
instance.deployer == context.this_address(), "Deployer address does not match current address"
);
}
// Adapted from noir-contracts/contracts/contract_instance_deployer_contract/src/interface/ContractInstanceDeployer.nr
// That file was autogenerated running the following command from noir-projects/noir-contracts:
// ../../yarn-project/node_modules/.bin/aztec-cli codegen target/contract_instance_deployer_contract-ContractInstanceDeployer.json --nr -o ./contracts/contract_instance_deployer_contract/src/interface
let mut serialized_args = [0; 5];
serialized_args[0] = instance.salt;
serialized_args[1] = instance.contract_class_id.to_field();
serialized_args[2] = instance.initialization_hash;
serialized_args[3] = instance.public_keys_hash.to_field();
serialized_args[4] = universal_deploy as Field;
let _call_result = context.call_private_function(
DEPLOYER_CONTRACT_ADDRESS,
FunctionSelector::from_field(0x7ebd3690),
serialized_args
);
}