Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Restart: Test future swaps refunded #3066

Merged
merged 1 commit into from
Sep 24, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 76 additions & 22 deletions test/functional/feature_restart_interest.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ def run_test(self):
# Set up
self.setup()

# Test future swap refund on restart
self.future_swap_refund()

# Check restart on liquidated vault
self.vault_liquidation()

Expand Down Expand Up @@ -64,12 +67,12 @@ def setup(self):
# Get masternode address
self.address = self.nodes[0].get_genesis_keys().ownerAuthAddress

# Create tokens for tests
self.setup_test_tokens()

# Setup Oracles
self.setup_test_oracles()

# Create tokens for tests
self.setup_test_tokens()

# Setup pools
self.setup_test_pools()

Expand All @@ -78,14 +81,17 @@ def setup(self):

def setup_test_tokens(self):

# Generate chain
self.nodes[0].generate(110)

# Token symbols
self.symbolDFI = "DFI"
self.symbolDUSD = "DUSD"

# Create loan token
self.nodes[0].setloantoken(
{
"symbol": self.symbolMETA,
"name": self.symbolMETA,
"fixedIntervalPriceId": f"{self.symbolMETA}/USD",
"isDAT": True,
"interest": 0,
}
)

self.nodes[0].setloantoken(
{
"symbol": self.symbolDUSD,
Expand All @@ -97,11 +103,21 @@ def setup_test_tokens(self):
)
self.nodes[0].generate(1)

# Set collateral tokens
self.nodes[0].setcollateraltoken(
{"token": self.symbolDFI, "factor": 1, "fixedIntervalPriceId": "DFI/USD"}
)
self.nodes[0].setcollateraltoken(
{"token": self.symbolDUSD, "factor": 1, "fixedIntervalPriceId": "DUSD/USD"}
)
self.nodes[0].generate(1)

# Store DUSD ID
self.idDUSD = list(self.nodes[0].gettoken(self.symbolDUSD).keys())[0]

# Mint DUSD
self.nodes[0].minttokens("100000@DUSD")
self.nodes[0].minttokens(f"100000@{self.symbolDUSD}")
self.nodes[0].minttokens(f"100000@{self.symbolMETA}")
self.nodes[0].generate(1)

# Create DFI tokens
Expand All @@ -110,13 +126,21 @@ def setup_test_tokens(self):

def setup_test_oracles(self):

# Generate chain
self.nodes[0].generate(110)

# Token symbols
self.symbolDFI = "DFI"
self.symbolDUSD = "DUSD"
self.symbolMETA = "META"

# Create Oracle address
oracle_address = self.nodes[0].getnewaddress("", "legacy")

# Define price feeds
price_feed = [
{"currency": "USD", "token": "DFI"},
{"currency": "USD", "token": "BTC"},
{"currency": "USD", "token": self.symbolDFI},
{"currency": "USD", "token": self.symbolMETA},
]

# Appoint Oracle
Expand All @@ -126,6 +150,7 @@ def setup_test_oracles(self):
# Set Oracle prices
oracle_prices = [
{"currency": "USD", "tokenAmount": f"1@{self.symbolDFI}"},
{"currency": "USD", "tokenAmount": f"1@{self.symbolMETA}"},
]
self.nodes[0].setoracledata(self.oracle, int(time.time()), oracle_prices)
self.nodes[0].generate(10)
Expand All @@ -134,15 +159,6 @@ def setup_test_oracles(self):
self.nodes[0].createloanscheme(150, 5, "LOAN001")
self.nodes[0].generate(1)

# Set collateral tokens
self.nodes[0].setcollateraltoken(
{"token": self.symbolDFI, "factor": 1, "fixedIntervalPriceId": "DFI/USD"}
)
self.nodes[0].setcollateraltoken(
{"token": self.symbolDUSD, "factor": 1, "fixedIntervalPriceId": "DUSD/USD"}
)
self.nodes[0].generate(1)

def setup_test_pools(self):

# Create pool pair
Expand Down Expand Up @@ -176,6 +192,44 @@ def execute_restart(self):
)
self.nodes[0].generate(2)

def future_swap_refund(self):

# Rollback block
self.rollback_to(self.start_block)

# Set all futures attributes
self.nodes[0].setgov(
{
"ATTRIBUTES": {
"v0/params/dfip2203/reward_pct": "0.05",
"v0/params/dfip2203/block_period": "25",
}
}
)
self.nodes[0].generate(1)

# Fully enable DFIP2203
self.nodes[0].setgov({"ATTRIBUTES": {"v0/params/dfip2203/active": "true"}})
self.nodes[0].generate(1)

# Balance before restart
result = self.nodes[0].getaccount(self.address)
assert_equal(result[1], f"100000.00000000@{self.symbolMETA}")
assert_equal(result[2], f"90000.00000000@{self.symbolDUSD}")

# Create future swaps
self.nodes[0].futureswap(self.address, f"1@{self.symbolMETA}")
self.nodes[0].futureswap(self.address, f"1@{self.symbolDUSD}", self.symbolMETA)
self.nodes[0].generate(1)

# Execute dtoken restart
self.execute_restart()

# Balance after restart. Amount refunded and 90% locked.
result = self.nodes[0].getaccount(self.address)
assert_equal(result[1], f"10000.00000000@{self.symbolMETA}")
assert_equal(result[2], f"9000.00000000@{self.symbolDUSD}")

def minimal_balances_after_restart(self):

# Rollback block
Expand Down
Loading