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))