Beispiel #1
0
    def Runtime_Deserialize(self, engine: ExecutionEngine):
        data = engine.CurrentContext.EvaluationStack.Pop().GetByteArray()

        ms = StreamManager.GetStream(data=data)
        reader = BinaryReader(ms)
        try:
            stack_item = StackItem.DeserializeStackItem(reader)
            engine.CurrentContext.EvaluationStack.PushT(stack_item)
        except Exception as e:
            logger.error("Could not Deserialize stack item: %s " % e)
            return False
        return True
Beispiel #2
0
    def Runtime_Deserialize(self, engine: ExecutionEngine):
        data = engine.CurrentContext.EvaluationStack.Pop().GetByteArray()

        ms = StreamManager.GetStream(data=data)
        reader = BinaryReader(ms)
        try:
            stack_item = StackItem.DeserializeStackItem(reader)
            engine.CurrentContext.EvaluationStack.PushT(stack_item)
        except ValueError as e:
            # can't deserialize type
            return False
        finally:
            StreamManager.ReleaseStream(ms)
        return True
Beispiel #3
0
    def test_serialization_2(self):
        output = Compiler.instance().load(
            '%s/boa_test/example/demo/SerializationTest.py' %
            TestContract.dirname).default
        out = output.write()
        tx, results, total_ops, engine = TestBuild(out, [2], self.GetWallet1(),
                                                   '02', '05')
        self.assertEqual(len(results), 1)
        self.assertEqual(
            results[0].GetByteArray(),
            bytearray(
                b'\x80\x05\x00\x01a\x02\x01\x03\x80\x03\x00\x01j\x02\x01\x03\x02\x01\x05\x00\x02jk\x00\x07lmnopqr'
            ))

        stream = StreamManager.GetStream(results[0].GetByteArray())
        reader = BinaryReader(stream)
        stack_item = StackItem.DeserializeStackItem(reader)

        self.assertIsInstance(stack_item, Array)
        self.assertEqual(stack_item.Count, 5)
        self.assertEqual(stack_item.GetArray()[-1].GetString(), 'lmnopqr')
    def test_serialize_integer(self):

        # create integer, serialize it via state reader
        my_integer = StackItem.New(1234)
        self.engine.EvaluationStack.PushT(my_integer)
        self.state_reader.Runtime_Serialize(self.engine)
        self.assertEqual(len(self.engine.EvaluationStack.Items), 1)

        # we will preview what will be pushed onto the stack
        existing = self.engine.EvaluationStack.Peek(0)
        ms = StreamManager.GetStream(existing.GetByteArray())
        reader = BinaryReader(ms)
        result = StackItem.DeserializeStackItem(reader)

        # now run deserialized
        res = self.state_reader.Runtime_Deserialize(self.engine)
        self.assertEqual(res, True)

        deserialized = self.engine.EvaluationStack.Pop()

        self.assertEqual(deserialized, result)
        self.assertEqual(deserialized, my_integer)
        self.assertEqual(deserialized.GetBigInteger(), 1234)