fedimint_lnv2_common/
lnurl.rs1use 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}