Skip to main content

fhevm_forge/deployer/
chains.rs

1use 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}