autogenerate-rpc-examples.py: added more rewrite for other RPCs
What changed, and why it matters
This commit only changes a test helper script that automatically rewrites RPC command examples used in documentation. It adds more rules to make generated examples stable across test runs by replacing variable values like network ports, transaction IDs, and timestamps with fixed placeholder values. There is no change to the actual Core Lightning node software or its security behavior.
No security action needed. This is a test/documentation tooling change.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch modifies tests/autogenerate-rpc-examples.py, expanding the rewrite_examples() function with additional Rewriter entries and canned data (transactions, txids, PSBTs). The purpose is to normalize autogenerated RPC documentation examples so they do not change between CI runs due to timing, ports, paths, or dynamically generated Bitcoin data. The script is part of the documentation/test infrastructure, not production code.
Changed components
tests/autogenerate-rpc-examples.pyInspect captured patch +101 / −35
diff --git a/tests/autogenerate-rpc-examples.py b/tests/autogenerate-rpc-examples.py
index 62121677..9c66d86d 100644
--- a/tests/autogenerate-rpc-examples.py
+++ b/tests/autogenerate-rpc-examples.py
@@ -184,6 +184,16 @@ def rewrite_examples(examples: Dict[str, Any]):
"0000000000000004a4a379248e49d207cc984646e632e1a31105a85708b9d6d961a5018fdd489f5a0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518017f000001970c7f07a15ce1fe1519d46536c4036f1c13527fa8bf52f6a5299b860f982ba2ed7e00000001000000000000753000034010000000009b010c000100000000000000000000038402c8aabcf1224df10e9d803dc3918797892fe0abec56d3e06f121bcebbe9ab0a2c03bd181375d57b8b1d15def9c5f9007b3c3ff98a140c0a44c9dc5f54ac7ea4baf30310952e08f9960711d8142dfa171c0fc2348762acea003f3897397f6ace8454130382da2a229450c4a8e8cea70bbd147eaaf981184bff8c1d70b70c30a494d848420501010702a5f8",
"000000000000000509eb55872cd9039ecd08281af756e23b15aad4129fd6a9bcd71b472114ebf43a0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518017f000001970c64ed91a21c10208d715b59801b12b4a6eff9ea9e4e7d45971c298b62d90ece8e00000000000000000000c35000034010000000009b010c000100000000000000000000038402e885f38e784050b386fb32d20935acc61059d8b02b6bec0ac2bfc8b2c5cf7f3103ae69dbfc6511ba0781c13113e16e1557a875b910cb1cb1fe1ef95a7edb36135a03758d5faa8515942873911e21869b1b90a4be72af14b394bc064da6ba518b087003750b588cd1fb8d60276c12c1c3eef7e302e3772414234404289db8c10f5731320501010702a5f8"]
+ canned_txs = ["02000000000101b8b4d0e0e51fdf02fa8ca958a3a44d2a2d38fcd405637d1ad8d00c118b0f08cb0100000000fdffffff0240420f00000000002200202bdf62cf77ca8d331ee03e40d1eb7fa14bb8078c3427d7714f271e37468645e866dad40b000000002251205f5ccf17471f681b995a3eadb89503818769d6be3f30c72584b60200a525ac3001409125e6c73c236127175f78daecea1dde07bd51f700a546b09cae1fe4c2ba0e7be798f1ba74d03bce5fb771ba6365b928743c3bd6a36a40ae0632c1d571569831a2000000",
+ "02000000000101fe42843e56bcbaa0b6c0180d60bf6d06a8b2e83ce8c6960fb7b3f68956a80a250100000000fdffffff01cbb3eb0b00000000220020c895be991f0db9ca781fca2b5d2b141e9320f1d559bc950df5c613a1f3f266490247304402201833d557338fbcf25bdb5c4be8e1b46a9ca1754fbfa52e31a54f67df725e99d0022048160e4384af6cd905759b2f4ef6836c4cf53edf4d1bb83df7e62ff04f0fa2b201210287eb973cfdd54b2e639261f95bf06a57318d1272961eccdb373853e33a591b72a2000000",
+ "020000000001078a2fd3ea26b70933064e0ce65c5fc96aa5b391cd4f3f77cf72a6025f384c44230200000000fdffffffde94f5eceb44e4009d4db17d86a2db3627b169ed4e1c372dbe2d6d1241f160680700000000fdffffff8a2fd3ea26b70933064e0ce65c5fc96aa5b391cd4f3f77cf72a6025f384c44230100000000fdffffffde94f5eceb44e4009d4db17d86a2db3627b169ed4e1c372dbe2d6d1241f160680600000000fdffffffde94f5eceb44e4009d4db17d86a2db3627b169ed4e1c372dbe2d6d1241f160680200000000fdffffff998ec03e55c570e7ec377381ccc25169330dc9d73063e12984d92a882157edfe0100000000fdffffff51c5c742b33aae881a536b973802a22466822a2fc68fbee79f2e73669d2972140000000000fdffffff02e8a1fa0b00000000160014c9096d43f408ea526020262ccdad7c8516b92a81a86100000000000022512036880784b15bfe1c53eb538108a248411759245c6610913c96dba41ea2a153fc02473044022022fddae81906617aecb331bd8b10bf5f071a20615bbb557b12dd5713d1b66dea02204a2fa399f2b4f8f31176ae72b61856674815c40095c65f6e91e6a0c8807dac3901210370eb10c2b3f30d1481ce0802a97c1345ca927cac5637831214f4b431436e57c501404d57e331e207b379ccd10aa9042d6fbd04d91a704ee4abf6c83b4cb8b0662b29701d7d39f8fb8bd1bae4a77b4403ef311d320a9dbb22b6d6b4a88add1dd44d030247304402203c99eb4e474ab2ea76cb3ebca70fc72e53c43bc105339a47fe85c64772c8df8202202ecaab4661a7150269ad90384f67a1eb7bfb81a20308b611633c34f7659ed985012102d89a2b5862744b39a15a6ab316b3e1aab0ebc1d63c610c17015ba1a9f8568fd40247304402206ed1e73c2eb02bc62fd007ba38885ab16f1c70ee12d148bee3ec82f0b77b6371022010c1394938da025e8b91af5578d9b15b3fd30d252d14a747080b26ad06be45af012103c93e0fee95a1c62556d78bab9591b8c3178ad669b94587710314293c70d7c6d8024730440220542f5306e35e361f58296d06e75e58ad12f1284dae0b818f1cdb3a779d049f5f02205a3201149afccc71e31af42fb9fc36b246d420b61a42269004f0bc23d34176580121028ebd2158aec94a0dcdba681f97dd634c5eacbde5b92721bf7724fe072e0199a80247304402205db7bd87654010e0b6ceecab7b3106db7a942dac5bf991717b959525f0a0d6ec022018190651b46317d17321bda5e0868accba3289b0d491fde9c1ea1c1e55ea364601210314f64072d89c7e1b0a3a339eb539d4878fbb065b89a26a2cf1dd55618de713ad014025ef526f9a442f151b07c6c9c8854c951f3bb6706beb50ae62da26d4c4aa6fbf7cc186a11d2aac0fb39366cbe4635cda06a6d1d5127b1e3e581b48b24722212a00000000"]
+
+ canned_txids = ["eaa3e5f498b0d3de22f2e3b1dd5cad96952bdcb4da2cdac4f152ffad049ab062",
+ "bc2d63e50c4715cd46f2d1b0785aed3bca65666a81618a070efac4216b15238d",
+ "3dcebc39a0912b60b2b59892c7994ef0b05f0d05ce2194a2c423de6f74a9120b"]
+
+ canned_psbts = ["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"]
+
rewrites = [
# The command_id is highly caller dependent, so clean it up.
Rewriter("askrene-listreservations",
@@ -204,7 +214,23 @@ def rewrite_examples(examples: Dict[str, Any]):
[],
[{"alias": "SILENTARTIST-" + CLN_NEXT_VERSION},
{"version": os.getenv('CLN_NEXT_VERSION')},
- {"lightning-dir": "/home/rusty/.lightning/regtest"}]),
+ {"lightning-dir": "/home/rusty/.lightning/regtest"},
+ {"binding": [{"port": 30003}]}]),
+ # Commando listpeers is port dependent, so we clean it up.
+ Rewriter("commando",
+ "example:commando#2",
+ [],
+ [{"peers": [{"netaddr": ["127.0.0.1:30005"]}]}]),
+ # Connect is port dependent, so we clean it up.
+ Rewriter("connect",
+ "example:connect#1",
+ [{"port": 30003}],
+ [{"address": {"port": 30003}}]),
+ # Connect is port dependent, so we clean it up.
+ Rewriter("connect",
+ "example:connect#2",
+ [{"port": 30005}],
+ [{"address": {"port": 30005}}]),
# Logs are high-variance
Rewriter("getlog",
"example:getlog#1",
@@ -221,19 +247,16 @@ def rewrite_examples(examples: Dict[str, Any]):
{"configs": {"pid-file": {"value_str": "/home/rusty/.lightning/lightningd-regtest.pid"}}},
{"configs": {"min-capacity-sat": {"source": "/home/rusty/.lightning/regtest/config.setconfig:3"}}},
{"configs": {"log-file": {"values_str": ["-", "/home/rusty/.lightning/log"]}}},
+ {"configs": {"addr": {"values_str": ["127.0.0.1:30003"]}}},
+ {"configs": {"grpc-port": {"value_int": 30004}}},
{"configs": {"dev-save-plugin-io": {"value_str": "/tmp/plugin-io"}}},
{"configs": {"bitcoin-datadir": {"value_str": "/var/lib/bitcoind"}}},
{"configs": {"bitcoin-rpcport": {"value_int": 8332}}}]),
- # setconfig also exposes paths
- Rewriter("setconfig",
- "example:setconfig#1",
- [],
- [{"config": {"source": "/home/rusty/.lightning/regtest/config.setconfig:2"}},
- {"config": {"plugin": "/usr/local/libexec/plugins/autoclean"}}]),
- Rewriter("setconfig",
- "example:setconfig#2",
+ # FIXME: Why do these vary?
+ Rewriter("listhtlcs",
+ "example:listhtlcs#1",
[],
- [{"config": {"source": "/home/rusty/.lightning/regtest/config.setconfig:3"}}]),
+ [{"htlcs": [{}] * 1 + [{"updated_index": 95}] + [{}] * 8 + [{"updated_index": 96}] + [{}] * 7 + [{"updated_index": 170}] + [{"updated_index": 171}] + [{}] * 3}]),
# listnodes' aliases are version dependent
Rewriter("listnodes",
"example:listnodes#1",
@@ -246,32 +269,77 @@ def rewrite_examples(examples: Dict[str, Any]):
{"alias": "JUNIORBEAM-" + CLN_NEXT_VERSION},
{"alias": "HOPPINGFIRE-" + CLN_NEXT_VERSION},
{"alias": "JUNIORFELONY-" + CLN_NEXT_VERSION}]}]),
+ # FIXME: These due to l1's different channel ordering maybe?
+ Rewriter("listpeerchannels",
+ "example:listpeerchannels#1",
+ [],
+ [{"channels": [{"scratch_txid": "f8042b0e29badb6450d57a8065a9c05d1a86cb8cd43d775d23bd3c8e3d180bd7"}]}]),
+ Rewriter("listpeerchannels",
+ "example:listpeerchannels#2",
+ [],
+ [{"channels": [{"scratch_txid": "f8042b0e29badb6450d57a8065a9c05d1a86cb8cd43d775d23bd3c8e3d180bd7"}, {}, {}]}]),
# Ephemeral ports used when they connect to us
+ Rewriter("listpeers",
+ "example:listpeers#1",
+ [],
+ [{"peers": [{"netaddr": ["127.0.0.1:30005"]}]}]),
Rewriter("listpeers",
"example:listpeers#2",
[],
- [{"peers": [{},
- {"netaddr": ["127.0.0.1:54321"]},
- {}]}]),
+ [{"peers": [{"netaddr": ["127.0.0.1:30007"]},
+ {"netaddr": ["127.0.0.1:30001"]},
+ {"netaddr": ["127.0.0.1:30005"]}]}]),
+ # setconfig also exposes paths
+ Rewriter("setconfig",
+ "example:setconfig#1",
+ [],
+ [{"config": {"source": "/home/rusty/.lightning/regtest/config.setconfig:2"}},
+ {"config": {"plugin": "/usr/local/libexec/plugins/autoclean"}}]),
+ Rewriter("setconfig",
+ "example:setconfig#2",
+ [],
+ [{"config": {"source": "/home/rusty/.lightning/regtest/config.setconfig:3"}}]),
# FIXME: SCB backup shouldn't save port for incoming connections
Rewriter("staticbackup",
"example:staticbackup#1",
[],
[{"scb": canned_scbs}]),
- # FIXME: Why do these vary?
- Rewriter("listhtlcs",
- "example:listhtlcs#1",
- [],
- [{"htlcs": [{}] * 10 + [{"updated_index": 96}] + [{}] * 8 + [{"updated_index": 170}] + [{}] * 3}]),
- # FIXME: These due to l1's different channel ordering maybe?
- Rewriter("listpeerchannels",
- "example:listpeerchannels#1",
- [],
- [{"channels": [{"scratch_txid": "f8042b0e29badb6450d57a8065a9c05d1a86cb8cd43d775d23bd3c8e3d180bd7"}]}]),
- Rewriter("listpeerchannels",
- "example:listpeerchannels#2",
+ # last_stable_connection is timing-sensitive and flickers between runs.
+ Rewriter("listclosedchannels",
+ "example:listclosedchannels#1",
[],
- [{"channels": [{"scratch_txid": "f8042b0e29badb6450d57a8065a9c05d1a86cb8cd43d775d23bd3c8e3d180bd7"}, {}, {}]}]),
+ [{"closedchannels": [{"last_stable_connection": 1738000000}, {}]}]),
+ Rewriter("fundchannel",
+ "example:fundchannel#1",
+ [],
+ [{"tx": canned_txs[0]},
+ {"txid": canned_txids[0]}]),
+ Rewriter("fundchannel",
+ "example:fundchannel#2",
+ [],
+ [{"tx": canned_txs[1]},
+ {"txid": canned_txids[1]}]),
+ Rewriter("multifundchannel",
+ "example:multifundchannel#1",
+ [{"destinations": [
+ {"id": "03cecbfdc68544cc596223b68ce0710c9e5d2c9cb317ee07822d95079acc703d31@127.0.0.1:30005"},
+ {"id": "02287bfac8b99b35477ebe9334eede1e32b189e24644eb701c079614712331cec0@127.0.0.1:30007"},
+ {"id": "0258f3ff3e0853ccc09f6fe89823056d7c0c55c95fab97674df5e1ad97a72f6265@127.0.0.1:30009"},
+ ]}],
+ []),
+ Rewriter("multifundchannel",
+ "example:multifundchannel#2",
+ [{"destinations": [
+ {"id": "03cecbfdc68544cc596223b68ce0710c9e5d2c9cb317ee07822d95079acc703d31@127.0.0.1:30005"},
+ {"id": "02287bfac8b99b35477ebe9334eede1e32b189e24644eb701c079614712331cec0@127.0.0.1:30007"},
+ {"id": "038194b5f32bdf0aa59812c86c4ef7ad2f294104fa027d1ace9b469bb6f88cf37b@127.0.0.1:30001"},
+ ]}],
+ []),
+ Rewriter("sendpsbt",
+ "example:sendpsbt#1",
+ [{"psbt": canned_psbts[0]}],
+ [{"tx": canned_txs[2]},
+ {"txid": canned_txids[2]}]),
]
# Canonicalize recover_channel request:
@@ -932,9 +1000,10 @@ def generate_utils_examples(l1, l2, l3, l4, l5, l6, c23_2, c34_2, inv_l11, inv_l
fullpsbt = bitcoind.rpc.joinpsbts([funding['psbt'], output_psbt])
l1.rpc.reserveinputs(fullpsbt)
signed_psbt = l1.rpc.signpsbt(fullpsbt)['signed_psbt']
- update_example(node=l1, method='sendpsbt', params={'psbt': signed_psbt})
- # Includes two multiwithdraw calls above
- bitcoind.generate_block(1, wait_for_mempool=3)
+ sendpsbt_l1 = update_example(node=l1, method='sendpsbt', params={'psbt': signed_psbt})
+ # Mine the sendpsbt tx into its own block; the two multiwithdraw txs above
+ # are already mined individually, so only this one is in the mempool.
+ bitcoind.generate_block(1, wait_for_mempool=[sendpsbt_l1['txid']])
sync_blockheight(bitcoind, [l1, l2, l3, l4])
# SQL
@@ -1403,8 +1472,7 @@ def generate_list_examples(bitcoind, l1, l2, l3, c12, c23_2, inv_l31, inv_l32, o
listpays_res2 = l2.rpc.listpays()
update_example(node=l2, method='listpays', params={}, response=listpays_res2)
- listtransactions_res3 = l3.rpc.listtransactions()
- update_example(node=l3, method='listtransactions', params={}, response=listtransactions_res3)
+ update_example(node=l3, method='listtransactions', params={})
listclosedchannels_res1 = l2.rpc.listclosedchannels()
update_example(node=l2, method='listclosedchannels', params={}, response=listclosedchannels_res1)
@@ -1422,10 +1490,8 @@ def generate_list_examples(bitcoind, l1, l2, l3, c12, c23_2, inv_l31, inv_l32, o
listpeerchannels_res2 = l2.rpc.listpeerchannels()
update_example(node=l2, method='listpeerchannels', params={}, response=listpeerchannels_res2)
- listchannels_res1 = l1.rpc.listchannels(c12)
- update_example(node=l1, method='listchannels', params={'short_channel_id': c12}, response=listchannels_res1)
- listchannels_res2 = l2.rpc.listchannels()
- update_example(node=l2, method='listchannels', params={}, response=listchannels_res2)
+ update_example(node=l1, method='listchannels', params={'short_channel_id': c12})
+ update_example(node=l3, method='listchannels', params={})
listnodes_res1 = l2.rpc.listnodes(l3.info['id'])
update_example(node=l2, method='listnodes', params={'id': l3.info['id']}, response=listnodes_res1)
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.