renegade_sdk/renegade_wallet_client/
config.rs

1//! Config setup for the renegade wallet client
2
3// -------------
4// | Constants |
5// -------------
6
7use crate::auth::HmacKey;
8use alloy::{
9    primitives::{Address, address},
10    signers::local::PrivateKeySigner,
11};
12
13use crate::{
14    ARBITRUM_ONE_CHAIN_ID, ARBITRUM_ONE_RELAYER_BASE_URL, ARBITRUM_SEPOLIA_CHAIN_ID,
15    ARBITRUM_SEPOLIA_RELAYER_BASE_URL, BASE_MAINNET_CHAIN_ID, BASE_MAINNET_RELAYER_BASE_URL,
16    BASE_SEPOLIA_CHAIN_ID, BASE_SEPOLIA_RELAYER_BASE_URL, ETHEREUM_SEPOLIA_CHAIN_ID,
17    ETHEREUM_SEPOLIA_RELAYER_BASE_URL,
18};
19
20// --- Historical State URLs --- //
21
22/// The mainnet historical state base URL
23pub(crate) const MAINNET_HISTORICAL_STATE_BASE_URL: &str =
24    "https://mainnet.historical-state.renegade.fi";
25/// The testnet historical state base URL
26pub(crate) const TESTNET_HISTORICAL_STATE_BASE_URL: &str =
27    "https://testnet.historical-state.renegade.fi";
28
29// --- Darkpool Addresses --- //
30
31/// The darkpool address on Arbitrum One
32pub(crate) const ARBITRUM_ONE_DARKPOOL_ADDRESS: Address =
33    address!("0xC5D1B8096BbdEC83Bc6049e42822c7483BBA6500");
34/// The darkpool address on Arbitrum Sepolia
35pub(crate) const ARBITRUM_SEPOLIA_DARKPOOL_ADDRESS: Address =
36    address!("0x57dF3a4449aaBf72f61e4A5DFe83d4A45DcC8537");
37/// The darkpool address on Base Mainnet
38pub(crate) const BASE_MAINNET_DARKPOOL_ADDRESS: Address =
39    address!("0x15d7CF277BE6463F153Dd0d4d73F92Ad65e6348C");
40/// The darkpool address on Base Sepolia
41pub(crate) const BASE_SEPOLIA_DARKPOOL_ADDRESS: Address =
42    address!("0xDE9BfD62B2187d4c14FBcC7D869920d34e4DB3Da");
43/// The darkpool address on Ethereum Sepolia
44pub(crate) const ETHEREUM_SEPOLIA_DARKPOOL_ADDRESS: Address =
45    address!("0x45537c28F245645CC1E7F7258FCC18A189CE16e3");
46
47// --- Permit2 Addresses --- //
48
49/// The permit2 address on Arbitrum One
50pub(crate) const ARBITRUM_ONE_PERMIT2_ADDRESS: Address =
51    address!("0x000000000022D473030F116dDEE9F6B43aC78BA3");
52/// The permit2 address on Arbitrum Sepolia
53pub(crate) const ARBITRUM_SEPOLIA_PERMIT2_ADDRESS: Address =
54    address!("0x9458198bcc289c42e460cb8ca143e5854f734442");
55/// The permit2 address on Base Mainnet
56pub(crate) const BASE_MAINNET_PERMIT2_ADDRESS: Address =
57    address!("0x000000000022D473030F116dDEE9F6B43aC78BA3");
58/// The permit2 address on Base Sepolia
59pub(crate) const BASE_SEPOLIA_PERMIT2_ADDRESS: Address =
60    address!("0x000000000022D473030F116dDEE9F6B43aC78BA3");
61/// The permit2 address on Ethereum Sepolia
62pub(crate) const ETHEREUM_SEPOLIA_PERMIT2_ADDRESS: Address =
63    address!("0x000000000022D473030F116dDEE9F6B43aC78BA3");
64
65// --- Executor Addresses --- //
66
67/// The executor address on Arbitrum One
68pub(crate) const ARBITRUM_ONE_EXECUTOR_ADDRESS: Address =
69    address!("0x336A6b8AE5589d40ba4391020649E268E8323CA1");
70/// The executor address on Arbitrum Sepolia
71pub(crate) const ARBITRUM_SEPOLIA_EXECUTOR_ADDRESS: Address =
72    address!("0x9094314D60e3eF5fC73df548A3dD7b1Cd9798729");
73/// The executor address on Base Mainnet
74pub(crate) const BASE_MAINNET_EXECUTOR_ADDRESS: Address =
75    address!("0x1b5A1833d8566FACb138aa6BF1cd040f572B1D56");
76/// The executor address on Base Sepolia
77pub(crate) const BASE_SEPOLIA_EXECUTOR_ADDRESS: Address =
78    address!("0x5E2ca57B7F09Cf3DAca07c67CC65e1BfbDf346b0");
79/// The executor address on Ethereum Sepolia
80pub(crate) const ETHEREUM_SEPOLIA_EXECUTOR_ADDRESS: Address =
81    address!("0x92467D2FF278383187f0aB04F8511EF45c31b723");
82
83// --- Relayer Fee Recipient Addresses --- //
84
85/// The relayer fee recipient address on Arbitrum One
86pub(crate) const ARBITRUM_ONE_RELAYER_FEE_RECIPIENT: Address =
87    address!("0x0000000000000000000000000000000000000000");
88/// The relayer fee recipient address on Arbitrum Sepolia
89pub(crate) const ARBITRUM_SEPOLIA_RELAYER_FEE_RECIPIENT: Address =
90    address!("0xb0c0d3e8ebc39df5799d9c98d65dacf8637deba1");
91/// The relayer fee recipient address on Base Mainnet
92pub(crate) const BASE_MAINNET_RELAYER_FEE_RECIPIENT: Address =
93    address!("0x0000000000000000000000000000000000000000");
94/// The relayer fee recipient address on Base Sepolia
95pub(crate) const BASE_SEPOLIA_RELAYER_FEE_RECIPIENT: Address =
96    address!("0xa125ecd644591348d08243d8821120c6d7d3a077");
97/// The relayer fee recipient address on Ethereum Sepolia
98pub(crate) const ETHEREUM_SEPOLIA_RELAYER_FEE_RECIPIENT: Address =
99    address!("0x0000000000000000000000000000000000000000");
100
101/// The client config
102#[derive(Debug, Clone)]
103pub struct RenegadeClientConfig {
104    /// The relayer base URL
105    pub relayer_base_url: String,
106    /// The historical state base URL
107    pub historical_state_base_url: String,
108    /// The chain ID
109    pub chain_id: u64,
110    /// The darkpool contract address
111    pub darkpool_address: Address,
112    /// The permit2 contract address
113    pub permit2_address: Address,
114    /// The relayer's executor address
115    pub executor_address: Address,
116    /// The relayer's fee recipient address
117    pub relayer_fee_recipient: Address,
118    /// The private key from which to derive the wallet
119    pub key: PrivateKeySigner,
120    /// The HMAC key used to authenticate admin API actions
121    pub admin_hmac_key: Option<HmacKey>,
122}
123
124impl RenegadeClientConfig {
125    /// Create a new client config for Arbitrum One
126    pub fn new_arbitrum_one(key: &PrivateKeySigner) -> Self {
127        Self {
128            relayer_base_url: ARBITRUM_ONE_RELAYER_BASE_URL.to_string(),
129            historical_state_base_url: MAINNET_HISTORICAL_STATE_BASE_URL.to_string(),
130            chain_id: ARBITRUM_ONE_CHAIN_ID,
131            darkpool_address: ARBITRUM_ONE_DARKPOOL_ADDRESS,
132            permit2_address: ARBITRUM_ONE_PERMIT2_ADDRESS,
133            executor_address: ARBITRUM_ONE_EXECUTOR_ADDRESS,
134            relayer_fee_recipient: ARBITRUM_ONE_RELAYER_FEE_RECIPIENT,
135            key: key.clone(),
136            admin_hmac_key: None,
137        }
138    }
139
140    /// Create a new admin client config for Arbitrum One
141    pub fn new_arbitrum_one_admin(key: &PrivateKeySigner, admin_hmac_key: HmacKey) -> Self {
142        Self {
143            relayer_base_url: ARBITRUM_ONE_RELAYER_BASE_URL.to_string(),
144            historical_state_base_url: MAINNET_HISTORICAL_STATE_BASE_URL.to_string(),
145            chain_id: ARBITRUM_ONE_CHAIN_ID,
146            darkpool_address: ARBITRUM_ONE_DARKPOOL_ADDRESS,
147            permit2_address: ARBITRUM_ONE_PERMIT2_ADDRESS,
148            executor_address: ARBITRUM_ONE_EXECUTOR_ADDRESS,
149            relayer_fee_recipient: ARBITRUM_ONE_RELAYER_FEE_RECIPIENT,
150            key: key.clone(),
151            admin_hmac_key: Some(admin_hmac_key),
152        }
153    }
154
155    /// Create a new client config for Arbitrum Sepolia
156    pub fn new_arbitrum_sepolia(key: &PrivateKeySigner) -> Self {
157        Self {
158            relayer_base_url: ARBITRUM_SEPOLIA_RELAYER_BASE_URL.to_string(),
159            historical_state_base_url: TESTNET_HISTORICAL_STATE_BASE_URL.to_string(),
160            chain_id: ARBITRUM_SEPOLIA_CHAIN_ID,
161            darkpool_address: ARBITRUM_SEPOLIA_DARKPOOL_ADDRESS,
162            permit2_address: ARBITRUM_SEPOLIA_PERMIT2_ADDRESS,
163            executor_address: ARBITRUM_SEPOLIA_EXECUTOR_ADDRESS,
164            relayer_fee_recipient: ARBITRUM_SEPOLIA_RELAYER_FEE_RECIPIENT,
165            key: key.clone(),
166            admin_hmac_key: None,
167        }
168    }
169
170    /// Create a new admin client config for Arbitrum Sepolia
171    pub fn new_arbitrum_sepolia_admin(key: &PrivateKeySigner, admin_hmac_key: HmacKey) -> Self {
172        Self {
173            relayer_base_url: ARBITRUM_SEPOLIA_RELAYER_BASE_URL.to_string(),
174            historical_state_base_url: TESTNET_HISTORICAL_STATE_BASE_URL.to_string(),
175            chain_id: ARBITRUM_SEPOLIA_CHAIN_ID,
176            darkpool_address: ARBITRUM_SEPOLIA_DARKPOOL_ADDRESS,
177            permit2_address: ARBITRUM_SEPOLIA_PERMIT2_ADDRESS,
178            executor_address: ARBITRUM_SEPOLIA_EXECUTOR_ADDRESS,
179            relayer_fee_recipient: ARBITRUM_SEPOLIA_RELAYER_FEE_RECIPIENT,
180            key: key.clone(),
181            admin_hmac_key: Some(admin_hmac_key),
182        }
183    }
184
185    /// Create a new client config for Base Mainnet
186    pub fn new_base_mainnet(key: &PrivateKeySigner) -> Self {
187        Self {
188            relayer_base_url: BASE_MAINNET_RELAYER_BASE_URL.to_string(),
189            historical_state_base_url: MAINNET_HISTORICAL_STATE_BASE_URL.to_string(),
190            chain_id: BASE_MAINNET_CHAIN_ID,
191            darkpool_address: BASE_MAINNET_DARKPOOL_ADDRESS,
192            permit2_address: BASE_MAINNET_PERMIT2_ADDRESS,
193            executor_address: BASE_MAINNET_EXECUTOR_ADDRESS,
194            relayer_fee_recipient: BASE_MAINNET_RELAYER_FEE_RECIPIENT,
195            key: key.clone(),
196            admin_hmac_key: None,
197        }
198    }
199
200    /// Create a new admin client config for Base Mainnet
201    pub fn new_base_mainnet_admin(key: &PrivateKeySigner, admin_hmac_key: HmacKey) -> Self {
202        Self {
203            relayer_base_url: BASE_MAINNET_RELAYER_BASE_URL.to_string(),
204            historical_state_base_url: MAINNET_HISTORICAL_STATE_BASE_URL.to_string(),
205            chain_id: BASE_MAINNET_CHAIN_ID,
206            darkpool_address: BASE_MAINNET_DARKPOOL_ADDRESS,
207            permit2_address: BASE_MAINNET_PERMIT2_ADDRESS,
208            executor_address: BASE_MAINNET_EXECUTOR_ADDRESS,
209            relayer_fee_recipient: BASE_MAINNET_RELAYER_FEE_RECIPIENT,
210            key: key.clone(),
211            admin_hmac_key: Some(admin_hmac_key),
212        }
213    }
214
215    /// Create a new client config for Base Sepolia
216    pub fn new_base_sepolia(key: &PrivateKeySigner) -> Self {
217        Self {
218            relayer_base_url: BASE_SEPOLIA_RELAYER_BASE_URL.to_string(),
219            historical_state_base_url: TESTNET_HISTORICAL_STATE_BASE_URL.to_string(),
220            chain_id: BASE_SEPOLIA_CHAIN_ID,
221            darkpool_address: BASE_SEPOLIA_DARKPOOL_ADDRESS,
222            permit2_address: BASE_SEPOLIA_PERMIT2_ADDRESS,
223            executor_address: BASE_SEPOLIA_EXECUTOR_ADDRESS,
224            relayer_fee_recipient: BASE_SEPOLIA_RELAYER_FEE_RECIPIENT,
225            key: key.clone(),
226            admin_hmac_key: None,
227        }
228    }
229
230    /// Create a new admin client config for Base Sepolia
231    pub fn new_base_sepolia_admin(key: &PrivateKeySigner, admin_hmac_key: HmacKey) -> Self {
232        Self {
233            relayer_base_url: BASE_SEPOLIA_RELAYER_BASE_URL.to_string(),
234            historical_state_base_url: TESTNET_HISTORICAL_STATE_BASE_URL.to_string(),
235            chain_id: BASE_SEPOLIA_CHAIN_ID,
236            darkpool_address: BASE_SEPOLIA_DARKPOOL_ADDRESS,
237            permit2_address: BASE_SEPOLIA_PERMIT2_ADDRESS,
238            executor_address: BASE_SEPOLIA_EXECUTOR_ADDRESS,
239            relayer_fee_recipient: BASE_SEPOLIA_RELAYER_FEE_RECIPIENT,
240            key: key.clone(),
241            admin_hmac_key: Some(admin_hmac_key),
242        }
243    }
244
245    /// Create a new client config for Ethereum Sepolia
246    pub fn new_ethereum_sepolia(key: &PrivateKeySigner) -> Self {
247        Self {
248            relayer_base_url: ETHEREUM_SEPOLIA_RELAYER_BASE_URL.to_string(),
249            historical_state_base_url: TESTNET_HISTORICAL_STATE_BASE_URL.to_string(),
250            chain_id: ETHEREUM_SEPOLIA_CHAIN_ID,
251            darkpool_address: ETHEREUM_SEPOLIA_DARKPOOL_ADDRESS,
252            permit2_address: ETHEREUM_SEPOLIA_PERMIT2_ADDRESS,
253            executor_address: ETHEREUM_SEPOLIA_EXECUTOR_ADDRESS,
254            relayer_fee_recipient: ETHEREUM_SEPOLIA_RELAYER_FEE_RECIPIENT,
255            key: key.clone(),
256            admin_hmac_key: None,
257        }
258    }
259
260    /// Create a new admin client config for Ethereum Sepolia
261    pub fn new_ethereum_sepolia_admin(key: &PrivateKeySigner, admin_hmac_key: HmacKey) -> Self {
262        Self {
263            relayer_base_url: ETHEREUM_SEPOLIA_RELAYER_BASE_URL.to_string(),
264            historical_state_base_url: TESTNET_HISTORICAL_STATE_BASE_URL.to_string(),
265            chain_id: ETHEREUM_SEPOLIA_CHAIN_ID,
266            darkpool_address: ETHEREUM_SEPOLIA_DARKPOOL_ADDRESS,
267            permit2_address: ETHEREUM_SEPOLIA_PERMIT2_ADDRESS,
268            executor_address: ETHEREUM_SEPOLIA_EXECUTOR_ADDRESS,
269            relayer_fee_recipient: ETHEREUM_SEPOLIA_RELAYER_FEE_RECIPIENT,
270            key: key.clone(),
271            admin_hmac_key: Some(admin_hmac_key),
272        }
273    }
274}