bolt5

On-chain transaction handling for Lightning (docs.ppad.tech/bolt5).
git clone git://git.ppad.tech/bolt5.git
Log | Files | Refs | README | LICENSE

commit 8f31b418d0ca16e20b59bb393c700bf309453ea0
parent 73ab65c86cae1a9a8cebaec9045ef291cc91f50e
Author: Jared Tobin <jared@jtobin.io>
Date:   Sat, 18 Apr 2026 21:14:35 +0800

Add bolt3, tx, and transitive deps to flake and cabal

Add ppad-bolt3, ppad-tx, ppad-sha256, ppad-secp256k1, and
ppad-ripemd160 as flake inputs with proper follows references.
Update cabal build-depends for the library (ppad-bolt3,
ppad-sha256, ppad-tx), test suite (ppad-bolt3, ppad-tx,
tasty-quickcheck, QuickCheck), and benchmarks (ppad-bolt3,
ppad-tx).

Add BOLT5.Detect, BOLT5.Spend, BOLT5.Types to exposed-modules.

Diffstat:
Aflake.lock | 526+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mflake.nix | 67++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
Mppad-bolt5.cabal | 14++++++++++++++
3 files changed, 606 insertions(+), 1 deletion(-)

diff --git a/flake.lock b/flake.lock @@ -0,0 +1,526 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1766840161, + "narHash": "sha256-Ss/LHpJJsng8vz1Pe33RSGIWUOcqM1fjrehjUkdrWio=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3edc4a30ed3903fdf6f90c837f961fa6b49582d1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "ppad-base16": { + "inputs": { + "flake-utils": [ + "ppad-ripemd160", + "ppad-base16", + "ppad-nixpkgs", + "flake-utils" + ], + "nixpkgs": [ + "ppad-ripemd160", + "ppad-base16", + "ppad-nixpkgs", + "nixpkgs" + ], + "ppad-nixpkgs": [ + "ppad-ripemd160", + "ppad-nixpkgs" + ] + }, + "locked": { + "lastModified": 1766934151, + "narHash": "sha256-BUFpuLfrGXE2xi3Wa9TYCEhhRhFp175Ghxnr0JRbG2I=", + "ref": "master", + "rev": "58dfb7922401a60d5de76825fcd5f6ecbcd7afe0", + "revCount": 26, + "type": "git", + "url": "git://git.ppad.tech/base16.git" + }, + "original": { + "ref": "master", + "type": "git", + "url": "git://git.ppad.tech/base16.git" + } + }, + "ppad-base16_2": { + "inputs": { + "flake-utils": [ + "ppad-secp256k1", + "ppad-base16", + "ppad-nixpkgs", + "flake-utils" + ], + "nixpkgs": [ + "ppad-secp256k1", + "ppad-base16", + "ppad-nixpkgs", + "nixpkgs" + ], + "ppad-nixpkgs": [ + "ppad-secp256k1", + "ppad-nixpkgs" + ] + }, + "locked": { + "lastModified": 1766934151, + "narHash": "sha256-BUFpuLfrGXE2xi3Wa9TYCEhhRhFp175Ghxnr0JRbG2I=", + "ref": "master", + "rev": "58dfb7922401a60d5de76825fcd5f6ecbcd7afe0", + "revCount": 26, + "type": "git", + "url": "git://git.ppad.tech/base16.git" + }, + "original": { + "ref": "master", + "type": "git", + "url": "git://git.ppad.tech/base16.git" + } + }, + "ppad-base16_3": { + "inputs": { + "flake-utils": [ + "ppad-sha256", + "ppad-base16", + "ppad-nixpkgs", + "flake-utils" + ], + "nixpkgs": [ + "ppad-sha256", + "ppad-base16", + "ppad-nixpkgs", + "nixpkgs" + ], + "ppad-nixpkgs": [ + "ppad-sha256", + "ppad-nixpkgs" + ] + }, + "locked": { + "lastModified": 1766934151, + "narHash": "sha256-BUFpuLfrGXE2xi3Wa9TYCEhhRhFp175Ghxnr0JRbG2I=", + "ref": "master", + "rev": "58dfb7922401a60d5de76825fcd5f6ecbcd7afe0", + "revCount": 26, + "type": "git", + "url": "git://git.ppad.tech/base16.git" + }, + "original": { + "ref": "master", + "type": "git", + "url": "git://git.ppad.tech/base16.git" + } + }, + "ppad-base16_4": { + "inputs": { + "flake-utils": [ + "ppad-tx", + "ppad-base16", + "ppad-nixpkgs", + "flake-utils" + ], + "nixpkgs": [ + "ppad-tx", + "ppad-base16", + "ppad-nixpkgs", + "nixpkgs" + ], + "ppad-nixpkgs": [ + "ppad-tx", + "ppad-nixpkgs" + ] + }, + "locked": { + "lastModified": 1766934151, + "narHash": "sha256-BUFpuLfrGXE2xi3Wa9TYCEhhRhFp175Ghxnr0JRbG2I=", + "ref": "master", + "rev": "58dfb7922401a60d5de76825fcd5f6ecbcd7afe0", + "revCount": 26, + "type": "git", + "url": "git://git.ppad.tech/base16.git" + }, + "original": { + "ref": "master", + "type": "git", + "url": "git://git.ppad.tech/base16.git" + } + }, + "ppad-bolt3": { + "inputs": { + "flake-utils": [ + "ppad-bolt3", + "ppad-nixpkgs", + "flake-utils" + ], + "nixpkgs": [ + "ppad-bolt3", + "ppad-nixpkgs", + "nixpkgs" + ], + "ppad-nixpkgs": [ + "ppad-nixpkgs" + ], + "ppad-ripemd160": [ + "ppad-ripemd160" + ], + "ppad-secp256k1": [ + "ppad-secp256k1" + ], + "ppad-sha256": [ + "ppad-sha256" + ], + "ppad-tx": [ + "ppad-tx" + ] + }, + "locked": { + "lastModified": 1776515943, + "narHash": "sha256-dpXMy6JzqA5jwt+9HxofN4ludlx6k3bM/G919U2DeKM=", + "ref": "master", + "rev": "23c984f83e3c629f3b8a7c1b123a7b298c394352", + "revCount": 35, + "type": "git", + "url": "git://git.ppad.tech/bolt3.git" + }, + "original": { + "ref": "master", + "type": "git", + "url": "git://git.ppad.tech/bolt3.git" + } + }, + "ppad-fixed": { + "inputs": { + "flake-utils": [ + "ppad-secp256k1", + "ppad-fixed", + "ppad-nixpkgs", + "flake-utils" + ], + "nixpkgs": [ + "ppad-secp256k1", + "ppad-fixed", + "ppad-nixpkgs", + "nixpkgs" + ], + "ppad-nixpkgs": [ + "ppad-secp256k1", + "ppad-nixpkgs" + ] + }, + "locked": { + "lastModified": 1767278248, + "narHash": "sha256-ynF6Tyew83dDr3dFWdTdgK3N5WEkLSCQ/uHHTxb5J1s=", + "ref": "master", + "rev": "ae6f5d732d69e6e2bb70ea9da18e2a8060ca9aeb", + "revCount": 290, + "type": "git", + "url": "git://git.ppad.tech/fixed.git" + }, + "original": { + "ref": "master", + "type": "git", + "url": "git://git.ppad.tech/fixed.git" + } + }, + "ppad-hmac-drbg": { + "inputs": { + "flake-utils": [ + "ppad-secp256k1", + "ppad-hmac-drbg", + "ppad-nixpkgs", + "flake-utils" + ], + "nixpkgs": [ + "ppad-secp256k1", + "ppad-hmac-drbg", + "ppad-nixpkgs", + "nixpkgs" + ], + "ppad-base16": [ + "ppad-secp256k1", + "ppad-base16" + ], + "ppad-nixpkgs": [ + "ppad-secp256k1", + "ppad-nixpkgs" + ], + "ppad-sha256": [ + "ppad-secp256k1", + "ppad-sha256" + ], + "ppad-sha512": [ + "ppad-secp256k1", + "ppad-sha512" + ] + }, + "locked": { + "lastModified": 1770211545, + "narHash": "sha256-D19hrPxPc81A/7MvOiYeWXItlgDwAdEw5wgqOgOMoDo=", + "owner": "ppad-tech", + "repo": "hmac-drbg", + "rev": "0ab3f384fa77f18b515d140cf35dcc082cd38957", + "type": "github" + }, + "original": { + "owner": "ppad-tech", + "repo": "hmac-drbg", + "type": "github" + } + }, + "ppad-nixpkgs": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1766932084, + "narHash": "sha256-GvVsbTfW+B7IQ9K/QP2xcXJAm1lhBin1jYZWNjOzT+o=", + "ref": "master", + "rev": "353e61763b959b960a55321a85423501e3e9ed7a", + "revCount": 2, + "type": "git", + "url": "git://git.ppad.tech/nixpkgs.git" + }, + "original": { + "ref": "master", + "type": "git", + "url": "git://git.ppad.tech/nixpkgs.git" + } + }, + "ppad-ripemd160": { + "inputs": { + "flake-utils": [ + "ppad-ripemd160", + "ppad-nixpkgs", + "flake-utils" + ], + "nixpkgs": [ + "ppad-ripemd160", + "ppad-nixpkgs", + "nixpkgs" + ], + "ppad-base16": "ppad-base16", + "ppad-nixpkgs": [ + "ppad-nixpkgs" + ] + }, + "locked": { + "lastModified": 1766957035, + "narHash": "sha256-Ltal2K/ika4svHpb7emUyeRAfZCyhvZy59syD+BJM8k=", + "ref": "master", + "rev": "a82424ea6b9f48ed42c4f2a239600283b088ab8d", + "revCount": 30, + "type": "git", + "url": "git://git.ppad.tech/ripemd160.git" + }, + "original": { + "ref": "master", + "type": "git", + "url": "git://git.ppad.tech/ripemd160.git" + } + }, + "ppad-secp256k1": { + "inputs": { + "flake-utils": [ + "ppad-secp256k1", + "ppad-nixpkgs", + "flake-utils" + ], + "nixpkgs": [ + "ppad-secp256k1", + "ppad-nixpkgs", + "nixpkgs" + ], + "ppad-base16": "ppad-base16_2", + "ppad-fixed": "ppad-fixed", + "ppad-hmac-drbg": "ppad-hmac-drbg", + "ppad-nixpkgs": [ + "ppad-nixpkgs" + ], + "ppad-sha256": [ + "ppad-sha256" + ], + "ppad-sha512": "ppad-sha512" + }, + "locked": { + "lastModified": 1771915531, + "narHash": "sha256-DH5bFOwWwfmNqqAE3Fj9ypyRUcGMjVFDif13aBtyI20=", + "ref": "master", + "rev": "16b9d904480e24c0945f8ba58830e58c8146eac5", + "revCount": 250, + "type": "git", + "url": "git://git.ppad.tech/secp256k1.git" + }, + "original": { + "ref": "master", + "type": "git", + "url": "git://git.ppad.tech/secp256k1.git" + } + }, + "ppad-sha256": { + "inputs": { + "flake-utils": [ + "ppad-sha256", + "ppad-nixpkgs", + "flake-utils" + ], + "nixpkgs": [ + "ppad-sha256", + "ppad-nixpkgs", + "nixpkgs" + ], + "ppad-base16": "ppad-base16_3", + "ppad-nixpkgs": [ + "ppad-nixpkgs" + ] + }, + "locked": { + "lastModified": 1769942235, + "narHash": "sha256-6NlOumhA4BD9Eihfb58mjfueHLM6t3wxpcHAYsntbMg=", + "ref": "master", + "rev": "40792bf33df4582897000fc331a75cc458db9463", + "revCount": 127, + "type": "git", + "url": "git://git.ppad.tech/sha256.git" + }, + "original": { + "ref": "master", + "type": "git", + "url": "git://git.ppad.tech/sha256.git" + } + }, + "ppad-sha512": { + "inputs": { + "flake-utils": [ + "ppad-secp256k1", + "ppad-sha512", + "ppad-nixpkgs", + "flake-utils" + ], + "nixpkgs": [ + "ppad-secp256k1", + "ppad-sha512", + "ppad-nixpkgs", + "nixpkgs" + ], + "ppad-base16": [ + "ppad-secp256k1", + "ppad-base16" + ], + "ppad-nixpkgs": [ + "ppad-secp256k1", + "ppad-nixpkgs" + ] + }, + "locked": { + "lastModified": 1769944296, + "narHash": "sha256-uw4EgnM5yQF6LmkkxHY0PJLNko8Wad9aq7GEtacEM3g=", + "ref": "master", + "rev": "8fa68ca2fcfc589e7716be9162e2fef52293516a", + "revCount": 48, + "type": "git", + "url": "git://git.ppad.tech/sha512.git" + }, + "original": { + "ref": "master", + "type": "git", + "url": "git://git.ppad.tech/sha512.git" + } + }, + "ppad-tx": { + "inputs": { + "flake-utils": [ + "ppad-tx", + "ppad-nixpkgs", + "flake-utils" + ], + "nixpkgs": [ + "ppad-tx", + "ppad-nixpkgs", + "nixpkgs" + ], + "ppad-base16": "ppad-base16_4", + "ppad-nixpkgs": [ + "ppad-nixpkgs" + ], + "ppad-sha256": [ + "ppad-sha256" + ] + }, + "locked": { + "lastModified": 1776515759, + "narHash": "sha256-yRHrY3d3tL8ZM1dWKPYvaz7H3YsPtM8vd2ZwJKL2/nQ=", + "ref": "master", + "rev": "6e22072caac8c1db991c2640fcb795afba8c294a", + "revCount": 20, + "type": "git", + "url": "git://git.ppad.tech/tx.git" + }, + "original": { + "ref": "master", + "type": "git", + "url": "git://git.ppad.tech/tx.git" + } + }, + "root": { + "inputs": { + "flake-utils": [ + "ppad-nixpkgs", + "flake-utils" + ], + "nixpkgs": [ + "ppad-nixpkgs", + "nixpkgs" + ], + "ppad-bolt3": "ppad-bolt3", + "ppad-nixpkgs": "ppad-nixpkgs", + "ppad-ripemd160": "ppad-ripemd160", + "ppad-secp256k1": "ppad-secp256k1", + "ppad-sha256": "ppad-sha256", + "ppad-tx": "ppad-tx" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix @@ -7,11 +7,49 @@ url = "git://git.ppad.tech/nixpkgs.git"; ref = "master"; }; + ppad-sha256 = { + type = "git"; + url = "git://git.ppad.tech/sha256.git"; + ref = "master"; + inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; + }; + ppad-secp256k1 = { + type = "git"; + url = "git://git.ppad.tech/secp256k1.git"; + ref = "master"; + inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; + inputs.ppad-sha256.follows = "ppad-sha256"; + }; + ppad-ripemd160 = { + type = "git"; + url = "git://git.ppad.tech/ripemd160.git"; + ref = "master"; + inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; + }; + ppad-tx = { + type = "git"; + url = "git://git.ppad.tech/tx.git"; + ref = "master"; + inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; + inputs.ppad-sha256.follows = "ppad-sha256"; + }; + ppad-bolt3 = { + type = "git"; + url = "git://git.ppad.tech/bolt3.git"; + ref = "master"; + inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; + inputs.ppad-sha256.follows = "ppad-sha256"; + inputs.ppad-secp256k1.follows = "ppad-secp256k1"; + inputs.ppad-ripemd160.follows = "ppad-ripemd160"; + inputs.ppad-tx.follows = "ppad-tx"; + }; flake-utils.follows = "ppad-nixpkgs/flake-utils"; nixpkgs.follows = "ppad-nixpkgs/nixpkgs"; }; - outputs = { self, nixpkgs, flake-utils, ppad-nixpkgs }: + outputs = { self, nixpkgs, flake-utils, ppad-nixpkgs + , ppad-sha256, ppad-secp256k1, ppad-ripemd160 + , ppad-tx, ppad-bolt3 }: flake-utils.lib.eachDefaultSystem (system: let lib = "ppad-bolt5"; @@ -21,7 +59,34 @@ llvm = pkgs.llvmPackages_19.llvm; clang = pkgs.llvmPackages_19.clang; + sha256 = ppad-sha256.packages.${system}.default; + sha256-llvm = + hlib.addBuildTools + (hlib.enableCabalFlag sha256 "llvm") + [ llvm clang ]; + + secp256k1 = ppad-secp256k1.packages.${system}.default; + secp256k1-llvm = + hlib.addBuildTools + (hlib.enableCabalFlag secp256k1 "llvm") + [ llvm clang ]; + + ripemd160 = ppad-ripemd160.packages.${system}.default; + ripemd160-llvm = + hlib.addBuildTools + (hlib.enableCabalFlag ripemd160 "llvm") + [ llvm clang ]; + + tx = ppad-tx.packages.${system}.default; + + bolt3 = ppad-bolt3.packages.${system}.default; + hpkgs = pkgs.haskell.packages.ghc910.extend (new: old: { + ppad-sha256 = sha256-llvm; + ppad-secp256k1 = secp256k1-llvm; + ppad-ripemd160 = ripemd160-llvm; + ppad-tx = tx; + ppad-bolt3 = bolt3; ${lib} = new.callCabal2nix lib ./. { }; }); diff --git a/ppad-bolt5.cabal b/ppad-bolt5.cabal @@ -25,9 +25,15 @@ library -Wall exposed-modules: Lightning.Protocol.BOLT5 + Lightning.Protocol.BOLT5.Detect + Lightning.Protocol.BOLT5.Spend + Lightning.Protocol.BOLT5.Types build-depends: base >= 4.9 && < 5 , bytestring >= 0.9 && < 0.13 + , ppad-bolt3 >= 0.0.1 && < 0.1 + , ppad-sha256 >= 0.3.2 && < 0.4 + , ppad-tx >= 0.1 && < 0.2 test-suite bolt5-tests type: exitcode-stdio-1.0 @@ -41,9 +47,13 @@ test-suite bolt5-tests build-depends: base , bytestring + , ppad-bolt3 , ppad-bolt5 + , ppad-tx , tasty , tasty-hunit + , tasty-quickcheck + , QuickCheck benchmark bolt5-bench type: exitcode-stdio-1.0 @@ -59,7 +69,9 @@ benchmark bolt5-bench , bytestring , criterion , deepseq + , ppad-bolt3 , ppad-bolt5 + , ppad-tx benchmark bolt5-weigh type: exitcode-stdio-1.0 @@ -74,5 +86,7 @@ benchmark bolt5-weigh base , bytestring , deepseq + , ppad-bolt3 , ppad-bolt5 + , ppad-tx , weigh