fireexplorer-indexer/indexerClasses.py

137 lines
4.4 KiB
Python
Raw Normal View History

2025-02-05 22:38:20 +11:00
import json
import asyncio
import requests
class Block:
def __init__(self, data):
if isinstance(data, dict):
self.hash = data["hash"]
self.height = data["height"]
self.depth = data["depth"]
self.version = data["version"]
self.prevBlock = data["prevBlock"]
self.merkleRoot = data["merkleRoot"]
self.witnessRoot = data["witnessRoot"]
self.treeRoot = data["treeRoot"]
self.reservedRoot = data["reservedRoot"]
self.time = data["time"]
self.bits = data["bits"]
self.nonce = data["nonce"]
self.extraNonce = data["extraNonce"]
self.mask = data["mask"]
self.txs = data["txs"]
elif isinstance(data, list) or isinstance(data, tuple):
self.hash = data[0]
self.height = data[1]
self.depth = data[2]
self.version = data[3]
self.prevBlock = data[4]
self.merkleRoot = data[5]
self.witnessRoot = data[6]
self.treeRoot = data[7]
self.reservedRoot = data[8]
self.time = data[9]
self.bits = data[10]
self.nonce = data[11]
self.extraNonce = data[12]
self.mask = data[13]
self.txs = json.loads(data[14])
else:
raise ValueError("Invalid data type")
def __str__(self):
return f"Block {self.height}"
class Transaction:
def __init__(self, data):
if isinstance(data, dict):
self.hash = data["hash"]
self.witnessHash = data["witnessHash"]
self.fee = data["fee"]
self.rate = data["rate"]
self.mtime = data["mtime"]
self.block = data["block"]
self.index = data["index"]
self.version = data["version"]
self.inputs = data["inputs"]
self.outputs = data["outputs"]
self.locktime = data["locktime"]
self.hex = data["hex"]
elif isinstance(data, list) or isinstance(data, tuple):
self.hash = data[0]
self.witnessHash = data[1]
self.fee = data[2]
self.rate = data[3]
self.mtime = data[4]
self.block = data[5]
self.index = data[6]
self.version = data[7]
# Load inputs with Input class
self.inputs = []
for input in json.loads(data[8]):
self.inputs.append(Input(input))
self.outputs = []
for output in json.loads(data[9]):
self.outputs.append(Output(output))
self.locktime = data[10]
self.hex = data[11]
else:
raise ValueError("Invalid data type")
def __str__(self):
return f"Transaction {self.hash}"
class Input:
def __init__(self, data):
if isinstance(data, dict):
self.prevout = data["prevout"]
self.witness = data["witness"]
self.sequence = data["sequence"]
self.coin = Coin(data["coin"])
else:
raise ValueError("Invalid data type")
def __str__(self):
return f"Input {self.prevout['hash']} {self.coin}"
class Output:
def __init__(self, data):
if isinstance(data, dict):
self.value = data["value"]
self.address = data["address"]
self.covenant = Covenant(data["covenant"])
else:
raise ValueError("Invalid data type")
def __str__(self):
return f"Output {self.value} {self.address} {self.covenant}"
class Covenant:
def __init__(self, data):
if isinstance(data, dict):
self.type = data["type"]
self.action = data["action"]
self.items = data["items"]
else:
raise ValueError("Invalid data type")
def __str__(self):
return f"Covenant {self.type} {self.action}"
class Coin:
def __init__(self, data):
if isinstance(data, dict):
self.version = data["version"]
self.height = data["height"]
self.value = data["value"]
self.address = data["address"]
self.covenant = Covenant(data["covenant"])
self.coinbase = data["coinbase"]
else:
raise ValueError("Invalid data type")
def __str__(self):
return f"Coin {self.value} {self.address} {self.covenant}"