FreeBSD Manual Pages
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)
NAME | SYNOPSIS | DESCRIPTION | JSON WIRE FORMAT | JSON COMMANDS | JSON IDS | JSON REPLIES | JSON TYPES | JSON NOTIFICATIONS | FIELD FILTERING | DEALING WITH FORMAT CHANGES | DEBUGGING | AUTHOR | SEE ALSO | RESOURCES | COPYING
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>
