1use crate::re_throw::OrSyscallThrow;
4use crate::sys::{self, SyscallNo};
5use crate::types::{ContractAddress, SHA256Hash};
6use core::mem::MaybeUninit;
7
8pub fn get_deploy_address(
9 nonce: &SHA256Hash,
10 contract_hash: &SHA256Hash,
11) -> ContractAddress {
12 let mut out_addr: MaybeUninit<ContractAddress> =
13 MaybeUninit::<ContractAddress>::uninit();
14
15 sys::uninit_GetDeployAddress(None, nonce, contract_hash, &mut out_addr)
16 .or_syscall_throw(SyscallNo::kGetDeployAddress);
17
18 unsafe { out_addr.assume_init() }
19}
20
21pub fn get_deploy_address_for_other(
22 other_address: &ContractAddress,
23 nonce: &SHA256Hash,
24 contract_hash: &SHA256Hash,
25) -> ContractAddress {
26 let mut out_addr: MaybeUninit<ContractAddress> =
27 MaybeUninit::<ContractAddress>::uninit();
28
29 sys::uninit_GetDeployAddress(
30 Some(other_address),
31 nonce,
32 contract_hash,
33 &mut out_addr,
34 )
35 .or_syscall_throw(SyscallNo::kGetDeployAddress);
36
37 unsafe { out_addr.assume_init() }
38}
39
40pub fn deploy_contract(
41 nonce: &SHA256Hash,
42 contract_hash: &SHA256Hash,
43) -> ContractAddress {
44 let mut out_addr: MaybeUninit<ContractAddress> =
45 MaybeUninit::<ContractAddress>::uninit();
46
47 sys::uninit_DeployContract(nonce, contract_hash, &mut out_addr)
48 .or_syscall_throw(SyscallNo::kDeployContract);
49
50 unsafe { out_addr.assume_init() }
51}