From 43152fd68983c40a2cb3438f18a1ed103a0ee095 Mon Sep 17 00:00:00 2001 From: jeff Date: Sun, 26 Mar 2023 20:47:30 -0400 Subject: [PATCH 1/3] add python script which generates an ini config snippet to pin edges takes in multiple wallet addresses as arguments and outputs to stdout a config snippet that manually pins all snodes from those opers. --- contrib/snode-pin.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 contrib/snode-pin.py diff --git a/contrib/snode-pin.py b/contrib/snode-pin.py new file mode 100644 index 0000000000..89aab86631 --- /dev/null +++ b/contrib/snode-pin.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 +# +# a script to generate a lokinet ini file that pins your edges to use only snodes run under the wallet addresses of a whitelist of opers. +# +# usage: ./snode-pin.py walletaddr1 walletaddr2 ... walletaddrN > 00-edges.ini +# +# then copy 00-edges.ini into /var/lib/lokinet/conf.d/ +# create that dir if it does not exist. +# + +import oxenc +import binascii +import sys +import requests + +from collections import defaultdict + +addrs = sys.argv[1:] +snodes = defaultdict(set) +jreq = { + "jsonrpc": "2.0", + "id": "0", + "method": "get_service_nodes", + "params": {"service_node_pubkeys": []}, +} + +# collect all snodes +resp = requests.post("https://public.loki.foundation/json_rpc", json=jreq) +for snode in resp.json().get("result").get("service_node_states", []): + addr = snode.get("operator_address", None) + if addr in addrs: + snodes[addr].add(snode.get("pubkey_ed25519")) + +# print the config snippet to stdout +for oper in snodes: + print(f"# pin edges to use oper {oper}") + print("[network]") + for addr in snodes.get(oper): + # convert base16 (hex) to zbase32 and add .snode suffix + print( + "strict-connect={}.snode".format( + oxenc.to_base32z(binascii.unhexlify(addr.strip())) + ) + ) From c8657ccf85303694419eff3381a158fce778e42e Mon Sep 17 00:00:00 2001 From: majestrate Date: Thu, 20 Apr 2023 13:09:12 -0400 Subject: [PATCH 2/3] Update snode-pin.py use for each for printing addresses --- contrib/snode-pin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/snode-pin.py b/contrib/snode-pin.py index 89aab86631..a8a16f64ab 100644 --- a/contrib/snode-pin.py +++ b/contrib/snode-pin.py @@ -32,10 +32,10 @@ snodes[addr].add(snode.get("pubkey_ed25519")) # print the config snippet to stdout -for oper in snodes: +for oper, addrs in snodes: print(f"# pin edges to use oper {oper}") print("[network]") - for addr in snodes.get(oper): + for addr in addrs: # convert base16 (hex) to zbase32 and add .snode suffix print( "strict-connect={}.snode".format( From fdbe28f37e4a5aa699dfe5fd8ab19e71129ccceb Mon Sep 17 00:00:00 2001 From: majestrate Date: Thu, 20 Apr 2023 13:10:14 -0400 Subject: [PATCH 3/3] Update snode-pin.py use list comprehension --- contrib/snode-pin.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/contrib/snode-pin.py b/contrib/snode-pin.py index a8a16f64ab..480fee010b 100644 --- a/contrib/snode-pin.py +++ b/contrib/snode-pin.py @@ -32,13 +32,7 @@ snodes[addr].add(snode.get("pubkey_ed25519")) # print the config snippet to stdout -for oper, addrs in snodes: - print(f"# pin edges to use oper {oper}") - print("[network]") - for addr in addrs: - # convert base16 (hex) to zbase32 and add .snode suffix - print( - "strict-connect={}.snode".format( - oxenc.to_base32z(binascii.unhexlify(addr.strip())) - ) - ) +for oper, addrs in snodes.items(): + print(f"# pin edges to use oper {oper}") + print("[network]") + print("\n".join(f"strict-connect={oxenc.to_base32z(binascii.unhexlify(addr.strip()))}.snode" for addr in addrs ))