def dump_msg(msg, preallocate: int = None, prefix: bytes = None) -> bytes: from apps.monero.xmr.serialize.readwriter import MemoryReaderWriter writer = MemoryReaderWriter(preallocate=preallocate) if prefix: writer.write(prefix) msg_type = msg.__class__ msg_type.dump(writer, msg) return writer.get_buffer()
def test_simple_msg(self): """ TxinGen :return: """ msg = TxinGen(height=42) writer = MemoryReaderWriter() TxinGen.dump(writer, msg) test_deser = TxinGen.load(MemoryReaderWriter(writer.get_buffer())) self.assertEqual(msg.height, test_deser.height)
def test_ecpoint(self): """ Ec point :return: """ ec_data = bytearray(range(32)) writer = MemoryReaderWriter() ECPoint.dump(writer, ec_data) self.assertTrue(len(writer.get_buffer()), ECPoint.SIZE) test_deser = ECPoint.load(MemoryReaderWriter(writer.get_buffer())) self.assertEqual(ec_data, test_deser)
def test_txin_to_key(self): """ TxinToKey :return: """ msg = TxinToKey(amount=123, key_offsets=[1, 2, 3, 2**76], k_image=bytearray(range(32))) writer = MemoryReaderWriter() TxinToKey.dump(writer, msg) test_deser = TxinToKey.load(MemoryReaderWriter(writer.get_buffer())) self.assertEqual(msg.amount, test_deser.amount) self.assertEqual(msg, test_deser)
def test_txin_variant(self): """ TxInV :return: """ msg1 = TxinToKey(amount=123, key_offsets=[1, 2, 3, 2**76], k_image=bytearray(range(32))) writer = MemoryReaderWriter() TxInV.dump(writer, msg1) test_deser = TxInV.load(MemoryReaderWriter(writer.get_buffer())) self.assertEqual(test_deser.__class__, TxinToKey) self.assertEqual(msg1, test_deser)
def test_varint(self): """ Var int :return: """ # fmt: off test_nums = [ 0, 1, 12, 44, 32, 63, 64, 127, 128, 255, 256, 1023, 1024, 8191, 8192, 2**16, 2**16 - 1, 2**32, 2**32 - 1, 2**64, 2**64 - 1, 2**72 - 1, 2**112 ] # fmt: on for test_num in test_nums: writer = MemoryReaderWriter() dump_uvarint(writer, test_num) test_deser = load_uvarint(MemoryReaderWriter(writer.get_buffer())) self.assertEqual(test_num, test_deser)
def parse_msg(buf: bytes, msg_type: type[T]) -> T: from apps.monero.xmr.serialize.readwriter import MemoryReaderWriter reader = MemoryReaderWriter(memoryview(buf)) return msg_type.load(reader)