Shitty mempool analyzer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python3 | |
import os | |
import sys | |
import struct | |
from opentimestamps._internal import hexlify,unhexlify | |
import opentimestamps._bitcoinrpc as btcrpc | |
proxy = btcrpc.ServiceProxy('http://') | |
def fees_for_tx(tx): | |
vout_sum = 0 | |
for vout in tx['vout']: | |
vout_sum += vout['value'] | |
vin_sum = 0 | |
for vin in tx['vin']: | |
vin_txhash = vin['txid'] | |
vin_tx = proxy.getrawtransaction(vin_txhash,1) | |
for vin_vout in vin_tx['vout']: | |
if vin_vout['n'] == vin['vout']: | |
vin_sum += vin_vout['value'] | |
break | |
return (float(vin_sum-vout_sum),float(vin_sum),float(vout_sum)) | |
total_fees = 0 | |
max_fee = 0 | |
max_fee_hash = None | |
fees_by_tx = [] | |
for tx in proxy.getrawmempool(): | |
tx = proxy.getrawtransaction(tx,1) | |
fee,vin_sum,vout_sum = fees_for_tx(tx) | |
total_fees += fee | |
tx['size'] = len(tx['hex'])/2 | |
tx['adjfee'] = fee/tx['size'] | |
fees_by_tx.append((fee,tx)) | |
fees_by_tx = sorted(fees_by_tx,key = lambda v: v[1]['adjfee']) | |
sum_above_threshold = 0 | |
sum_below_theshold = 0 | |
sum_size_above = 0 | |
sum_size_below = 0 | |
sum_max_size_fees = 0 | |
total_size = 0 | |
last_above = None | |
for (fee,tx) in reversed(fees_by_tx): | |
total_size += len(tx['hex'])/2 | |
if total_size < 1000000: | |
sum_max_size_fees += fee | |
if total_size < 250000: | |
sum_size_above += len(tx['hex'])/2 | |
sum_above_threshold += fee | |
print(tx['adjfee'],fee,tx['txid']) | |
else: | |
if total_size - len(tx['hex'])/2 < 250000: | |
last_above = (fee,tx) | |
sum_size_below += len(tx['hex'])/2 | |
sum_below_theshold += fee | |
print('below margin fee:',last_above[0],last_above[1]['adjfee'],last_above[1]['txid']) | |
print('above:',sum_above_threshold,'below:',sum_below_theshold,'max:',sum_max_size_fees) | |
print('above size:',sum_size_above,'below size:',sum_size_below) | |
print('total size:',total_size) | |
print('Total:',total_fees) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment