clplug: Create Core Lightning Plugins

[ bitcoin, bsd3, library, lightning, plugin ] [ Propose Tags ]

Library to create plugins to extend the functionality of Core Lightning daemon.


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0, 0.2.0.0, 0.3.0.0, 0.3.1.0, 0.3.2.0, 0.3.3.0, 0.4.0.0
Change log CHANGELOG.md
Dependencies aeson, attoparsec, base (>=4.7 && <5), bytestring, conduit, mtl, network, text [details]
License BSD-3-Clause
Copyright 2023
Author Taylor Singleton-Fookes
Maintainer taylorsingletonfookes@live.com
Category bitcoin, lightning, plugin
Home page https://github.com/AutonomousOrganization/blitz#readme
Bug tracker https://github.com/AutonomousOrganization/blitz/issues
Source repo head: git clone https://github.com/AutonomousOrganization/blitz
Uploaded by autonomousorganization at 2023-03-09T21:15:04Z
Distributions
Downloads 221 total (17 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2023-03-09 [all 1 reports]

Readme for clplug-0.3.0.0

[back to package description]

Core Lightning Plug

Core lightning is a daemon (lightningd) that operates payment channels that allow you to send and receive bitcoin nearly instantly, with nearly zero fees with a high level of privacy. It does not compromise on any of the strengths of layer 1 bitcoin: no censorship, free speech, individual sovereignty, and impossible debasement. In fact it strengthens bitcoin because it encourages the operation of fully validating nodes, lightningd requires bitcoind. Clplug is a Haskell library that allows you to easily create extensions (called plugins) that extend or augment its functionality.

To create a plugin you only need to define three arguments:

  • Manifest :: Value - configuration of the interface with core lightning.
  • PluginInit :: PlugInfo -> IO a - startup function that returns the starting state
  • PluginApp :: (Maybe Id, Method, Params) -> PluginMonad - data handler function

The transformer stack contains:

  • ask - a handle to lightning-rpc and environment info.
  • get/put - polymorphic state
  • yield - stdout to core lightning

The main exports from the Library are Control.Plugin, Control.Client, and Data.Lightning. An upload and link to hackage is pending. This is a basic usage example:

{-# LANGUAGE 
      OverloadedStrings 
    , FlexibleContexts 
    , ViewPatterns
    , RecordWildCards
#-} 

module Main (main) where

-- from clplug
import Data.Lightning 
import Control.Plugin  
import Control.Conduit
--

import Data.Conduit 
import Data.Aeson
import Data.Text

main = plugin manifest appState app

manifest :: Value 
manifest = object [
      "dynamic" .= True
    , "subscriptions" .= (["channel_opened"] :: [Text] ) 
    , "options" .= ([]::[Option])
    , "rpcmethods" .= ([]) 
    , "hooks" .= ([]::[Hook])
    , "featurebits" .= object [ ]
    , "notifications" .= ([]::[Notification])
    ] 

app :: PluginApp () 
app (Nothing, "channel_opened", fromJSON -> Success (ChannelOpened {..})) = do
    doublespend funding_txid 
    where doublespend _ = pure ()

appState = pure () 

Useful areas of exploration and research are:

  • fee optimization
  • route selection
  • economic rebalancing
  • accidental channel closes
Donation bitcoin addr: bc1q5xx9mathvsl0unfwa3jlph379n46vu9cletshr

lightning only scales bitcoin if people run nodes