示例#1
0
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()
示例#2
0
    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)
示例#5
0
    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)
示例#7
0
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)