mirror of
https://github.com/ElementsProject/lightning.git
synced 2024-11-19 18:11:28 +01:00
155311b053
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
463 lines
12 KiB
C
463 lines
12 KiB
C
#ifndef LIGHTNING_LIGHTNINGD_LIGHTNINGD_H
|
|
#define LIGHTNING_LIGHTNINGD_LIGHTNINGD_H
|
|
#include "config.h"
|
|
#include <ccan/ccan/opt/opt.h>
|
|
#include <lightningd/htlc_end.h>
|
|
#include <lightningd/htlc_set.h>
|
|
#include <lightningd/options.h>
|
|
#include <lightningd/peer_control.h>
|
|
#include <lightningd/wait.h>
|
|
#include <signal.h>
|
|
#include <sys/stat.h>
|
|
#include <wallet/wallet.h>
|
|
|
|
struct amount_msat;
|
|
|
|
/* Various adjustable things. */
|
|
struct config {
|
|
/* How long do we want them to lock up their funds? (blocks) */
|
|
u32 locktime_blocks;
|
|
|
|
/* How long do we let them lock up our funds? (blocks: 2016 by spec) */
|
|
u32 max_htlc_cltv;
|
|
|
|
/* How many confirms until we consider an anchor "settled". */
|
|
u32 anchor_confirms;
|
|
|
|
/* Minimum CLTV to subtract from incoming HTLCs to outgoing */
|
|
u32 cltv_expiry_delta;
|
|
|
|
/* Minimum CLTV if we're the final hop.*/
|
|
u32 cltv_final;
|
|
|
|
/* Fee rates. */
|
|
u32 fee_base;
|
|
u32 fee_per_satoshi;
|
|
|
|
/* htlcs per channel */
|
|
u32 max_concurrent_htlcs;
|
|
|
|
/* htlc min/max values */
|
|
struct amount_msat htlc_minimum_msat;
|
|
struct amount_msat htlc_maximum_msat;
|
|
|
|
/* Max amount of dust allowed per channel */
|
|
struct amount_msat max_dust_htlc_exposure_msat;
|
|
|
|
/* How long between changing commit and sending COMMIT message. */
|
|
u32 commit_time_ms;
|
|
|
|
/* Do we let the opener set any fee rate they want */
|
|
bool ignore_fee_limits;
|
|
|
|
/* Number of blocks to rescan from the current head, or absolute
|
|
* blockheight if rescan >= 500'000 */
|
|
s32 rescan;
|
|
|
|
/* ipv6 bind disable */
|
|
bool no_ipv6_bind;
|
|
|
|
/* Are we allowed to use DNS lookup for peers. */
|
|
bool use_dns;
|
|
|
|
/* Excplicitly turns 'on' or 'off' IP discovery feature. */
|
|
enum opt_autobool ip_discovery;
|
|
|
|
/* Public TCP port assumed for IP discovery. Defaults to chainparams. */
|
|
u32 ip_discovery_port;
|
|
|
|
/* Minimal amount of effective funding_satoshis for accepting channels */
|
|
u64 min_capacity_sat;
|
|
|
|
/* This is the key we use to encrypt `hsm_secret`. */
|
|
struct secret *keypass;
|
|
|
|
/* How long before we give up waiting for INIT msg */
|
|
u32 connection_timeout_secs;
|
|
|
|
/* EXPERIMENTAL: offers support */
|
|
bool exp_offers;
|
|
|
|
/* Allow dust reserves (including 0) when being called via
|
|
* `fundchannel` or in the `openchannel` hook. This is a
|
|
* slight spec incompatibility, but implementations do this
|
|
* already. */
|
|
bool allowdustreserve;
|
|
|
|
/* Require peer to send confirmed inputs */
|
|
bool require_confirmed_inputs;
|
|
|
|
/* The factor to time the urgent feerate by to get the maximum
|
|
* acceptable feerate. (10, but can be overridden by dev-max-fee-multiplier) */
|
|
u32 max_fee_multiplier;
|
|
|
|
/* Percent of CONSERVATIVE/2 feerate we'll use for commitment txs. */
|
|
u64 commit_fee_percent;
|
|
|
|
/* Commit feerate offset above min_feerate to use as a channel opener */
|
|
u32 feerate_offset;
|
|
};
|
|
|
|
typedef STRMAP(const char *) alt_subdaemon_map;
|
|
|
|
enum lightningd_state {
|
|
LD_STATE_INITIALIZING,
|
|
LD_STATE_RUNNING,
|
|
LD_STATE_SHUTDOWN,
|
|
};
|
|
|
|
struct lightningd {
|
|
/* The directory to find all the subdaemons. */
|
|
const char *daemon_dir;
|
|
|
|
/* Are deprecated APIs enabled? */
|
|
bool deprecated_ok;
|
|
|
|
/* If we told to run in the background, this is our parent fd, otherwise
|
|
* -1. */
|
|
int daemon_parent_fd;
|
|
|
|
/* Our config basedir, network directory, and rpc file */
|
|
char *config_basedir, *config_netdir;
|
|
|
|
/* Location of the RPC socket. */
|
|
char *rpc_filename;
|
|
/* Mode of the RPC filename. */
|
|
mode_t rpc_filemode;
|
|
|
|
/* The root of the jsonrpc interface. Can be shut down
|
|
* separately from the rest of the daemon to allow a clean
|
|
* shutdown, which frees all pending cmds in a DB
|
|
* transaction. */
|
|
struct jsonrpc *jsonrpc;
|
|
|
|
/* --developer? */
|
|
bool developer;
|
|
|
|
/* Configuration file name */
|
|
char *config_filename;
|
|
/* Configuration settings. */
|
|
struct config config;
|
|
/* Where each configuration setting came from */
|
|
struct configvar **configvars;
|
|
|
|
/* This log_book is owned by all the struct loggers */
|
|
struct log_book *log_book;
|
|
/* Log for general stuff. */
|
|
struct logger *log;
|
|
const char **logfiles;
|
|
|
|
/* This is us. */
|
|
struct node_id id;
|
|
|
|
/* The public base for our payer_id keys */
|
|
struct pubkey bolt12_base;
|
|
|
|
/* Secret base for our invoices */
|
|
struct secret invoicesecret_base;
|
|
|
|
/* Feature set we offer. */
|
|
struct feature_set *our_features;
|
|
|
|
/* My name is... my favorite color is... */
|
|
u8 *alias; /* At least 32 bytes (zero-filled) */
|
|
u8 *rgb; /* tal_len() == 3. */
|
|
|
|
/* Any pending timers. */
|
|
struct timers *timers;
|
|
|
|
/* Port we're listening on */
|
|
u16 portnum;
|
|
|
|
/* Do we want to reconnect to other peers? */
|
|
bool reconnect;
|
|
|
|
/* Do we want to reconnect to other peers having only unannouced channels with us? */
|
|
bool reconnect_private;
|
|
|
|
/* How many outstanding startup connection attempts? */
|
|
size_t num_startup_connects;
|
|
|
|
/* Do we want to listen for other peers? */
|
|
bool listen;
|
|
|
|
/* Do we want to guess addresses to listen and announce? */
|
|
bool autolisten;
|
|
|
|
/* Setup: Addresses to bind/announce to the network (tal_count()) */
|
|
struct wireaddr_internal *proposed_wireaddr;
|
|
/* Setup: And the bitset for each, whether to listen, announce or both */
|
|
enum addr_listen_announce *proposed_listen_announce;
|
|
|
|
/* Actual bindings and announceables from connectd */
|
|
struct wireaddr_internal *binding;
|
|
struct wireaddr *announceable;
|
|
|
|
/* Current node announcement (if any) */
|
|
const u8 *node_announcement;
|
|
|
|
/* Lease rates to advertize, set by json_setleaserates */
|
|
struct lease_rates *lease_rates;
|
|
|
|
/* Popular discovered IPs to be used for announcement */
|
|
const struct wireaddr *discovered_ip_v4;
|
|
const struct wireaddr *discovered_ip_v6;
|
|
|
|
/* Bearer of all my secrets. */
|
|
int hsm_fd;
|
|
struct subd *hsm;
|
|
|
|
/* Daemon for routing */
|
|
struct subd *gossip;
|
|
|
|
/* Daemon looking after peers during init / before channel. */
|
|
struct subd *connectd;
|
|
/* Reconnection attempts */
|
|
struct delayed_reconnect_map *delayed_reconnect_map;
|
|
|
|
/* All peers we're tracking (by node_id) */
|
|
struct peer_node_id_map *peers;
|
|
/* And those in database by dbid */
|
|
struct peer_dbid_map *peers_by_dbid;
|
|
|
|
/* Outstanding connect commands. */
|
|
struct list_head connects;
|
|
|
|
/* Our chain topology. */
|
|
struct chain_topology *topology;
|
|
|
|
/* Blockheight (as acknowledged by gossipd) */
|
|
u32 gossip_blockheight;
|
|
|
|
/* HTLCs in flight. */
|
|
struct htlc_in_map *htlcs_in;
|
|
struct htlc_out_map *htlcs_out;
|
|
|
|
/* Sets of HTLCs we are holding onto for MPP. */
|
|
struct htlc_set_map *htlc_sets;
|
|
|
|
/* Derive all our keys from here (see bip32_pubkey) */
|
|
struct ext_key *bip32_base;
|
|
struct wallet *wallet;
|
|
|
|
/* Outstanding waitsendpay commands. */
|
|
struct list_head waitsendpay_commands;
|
|
/* Outstanding close commands. */
|
|
struct list_head close_commands;
|
|
/* Outstanding ping commands. */
|
|
struct list_head ping_commands;
|
|
/* Outstanding disconnect commands. */
|
|
struct list_head disconnect_commands;
|
|
/* Outstanding wait commands */
|
|
struct list_head wait_commands;
|
|
|
|
/* Outstanding splice commands. */
|
|
struct list_head splice_commands;
|
|
|
|
/* Maintained by invoices.c */
|
|
struct invoices *invoices;
|
|
|
|
/* Transaction filter matching what we're interested in */
|
|
struct txfilter *owned_txfilter;
|
|
|
|
/* PID file */
|
|
char *pidfile;
|
|
|
|
/* RPC which asked us to shutdown, if non-NULL */
|
|
struct io_conn *stop_conn;
|
|
/* RPC response to send once we've shut down. */
|
|
const char *stop_response;
|
|
|
|
/* All the subdaemons. */
|
|
struct list_head subds;
|
|
|
|
/* Used these feerates instead of whatever bcli returns (up to
|
|
* FEERATE_PENALTY). */
|
|
u32 *force_feerates;
|
|
|
|
/* If they force db upgrade on or off this is set. */
|
|
bool *db_upgrade_ok;
|
|
|
|
/* Announce names in config as DNS records (recently BOLT 7 addition) */
|
|
bool announce_dns;
|
|
|
|
/* Indexes used by all the wait infra */
|
|
struct indexes indexes[NUM_WAIT_SUBSYSTEM];
|
|
|
|
/* Contains the codex32 string used with --recover flag */
|
|
char *recover;
|
|
|
|
/* 2, unless overridden by --dev-fd-limit-multiplier */
|
|
u32 fd_limit_multiplier;
|
|
|
|
/* If we want to debug a subdaemon/plugin. */
|
|
char *dev_debug_subprocess;
|
|
|
|
/* If we have --dev-no-plugin-checksum */
|
|
bool dev_no_plugin_checksum;
|
|
|
|
/* If we have a --dev-disconnect file */
|
|
int dev_disconnect_fd;
|
|
|
|
/* If we have --dev-fail-on-subdaemon-fail */
|
|
bool dev_subdaemon_fail;
|
|
|
|
/* Allow and accept localhost node_announcement addresses */
|
|
bool dev_allow_localhost;
|
|
|
|
/* Timestamp to use for gossipd, iff non-zero */
|
|
u32 dev_gossip_time;
|
|
|
|
/* Speedup gossip propagation, for testing. */
|
|
bool dev_fast_gossip;
|
|
bool dev_fast_gossip_prune;
|
|
|
|
/* Speedup reconnect delay, for testing. */
|
|
bool dev_fast_reconnect;
|
|
|
|
/* This is the forced private key for the node. */
|
|
struct privkey *dev_force_privkey;
|
|
|
|
/* This is the forced bip32 seed for the node. */
|
|
struct secret *dev_force_bip32_seed;
|
|
|
|
/* These are the forced channel secrets for the node. */
|
|
struct secrets *dev_force_channel_secrets;
|
|
struct sha256 *dev_force_channel_secrets_shaseed;
|
|
|
|
struct channel_id *dev_force_tmp_channel_id;
|
|
|
|
/* For slow tests (eg protocol tests) don't die if HTLC not
|
|
* committed in 30 secs */
|
|
bool dev_no_htlc_timeout;
|
|
|
|
bool dev_no_version_checks;
|
|
|
|
/* Number of blocks we wait for a channel to get funded
|
|
* if we are the fundee. */
|
|
u32 dev_max_funding_unconfirmed;
|
|
|
|
/* Special switches to test onion compatibility */
|
|
bool dev_ignore_modern_onion;
|
|
|
|
/* Tell channeld to disable commits after this many. */
|
|
int dev_disable_commit;
|
|
|
|
/* Tell channeld not to worry about pings. */
|
|
bool dev_no_ping_timer;
|
|
|
|
/* Tell openingd/dualopend to accept all, allow sending any. */
|
|
bool dev_any_channel_type;
|
|
|
|
/* Allow changing of shutdown output point even if dangerous */
|
|
bool dev_allow_shutdown_destination_change;
|
|
|
|
/* hsmd characteristic tweaks */
|
|
bool dev_hsmd_no_preapprove_check;
|
|
bool dev_hsmd_fail_preapprove;
|
|
|
|
/* Tell connectd not to talk after handshake */
|
|
bool dev_handshake_no_reply;
|
|
|
|
/* tor support */
|
|
struct wireaddr *proxyaddr;
|
|
bool always_use_proxy;
|
|
char *tor_service_password;
|
|
bool pure_tor_setup;
|
|
|
|
struct plugins *plugins;
|
|
|
|
char *wallet_dsn;
|
|
|
|
bool encrypted_hsm;
|
|
/* What (additional) messages the HSM accepts */
|
|
u32 *hsm_capabilities;
|
|
|
|
mode_t initial_umask;
|
|
|
|
/* Outstanding waitblockheight commands. */
|
|
struct list_head waitblockheight_commands;
|
|
|
|
alt_subdaemon_map alt_subdaemons;
|
|
|
|
enum lightningd_state state;
|
|
|
|
/* Total number of coin moves we've seen, since
|
|
* coin move tracking was cool */
|
|
s64 coin_moves_count;
|
|
|
|
/* If non-NULL, contains the exit code to use. */
|
|
int *exit_code;
|
|
|
|
/* The round-robin list of channels, for use when doing MPP. */
|
|
u64 rr_counter;
|
|
|
|
/* Should we re-exec ourselves instead of just exiting? */
|
|
bool try_reexec;
|
|
/* If set, we are to restart with --recover=... */
|
|
const char *recover_secret;
|
|
|
|
/* Array of (even) TLV types that we should allow. This is required
|
|
* since we otherwise would outright reject them. */
|
|
u64 *accept_extra_tlv_types;
|
|
|
|
/* --experimental-upgrade-protocol */
|
|
bool experimental_upgrade_protocol;
|
|
|
|
/* --invoices-onchain-fallback */
|
|
bool unified_invoices;
|
|
|
|
/* For anchors: how much do we keep for spending close txs? */
|
|
struct amount_sat emergency_sat;
|
|
|
|
/* runes! */
|
|
struct runes *runes;
|
|
|
|
/* Explicitly re-enabled deprecated APIs. */
|
|
const char **api_begs;
|
|
};
|
|
|
|
/* Turning this on allows a tal allocation to return NULL, rather than aborting.
|
|
* Use only on carefully tested code! */
|
|
extern bool tal_oom_ok;
|
|
|
|
/* Returns true if called with a recognized subdaemon, eg: "hsmd" */
|
|
bool is_subdaemon(const char *sdname);
|
|
|
|
/* Returns the path to the subdaemon. Considers alternate subdaemon paths. */
|
|
const char *subdaemon_path(const tal_t *ctx, const struct lightningd *ld, const char *name);
|
|
|
|
/* Check we can run subdaemons, and check their versions */
|
|
void test_subdaemons(const struct lightningd *ld);
|
|
|
|
/* Notify lightningd about new blocks. */
|
|
void notify_new_block(struct lightningd *ld, u32 block_height);
|
|
|
|
/* Signal a clean exit from lightningd.
|
|
* NOTE! This function **returns**.
|
|
* This just causes the main loop to exit, so you have to return
|
|
* all the way to the main loop for `lightningd` to exit.
|
|
*/
|
|
void lightningd_exit(struct lightningd *ld, int exit_code);
|
|
|
|
/* Should we accept them using this deprecated API? (add details to
|
|
* log msg if non-NULL) */
|
|
bool lightningd_deprecated_in_ok(struct lightningd *ld,
|
|
struct logger *log,
|
|
bool deprecated_apis,
|
|
const char *subsys,
|
|
const char *api,
|
|
const char *start,
|
|
const char *end,
|
|
const char *details);
|
|
|
|
/* Should we output this deprecated field? */
|
|
bool lightningd_deprecated_out_ok(struct lightningd *ld,
|
|
bool deprecated_apis,
|
|
const char *subsys,
|
|
const char *api,
|
|
const char *start,
|
|
const char *end);
|
|
|
|
#endif /* LIGHTNING_LIGHTNINGD_LIGHTNINGD_H */
|