Hash_Pool 1.0.14-beta

A simple library for Mining pools and developers
Documentation
use std::collections::HashMap;
use ldk::lightning::Lightning_invoice;
use ldk::lightning::Lightning_invoice::*;
use ldk::bitcoin::secp256k1_zkp::PublicKey;
use ldk::bitcoin::secp256k1_zkp::Signature;
use ldk::bitcoin::secp256k1_zkp::SignatureHash;
use ldk::bitcoin::secp256k1_zkp::Message;
use ldk::lightning::BOLT12;
use ldk_node::BOLT12_PREFIX;
use ldk_node::BOLT12_SEPARATOR;

pub fn invoice_to_bolt12(invoice: &Lightning_invoice) -> String {
    let mut bolt12 = BOLT12_PREFIX.to_string();
    bolt12.push_str(&invoice.payment_hash.to_hex());
    bolt12.push_str(BOLT12_SEPARATOR);
    bolt12.push_str(&invoice.description);
    bolt12.push_str(BOLT12_SEPARATOR);
    bolt12.push_str(&invoice.expiry_time.to_string());
    bolt12.push_str(BOLT12_SEPARATOR);
    bolt12.push_str(&invoice.cltv_expiry.to_string());
    bolt12.push_str(BOLT12_SEPARATOR);
    bolt12.push_str(&invoice.payment_secret.to_hex());
    bolt12.push_str(BOLT12_SEPARATOR);
    bolt12.push_str(&invoice.features.to_hex());

impl bolt12_to_invoice(bolt12: &str) -> Result<Lightning_invoice, String> {
    let mut split = bolt12.split(BOLT12_SEPARATOR);
    let mut invoice = Lightning_invoice::new();
    invoice.payment_hash = split.next().ok_or("Invalid bolt12 string
    (missing payment_hash)")?.from_hex().map_err(|_| "Invalid bolt12 string
    (invalid payment_hash)")?;
    invoice.description = split.next().ok_or("Invalid bolt12 string
    (missing description)")?.to_string();
    invoice.expiry_time = split.next().ok_or("Invalid bolt12 string
    (missing expiry_time)")?.parse::<u32>().map_err(|_| "Invalid bolt12 string
    (invalid expiry_time)")?;
    invoice.cltv_expiry = split.next().ok_or("Invalid bolt12 string
    (missing cltv_expiry)")?.parse::<u32>().map_err(|_| "Invalid bolt12 string
    (invalid cltv_expiry)")?;
    invoice.payment_secret = split.next().ok_or("Invalid bolt12 string
    (missing payment_secret)")?.from_hex().map_err(|_| "Invalid bolt12 string
    (invalid payment_secret)")?;
    invoice.features = split.next().ok_or("Invalid bolt12 string
    (missing features)")?.from_hex().map_err(|_| "Invalid bolt12 string
    (invalid features)")?;
    Ok(invoice)
    }
}