fhevm_forge/deployer/
chains.rs1use std::collections::HashMap;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct FhevmChain {
6 pub name: String,
7 pub chain_id: u64,
8 pub gateway_chain_id: u64,
9 pub rpc_env_var: String,
10 pub acl_address: String,
11 pub kms_verifier: String,
12 pub input_verifier: String,
13 pub verifying_contract_decryption: String,
14 pub verifying_contract_input_verification: String,
15 pub explorer_url: String,
16 pub explorer_api_url: String,
17 pub explorer_api_key_env: String,
18}
19
20impl FhevmChain {
21 pub fn is_fully_configured(&self) -> bool {
22 !self.acl_address.is_empty()
23 && !self.kms_verifier.is_empty()
24 && !self.input_verifier.is_empty()
25 }
26}
27
28pub fn supported_chains() -> HashMap<&'static str, FhevmChain> {
29 let mut m = HashMap::new();
30
31 m.insert("sepolia", FhevmChain {
32 name: "Ethereum Sepolia".into(),
33 chain_id: 11155111,
34 gateway_chain_id: 55815,
35 rpc_env_var: "SEPOLIA_RPC_URL".into(),
36 acl_address: "0x687820221192C5B662b25367F70076A37bc79b6c".into(),
37 kms_verifier: "0x1364cBBf2cDF5032C47d8226a6f6FBD2AFCDacAC".into(),
38 input_verifier: "0xbc91f3daD1A5F19F8390c400196e58073B6a0BC4".into(),
39 verifying_contract_decryption: "0xb6E160B1ff80D67Bfe90A85eE06Ce0A2613607D1".into(),
40 verifying_contract_input_verification: "0x7048C39f048125eDa9d678AEbaDfB22F7900a29F".into(),
41 explorer_url: "https://sepolia.etherscan.io".into(),
42 explorer_api_url: "https://api-sepolia.etherscan.io/api".into(),
43 explorer_api_key_env: "ETHERSCAN_API_KEY".into(),
44 });
45
46 m.insert("mainnet", FhevmChain {
47 name: "Ethereum Mainnet".into(),
48 chain_id: 1,
49 gateway_chain_id: 55815,
50 rpc_env_var: "MAINNET_RPC_URL".into(),
51 acl_address: String::new(),
52 kms_verifier: String::new(),
53 input_verifier: String::new(),
54 verifying_contract_decryption: String::new(),
55 verifying_contract_input_verification: String::new(),
56 explorer_url: "https://etherscan.io".into(),
57 explorer_api_url: "https://api.etherscan.io/api".into(),
58 explorer_api_key_env: "ETHERSCAN_API_KEY".into(),
59 });
60
61 m.insert("base", FhevmChain {
62 name: "Base".into(),
63 chain_id: 8453,
64 gateway_chain_id: 55815,
65 rpc_env_var: "BASE_RPC_URL".into(),
66 acl_address: String::new(),
67 kms_verifier: String::new(),
68 input_verifier: String::new(),
69 verifying_contract_decryption: String::new(),
70 verifying_contract_input_verification: String::new(),
71 explorer_url: "https://basescan.org".into(),
72 explorer_api_url: "https://api.basescan.org/api".into(),
73 explorer_api_key_env: "BASESCAN_API_KEY".into(),
74 });
75
76 m.insert("arbitrum", FhevmChain {
77 name: "Arbitrum One".into(),
78 chain_id: 42161,
79 gateway_chain_id: 55815,
80 rpc_env_var: "ARBITRUM_RPC_URL".into(),
81 acl_address: String::new(),
82 kms_verifier: String::new(),
83 input_verifier: String::new(),
84 verifying_contract_decryption: String::new(),
85 verifying_contract_input_verification: String::new(),
86 explorer_url: "https://arbiscan.io".into(),
87 explorer_api_url: "https://api.arbiscan.io/api".into(),
88 explorer_api_key_env: "ARBISCAN_API_KEY".into(),
89 });
90
91 m
92}