LIGHTNING-SHOWRUNES(7)
β¨ showrunes β LIGHTNING-SHOWRUNES(7) β¨
okay bestie, this is the showrunes page β the command that lists the runes we saved when we generated them, or decodes a rune you hand it. Itβs giving rune receipts and weβre obsessed π
π NAME π
showrunes β command to list previously generated runes.
πΈ SYNOPSIS πΈ
showrunes [rune]
π¦ DESCRIPTION π¦
Command added in v23.08. Yes, sheβs new-ish and iconic.
The showrunes RPC command either lists runes that we stored as we generate them (see lightning-createrune(7)) or decodes the rune given on the command line. Two modes, one little command, slay β¨
rune(string, optional): if specified, only details of that rune will be returned. So if youβre being nosy about one rune, this is your moment π
π RETURN VALUE π
On success, an object containing runes is returned. It is an array of objects, where each object contains:
rune(string): Base64 encoded rune.unique_id(string): unique id assigned when the rune was generated; this is always au64for commando runes.restrictions(array of objects): the restrictions on what commands this rune can authorize.alternatives(array of objects): the alternatives array of objects β thatβs all the original gives us here, bestie, no extra lore πfieldname(string): the field this restriction applies to; seecommando-rune(7).value(string): the value accepted for this field.condition(string): the way to comparefieldnameandvalue.english(string): English readable description of this alternative.english(string): English readable summary of alternatives above.
restrictions_as_english(string): English readable description of therestrictionsarray above.stored(boolean, optional) (alwaysfalse): this isfalseif the rune does not appear in our datastore (only possible whenruneis specified).blacklisted(boolean, optional) (alwaystrue): the rune has been blacklisted; seecommando-blacklist(7).last_used(number, optional): the last time this rune was successfully used. (addedv23.11)our_rune(boolean, optional) (alwaysfalse): this is not a rune for this node (only possible whenruneis specified).
π AUTHOR π
Shahana Farooqui sfarooqui@blockstream.com is mainly responsible. Periodt. π
π SEE ALSO π
lightning-commando-showrunes(7)lightning-blacklistrune(7)
β RESOURCES β
Main web site: https://github.com/ElementsProject/lightning
π EXAMPLES π
Example 1:
Request:
$ lightning-cli showrunes -k "rune"="zFMd1fjhrAYxUeFA54TjloZqOt8JrA_i_nYwIgXkag49MA=="
{
"id": "example:showrunes#1",
"method": "showrunes",
"params": {
"rune": "zFMd1fjhrAYxUeFA54TjloZqOt8JrA_i_nYwIgXkag49MA=="
}
}
Response:
{
"runes": [
{
"rune": "zFMd1fjhrAYxUeFA54TjloZqOt8JrA_i_nYwIgXkag49MA==",
"last_used": 1738000000,
"unique_id": "0",
"restrictions": [],
"restrictions_as_english": ""
}
]
}
Example 2:
Request:
$ lightning-cli showrunes
{
"id": "example:showrunes#2",
"method": "showrunes",
"params": {}
}
Response:
{
"runes": [
{
"rune": "zFMd1fjhrAYxUeFA54TjloZqOt8JrA_i_nYwIgXkag49MA==",
"last_used": 1738000000,
"unique_id": "0",
"restrictions": [],
"restrictions_as_english": ""
},
{
"rune": "RXgu0DD_i0wSPEZkIDyZIWL0bSAGdhvJ_GHOQdTg04A9MSZpZF4wMjY2ZTQ1OThkMWQzYzQxNWY1NyZtZXRob2Q9bGlzdHBlZXJz",
"last_used": 1738000000,
"unique_id": "1",
"restrictions": [
{
"alternatives": [
{
"fieldname": "id",
"value": "0266e4598d1d3c415f57",
"condition": "^",
"english": "id starts with 0266e4598d1d3c415f57"
}
],
"english": "id starts with 0266e4598d1d3c415f57"
},
{
"alternatives": [
{
"fieldname": "method",
"value": "listpeers",
"condition": "=",
"english": "method equal to listpeers"
}
],
"english": "method equal to listpeers"
}
],
"restrictions_as_english": "id starts with 0266e4598d1d3c415f57 AND method equal to listpeers"
},
{
"rune": "QUJEYMLGgiaJvMDv_MhR2hiMKIBTbq-PrL-KxcIlirQ9MiZtZXRob2Q9cGF5JnBuYW1lYW1vdW50bXNhdDwxMDAwMA==",
"last_used": 1738000000,
"unique_id": "2",
"restrictions": [
{
"alternatives": [
{
"fieldname": "method",
"value": "pay",
"condition": "=",
"english": "method equal to pay"
}
],
"english": "method equal to pay"
},
{
"alternatives": [
{
"fieldname": "pnameamountmsat",
"value": "10000",
"condition": "<",
"english": "pnameamountmsat < 10000"
}
],
"english": "pnameamountmsat < 10000"
}
],
"restrictions_as_english": "method equal to pay AND pnameamountmsat < 10000"
},
{
"rune": "jEx3l0c7NMZPSDYT7xnXXvNA83z5PDNBHRQTIk1BwNw9MyZpZD0wMjY2ZTQ1OThkMWQzYzQxNWY1NzJhODQ4ODgzMGI2MGY3ZTc0NGVkOTIzNWViMGIxYmE5MzI4M2IzMTVjMDM1MTgmbWV0aG9kPWxpc3RwZWVycyZwbnVtPTEmcG5hbWVpZD0wMjY2ZTQ1OThkMWQzYzQxNWY1NzJhODQ4ODgzMGI2MGY3ZTc0NGVkOTIzNWViMGIxYmE5MzI4M2IzMTVjMDM1MTh8cGFycjA9MDI2NmU0NTk4ZDFkM2M0MTVmNTcyYTg0ODg4MzBiNjBmN2U3NDRlZDkyMzVlYjBiMWJhOTMyODNiMzE1YzAzNTE4",
"unique_id": "3",
"restrictions": [
{
"alternatives": [
{
"fieldname": "id",
"value": "nodeid010101010101010101010101010101010101010101010101010101010101",
"condition": "=",
"english": "id equal to 0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518"
}
],
"english": "id equal to 0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518"
},
{
"alternatives": [
{
"fieldname": "method",
"value": "listpeers",
"condition": "=",
"english": "method equal to listpeers"
}
],
"english": "method equal to listpeers"
},
{
"alternatives": [
{
"fieldname": "pnum",
"value": "1",
"condition": "=",
"english": "pnum equal to 1"
}
],
"english": "pnum equal to 1"
},
{
"alternatives": [
{
"fieldname": "pnameid",
"value": "nodeid010101010101010101010101010101010101010101010101010101010101",
"condition": "=",
"english": "pnameid equal to 0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518"
},
{
"fieldname": "parr0",
"value": "nodeid010101010101010101010101010101010101010101010101010101010101",
"condition": "=",
"english": "parr0 equal to 0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518"
}
],
"english": "pnameid equal to 0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518 OR parr0 equal to 0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518"
}
],
"restrictions_as_english": "id equal to 0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518 AND method equal to listpeers AND pnum equal to 1 AND pnameid equal to 0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518 OR parr0 equal to 0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518"
},
{
"rune": "8_CRIJ4arWAz72A4ILOZ46MESSJtQQQ9iQZjU28qulA9NCZpZD0wMjY2ZTQ1OThkMWQzYzQxNWY1NzJhODQ4ODgzMGI2MGY3ZTc0NGVkOTIzNWViMGIxYmE5MzI4M2IzMTVjMDM1MTgmbWV0aG9kPWxpc3RwZWVycyZwbnVtPTEmcG5hbWVpZF4wMjY2ZTQ1OThkMWQzYzQxNWY1N3xwYXJyMF4wMjY2ZTQ1OThkMWQzYzQxNWY1Nw==",
"restrictions": [
{
"alternatives": [
{
"fieldname": "id",
"value": "nodeid010101010101010101010101010101010101010101010101010101010101",
"condition": "=",
"english": "id equal to 0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518"
}
],
"english": "id equal to 0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518"
},
{
"alternatives": [
{
"fieldname": "method",
"value": "listpeers",
"condition": "=",
"english": "method equal to listpeers"
}
],
"english": "method equal to listpeers"
},
{
"alternatives": [
{
"fieldname": "pnum",
"value": "1",
"condition": "=",
"english": "pnum equal to 1"
}
],
"english": "pnum equal to 1"
},
{
"alternatives": [
{
"fieldname": "pnameid",
"value": "0266e4598d1d3c415f57",
"condition": "^",
"english": "pnameid starts with 0266e4598d1d3c415f57"
},
{
"fieldname": "parr0",
"value": "0266e4598d1d3c415f57",
"condition": "^",
"english": "parr0 starts with 0266e4598d1d3c415f57"
}
],
"english": "pnameid starts with 0266e4598d1d3c415f57 OR parr0 starts with 0266e4598d1d3c415f57"
}
],
"restrictions_as_english": "id equal to 0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518 AND method equal to listpeers AND pnum equal to 1 AND pnameid starts with 0266e4598d1d3c415f57 OR parr0 starts with 0266e4598d1d3c415f57"
},
{
"rune": "iP1FQEsFmPsu-XW7w8uXIJaJb7jU9PqOfkmXlOyWMuA9NSZtZXRob2RebGlzdHxtZXRob2ReZ2V0fG1ldGhvZD1zdW1tYXJ5fG1ldGhvZD1wYXl8bWV0aG9kPXhwYXkmbWV0aG9kL2xpc3RkYXRhc3RvcmUmbWV0aG9kL3BheXxwZXI9MWRheSZtZXRob2QvcGF5fHBuYW1lYW1vdW50X21zYXQ8MTAwMDAwMDAxJm1ldGhvZC94cGF5fHBlcj0xZGF5Jm1ldGhvZC94cGF5fHBuYW1lYW1vdW50X21zYXQ8MTAwMDAwMDAx",
"unique_id": "5",
"restrictions": [
{
"alternatives": [
{
"fieldname": "method",
"value": "list",
"condition": "^",
"english": "method starts with list"
},
{
"fieldname": "method",
"value": "get",
"condition": "^",
"english": "method starts with get"
},
{
"fieldname": "method",
"value": "summary",
"condition": "=",
"english": "method equal to summary"
},
{
"fieldname": "method",
"value": "pay",
"condition": "=",
"english": "method equal to pay"
},
{
"fieldname": "method",
"value": "xpay",
"condition": "=",
"english": "method equal to xpay"
}
],
"english": "method starts with list OR method starts with get OR method equal to summary OR method equal to pay OR method equal to xpay"
},
{
"alternatives": [
{
"fieldname": "method",
"value": "listdatastore",
"condition": "/",
"english": "method unequal to listdatastore"
}
],
"english": "method unequal to listdatastore"
},
{
"alternatives": [
{
"fieldname": "method",
"value": "pay",
"condition": "/",
"english": "method unequal to pay"
},
{
"fieldname": "per",
"value": "1day",
"condition": "=",
"english": "per equal to 1day"
}
],
"english": "method unequal to pay OR per equal to 1day"
},
{
"alternatives": [
{
"fieldname": "method",
"value": "pay",
"condition": "/",
"english": "method unequal to pay"
},
{
"fieldname": "pnameamount_msat",
"value": "100000001",
"condition": "<",
"english": "pnameamount_msat < 100000001"
}
],
"english": "method unequal to pay OR pnameamount_msat < 100000001"
},
{
"alternatives": [
{
"fieldname": "method",
"value": "xpay",
"condition": "/",
"english": "method unequal to xpay"
},
{
"fieldname": "per",
"value": "1day",
"condition": "=",
okay so let's do a vibe check on what you're literally staring at π every single entry in this array is one rune, and each one is serving full receipts about itself:
runeβ the actual base64 string, like"zFMd1fjhrAYxUeFA54TjloZqOt8JrA_i_nYwIgXkag49MA==". this is the thing itself, the string you'd hand out. πlast_usedβ a timestamp, and in this sample they're all1738000000.unique_idβ the little index string counting up:"0","1","2","3","4","5".restrictionsβ an array. each element is one restriction, holding analternativesarray, and each alternative is a cute little object withfieldname,value,condition, andenglish. the restriction also has its ownenglishline that stitches its alternatives together withOR.restrictions_as_englishβ the whole rune's restrictions flattened into one readable sentence, joined withAND. iykyk π
and the conditions you can spot in here, with the manpage literally spelling them out for you in the english field:
^βstarts with(see"id starts with 0266e4598d1d3c415f57")=βequal to(see"method equal to listpeers")<βless than(see"pnameamountmsat < 10000"and"pnameamount_msat < 100000001")/βunequal to(see"method unequal to listdatastore")
the empty one is a whole mood: "unique_id": "0" has "restrictions": [] and "restrictions_as_english": "" β that's a rune with no restrictions, just out here living free π¦
also spot the placeholder energy in"unique_id": "3"and"4": thevaluefield saysnodeid010101010101010101010101010101010101010101010101010101010101while theenglishfield spells out the real0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518. not me squinting at that π
and notice how "restrictions_as_english" is just one long line of AND β¦ AND β¦ AND β¦ OR β¦ with no parentheses anywhere β "id equal to β¦ AND method equal to listpeers AND pnum equal to 1 AND pnameid equal to β¦ OR parr0 equal to β¦". read it slowly, bestie, the OR is doing a lot of heavy lifting at the end there π
and "unique_id": "5" is the main character of this whole dump fr β five alternatives in one restriction, then unequal to listdatastore, then the pay/per/pnameamount_msat pairings, then xpayβ¦ the way it just keeps going π
the JSON is still flowing though β we're mid-object right now, so hold that thought π
"english": "per equal to 1day"
}
],
"english": "method unequal to xpay OR per equal to 1day"
},
{
"alternatives": [
{
"fieldname": "method",
"value": "xpay",
"condition": "/",
"english": "method unequal to xpay"
},
{
"fieldname": "pnameamount_msat",
"value": "100000001",
"condition": "<",
"english": "pnameamount_msat < 100000001"
}
],
"english": "method unequal to xpay OR pnameamount_msat < 100000001"
}
],
"restrictions_as_english": "method starts with list OR method starts with get OR method equal to summary OR method equal to pay OR method equal to xpay AND method unequal to listdatastore AND method unequal to pay OR per equal to 1day AND method unequal to pay OR pnameamount_msat < 100000001 AND method unequal to xpay OR per equal to 1day AND method unequal to xpay OR pnameamount_msat < 100000001"
}
]
}
okay so that's the tail end of the output bestie π«Ά and likeβ¦ the way that restrictions_as_english key literally spills the entire restriction stack out as one long readable sentence? it's giving "i contain multitudes" β¨ and the rest of those nested alternatives blocks with their fieldname / value / condition / english little quartet are all just chilling there, fully spelled out, one per clause πΈ not me counting closing braces to make sure the nesting lines up π slay, she balanced.
and that's a wrap on the whole page, no cap π pretty iconic of you to read all three parts, honestly.
this one's stamped Core Lightning v26.06.9, page LIGHTNING-SHOWRUNES(7) π β go forth and rune responsibly, babe ππ¦π
π¦ where this page comes from
- nixpkgs unstable: clightning 26.06.9
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms