Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
LIGHTNINGD-RPC(7)					     LIGHTNINGD-RPC(7)

NAME
       lightningd-rpc -- Lightning Daemon RPC Protocols

SYNOPSIS
       ~/.lightning/bitcoin/lightning-rpc

DESCRIPTION
       lightningd(8)  communicates  via	 RPC, especially JSONRPC over the UNIX
       domain socket (by default  $HOME/.lightning/bitcoin/lightning-rpc,  but
       configuable with	lightningd-config(5)).

JSON WIRE FORMAT
       JSON RPC	is defined at <https://www.jsonrpc.org/specification> and gen-
       erally  involves	writing	a JSON request with a unique ID, and receiving
       a response containing that ID.

       Every response given by lightningd(8) is	followed by two	 '\n'  charac-
       ters,  which  should not	appear in normal JSON (though plugins may pro-
       duce them).  This means efficient code can simply read  until  it  sees
       two '\n'	characters, and	then attempt to	parse the JSON (if the JSON is
       incomplete, it should continue reading and file a bug).

JSON COMMANDS
       We  support  "params"  as an array (ordered parameters) or a dictionary
       (named parameters).  In the array case, JSON "null" is  treated	as  if
       the parameter was not specified (if that	is allowed).

       You  should  probably prefer named parameters if	possible, as they have
       generally been shown to be less confusing for complex commands and more
       robust when fields are deprecated.

       The $ lightning-cli(1) tool uses	ordered	 parameters  by	 default,  but
       named  parameters  if  explicitly specified or the first	parameter con-
       tains an	'='.

JSON IDS
       JSON id fields in requests are used to match  requests  and  responses.
       These used to be	simple numbers,	but with modern	plugins	that is	depre-
       cated:  we  use a specific format, which	makes them very	useful for de-
       bugging and tracking the	cause of commands:

       JSONID := IDPART	['/' IDPART]*
       IDPART := PREFIX	':' METHOD '#' NUMBER

       PREFIX is cln for the main daemon, cli for $ lightning-cli, and	should
       be  the plugin name for plugins.	 METHOD	is an internal identifier, in-
       dicating	what caused the	request: for cli it's simply the  method  it's
       invoking,  but  for plugins it may be the routine which created the re-
       quest.  And NUMBER ensures uniqueness (it's  usually  a	simple	incre-
       ment).

       Importantly  for	 plugins, incoming requests often trigger outgoing re-
       quests, and for these, the outgoing request id is created by  appending
       a / and another id part into the	incoming.  This	makes the chain	of re-
       sponsibility  much  clearer.  e.g, this shows the JSON id of a sendraw-
       transaction RPC call, and we can	tell that $ lightning-cli has  invoked
       the  withdraw command, which lightningd passes through to the txprepare
       plugin, which called sendrawtransaction.

       cli:withdraw#123/cln:withdraw#7/txprepare:sendpsbt#1/cln:sendrawtransaction#9

JSON REPLIES
       All JSON	replies	are wrapped in an object; this	allows	fields	to  be
       added in	future.	 You should safely ignore any unknown fields.

       Any  field  name	which starts with "warning" is a specific warning, and
       should be documented in the commands' manual page.  Each	warning	 field
       has  an	associated  human-readable  string, but	it's redudant, as each
       separate	warning	should have a distinct field  name  (e.g.  warning_of-
       fer_unknown_currency and	warning_offer_missing_description).

JSON TYPES
       The   exact   specification   for  (most!)  commands  is	 specified  in
       doc/schemas/ in the source directory.  This is also  used  to  generate
       part of the documentation for each command; the following types are re-
       ferred to in addition to	simple JSON types:

         hex: an even-length string of	hexadecimal digits.
         hash:	a 64-character hex which is a sha256 hash.
         secret: a 64-character hex which is a	secret of some kind.
         u64:	a  JSON	 number	 without  decimal  point  in  the  range  0 to
	  18446744073709551615 inclusive.
         u32: a  JSON	number	without	 decimal  point	 in  the  range	 0  to
	  4294967295 inclusive.
         u16: a JSON number without decimal point in the range	0 to 65535 in-
	  clusive.
         u16:	a  JSON	number without decimal point in	the range 0 to 255 in-
	  clusive.
         pubkey: a 66-character hex which is an SEC-1 encoded secp256k1 point
	  (usually used	as a public key).
         msat:	a u64 which indicates an amount	of millisatoshis.  Deprecated:
	  may also be a	string of the number, with "msat" appended.  As	an in-
	  put parameter, lightningd(8) will accept strings with	suffixes  (see
	  below).
         txid:	a 64-character hex Bitcoin transaction identifier.
         signature: a hex (144	bytes or less),	which is a DER-encoded Bitcoin
	  signature (without any sighash flags appended),
         bip340sig:  a	 128-character hex which is a BIP-340 (Schnorr)	signa-
	  ture.
         point32: a 64-character hex which represents an x-only pubkey.
         short_channel_id: a string of	form BLOCK "x" TXNUM "x" OUTNUM.
         short_channel_id_dir:	a short_channel_id with	"/0" or	"/1" appended,
	  indicating the direction between peers.
         outpoint: a string containing	a txid followed	by a ":" and an	output
	  number (bitcoind uses	this form).
         feerate: an integer, or a string consisting of a number followed  by
	  "perkw" or "perkb".
         outputdesc:  an  object  containing  onchain	addresses as keys, and
	  "all"	or a valid msat	field as values.

       The following forms of msat are supported as parameters:

         An integer (representing that	many millisatoshis), e.g. 10000
         A string of an integer N and the suffix msat	(representing  N  mil-
	  lisatoshis) e.g. "10000msat"
         A  string  of	 an integer N and the suffix sat (representing N times
	  1000 millisatoshis ) e.g. "10sat"
         A string of a	number N.M (where M is exactly three digits)  and  the
	  suffix  sat  (representing  N	 times 1000 plus M millisatoshis) e.g.
	  "10.000sat"
         A string of an integer N and the suffix btc  (representing  N	 times
	  100000000000 millisatoshis) e.g. "1btc"
         A  string  of	a number N.M (where M is exactly eight digits) and the
	  suffix btc (representing N times 100000000000	plus M times 1000 mil-
	  lisatoshis) e.g "0.00000010btc"
         A string of a	number N.M (where M is exactly elevent digits) and the
	  suffix btc (representing N times 100000000000	plus M	millisatoshis)
	  e.g "0.00000010000btc"

JSON NOTIFICATIONS
       Notifications  are  (per	 JSONRPC  spec)	 JSON commands without an "id"
       field.  They give information about ongoing commands, but you  need  to
       enable them.  See lightning-notifications(7).

FIELD FILTERING
       You  can	 restrict what fields are in the output	of any command,	by in-
       cluding a "filter" member  in  your  request,  alongside	 the  standard
       "method"	and "params" fields.

       filter is a template, with keys indicating what fields are to be	output
       (values	must  be true).	 Only fields which appear in the template will
       be output.  For example,	here is	a normal result	of listtransactions:

       "result": {
	 "transactions": [
	   {
	     "hash": "3b15dbc81d6a70abe1e75c1796c3eeba71c3954b7a90dfa67d55c1e989e20dbb",
	     "rawtx": "020000000001019db609b099735fada240b82cec9da880b35d7a944065c280b8534cb4e2f5a7e90000000000feffffff0240420f000000000017a914d8b7ebd0ccc80266a97d9a828baf1877032ac6648731aff6290100000017a9142cb0814338091a73b388579b025c34f328dfb7898702473044022060a7ede98390111bc33bb12b09b38ad8e31b2a6fd62e9ce39a165b4c15ed39f8022040537219d42af28be18fd223af7cb2367f2300c9f0eb20dcaf677a96cd23efc7012102b2e79c36f2173bc24754214b6eeecd8dc753afda44f606d6f8c55c60c4d614ac65000000",
	     "blockheight": 102,
	     "txindex":	1,
	     "locktime": 101,
	     "version":	2,
	     "inputs": [
	       {
		 "txid": "e9a7f5e2b44c53b880c26540947a5db380a89dec2cb840a2ad5f7399b009b69d",
		 "index": 0,
		 "sequence": 4294967294
	       }
	     ],
	     "outputs":	[
	       {
		 "index": 0,
		 "amount_msat":	"1000000000msat",
		 "type": "deposit",
		 "scriptPubKey": "a914d8b7ebd0ccc80266a97d9a828baf1877032ac66487"
	       },
	       {
		 "index": 1,
		 "amount_msat":	"4998999857000msat",
		 "scriptPubKey": "a9142cb0814338091a73b388579b025c34f328dfb78987"
	       }
	     ]
	   },
	   {
	     "hash": "3a5ebaae466a9cb69c59553a3100ed545523e7450c32684cbc6bf0b305a6c448",
	     "rawtx": "02000000000101bb0de289e9c1557da6df907a4b95c371baeec396175ce7e1ab706a1dc8db153b000000001716001401fad90abcd66697e2592164722de4a95ebee165fdffffff0217a70d0000000000160014c2ccab171c2a5be9dab52ec41b825863024c5466a0860100000000002200205b8cd3b914cf67cdd8fa6273c930353dd36476734fbd962102c2df53b90880cd0247304402201ce0fef95f6aa0e04a87bdc3083259a8aa7212568f672962d1c3da968daf4f72022041ff4e4e255757c12335e67acde8cf4528c60d4afee45d3f891c81b3a0218c75012103d745445c9362665f22e0d96e9e766f273f3260dea39c8a76bfa05dd2684ddccf66000000",
	     "blockheight": 103,
	     "txindex":	1,
	     "locktime": 102,
	     "version":	2,
	     "inputs": [
	       {
		 "txid": "3b15dbc81d6a70abe1e75c1796c3eeba71c3954b7a90dfa67d55c1e989e20dbb",
		 "index": 0,
		 "sequence": 4294967293
	       }
	     ],
	     "outputs":	[
	       {
		 "index": 0,
		 "amount_msat":	"894743000msat",
		 "type": "deposit",
		 "scriptPubKey": "0014c2ccab171c2a5be9dab52ec41b825863024c5466"
	       },
	       {
		 "index": 1,
		 "amount_msat":	"100000000msat",
		 "type": "channel_funding",
		 "channel": "103x1x1",
		 "scriptPubKey": "00205b8cd3b914cf67cdd8fa6273c930353dd36476734fbd962102c2df53b90880cd"
	       }
	     ]
	   }
	 ]
       }

       If we only wanted the output amounts and	types, we would	create a  fil-
       ter like	so:

       "filter": {"transactions": [{"outputs": [{"amount_msat":	true, "type": true}]}]}

       The result would	be:

       "result": {
	 "transactions": [
	   {
	     "outputs":	[
	       {
		 "amount_msat":	"1000000000msat",
		 "type": "deposit",
	       },
	       {
		 "amount_msat":	"4998999857000msat",
	       }
	     ]
	   },
	   {
	     "outputs":	[
	       {
		 "amount_msat":	"894743000msat",
		 "type": "deposit",
	       },
	       {
		 "amount_msat":	"100000000msat",
		 "type": "channel_funding",
	       }
	     ]
	   }
	 ]
       }

       Note: "filter" doesn't change the order,	just which fields are printed.
       Any  fields  not	 explicitly mentioned are omitted from the output, but
       plugins which don't support filter (and some routines doing simple JSON
       transfers) may ignore "filter", so you should treat it as an  optimaza-
       tion only).

       Note:  if  you  specify	an  array where	an object is specified or vice
       versa, the response may include a warning_parameter_filter field	 which
       describes the problem.

DEALING	WITH FORMAT CHANGES
       Fields  can be added to the JSON	output at any time, but	to remove (or,
       very rarely) change a field requires a minimum deprecation period of  6
       months  and  two	releases.  Usually a new field will be added if	one is
       deprecated, so both will	be present in transition.

       To test that you're not using deprecated	fields,	you can	use the	light-
       ningd-config(5) option allow-deprecated-apis=false.   You  should  only
       use  this  in internal tests: it	is not recommended that	users use this
       directly.

       The documentation tends to only refer to	non-deprecated	items,	so  if
       you  seen  an  output  field  which is not documented, its either a bug
       (like that ever happens!) or a deprecated field you should ignore.

DEBUGGING
       You can use log-level=io	to see much of the JSON	conversation (in  hex)
       that occurs.  It's extremely noisy though!

AUTHOR
       Rusty  Russell  <<rusty@rustcorp.com.au>> wrote this man	page, and much
       of the configuration language, but many others did the hard work	of ac-
       tually implementing these options.

SEE ALSO
       lightningd-config(5), lightning-notifications(7), lightningd(8)

RESOURCES
       Main web	site: <https://github.com/ElementsProject/lightning>

COPYING
       Note: the modules in the	ccan/ directory	have their own	licenses,  but
       the rest	of the code is covered by the BSD-style	MIT license.

Core Lightning v25.02					     LIGHTNINGD-RPC(7)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=lightningd-rpc&sektion=7&manpath=FreeBSD+Ports+14.3.quarterly>

home | help