Expand description

Data structures and encoding for invoice_request messages.

An InvoiceRequest can be built from a parsed Offer as an “offer to be paid”. It is typically constructed by a customer and sent to the merchant who had published the corresponding offer. The recipient of the request responds with an Invoice.

For an “offer for money” (e.g., refund, ATM withdrawal), where an offer doesn’t exist as a precursor, see Refund.

extern crate bitcoin;
extern crate lightning;

use bitcoin::network::constants::Network;
use bitcoin::secp256k1::{KeyPair, PublicKey, Secp256k1, SecretKey};
use core::convert::Infallible;
use lightning::ln::features::OfferFeatures;
use lightning::offers::offer::Offer;
use lightning::util::ser::Writeable;

let secp_ctx = Secp256k1::new();
let keys = KeyPair::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32])?);
let pubkey = PublicKey::from(keys);
let mut buffer = Vec::new();

"lno1qcp4256ypq"
    .parse::<Offer>()?
    .request_invoice(vec![42; 64], pubkey)?
    .chain(Network::Testnet)?
    .amount_msats(1000)?
    .quantity(5)?
    .payer_note("foo".to_string())
    .build()?
    .sign::<_, Infallible>(|digest| Ok(secp_ctx.sign_schnorr_no_aux_rand(digest, &keys)))
    .expect("failed verifying signature")
    .write(&mut buffer)
    .unwrap();

Structs

Traits