Tests - operation in Hive - Power down

Operation: Power down - withdraw_vesting_operation, // 4

Configuration:

based on: https://gitlab.syncad.com/hive/hive/-/blob/develop/libraries/protocol/include/hive/protocol/config.hpp

HIVE_VESTING_WITHDRAW_INTERVALS, default mainnet value: 13 weeks
HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (HIVE_CASHOUT_WINDOW_SECONDS), default mainnet value: 1 week

Test cases:

  • 1. User creates Power.
Expected results:

Expected result:

  1. After operation, the HP balance is not reduced.
  2. RC current_mana is reduced.
  3. RC max_mana is reduced.
  4. After HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), the HP balance is reduced by {amount}/HIVE_VESTING_WITHDRAW_INTERVALS.
  5. After HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), the Hive balance is increased by {amount}/HIVE_VESTING_WITHDRAW_INTERVALS.
  6. After HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), RC max_mana is reduced.
  7. After HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), the virtual operation: fill_vesting_withdraw is generated.
  8. After 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 2 week), the HP balance is reduced by {amount}/13.
  9. After 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 2 week), the Hive balance is increased by {amount}/HIVE_VESTING_WITHDRAW_INTERVALS (13).
  10. After 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 2 week), RC max_mana is reduced.
  11. After 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 2 week), the virtual operation: fill_vesting_withdraw is generated.
  12. To be checked from 3 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 3 week) to HIVE_VESTING_WITHDRAW_INTERVALS - HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 12 week) weeks after operation:
  • The virtual operation: fill_vesting_withdraw is generated.
  • The HP balance is reduced by {amount}/HIVE_VESTING_WITHDRAW_INTERVALS (13).
  • The Hive balance is increased by {amount}/HIVE_VESTING_WITHDRAW_INTERVALS (13).
  • RC max_mana is reduced.
  1. After HIVE_VESTING_WITHDRAW_INTERVALS:
  • The virtual operation: fill_vesting_withdraw is generated.
  • The HP balance is reduced by {amount}/HIVE_VESTING_WITHDRAW_INTERVALS (13).
  • The Hive balance is increased by {amount}/HIVE_VESTING_WITHDRAW_INTERVALS (13).
  • RC max_mana is not reduced.

Test case:

  • 2. User wants to stop Power down a few days after creating Power down.
Preconditions:

X = a few days after creating Power down is between 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS and 3 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (for example: 20 days).

Steps:

Step 1: User creates Power down.
Expected result:
  1. After operation, the HP balance is not reduced.
  2. RC current_mana is reduced.
  3. After HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), the HP balance is reduced by {amount}/13.
  4. After HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), the Hive balance is increased by {amount}/13.
  5. After HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), RC max_mana is reduced.
  6. After HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), the virtual operation: fill_vesting_withdraw is generated.
  7. After 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 2 week), the HP balance is reduced by {amount}/HIVE_VESTING_WITHDRAW_INTERVALS (13).
  8. After 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 2 week), the Hive balance is increased by {amount}/HIVE_VESTING_WITHDRAW_INTERVALS (13).
  9. After 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 2 week), RC max_mana is reduced.
  10. After 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 2 week), the virtual operation: fill_vesting_withdraw is generated.
Step 2: User creates a Power down with {amount} = 0 X days after creating Power down.
Expected result:
  1. After 3 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 3 week): HP and Hive balance is not updated.
  2. After 3 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 3 week): RC max_mana is increased (compare to RC max_mana from point 9, step 1. Already sent RC max_mana is sent back).

Test case:

  • 3. User wants to increase the amount of Power down.
Preconditions:
  1. Amount1 (Power down 1) < amount2 (Power down 2)
  2. X = a few days after creating Power down is between 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS and 3 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (for example: 20 days).

Steps:

Step 1: User creates Power down with amount1.
Expected result:
  1. (Power down 1) After operation, the HP balance is not reduced.
  2. (Power down 1) RC current_mana is reduced.
  3. (Power down 1) RC max_mana is reduced.
  4. (Power down 1) After HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), the HP balance is reduced by {amount}/HIVE_VESTING_WITHDRAW_INTERVALS (13).
  5. (Power down 1) After HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), the Hive balance is increased by {amount}/HIVE_VESTING_WITHDRAW_INTERVALS (13).
  6. (Power down 1) After HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), RC max_mana is reduced.
  7. (Power down 1) After HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), the virtual operation: fill_vesting_withdraw is generated.
  8. (Power down 1) After 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 2 week), the HP balance is reduced by {amount}/HIVE_VESTING_WITHDRAW_INTERVALS (13).
  9. (Power down 1) After 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 2 week), the Hive balance is increased by {amount}/HIVE_VESTING_WITHDRAW_INTERVALS (13).
  10. (Power down 1) After 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 2 week), RC max_mana is reduced.
  11. (Power down 1) After 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 2 week), the virtual operation: fill_vesting_withdraw is generated.
Step 2: User creates a Power down with {amount} = amount2 X after creating Power down 1.
Expected result:
  1. (Power down 2) After X, RC current_mana is reduced.
  2. (Power down 2) After X, the HP balance is not reduced.
  3. (Power down 1) After 3 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 3 week): HP and Hive balance is not updated.
  4. (Power down 2) After X days + 1* HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), the HP balance is reduced by {amount2}/13.
  5. (Power down 2) After X days + 1* HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), the Hive balance is increased by {amount2}/13.
  6. (Power down 2) After X days + 1* HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), RC max_mana is reduced.
  7. (Power down 2) After X days + 1* HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 1 week), the virtual operation: fill_vesting_withdraw is generated.
  8. To be checked from 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (mainnet value: 2 week) to HIVE_VESTING_WITHDRAW_INTERVALS (mainnet value: 12 week) weeks after operation:
  • (Power down 2) The Hive balance is increased by {amount2}/HIVE_VESTING_WITHDRAW_INTERVALS (13).
  • (Power down 2) RC max_mana is reduced.
  • (Power down 2) The virtual operation: fill_vesting_withdraw is generated.
  1. After HIVE_VESTING_WITHDRAW_INTERVALS:
  • The virtual operation: fill_vesting_withdraw is generated.
  • The HP balance is reduced by {amount}/HIVE_VESTING_WITHDRAW_INTERVALS (13).
  • The Hive balance is increased by {amount}/HIVE_VESTING_WITHDRAW_INTERVALS (13).
  • RC max_mana is not reduced..

Test case:

  • 4. User wants to decrease the amount of Power down.
Preconditions:
  1. Amount1 (Power down 1) > amount2 (Power down 2).
  2. X = a few days after creating Power down is between 2 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS and 3 * HIVE_VESTING_WITHDRAW_INTERVAL_SECONDS (for example: 20 days).

Repeat steps and checks from test case 3.

Edited by Michał Kudela