Skip to main content

foundry_wallets/wallet_browser/
opts.rs

1use std::time::Duration;
2
3use alloy_network::Network;
4use clap::Parser;
5use eyre::Result;
6use serde::Serialize;
7
8use crate::wallet_browser::signer::BrowserSigner;
9
10/// Browser wallet options
11#[derive(Clone, Debug, Default, Serialize, Parser)]
12#[command(next_help_heading = "Browser wallet options")]
13pub struct BrowserWalletOpts {
14    /// Use a browser wallet.
15    #[arg(long, help_heading = "")]
16    pub browser: bool,
17
18    /// Port for the browser wallet server.
19    #[arg(long, value_name = "PORT", default_value = "9545", requires = "browser")]
20    pub browser_port: u16,
21
22    /// Whether to open the browser for wallet connection.
23    #[arg(long, default_value_t = false, requires = "browser")]
24    pub browser_disable_open: bool,
25
26    /// Enable development mode for the browser wallet.
27    /// This relaxes certain security features for local development.
28    ///
29    /// **WARNING**: This should only be used in a development environment.
30    #[arg(long, hide = true)]
31    pub browser_development: bool,
32}
33
34impl BrowserWalletOpts {
35    pub async fn run<N: Network>(&self) -> Result<Option<BrowserSigner<N>>> {
36        Ok(if self.browser {
37            Some(
38                BrowserSigner::new(
39                    self.browser_port,
40                    !self.browser_disable_open,
41                    Duration::from_secs(300),
42                    self.browser_development,
43                )
44                .await?,
45            )
46        } else {
47            None
48        })
49    }
50}