Skip to content

Commit

Permalink
Restart: Test future swaps refunded
Browse files Browse the repository at this point in the history
  • Loading branch information
Bushstar committed Sep 24, 2024
1 parent 6582e1d commit fe66b6a
Showing 1 changed file with 76 additions and 22 deletions.
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

0 comments on commit fe66b6a

Please sign in to comment.