feat(lnd): accept amount_sats on lnd.payinvoice for zero-amount invoices
Zero-amount BOLT11 invoices need the payer to supply the amount; forward it to LND REST as the amt field. The wallet scan modal unlocks its amount field for such invoices and passes the user's entry through. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
0213da3fc5
commit
1b78da1d7a
@@ -28,13 +28,20 @@ impl RpcHandler {
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Zero-amount invoices need the amount supplied by the payer; LND's
|
||||||
|
// REST API takes it as an `amt` string alongside the payment request.
|
||||||
|
let amount_sats = params.get("amount_sats").and_then(|v| v.as_u64());
|
||||||
|
|
||||||
info!("Paying Lightning invoice");
|
info!("Paying Lightning invoice");
|
||||||
|
|
||||||
let (client, macaroon_hex) = self.lnd_client().await?;
|
let (client, macaroon_hex) = self.lnd_client().await?;
|
||||||
|
|
||||||
let pay_body = serde_json::json!({
|
let mut pay_body = serde_json::json!({
|
||||||
"payment_request": payment_request,
|
"payment_request": payment_request,
|
||||||
});
|
});
|
||||||
|
if let Some(amt) = amount_sats {
|
||||||
|
pay_body["amt"] = serde_json::json!(amt.to_string());
|
||||||
|
}
|
||||||
|
|
||||||
let resp = client
|
let resp = client
|
||||||
.post(format!("{LND_REST_BASE_URL}/v1/channels/transactions"))
|
.post(format!("{LND_REST_BASE_URL}/v1/channels/transactions"))
|
||||||
|
|||||||
Reference in New Issue
Block a user