core-lightning/tests/plugins/badestimate.py
2023-09-26 19:21:05 +02:00

96 lines
3.2 KiB
Python
Executable File

#!/usr/bin/env python3
import json
import subprocess
import os
from pyln.client import Plugin
plugin = Plugin()
network = os.environ.get("TEST_NETWORK", "regtest")
cli = "bitcoin-cli" if network == "regtest" else "elements-cli"
def bcli(plugin, cmd):
ret = subprocess.run([cli,
'-datadir={}'.format(plugin.get_option("bitcoin-datadir")),
'-rpcuser={}'.format(plugin.get_option("bitcoin-rpcuser")),
'-rpcpassword={}'.format(plugin.get_option("bitcoin-rpcpassword")),
'-rpcport={}'.format(plugin.get_option("bitcoin-rpcport"))]
+ cmd, stdout=subprocess.PIPE)
if ret.returncode != 0:
return None
return ret.stdout.decode('utf-8')
@plugin.method("estimatefees")
def estimatefees(plugin, **kwargs):
if plugin.get_option("badestimate-badorder"):
return {"feerate_floor": 1000,
"feerates": [{"blocks": 6,
"feerate": 1240000000},
{"blocks": 12,
"feerate": 1350000000},
{"blocks": 100,
"feerate": 3610000000},
{"blocks": 2,
"feerate": 1270000000}]}
else:
return {"feerate_floor": 1000,
"feerates": [{"blocks": 2,
"feerate": 1270000000},
{"blocks": 6,
"feerate": 1240000000},
{"blocks": 12,
"feerate": 1350000000},
{"blocks": 100,
"feerate": 3610000000}]}
@plugin.method("getrawblockbyheight")
def getrawblockbyheight(plugin, height, **kwargs):
bhash = bcli(plugin, ["getblockhash", str(height)])
if bhash is None:
return {"blockhash": None,
"block": None}
bhash = bhash.strip()
block = bcli(plugin, ["getblock", bhash, "0"]).strip()
return {"blockhash": bhash,
"block": block}
@plugin.method("getchaininfo")
def getchaininfo(plugin, **kwargs):
info = json.loads(bcli(plugin, ["getblockchaininfo"]))
return {"chain": info['chain'],
"headercount": info['headers'],
"blockcount": info['blocks'],
"ibd": info['initialblockdownload']}
@plugin.method("sendrawtransaction")
def sendrawtransaction(plugin, tx, allowhighfees=False, **kwargs):
bcli(plugin, ["sendrawtransaction", tx])
return {'success': True}
@plugin.method("getutxout")
def getutxout(plugin, txid, vout, *kwargs):
txoutstr = bcli(plugin, ["gettxout", txid, vout]).strip()
if txoutstr == "":
return {"amount": None, "script": None}
txout = json.loads(txoutstr)
return {"amount": txout['value'],
"script": txout['scriptPubKey']['hex']}
plugin.add_option("bitcoin-rpcuser", '', '')
plugin.add_option("bitcoin-rpcpassword", '', '')
plugin.add_option("bitcoin-datadir", '', '')
plugin.add_option("bitcoin-rpcport", '', '')
plugin.add_option("badestimate-badorder", False, 'Send out-of-order estimates', opt_type='bool')
plugin.run()