1use alloy::providers::{
2 fillers::{
3 BlobGasFiller, ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller, WalletFiller,
4 },
5 network::{Ethereum, EthereumWallet},
6 Identity, ProviderBuilder, RootProvider, WsConnect,
7};
8use alloy::pubsub::PubSubFrontend;
9use alloy::signers::local::PrivateKeySigner;
10use alloy::transports::http::{Client, Http};
11use alloy::transports::{RpcError, TransportErrorKind};
12use std::str::FromStr;
13use url::Url;
14
15pub type SdkProvider = FillProvider<
16 JoinFill<
17 Identity,
18 JoinFill<GasFiller, JoinFill<BlobGasFiller, JoinFill<NonceFiller, ChainIdFiller>>>,
19 >,
20 RootProvider<Http<Client>>,
21 Http<Client>,
22 Ethereum,
23>;
24
25pub type SdkSigner = FillProvider<
26 JoinFill<
27 JoinFill<
28 Identity,
29 JoinFill<GasFiller, JoinFill<BlobGasFiller, JoinFill<NonceFiller, ChainIdFiller>>>,
30 >,
31 WalletFiller<EthereumWallet>,
32 >,
33 RootProvider<Http<Client>>,
34 Http<Client>,
35 Ethereum,
36>;
37
38pub fn get_signer(key: &str, rpc_url: &str) -> SdkSigner {
39 let signer = PrivateKeySigner::from_str(key).expect("wrong key ");
40 let wallet = EthereumWallet::from(signer);
41 let url = Url::parse(rpc_url).expect("Wrong rpc url");
42 ProviderBuilder::new()
43 .with_recommended_fillers()
44 .wallet(wallet.clone())
45 .on_http(url)
46}
47
48pub fn get_provider(rpc_url: &str) -> SdkProvider {
49 let url = Url::parse(rpc_url).expect("Wrong rpc url");
50 ProviderBuilder::new()
51 .with_recommended_fillers()
52 .on_http(url)
53}
54
55#[allow(clippy::type_complexity)]
56pub async fn get_ws_provider(
57 rpc_url: &str,
58) -> Result<RootProvider<PubSubFrontend>, RpcError<TransportErrorKind>> {
59 let ws = WsConnect::new(rpc_url);
60 ProviderBuilder::new().on_ws(ws).await
61}
62
63pub const NEW_PUBKEY_REGISTRATION_EVENT: &str =
65 "NewPubkeyRegistration(address,(uint256,uint256),(uint256[2],uint256[2]))";
66
67pub const OPERATOR_SOCKET_UPDATE: &str = "OperatorSocketUpdate(bytes32,string)";