Skip to content

Commit 087629e

Browse files
authored
Restart: Test future swaps refunded (#3066)
1 parent 6582e1d commit 087629e

File tree

1 file changed

+76
-22
lines changed

1 file changed

+76
-22
lines changed

test/functional/feature_restart_interest.py

+76-22
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ def run_test(self):
3535
# Set up
3636
self.setup()
3737

38+
# Test future swap refund on restart
39+
self.future_swap_refund()
40+
3841
# Check restart on liquidated vault
3942
self.vault_liquidation()
4043

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

67-
# Create tokens for tests
68-
self.setup_test_tokens()
69-
7070
# Setup Oracles
7171
self.setup_test_oracles()
7272

73+
# Create tokens for tests
74+
self.setup_test_tokens()
75+
7376
# Setup pools
7477
self.setup_test_pools()
7578

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

7982
def setup_test_tokens(self):
8083

81-
# Generate chain
82-
self.nodes[0].generate(110)
83-
84-
# Token symbols
85-
self.symbolDFI = "DFI"
86-
self.symbolDUSD = "DUSD"
87-
8884
# Create loan token
85+
self.nodes[0].setloantoken(
86+
{
87+
"symbol": self.symbolMETA,
88+
"name": self.symbolMETA,
89+
"fixedIntervalPriceId": f"{self.symbolMETA}/USD",
90+
"isDAT": True,
91+
"interest": 0,
92+
}
93+
)
94+
8995
self.nodes[0].setloantoken(
9096
{
9197
"symbol": self.symbolDUSD,
@@ -97,11 +103,21 @@ def setup_test_tokens(self):
97103
)
98104
self.nodes[0].generate(1)
99105

106+
# Set collateral tokens
107+
self.nodes[0].setcollateraltoken(
108+
{"token": self.symbolDFI, "factor": 1, "fixedIntervalPriceId": "DFI/USD"}
109+
)
110+
self.nodes[0].setcollateraltoken(
111+
{"token": self.symbolDUSD, "factor": 1, "fixedIntervalPriceId": "DUSD/USD"}
112+
)
113+
self.nodes[0].generate(1)
114+
100115
# Store DUSD ID
101116
self.idDUSD = list(self.nodes[0].gettoken(self.symbolDUSD).keys())[0]
102117

103118
# Mint DUSD
104-
self.nodes[0].minttokens("100000@DUSD")
119+
self.nodes[0].minttokens(f"100000@{self.symbolDUSD}")
120+
self.nodes[0].minttokens(f"100000@{self.symbolMETA}")
105121
self.nodes[0].generate(1)
106122

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

111127
def setup_test_oracles(self):
112128

129+
# Generate chain
130+
self.nodes[0].generate(110)
131+
132+
# Token symbols
133+
self.symbolDFI = "DFI"
134+
self.symbolDUSD = "DUSD"
135+
self.symbolMETA = "META"
136+
113137
# Create Oracle address
114138
oracle_address = self.nodes[0].getnewaddress("", "legacy")
115139

116140
# Define price feeds
117141
price_feed = [
118-
{"currency": "USD", "token": "DFI"},
119-
{"currency": "USD", "token": "BTC"},
142+
{"currency": "USD", "token": self.symbolDFI},
143+
{"currency": "USD", "token": self.symbolMETA},
120144
]
121145

122146
# Appoint Oracle
@@ -126,6 +150,7 @@ def setup_test_oracles(self):
126150
# Set Oracle prices
127151
oracle_prices = [
128152
{"currency": "USD", "tokenAmount": f"1@{self.symbolDFI}"},
153+
{"currency": "USD", "tokenAmount": f"1@{self.symbolMETA}"},
129154
]
130155
self.nodes[0].setoracledata(self.oracle, int(time.time()), oracle_prices)
131156
self.nodes[0].generate(10)
@@ -134,15 +159,6 @@ def setup_test_oracles(self):
134159
self.nodes[0].createloanscheme(150, 5, "LOAN001")
135160
self.nodes[0].generate(1)
136161

137-
# Set collateral tokens
138-
self.nodes[0].setcollateraltoken(
139-
{"token": self.symbolDFI, "factor": 1, "fixedIntervalPriceId": "DFI/USD"}
140-
)
141-
self.nodes[0].setcollateraltoken(
142-
{"token": self.symbolDUSD, "factor": 1, "fixedIntervalPriceId": "DUSD/USD"}
143-
)
144-
self.nodes[0].generate(1)
145-
146162
def setup_test_pools(self):
147163

148164
# Create pool pair
@@ -176,6 +192,44 @@ def execute_restart(self):
176192
)
177193
self.nodes[0].generate(2)
178194

195+
def future_swap_refund(self):
196+
197+
# Rollback block
198+
self.rollback_to(self.start_block)
199+
200+
# Set all futures attributes
201+
self.nodes[0].setgov(
202+
{
203+
"ATTRIBUTES": {
204+
"v0/params/dfip2203/reward_pct": "0.05",
205+
"v0/params/dfip2203/block_period": "25",
206+
}
207+
}
208+
)
209+
self.nodes[0].generate(1)
210+
211+
# Fully enable DFIP2203
212+
self.nodes[0].setgov({"ATTRIBUTES": {"v0/params/dfip2203/active": "true"}})
213+
self.nodes[0].generate(1)
214+
215+
# Balance before restart
216+
result = self.nodes[0].getaccount(self.address)
217+
assert_equal(result[1], f"100000.00000000@{self.symbolMETA}")
218+
assert_equal(result[2], f"90000.00000000@{self.symbolDUSD}")
219+
220+
# Create future swaps
221+
self.nodes[0].futureswap(self.address, f"1@{self.symbolMETA}")
222+
self.nodes[0].futureswap(self.address, f"1@{self.symbolDUSD}", self.symbolMETA)
223+
self.nodes[0].generate(1)
224+
225+
# Execute dtoken restart
226+
self.execute_restart()
227+
228+
# Balance after restart. Amount refunded and 90% locked.
229+
result = self.nodes[0].getaccount(self.address)
230+
assert_equal(result[1], f"10000.00000000@{self.symbolMETA}")
231+
assert_equal(result[2], f"9000.00000000@{self.symbolDUSD}")
232+
179233
def minimal_balances_after_restart(self):
180234

181235
# Rollback block

0 commit comments

Comments
 (0)