gateway_cli/
onchain_commands.rs1use bitcoin::address::NetworkUnchecked;
2use clap::Subcommand;
3use fedimint_core::BitcoinAmountOrAll;
4use fedimint_core::util::SafeUrl;
5use fedimint_gateway_client::{get_ln_onchain_address, send_onchain};
6use fedimint_gateway_common::SendOnchainRequest;
7use fedimint_ln_common::client::GatewayApi;
8
9use crate::{CliOutput, CliOutputResult};
10
11#[derive(Subcommand)]
14pub enum OnchainCommands {
15 Address,
18 Send {
21 #[clap(long)]
23 address: bitcoin::Address<NetworkUnchecked>,
24
25 #[clap(long)]
30 amount: BitcoinAmountOrAll,
31
32 #[clap(long)]
34 fee_rate_sats_per_vbyte: u64,
35 },
36}
37
38impl OnchainCommands {
39 pub async fn handle(self, client: &GatewayApi, base_url: &SafeUrl) -> CliOutputResult {
40 match self {
41 Self::Address => {
42 let response = get_ln_onchain_address(client, base_url)
43 .await?
44 .assume_checked();
45 Ok(CliOutput::OnchainAddress {
46 address: response.to_string(),
47 })
48 }
49 Self::Send {
50 address,
51 amount,
52 fee_rate_sats_per_vbyte,
53 } => {
54 let txid = send_onchain(
55 client,
56 base_url,
57 SendOnchainRequest {
58 address,
59 amount,
60 fee_rate_sats_per_vbyte,
61 },
62 )
63 .await?;
64 Ok(CliOutput::SendOnchainTxid { txid })
65 }
66 }
67 }
68}