Exemple #1
0
    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