81 lines
2.4 KiB
Python
81 lines
2.4 KiB
Python
import logging
|
|
import os
|
|
|
|
from ephemeral_port_reserve import reserve
|
|
from test_framework.utils import BitcoinBackend, TailableProc, ELECTRS_PATH, TIMEOUT
|
|
|
|
|
|
class Electrs(BitcoinBackend):
|
|
def __init__(
|
|
self,
|
|
bitcoind_dir,
|
|
bitcoind_rpcport,
|
|
bitcoind_p2pport,
|
|
electrs_dir,
|
|
rpcport=None,
|
|
):
|
|
TailableProc.__init__(self, electrs_dir, verbose=False)
|
|
|
|
if rpcport is None:
|
|
rpcport = reserve()
|
|
|
|
# Prometheus metrics can't be deactivated in Electrs. Configure the port so it doesn't
|
|
# conflict with other instances when running tests in parallel.
|
|
monitoring_port = reserve()
|
|
|
|
self.electrs_dir = electrs_dir
|
|
self.rpcport = rpcport
|
|
|
|
regtestdir = os.path.join(electrs_dir, "regtest")
|
|
if not os.path.exists(regtestdir):
|
|
os.makedirs(regtestdir)
|
|
|
|
self.cmd_line = [
|
|
ELECTRS_PATH,
|
|
"--conf",
|
|
"{}/electrs.toml".format(regtestdir),
|
|
]
|
|
electrs_conf = {
|
|
"daemon_dir": bitcoind_dir,
|
|
"cookie_file": os.path.join(bitcoind_dir, "regtest", ".cookie"),
|
|
"daemon_rpc_addr": f"127.0.0.1:{bitcoind_rpcport}",
|
|
"daemon_p2p_addr": f"127.0.0.1:{bitcoind_p2pport}",
|
|
"db_dir": electrs_dir,
|
|
"network": "regtest",
|
|
"electrum_rpc_addr": f"127.0.0.1:{self.rpcport}",
|
|
"monitoring_addr": f"127.0.0.1:{monitoring_port}",
|
|
}
|
|
self.conf_file = os.path.join(regtestdir, "electrs.toml")
|
|
with open(self.conf_file, "w") as f:
|
|
for k, v in electrs_conf.items():
|
|
f.write(f'{k} = "{v}"\n')
|
|
|
|
self.env = {"RUST_LOG": "DEBUG"}
|
|
|
|
def start(self):
|
|
TailableProc.start(self)
|
|
self.wait_for_log("auto-compactions enabled", timeout=TIMEOUT)
|
|
logging.info("Electrs started")
|
|
|
|
def startup(self):
|
|
try:
|
|
self.start()
|
|
except Exception:
|
|
self.stop()
|
|
raise
|
|
|
|
def stop(self):
|
|
return TailableProc.stop(self)
|
|
|
|
def cleanup(self):
|
|
try:
|
|
self.stop()
|
|
except Exception:
|
|
self.proc.kill()
|
|
self.proc.wait()
|
|
|
|
def append_to_lianad_conf(self, conf_file):
|
|
with open(conf_file, "a") as f:
|
|
f.write("[electrum_config]\n")
|
|
f.write(f"addr = '127.0.0.1:{self.rpcport}'\n")
|