lit_rust_sdk/blockchain/
mod.rs1mod contract_resolver;
2mod pkp_nft;
3mod rate_limit_nft;
4pub mod staking;
5
6pub use contract_resolver::ContractResolver;
7use eyre::Result;
8pub use pkp_nft::PKPNFT;
9pub use rate_limit_nft::RateLimitNFT;
10pub use staking::Staking;
11
12use crate::LitNetwork;
13use alloy::{
14 primitives::{keccak256, Address, FixedBytes},
15 providers::ProviderBuilder,
16};
17
18pub enum Contract {
19 Staking,
20 PKPNFT,
21 RateLimitNFT,
22 ContractResolver,
23}
24
25impl Contract {
26 fn resolver_key(&self) -> FixedBytes<32> {
27 match self {
28 Contract::Staking => keccak256("STAKING"),
29 Contract::PKPNFT => keccak256("PKP_NFT"),
30 Contract::RateLimitNFT => keccak256("RATE_LIMIT_NFT"),
31 Contract::ContractResolver => panic!("ContractResolver does not have a resolver key"),
32 }
33 }
34}
35
36pub async fn resolve_address(contract: Contract, lit_network: LitNetwork) -> Result<Address> {
37 let provider = ProviderBuilder::new()
38 .connect(lit_network.rpc_url())
39 .await?;
40 let contract_resolver =
41 ContractResolver::new(lit_network.contract_resolver_address()?, provider);
42 let resolver_key = contract.resolver_key();
43 let resolved_address = contract_resolver
44 .getContract(resolver_key, lit_network.env())
45 .call()
46 .await?;
47 Ok(resolved_address)
48}