def get_tx_data(tx): ms = MemoryStream() w = BinaryWriter(ms) tx.SerializeUnsigned(w) ms.flush() tx_data = ms.ToArray().decode() return tx_data
def ToArray( value ): ms = MemoryStream() writer = BinaryWriter(ms) value.Serialize(writer) ms.flush() return ms.ToArray()
def Trim(self): ms = MemoryStream() writer = BinaryWriter(ms) self.SerializeUnsigned(writer) writer.WriteByte(1) self.Script.serialize(writer) writer.WriteSerializableArray([tx.Hash() for tx in self.Transactions]) ms.flush() return ms.ToArray()
class ScriptBuilder(object): """docstring for ScriptBuilder""" def __init__(self): super(ScriptBuilder, self).__init__() self.ms = MemoryStream() # MemoryStream def add(self, op): if isinstance(op, int): self.ms.write(bytes([op])) else: self.ms.write(op) return def push(self, data): if data == None: return if isinstance(data,int): if data == -1: return self.add(PUSHM1) elif data == 0: return self.add(PUSH0) elif data > 0 and data <= 16: return self.add(int.from_bytes(PUSH1,'big') -1 + data) else: return self.push(bytes(data)) else: buf = binascii.unhexlify(data) if len(buf) <= int.from_bytes( PUSHBYTES75, 'big'): self.add(len(buf)) self.add(buf) elif len(buf) < 0x100: self.add(PUSH1) self.add(len(buf)) self.add(buf) elif len(buf) < 0x10000: self.add(PUSH2) self.add(len(buf) & 0xff) self.add(len(buf) >> 8) self.add(buf) elif len(buf) < 0x100000000: self.add(PUSH4) self.add(len(buf) & 0xff) self.add((len(buf) >> 8) & 0xff) self.add((len(buf) >> 16) & 0xff) self.add(len(buf) >> 24) self.add(buf) return def ToArray(self): self.ms.flush() retval = self.ms.ToArray() self.ms.Cleanup() self.ms = None return retval
def GetHashData(self): """ Get the hashable data. Returns: bytes: """ ms = MemoryStream() w = BinaryWriter(ms) self.SerializeUnsigned(w) ms.flush() return ms.ToArray()
def ToJson(self): jsn = {} jsn['type'] = 'Neo.Core.ContractTransaction' # Verifiable.GetType().FullName ms = MemoryStream() w = BinaryWriter(ms) self.Verifiable.SerializeUnsigned(w) ms.flush() jsn['hex'] = ms.ToArray().decode() jsn['items'] = {} for key, value in self.ContextItems.items(): if type(key) == str: shkey = "0x{}".format(key) else: shkey = "0x{}".format(key.decode()) jsn['items'][shkey] = value.ToJson() return jsn
def ToJson(self): jsn = {} jsn['type'] = 'Neo.Core.ContractTransaction' # Verifiable.GetType().FullName ms = MemoryStream() w = BinaryWriter(ms) self.Verifiable.SerializeUnsigned(w) ms.flush() jsn['hex'] = ms.ToArray().decode() jsn['items'] = {} for key, value in self.ContextItems.items(): if type(key) == str: shkey = "0x{}".format(key) else: shkey = "0x{}".format(key.decode()) jsn['items'][shkey] = value.ToJson() return jsn
def test_message_serialization(self): message = Message('version', payload=self.payload) self.assertEqual(message.Command, 'version') ms = MemoryStream() writer = BinaryWriter(ms) message.Serialize(writer) ms.flush() result = binascii.unhexlify(ms.ToArray()) ms = MemoryStream(result) reader = BinaryReader(ms) deserialized_message = Message() deserialized_message.Deserialize(reader) dm = deserialized_message self.assertEqual(dm.Command, 'version') self.assertEqual(dm.Magic, Settings.MAGIC) checksum = Message.GetChecksum(dm.Payload) self.assertEqual(checksum, dm.Checksum) deserialized_version = IOHelper.AsSerializableWithType( dm.Payload, 'neo.Network.Payloads.VersionPayload.VersionPayload') self.assertEqual(deserialized_version.Port, self.port) self.assertEqual(deserialized_version.UserAgent, self.ua) self.assertEqual(deserialized_version.Timestamp, self.payload.Timestamp)
class ScriptBuilder(object): """docstring for ScriptBuilder""" def __init__(self): super(ScriptBuilder, self).__init__() self.ms = MemoryStream() # MemoryStream def add(self, op): if isinstance(op, int): self.ms.write(bytes([op])) else: self.ms.write(op) return def push(self, data): if data == None: return if isinstance(data, int): if data == -1: return self.add(PUSHM1) elif data == 0: return self.add(PUSH0) elif data > 0 and data <= 16: return self.add(int.from_bytes(PUSH1, 'big') - 1 + data) else: return self.push(bytes(data)) else: buf = binascii.unhexlify(data) if len(buf) <= int.from_bytes(PUSHBYTES75, 'big'): self.add(len(buf)) self.add(buf) elif len(buf) < 0x100: self.add(PUSH1) self.add(len(buf)) self.add(buf) elif len(buf) < 0x10000: self.add(PUSH2) self.add(len(buf) & 0xff) self.add(len(buf) >> 8) self.add(buf) elif len(buf) < 0x100000000: self.add(PUSH4) self.add(len(buf) & 0xff) self.add((len(buf) >> 8) & 0xff) self.add((len(buf) >> 16) & 0xff) self.add(len(buf) >> 24) self.add(buf) return def Emit(self, op, arg=None): self.ms.write(op) if arg is not None: self.ms.write(arg) def EmitAppCall(self, scriptHash, useTailCall=False): if len(scriptHash) != 20: raise Exception("Invalid script") if useTailCall: return self.Emit(TAILCALL, scriptHash) return self.Emit(APPCALL, scriptHash) def ToArray(self): self.ms.flush() retval = self.ms.ToArray() self.ms.Cleanup() self.ms = None return retval
def GetHashData(hashable): ms = MemoryStream() writer = BinaryWriter(ms) hashable.SerializeUnsigned(writer) ms.flush() return ms.ToArray()
def toArray(obj): ms = MemoryStream() w = BinaryWriter(ms) obj.Serialize(w) ms.flush() return ms.ToArray().decode()
def GetHashData(self): ms = MemoryStream() w = BinaryWriter(ms) self.SerializeUnsigned(w) ms.flush() return ms.ToArray()