def test_revert_paginated_data2(self, mock_dev_config): with set_qrl_dir('no_data'): state = State() p = PaginatedData(b'p_tx_hash', True, state._db) alice_address_state = OptimizedAddressState.get_default( address=self.alice.address) for i in range(0, 25): p.insert( alice_address_state, b'p_tx_hash_' + i.to_bytes(8, byteorder='big', signed=False)) p.put_paginated_data(None) full_hash = [] for i in range(0, (25 // config.dev.data_per_page) + 1): data = p.get_paginated_data( self.alice.address, (i + 1) * config.dev.data_per_page - 1) full_hash.extend(data) for tx_hash in full_hash[-1::-1]: p.remove(alice_address_state, tx_hash) p.put_paginated_data(None) self.assertEqual( alice_address_state.get_counter_by_name(b'p_tx_hash'), 0) self.assertEqual( len(p.get_paginated_data(alice_address_state.address, 22)), 0) self.assertEqual( len(p.get_paginated_data(alice_address_state.address, 12)), 0) self.assertEqual( len(p.get_paginated_data(alice_address_state.address, 2)), 0)
def revert(self, state_container, multi_sig_spend, addresses_state: dict, paginated_tx_hash: PaginatedData, current_block_number: int, threshold: int) -> bool: if not self.executed: return True if self.total_weight < threshold: return False if current_block_number > self.expiry_block_number: return False addresses_state[self.multi_sig_address].update_balance( state_container, multi_sig_spend.total_amount) addr_from_pk = bytes(QRLHelper.getAddress(multi_sig_spend.PK)) for index in range(0, len(multi_sig_spend.addrs_to)): addr_to = multi_sig_spend.addrs_to[index] address_state = addresses_state[addr_to] if addr_to not in (multi_sig_spend.addr_from, addr_from_pk): paginated_tx_hash.remove(address_state, multi_sig_spend.txhash) address_state.update_balance(state_container, multi_sig_spend.amounts[index], subtract=True) self._data.executed = False return True