Skip to content

Commit

Permalink
Checking vault shares separately for long/short (#1290)
Browse files Browse the repository at this point in the history
  • Loading branch information
Sheng Lundquist authored Jan 27, 2024
1 parent 494faba commit b599c73
Showing 1 changed file with 52 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,7 @@ def invariant_check(
interactive_hyperdrive: InteractiveHyperdrive
An instantiated InteractiveHyperdrive object.
"""
# pylint: disable=too-many-statements
failed = False

exception_message: list[str] = ["Fuzz Long/Short Maturity Values Invariant Check"]
Expand Down Expand Up @@ -334,6 +335,32 @@ def invariant_check(
exception_data["invariance_check:long_base_amount_difference_in_wei"] = difference_in_wei
failed = True

# Check vault shares after long matures
pool_state = interactive_hyperdrive.hyperdrive_interface.get_hyperdrive_state()
expected_vault_shares = (
pool_state.pool_info.share_reserves
+ (
pool_state.pool_info.shorts_outstanding
+ (pool_state.pool_info.shorts_outstanding * pool_state.pool_config.fees.flat)
)
/ pool_state.pool_info.vault_share_price
+ pool_state.gov_fees_accrued
+ pool_state.pool_info.withdrawal_shares_proceeds
+ pool_state.pool_info.zombie_share_reserves
)
actual_vault_shares = pool_state.vault_shares

if actual_vault_shares < expected_vault_shares:
difference_in_wei = abs(expected_vault_shares.scaled_value - actual_vault_shares.scaled_value)
exception_message.append(
f"{actual_vault_shares=} is expected to be greater than {expected_vault_shares=} after mature long. "
f"{difference_in_wei=}. "
)
exception_data["invariance_check:expected_long_vault_shares"] = expected_vault_shares
exception_data["invariance_check:actual_long_vault_shares"] = actual_vault_shares
exception_data["invariance_check:long_vault_shares_difference_in_wei"] = difference_in_wei
failed = True

elif isinstance(open_trade_event, OpenShort) and isinstance(close_trade_event, CloseShort):
# Ensure we close the trade for all of the opened bonds
assert close_trade_event.bond_amount == open_trade_event.bond_amount
Expand Down Expand Up @@ -371,33 +398,34 @@ def invariant_check(
exception_data["invariance_check:expected_short_base_amount"] = expected_short_base_amount
exception_data["invariance_check:short_base_amount_difference_in_wei"] = difference_in_wei
failed = True
else:
raise ValueError("Invalid types for open/close trade events")

# We check vault shares heres here after both trades
pool_state = interactive_hyperdrive.hyperdrive_interface.get_hyperdrive_state()
expected_vault_shares = (
pool_state.pool_info.share_reserves
+ (
pool_state.pool_info.shorts_outstanding
+ (pool_state.pool_info.shorts_outstanding * pool_state.pool_config.fees.flat)
# Check vault shares after short matures
pool_state = interactive_hyperdrive.hyperdrive_interface.get_hyperdrive_state()
expected_vault_shares = (
pool_state.pool_info.share_reserves
+ (
pool_state.pool_info.shorts_outstanding
+ (pool_state.pool_info.shorts_outstanding * pool_state.pool_config.fees.flat)
)
/ pool_state.pool_info.vault_share_price
+ pool_state.gov_fees_accrued
+ pool_state.pool_info.withdrawal_shares_proceeds
+ pool_state.pool_info.zombie_share_reserves
)
/ pool_state.pool_info.vault_share_price
+ pool_state.gov_fees_accrued
+ pool_state.pool_info.withdrawal_shares_proceeds
+ pool_state.pool_info.zombie_share_reserves
)
actual_vault_shares = pool_state.vault_shares
actual_vault_shares = pool_state.vault_shares

if actual_vault_shares < expected_vault_shares:
difference_in_wei = abs(expected_vault_shares.scaled_value - actual_vault_shares.scaled_value)
exception_message.append(
f"{actual_vault_shares=} is expected to be greater than {expected_vault_shares=}. {difference_in_wei=}. "
)
exception_data["invariance_check:expected_vault_shares"] = expected_vault_shares
exception_data["invariance_check:actual_vault_shares"] = actual_vault_shares
exception_data["invariance_check:vault_shares_difference_in_wei"] = difference_in_wei
failed = True
if actual_vault_shares < expected_vault_shares:
difference_in_wei = abs(expected_vault_shares.scaled_value - actual_vault_shares.scaled_value)
exception_message.append(
f"{actual_vault_shares=} is expected to be greater than {expected_vault_shares=} after mature short. "
f"{difference_in_wei=}. "
)
exception_data["invariance_check:expected_short_vault_shares"] = expected_vault_shares
exception_data["invariance_check:actual_short_vault_shares"] = actual_vault_shares
exception_data["invariance_check:short_vault_shares_difference_in_wei"] = difference_in_wei
failed = True
else:
raise ValueError("Invalid types for open/close trade events")

if failed:
logging.critical("\n".join(exception_message))
Expand Down

0 comments on commit b599c73

Please sign in to comment.