@@ -4,6 +4,7 @@ use crate::{
44 utils,
55 wallet_browser:: signer:: BrowserSigner ,
66} ;
7+ use alloy_network:: { Ethereum , Network } ;
78use alloy_primitives:: map:: AddressHashMap ;
89use alloy_signer:: Signer ;
910use clap:: Parser ;
@@ -14,22 +15,32 @@ use serde::Serialize;
1415use std:: path:: PathBuf ;
1516
1617/// Container for multiple wallets.
17- #[ derive( Debug , Default ) ]
18- pub struct MultiWallet {
18+ #[ derive( Debug ) ]
19+ pub struct MultiWallet < N : Network = Ethereum > {
1920 /// Vector of wallets that require an action to be unlocked.
2021 /// Those are lazily unlocked on the first access of the signers.
2122 pending_signers : Vec < PendingSigner > ,
2223 /// Contains unlocked signers.
2324 signers : AddressHashMap < WalletSigner > ,
2425 /// Browser signer
25- browser : Option < BrowserSigner > ,
26+ browser : Option < BrowserSigner < N > > ,
2627}
2728
28- impl MultiWallet {
29+ impl < N : Network > Default for MultiWallet < N > {
30+ fn default ( ) -> Self {
31+ Self {
32+ pending_signers : Default :: default ( ) ,
33+ signers : Default :: default ( ) ,
34+ browser : Default :: default ( ) ,
35+ }
36+ }
37+ }
38+
39+ impl < N : Network > MultiWallet < N > {
2940 pub fn new (
3041 pending_signers : Vec < PendingSigner > ,
3142 signers : Vec < WalletSigner > ,
32- browser : Option < BrowserSigner > ,
43+ browser : Option < BrowserSigner < N > > ,
3344 ) -> Self {
3445 let signers = signers. into_iter ( ) . map ( |signer| ( signer. address ( ) , signer) ) . collect ( ) ;
3546 Self { pending_signers, signers, browser }
@@ -43,12 +54,16 @@ impl MultiWallet {
4354 Ok ( ( ) )
4455 }
4556
46- pub fn signers ( & mut self ) -> Result < ( & AddressHashMap < WalletSigner > , Option < & BrowserSigner > ) > {
57+ pub fn signers (
58+ & mut self ,
59+ ) -> Result < ( & AddressHashMap < WalletSigner > , Option < & BrowserSigner < N > > ) > {
4760 self . maybe_unlock_pending ( ) ?;
4861 Ok ( ( & self . signers , self . browser . as_ref ( ) ) )
4962 }
5063
51- pub fn into_signers ( mut self ) -> Result < ( AddressHashMap < WalletSigner > , Option < BrowserSigner > ) > {
64+ pub fn into_signers (
65+ mut self ,
66+ ) -> Result < ( AddressHashMap < WalletSigner > , Option < BrowserSigner < N > > ) > {
5267 self . maybe_unlock_pending ( ) ?;
5368 Ok ( ( self . signers , self . browser ) )
5469 }
@@ -245,7 +260,7 @@ pub struct MultiWalletOpts {
245260
246261impl MultiWalletOpts {
247262 /// Returns [MultiWallet] container configured with provided options.
248- pub async fn get_multi_wallet ( & self ) -> Result < MultiWallet > {
263+ pub async fn get_multi_wallet < N : Network > ( & self ) -> Result < MultiWallet < N > > {
249264 let mut pending = Vec :: new ( ) ;
250265 let mut signers: Vec < WalletSigner > = Vec :: new ( ) ;
251266 let browser = self . browser_signer ( ) . await ?;
@@ -502,7 +517,7 @@ impl MultiWalletOpts {
502517 }
503518
504519 /// Launches and returns the Browser signer if `--browser` flag is set
505- pub async fn browser_signer ( & self ) -> Result < Option < BrowserSigner > > {
520+ pub async fn browser_signer < N : Network > ( & self ) -> Result < Option < BrowserSigner < N > > > {
506521 self . browser . run ( ) . await
507522 }
508523}
0 commit comments