Skip to content

Commit

Permalink
plugins: add feature_set to init object.
Browse files Browse the repository at this point in the history
Shows what features we use in various contexts, including those added
by plugins in getmanifest.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Added: Plugin: `feature_set` object added to `init`
  • Loading branch information
rustyrussell committed Mar 31, 2020
1 parent eb80412 commit f692220
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
9 changes: 9 additions & 0 deletions lightningd/plugin.c
Original file line number Diff line number Diff line change
Expand Up @@ -1169,6 +1169,15 @@ plugin_populate_init_request(struct plugin *plugin, struct jsonrpc_request *req)
json_add_string(req->stream, "rpc-file", ld->rpc_filename);
json_add_bool(req->stream, "startup", plugin->plugins->startup);
json_add_string(req->stream, "network", chainparams->network_name);
json_object_start(req->stream, "feature_set");
for (enum feature_place fp = 0; fp < NUM_FEATURE_PLACE; fp++) {
if (plugin_feature_place_names[fp]) {
json_add_hex_talarr(req->stream,
plugin_feature_place_names[fp],
ld->feature_set->bits[fp]);
}
}
json_object_end(req->stream);
json_object_end(req->stream);
}

Expand Down
17 changes: 17 additions & 0 deletions tests/plugins/show_feature_set.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env python3
from pyln.client import Plugin

plugin = Plugin()


@plugin.init()
def init(options, configuration, plugin):
plugin.feature_set = configuration['feature_set']


@plugin.method('getfeatureset')
def getfeatureset(plugin):
return plugin.feature_set


plugin.run()
11 changes: 11 additions & 0 deletions tests/test_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -1153,3 +1153,14 @@ def test_hook_crash(node_factory, executor, bitcoind):

# Collect the results:
[f.result(TIMEOUT) for f in futures]


def test_feature_set(node_factory):
plugin = os.path.join(os.path.dirname(__file__), 'plugins/show_feature_set.py')
l1 = node_factory.get_node(options={"plugin": plugin})

fs = l1.rpc.call('getfeatureset')
assert fs['init'] == expected_features()
assert fs['node'] == expected_features()
assert fs['channel'] == ''
assert 'invoice' in fs

0 comments on commit f692220

Please sign in to comment.