From 2501121f80eefa51013cfa35f3c67f61f53ce7e2 Mon Sep 17 00:00:00 2001 From: nick Date: Sat, 2 Dec 2023 12:12:21 +0000 Subject: [PATCH] Update elerium_ordinals_daemon.py --- elerium_ordinals_daemon.py | 73 ++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/elerium_ordinals_daemon.py b/elerium_ordinals_daemon.py index 94f9e1c..5b5c897 100644 --- a/elerium_ordinals_daemon.py +++ b/elerium_ordinals_daemon.py @@ -10,17 +10,29 @@ import os # Configuration -BTCPAY_INSTANCE = "https://btcpay.kosmos.org" -STORE_ID = "BLt2tAvgDHaYL6eCpbcNTybaPEUS6cYBCoXZLMBw8APg" -API_KEY = "8daa71e669ca230acd5fb437fee6cfdd659c92f6" -DB_PATH = "elerium_orders.db" CHECK_INTERVAL = 60 # in seconds -# Maximum weight units for a safe transaction -MAX_INSCRIPTION_SIZE = 390000 # Maximum size in weight units +# Maximum metadata size for a safe transaction is 95 KB, to be safe let's limit to 50 KB +MAX_METADATA_SIZE_BYTES = 50 * 1024 # 50 kilobytes in bytes + +# Load configuration from JSON file +with open('config.json', 'r') as config_file: + config = json.load(config_file) + +BTCPAY_INSTANCE = config['btcpay']['instance'] +STORE_ID = config['btcpay']['store_id'] +API_KEY = config['btcpay']['api_key'] +DB_PATH = config['database']['path'] +LOG_FILE = config['database']['logging'] +BITCOIN_CLI_PATH = config['bitcoin_cli']['path'] +BITCOIN_CLI_DATADIR = config['bitcoin_cli']['data_dir'] +BITCOIN_CLI_RPC_PORT = config['bitcoin_cli']['rpc_port'] +ORD_COOKIE_FILE = config['ord_command']['cookie_file'] +ORD_TESTNET = config['ord_command']['testnet'] + # Set up logging -logging.basicConfig(filename='elerium_daemon.log', level=logging.INFO, +logging.basicConfig(filename=LOG_FILE, level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') # Database setup @@ -41,14 +53,12 @@ headers = { } - - def get_fee_rate(): - # Assuming bitcoin-cli is located in the same directory + command = [ - "/media/n/backup/bitcoin-core/bitcoin-25.0/bin/bitcoin-cli", - "-datadir=/media/n/backup/bitcoin-core/bitcoin-25.0/data", - "-rpcport=18332", + BITCOIN_CLI_PATH, + BITCOIN_CLI_DATADIR, + BITCOIN_CLI_RPC_PORT, "estimatesmartfee", "3", # conf_target for 3 blocks "conservative" # estimate_mode @@ -58,23 +68,30 @@ def get_fee_rate(): result = subprocess.run(command, capture_output=True, text=True, check=True) output = result.stdout data = json.loads(output) - + print(data) # Convert BTC/kvB to sat/B and round to nearest integer btc_per_kvB = data.get("feerate", 0) - sat_per_B = int(btc_per_kvB * 100000000 / 1000) + + btc_per_kvB = "{:.8f}".format(btc_per_kvB) # Convert to decimal with 8 decimal places + + print(btc_per_kvB) + + sat_per_B = int(float(btc_per_kvB) * 100000000 / 1000) + print(sat_per_B) return sat_per_B except subprocess.CalledProcessError as e: error_msg = e.stderr logging.error(f"Fee rate estimation failed: {error_msg}") - return 1 # Default fee rate or handle error accordingly + return 1 # Default fee rate def inscribe(metadata): - metadata_size = len(json.dumps(metadata)) - if metadata_size > MAX_INSCRIPTION_SIZE: - logging.error(f"Metadata size {metadata_size} exceeds maximum limit.") + metadata_size_bytes = len(json.dumps(metadata).encode('utf-8')) + + if metadata_size_bytes > MAX_METADATA_SIZE_BYTES: + logging.error(f"Metadata size {metadata_size_bytes} bytes exceeds maximum limit of 50 KB.") return None fee_rate = get_fee_rate() @@ -86,8 +103,8 @@ def inscribe(metadata): command = [ "ord", - "--cookie-file=/media/n/backup/bitcoin-core/bitcoin-25.0/data/testnet3/.cookie", - "--testnet", + #ORD_COOKIE_FILE, + #ORD_TESTNET, "wallet", "inscribe", "--fee-rate", @@ -96,14 +113,6 @@ def inscribe(metadata): temp_file_path ] - # Print the command - print("Command to be executed:", ' '.join(command)) - # Ask user for confirmation - user_input = input("Do you want to continue with the inscription? (Y/N): ") - if user_input.lower() != 'y': - print("Inscription cancelled.") - exit() - return None try: result = subprocess.run(command, capture_output=True, text=True, check=True) output = result.stdout @@ -133,7 +142,6 @@ def fetch_invoices(): endpoint = f"{BTCPAY_INSTANCE}/api/v1/stores/{STORE_ID}/invoices" try: response = requests.get(endpoint, headers=headers) - #print(response) response.raise_for_status() return response.json() except RequestException as e: @@ -161,7 +169,6 @@ def process_invoices(invoices): continue # Skip non-settled invoices invoice_id = invoice['id'] cursor.execute("SELECT status FROM orders WHERE invoice_id = ?", (invoice_id,)) - result = cursor.fetchone() if not is_inscribed(invoice): print("Found non-inscribed order: " + str(invoice)) @@ -193,10 +200,6 @@ def process_invoices(invoices): - - - - def main_loop(): while True: invoices = fetch_invoices()