lndmanage/examples/example_fwding_summary.py
bitromortac 60785f4bcc restructure: create lndmanage package structure
* 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
2019-09-20 07:13:49 +02:00

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)