mirror of
https://github.com/bitromortac/lndmanage.git
synced 2026-08-13 12:33:37 +02:00
* shifted important packages to lndmanage folder * fixed import statements * created executable in project directory to be able to run directly * determine project directory in settings
99 lines
2.8 KiB
Python
99 lines
2.8 KiB
Python
import datetime
|
|
|
|
import matplotlib.pyplot as plt
|
|
import matplotlib.colors as colors
|
|
|
|
from lndmanage.lib.node import LndNode
|
|
|
|
|
|
def plot_forwardings(forwarding_events):
|
|
"""
|
|
Plots a time series of the forwarding amounts.
|
|
|
|
:param forwarding_events:
|
|
"""
|
|
times = []
|
|
amounts = []
|
|
for f in forwarding_events:
|
|
times.append(datetime.datetime.fromtimestamp(f['timestamp']))
|
|
amounts.append(f['amt_in'])
|
|
|
|
plt.xticks(rotation=45)
|
|
plt.scatter(times, amounts, s=2)
|
|
plt.yscale('log')
|
|
plt.ylabel('Forwarding amount [sat]')
|
|
plt.show()
|
|
|
|
|
|
def plot_fees(forwarding_events):
|
|
"""
|
|
Plots forwarding fees and effective fee rate in color code.
|
|
|
|
:param forwarding_events:
|
|
"""
|
|
times = []
|
|
amounts = []
|
|
color = []
|
|
for f in forwarding_events:
|
|
times.append(datetime.datetime.fromtimestamp(f['timestamp']))
|
|
amounts.append(f['fee_msat'])
|
|
color.append(f['effective_fee'])
|
|
plt.xticks(rotation=45)
|
|
plt.scatter(times, amounts, c=color, norm=colors.LogNorm(vmin=1E-6, vmax=1E-3), s=2)
|
|
plt.yscale('log')
|
|
plt.ylabel('Fees [msat]')
|
|
plt.ylim((0.5, 1E+6))
|
|
plt.colorbar(label='effective feerate (base + rate)')
|
|
plt.show()
|
|
|
|
|
|
def statistics_forwardings(forwarding_events):
|
|
"""
|
|
Calculates and prints some statistics of forwarding events.
|
|
|
|
:param forwarding_events:
|
|
"""
|
|
total_amount = 0
|
|
total_fees = 0
|
|
transactions = 0
|
|
fee_rate = 0
|
|
channels_out = {}
|
|
channels_in = {}
|
|
|
|
for f in forwarding_events:
|
|
if f['chan_id_in'] not in channels_in.keys():
|
|
channels_in[f['chan_id_in']] = 0
|
|
if f['chan_id_out'] not in channels_out.keys():
|
|
channels_out[f['chan_id_out']] = 0
|
|
|
|
channels_out[f['chan_id_out']] += f['amt_in']
|
|
channels_in[f['chan_id_in']] += f['amt_in']
|
|
|
|
total_amount += f['amt_in']
|
|
total_fees += f['fee_msat']
|
|
transactions += 1
|
|
fee_rate += f['effective_fee']
|
|
|
|
fee_rate /= transactions
|
|
print("-------- Forwarding statistics --------")
|
|
print("Number of forwardings: {}".format(transactions))
|
|
print("Total forwardings [sat]: {}".format(total_amount))
|
|
print("Total fees earned [sat]: {:.3f}".format(total_fees / 1000.))
|
|
print("Average fee rate: {:.6f}".format(fee_rate))
|
|
|
|
print("-------- Popular channels --------")
|
|
print("Popular channels out:")
|
|
for w in sorted(channels_out, key=channels_out.get, reverse=True)[:10]:
|
|
print(w, channels_out[w])
|
|
print("Popular channels in:")
|
|
for w in sorted(channels_in, key=channels_in.get, reverse=True)[:10]:
|
|
print(w, channels_in[w])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
node = LndNode()
|
|
forwardings = node.get_forwarding_events()
|
|
|
|
# plot_forwardings(forwardings)
|
|
# plot_fees(forwardings)
|
|
statistics_forwardings(forwardings)
|