fedimint_lnv2_common/
lnurl.rs

1use bitcoin::secp256k1::PublicKey;
2use fedimint_core::base32::{FEDIMINT_PREFIX, encode_prefixed};
3use fedimint_core::config::FederationId;
4use fedimint_core::encoding::{Decodable, Encodable};
5use fedimint_core::util::SafeUrl;
6use lnurl::lnurl::LnUrl;
7use serde::{Deserialize, Serialize};
8use tpe::AggregatePublicKey;
9
10#[derive(Debug, Clone, Serialize, Deserialize, Encodable, Decodable)]
11pub struct LnurlRequest {
12    pub federation_id: FederationId,
13    pub recipient_pk: PublicKey,
14    pub aggregate_pk: AggregatePublicKey,
15    pub gateways: Vec<SafeUrl>,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
19pub struct LnurlResponse {
20    pub lnurl: String,
21}
22
23pub fn generate_lnurl(
24    recurringd: &SafeUrl,
25    federation_id: FederationId,
26    recipient_pk: PublicKey,
27    aggregate_pk: AggregatePublicKey,
28    gateways: Vec<SafeUrl>,
29) -> String {
30    let payload = encode_prefixed(
31        FEDIMINT_PREFIX,
32        &LnurlRequest {
33            federation_id,
34            recipient_pk,
35            aggregate_pk,
36            gateways,
37        },
38    );
39
40    LnUrl::from_url(format!("{recurringd}pay/{payload}")).encode()
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct VerifyResponse {
45    pub status: String,
46    pub settled: bool,
47    pub preimage: Option<[u8; 32]>,
48}