def deserialize(self, reader: BinaryReader): self.index = reader.read_int32() self.peer_pubkey = a2b_hex(reader.read_var_str()).hex() self.address = Address(reader.read_bytes(20)) self.status = reader.read_byte() self.init_pos = reader.read_int64() self.total_pos = reader.read_int64()
def deserialize(self, reader: BinaryReader): self.peer_pubkey = a2b_hex(reader.read_var_str()).hex() self.address = Address(reader.read_bytes(20)) self.consensus_pos = reader.read_int64() self.freeze_pos = reader.read_int64() self.new_pos = reader.read_int64() self.withdraw_pos = reader.read_int64() self.withdraw_freeze_pos = reader.read_int64() self.withdraw_unfreeze_pos = reader.read_int64()
class VmReader(object): def __init__(self, bys: bytearray): self.ms = StreamManager.GetStream(bys) self.reader = BinaryReader(self.ms) self.code = bys def read_byte(self): return self.reader.read_byte() def read_bool(self): b = self.reader.read_byte() return b == 1 def read_bytes(self, count: int): return self.reader.read_bytes(count) def read_var_bytes(self): return self.reader.read_var_bytes() def read_uint16(self): return self.read_uint16() def read_uint32(self): return self.reader.read_int32() def read_uint64(self): return self.reader.read_int64() def position(self): return self.reader.stream.tell() def read_int16(self): try: res = bytearray(self.reader.read_bytes(2)) res.reverse() return int(res.hex(), 16) except Exception as e: return 0 def read_var_int(self): return self.reader.read_var_int() def seek(self, offset: int): return self.reader.stream.seek(offset)
def read_bytes(reader: BinaryReader): code = reader.read_byte() if code == int.from_bytes(PUSHDATA4, 'little'): temp = reader.read_uint32() key_len = temp elif code == int.from_bytes(PUSHDATA2, 'little'): temp = reader.read_uint16() key_len = int(temp) elif code == int.from_bytes(PUSHDATA1, 'little'): temp = reader.read_uint8() key_len = int(temp) elif int.from_bytes(PUSHBYTES75, 'little') >= code >= int.from_bytes(PUSHBYTES1, 'little'): key_len = code - int.from_bytes(PUSHBYTES1, 'little') + 1 else: key_len = 0 res = reader.read_bytes(key_len) return res
def deserialize_from(txbytes: bytes): ms = StreamManager.GetStream(txbytes) reader = BinaryReader(ms) tx = Transaction() tx.version = reader.read_uint8() tx.tx_type = reader.read_uint8() tx.nonce = reader.read_uint32() tx.gas_price = reader.read_uint64() tx.gas_limit = reader.read_uint64() tx.payer = reader.read_bytes(20) tx.payload = reader.read_var_bytes() attri_len = reader.read_var_int() if attri_len is 0: tx.attributes = bytearray() sigs_len = reader.read_var_int() tx.sigs = [] for i in range(sigs_len): tx.sigs.append(Sig.deserialize(reader)) return tx
def deserialize_from(bytes_tx: bytes): ms = StreamManager.get_stream(bytes_tx) reader = BinaryReader(ms) tx = Transaction() tx.version = reader.read_uint8() tx.tx_type = reader.read_uint8() tx.nonce = reader.read_uint32() tx.gas_price = reader.read_uint64() tx.gas_limit = reader.read_uint64() tx.payer = reader.read_bytes(20) tx.payload = reader.read_var_bytes() attribute_len = reader.read_var_int() if attribute_len is 0: tx.attributes = bytearray() sig_len = reader.read_var_int() tx.sig_list = list() for _ in range(0, sig_len): tx.sig_list.append(Sig.deserialize(reader)) return tx
def deserialize(self, reader: BinaryReader): self.view = reader.read_int32() self.height = reader.read_int32() self.tx_hash = reader.read_bytes(32).hex()
def deserialize(self, reader: BinaryReader): self.address = Address(reader.read_bytes(20)) self.amount = reader.read_int64()
def deserialize(self, reader: BinaryReader): self.address = Address(reader.read_bytes(20)) self.stake = reader.read_int64() self.time_offset = reader.read_int32()