Skip to main content

thruput_sdk/
deploy.rs

1//! System functions: Contract deployment
2
3use 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}