from .transaction import Transaction from struct import pack, unpack from .functions import * class Block(dict): def __init__(self, raw_block=None, format="decoded", version=536870912, testnet=False): if format not in ("decoded", "raw"): raise ValueError("tx_format error, raw or decoded allowed") self["format"] = format self["testnet"] = testnet self["header"] = None self["hash"] = None self["version"] = version self["versionHex"] = struct.pack(">L", version).hex() self["previousBlockHash"] = None self["merkleRoot"] = None self["tx"] = dict() self["time"] = None self["bits"] = None self["nonce"] = None self["weight"] = 0 self["size"] = 80 self["strippedSize"] = 80 self["amount"] = 0 self["height"] = None self["difficulty"] = None self["targetDifficulty"] = None self["target"] = None if raw_block is None: return self["size"] = len(raw_block) if isinstance(raw_block, bytes) else int(len(raw_block)/2) s = self.get_stream(raw_block) self["format"] = "raw" self["version"] = unpack("L", self["version"]).hex() self["previousBlockHash"] = s.read(32) self["merkleRoot"] = s.read(32) self["time"] = unpack("