cln-plugin 0.3.0

A CLN plugin library. Write your plugin in Rust.
Documentation
#ifndef LIGHTNING_PLUGINS_OFFERS_H
#define LIGHTNING_PLUGINS_OFFERS_H
#include "config.h"

struct command_result;
struct command;
struct onion_message;
struct plugin;

/* This is me. */
extern struct pubkey id;
/* --fetchinvoice-noconnect */
extern bool disable_connect;
/* --cltv-final */
extern u16 cltv_final;
/* Current header_count */
extern u32 blockheight;
/* Basis for invoice path_secrets */
extern struct secret invoicesecret_base;
/* Base for offers path_secrets */
extern struct secret offerblinding_base;
/* Base for node aliases for invoice requests */
extern struct secret nodealias_base;
/* --dev-invoice-bpath-scid */
extern bool dev_invoice_bpath_scid;
/* --dev-invoice-internal-scid */
extern struct short_channel_id *dev_invoice_internal_scid;
/* This is me. */
extern struct pubkey id;

/* Helper to send a reply (connecting if required), and discard result */
struct command_result *WARN_UNUSED_RESULT
send_onion_reply(struct command *cmd,
		 struct blinded_path *reply_path,
		 struct tlv_onionmsg_tlv *payload);

/* Helper to send an onion message */
#define inject_onionmessage(cmd, omsg, success, fail, arg)		\
	inject_onionmessage_((cmd), (omsg),				\
			     typesafe_cb_preargs(struct command_result *, void *, \
						 (success), (arg),	\
						 struct command *,	\
						 const char *,		\
						 const char *,		\
						 const jsmntok_t *),	\
			     typesafe_cb_preargs(struct command_result *, void *, \
						 (fail), (arg),		\
						 struct command *,	\
						 const char *,		\
						 const char *,		\
						 const jsmntok_t *),	\
			     (arg))

struct command_result *
inject_onionmessage_(struct command *cmd,
		     const struct onion_message *omsg,
		     struct command_result *(*cb)(struct command *command,
						  const char *method,
						  const char *buf,
						  const jsmntok_t *result,
						  void *arg),
		     struct command_result *(*errcb)(struct command *command,
						     const char *method,
						     const char *buf,
						     const jsmntok_t *result,
						     void *arg),
		     void *arg);

/* Get the (latest) gossmap */
struct gossmap *get_gossmap(struct plugin *plugin);

/* Get the best (private) channel */
struct chaninfo {
	struct pubkey id;
	struct amount_msat capacity, htlc_min, htlc_max;
	u32 feebase, feeppm, cltv;
};

/* Calls listpeerchannels, then cb with best peer (if any!) which has needed_feature */
struct command_result *find_best_peer_(struct command *cmd,
				       int needed_feature,
				       struct command_result *(*cb)(struct command *,
								    const struct chaninfo *,
								    void *),
				       void *arg);

#define find_best_peer(cmd, needed_feature, cb, arg)			\
	find_best_peer_((cmd), (needed_feature),			\
			typesafe_cb_preargs(struct command_result *, void *, \
					    (cb), (arg),		\
					    struct command *,		\
					    const struct chaninfo *),	\
			(arg))

#endif /* LIGHTNING_PLUGINS_OFFERS_H */