137 lines
4.4 KiB
Python
137 lines
4.4 KiB
Python
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}" |