builder_relayer_client_rust/builder/
derive.rs1use crate::errors::Result;
2use alloy::primitives::{Address, B256, keccak256};
3use alloy::sol_types::SolValue;
4use std::str::FromStr;
5
6pub const SAFE_INIT_CODE_HASH: &str =
8 "0x2bce2127ff07fb632d16c8347c4ebf501f4841168bed00d9e6ef715ddb6fcecf";
9pub const PROXY_INIT_CODE_HASH: &str =
11 "0xd21df8dc65880a8606f09fe0ce3df9b8869287ab0b058be05aa9e8af6330a00b";
12
13pub fn derive_safe(factory: Address, owner: Address) -> Result<Address> {
14 let init_code_hash = B256::from_str(SAFE_INIT_CODE_HASH).expect("invalid hash");
15
16 let encoded = owner.abi_encode();
18 let salt = keccak256(&encoded);
19
20 let addr = factory.create2(salt, init_code_hash);
21 Ok(addr)
22}
23
24pub fn derive_proxy(factory: Address, owner: Address) -> Result<Address> {
25 let init_code_hash = B256::from_str(PROXY_INIT_CODE_HASH).expect("invalid hash");
26
27 let salt = keccak256(owner.as_slice());
29
30 Ok(factory.create2(salt, init_code_hash))
31}