plugins: add feature_set to init object.

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`
This commit is contained in:
Rusty Russell 2020-04-02 14:35:47 +10:30
parent cf43e44378
commit 7a95e90ee4
3 changed files with 37 additions and 0 deletions

View file

@ -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);
}

View file

@ -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()

View file

@ -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