示例#1
0
    def test_account_for_stake(self):
        address: 'Address' = create_address()
        context: 'IconScoreContext' = IconScoreContext()

        coin_part: 'CoinPart' = CoinPart()
        stake_part: 'StakePart' = StakePart()
        account = Account(address,
                          0,
                          Revision.IISS.value,
                          coin_part=coin_part,
                          stake_part=stake_part)

        balance = 1000
        account.deposit(balance)

        stake1 = 500
        unstake_block_height = 0
        remain_balance = balance - stake1

        account.set_stake(context, stake1, 0)

        self.assertEqual(stake1, account.stake)
        self.assertEqual(0, account.unstake)
        self.assertEqual(unstake_block_height, account.unstake_block_height)
        self.assertEqual(remain_balance, account.balance)

        stake2 = 100
        block_height = 10
        unstake = stake1 - stake2
        remain_balance = balance - stake1
        account.set_stake(context, stake2, block_height)

        self.assertEqual(stake2, account.stake)
        self.assertEqual(unstake, account.unstake)
        self.assertEqual(block_height, account.unstake_block_height)
        self.assertEqual(remain_balance, account.balance)

        remain_balance = remain_balance + unstake
        account._current_block_height += 11
        account.normalize(Revision.IISS.value)
        self.assertEqual(remain_balance, account.balance)
示例#2
0
    def test_account_for_stake_rev_multiple_unstake1(self):
        address: 'Address' = create_address()
        context: 'IconScoreContext' = Mock(spec=IconScoreContext)
        unstake_slot_max = 10
        context.configure_mock(unstake_slot_max=unstake_slot_max)
        context.configure_mock(revision=Revision.MULTIPLE_UNSTAKE.value)

        coin_part: 'CoinPart' = CoinPart()
        stake_part: 'StakePart' = StakePart()
        account = Account(address,
                          0,
                          Revision.MULTIPLE_UNSTAKE.value,
                          coin_part=coin_part,
                          stake_part=stake_part)

        balance = 1000
        account.deposit(balance)

        stake1 = 500
        unstake_block_height = 0
        remain_balance = balance - stake1

        account.set_stake(context, stake1, 0)

        self.assertEqual(stake1, account.stake)
        self.assertEqual(0, account.unstake)
        self.assertEqual(unstake_block_height, account.unstake_block_height)
        self.assertEqual(remain_balance, account.balance)

        stake2 = 100
        block_height = 10
        unstake = stake1 - stake2
        remain_balance = balance - stake1
        account.set_stake(context, stake2, block_height)
        expected_unstake_info = [[unstake, block_height]]

        self.assertEqual(stake2, account.stake)
        self.assertEqual(0, account.unstake)
        self.assertEqual(0, account.unstake_block_height)
        self.assertEqual(expected_unstake_info, account.unstakes_info)
        self.assertEqual(remain_balance, account.balance)

        stake3 = 600
        block_height = 15
        account.set_stake(context, stake3, block_height)
        expected_unstake_info = []
        expected_balance = 400

        self.assertEqual(stake3, account.stake)
        self.assertEqual(expected_unstake_info, account.unstakes_info)
        self.assertEqual(expected_balance, account.balance)
示例#3
0
    def test_account_for_unstake_slot_max_case_1(self):
        address: 'Address' = create_address()
        context: 'IconScoreContext' = Mock(spec=IconScoreContext)
        unstake_slot_max = 10
        context.configure_mock(unstake_slot_max=unstake_slot_max)
        context.configure_mock(revision=Revision.MULTIPLE_UNSTAKE.value)

        coin_part: 'CoinPart' = CoinPart()
        stake_part: 'StakePart' = StakePart()
        account = Account(address,
                          0,
                          Revision.MULTIPLE_UNSTAKE.value,
                          coin_part=coin_part,
                          stake_part=stake_part)

        balance = 2000
        account.deposit(balance)

        stake = 2000
        unstake_block_height = 0
        remain_balance = balance - stake

        account.set_stake(context, stake, 0)

        self.assertEqual(stake, account.stake)
        self.assertEqual(0, account.unstake)
        self.assertEqual(unstake_block_height, account.unstake_block_height)
        self.assertEqual(remain_balance, account.balance)

        unstake = 1
        total_unstake = 0
        expected_unstake_info = []
        for i in range(unstake_slot_max):
            expected_unstake_info.append([unstake, unstake_slot_max + i])
            stake -= unstake
            total_unstake += unstake
            account.set_stake(context, account.stake - unstake,
                              unstake_slot_max + i)
            self.assertEqual(stake, account.stake)
            self.assertEqual(total_unstake, account.stake_part.total_unstake)
            self.assertEqual(remain_balance, account.balance)
            self.assertEqual(expected_unstake_info, account.unstakes_info)
        last_unstake = 100
        account.set_stake(context, account.stake - last_unstake,
                          unstake_slot_max + 2)
        expected_unstake_info[-1] = [101, unstake_slot_max * 2 - 1]
        self.assertEqual(expected_unstake_info, account.unstakes_info)