Beispiel #1
0
    def test_serialization_and_deserialization(self):
        cstor_params = {
            "tx_hash": bytes(32),
            "from_address": Address.create_random_account(1),
            "to_address": Address.create_random_account(1),
            "value": 123,
            "gas_price": 456,
            "gas_token_id": 789,
            "transfer_token_id": 101,
        }
        deposit_deprecated = CrossShardTransactionDepositDeprecated(
            **cstor_params)
        deposit_v0 = CrossShardTransactionDepositV0(**cstor_params)
        deposit_v1 = CrossShardTransactionDeposit(**cstor_params)

        testcases = [
            (CrossShardTransactionDeprecatedList([deposit_deprecated]), None),
            (CrossShardTransactionListV0([deposit_v0]), None),
            (CrossShardTransactionList([deposit_v1]), 55),
        ]
        for ls, refund_rate_update in testcases:
            if refund_rate_update:
                ls.tx_list[0].refund_rate = refund_rate_update
            else:
                refund_rate_update = 100  # default refund rate, for comparison

            deserialized = CrossShardTransactionList.from_data(ls.serialize())
            self.assertIsInstance(deserialized, CrossShardTransactionList)
            self.assertEqual(len(deserialized.tx_list), 1)
            deposit = deserialized.tx_list[0]
            self.assertIsInstance(deposit, CrossShardTransactionDeposit)
            self.assertEqual(deposit.refund_rate, refund_rate_update)
            # serialize and deserialize again
            deposit_deserialized_again = CrossShardTransactionDeposit.deserialize(
                deposit.serialize())
            self.assertIsInstance(deposit_deserialized_again,
                                  CrossShardTransactionDeposit)
            self.assertEqual(deposit_deserialized_again.refund_rate,
                             refund_rate_update)
 def __get_confirmed_cross_shard_transaction_deposit_list(
         self, minor_block_hash):
     data = self.db.get(b"xr_" + minor_block_hash, None)
     if not data:
         return []
     return CrossShardTransactionList.from_data(data).tx_list
 def get_minor_block_xshard_tx_list(self, h) -> CrossShardTransactionList:
     key = b"xShard_" + h
     if key not in self.db:
         return None
     return CrossShardTransactionList.from_data(self.db.get(key))