11use dotenvy;
2- use ethers:: middleware:: SignerMiddleware ;
2+ use ethers:: middleware:: { NonceManagerMiddleware , SignerMiddleware } ;
33use ethers:: providers:: { Http , Middleware , Provider } ;
44use ethers:: signers:: { LocalWallet , Signer } ;
55use foundry_config:: { Config , RpcEndpoint } ;
@@ -11,15 +11,14 @@ use crate::chain::SupportedChain;
1111
1212pub type ProviderHttp = Provider < Http > ;
1313pub type WalletLocal = LocalWallet ;
14- pub type ChainMiddleware = SignerMiddleware < ProviderHttp , WalletLocal > ;
14+ pub type ChainMiddleware = NonceManagerMiddleware < SignerMiddleware < ProviderHttp , WalletLocal > > ;
1515pub type ChainClient = Arc < ChainMiddleware > ;
1616
1717pub fn get_rpc_endpoints_from_foundry_config ( )
1818-> anyhow:: Result < HashMap < SupportedChain , RpcEndpoint > > {
1919 dotenvy:: dotenv ( ) . ok ( ) ; // load .env
2020
2121 let config = Config :: load ( ) ;
22- println ! ( "Config {:?}" , config) ;
2322
2423 let mut rpc_endpoints = HashMap :: new ( ) ;
2524 for ( alias, endpoint) in config. rpc_endpoints . iter ( ) {
@@ -48,9 +47,11 @@ pub async fn build_chain_clients(
4847
4948 let chain_id = provider. get_chainid ( ) . await ?. as_u64 ( ) ;
5049
51- let signer_middleware =
52- SignerMiddleware :: new ( provider, wallet. clone ( ) . with_chain_id ( chain_id) ) ;
53- let arc_client = Arc :: new ( signer_middleware) ;
50+ let signer = SignerMiddleware :: new ( provider, wallet. clone ( ) . with_chain_id ( chain_id) ) ;
51+ let address = signer. address ( ) ;
52+ let nonce_manager = NonceManagerMiddleware :: new ( signer, address) ;
53+
54+ let arc_client = Arc :: new ( nonce_manager) ;
5455
5556 clients. insert ( alias. clone ( ) , arc_client) ;
5657 }
0 commit comments