Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 8d4eabb

Browse files
committedApr 30, 2024·
feat: Add function to manually configure available amounts
New orders will defult to 0 and current order will keep their current amount, configuring a order should now only affect the rate in which it gains more availbable for purschase
1 parent a544e62 commit 8d4eabb

File tree

5 files changed

+58
-11
lines changed

5 files changed

+58
-11
lines changed
 

‎network-owned-liquidity/README.md

+19-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ LiquidityOrder {
3939

4040
```java
4141
/**
42-
* Configures a new liquidity order
42+
* Configures a liquidity order
4343
*
4444
* @param pid The poolId on the balanced dex
4545
* @param limit The max ICX limit to purchase for each Order Period
@@ -49,14 +49,31 @@ public void configureOrder(BigInteger pid, BigInteger limit) {
4949
OnlyICONGovernance()
5050
order = LiquidityOrder {
5151
limit = limit,
52-
remaining = limit,
52+
remaining = 0,
5353
lastPurchaseBlock = Context.getBlockHeight()
5454
}
5555

5656
orders.set(pid, order);
5757
}
5858
```
5959

60+
```java
61+
/**
62+
* Configures the remaining amount of a liquidity order.
63+
*
64+
* @param pid The poolId on the balanced dex
65+
* @param amount The amount to make available for purchase, max limited by the order limit.
66+
*/
67+
68+
@External
69+
public void setAvailableAmount(BigInteger pid, BigInteger amount) {
70+
OnlyICONGovernance();
71+
order = orders.get(pid);
72+
order.remaining = amount;
73+
orders.set(pid, order);
74+
}
75+
```
76+
6077
```java
6178
/**
6279
* Removes a liquidity order

‎network-owned-liquidity/src/main/java/icon/inflation/score/nol/NetworkOwnedLiquidity.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -143,16 +143,22 @@ public BigInteger getInvestedEmissions() {
143143
@External
144144
public void configureOrder(BigInteger pid, BigInteger limit) {
145145
onlyOwner();
146-
LiquidityOrder order = new LiquidityOrder();
146+
LiquidityOrder order = orders.getOrDefault(pid, new LiquidityOrder());
147147
order.limit = limit;
148-
order.lastPurchaseBlock = BigInteger.valueOf(Context.getBlockHeight());;
149-
order.remaining = limit;
150148
orders.set(pid, order);
151149
if (!DBUtils.arrayDbContains(ordersList, pid)) {
152150
ordersList.add(pid);
153151
}
154152
}
155153

154+
@External
155+
public void setAvailableAmount(BigInteger pid, BigInteger amount) {
156+
onlyOwner();
157+
LiquidityOrder order = orders.get(pid);
158+
order.remaining = amount;
159+
orders.set(pid, order);
160+
}
161+
156162
@External
157163
public void removeOrder(BigInteger pid) {
158164
onlyOwner();

‎network-owned-liquidity/src/test/java/icon/inflation/score/nol/NetworkOwnedLiquidityTest.java

+13-5
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,12 @@ public void configureOrder_add() {
7272
assertEquals(pid1, orders[0].pid);
7373
assertEquals(limit1, orders[0].limit);
7474
assertEquals(getCurrentBlock().subtract(BigInteger.ONE), orders[0].lastPurchaseBlock);
75-
assertEquals(limit1, orders[0].remaining);
75+
assertEquals(BigInteger.ZERO, orders[0].remaining);
7676

7777
assertEquals(pid2, orders[1].pid);
7878
assertEquals(limit2, orders[1].limit);
7979
assertEquals(getCurrentBlock(), orders[1].lastPurchaseBlock);
80-
assertEquals(limit2, orders[1].remaining);
80+
assertEquals(BigInteger.ZERO, orders[1].remaining);
8181
}
8282

8383
@Test
@@ -98,8 +98,8 @@ public void configureOrder_reconfigure() {
9898

9999
assertEquals(pid1, orders[0].pid);
100100
assertEquals(limit2, orders[0].limit);
101-
assertEquals(getCurrentBlock(), orders[0].lastPurchaseBlock);
102-
assertEquals(limit2, orders[0].remaining);
101+
assertEquals(getCurrentBlock().subtract(BigInteger.ONE), orders[0].lastPurchaseBlock);
102+
assertEquals(BigInteger.ZERO, orders[0].remaining);
103103
}
104104

105105
@Test
@@ -123,7 +123,7 @@ public void configureOrder_remove() {
123123
assertEquals(pid2, orders[0].pid);
124124
assertEquals(limit2, orders[0].limit);
125125
assertEquals(getCurrentBlock().subtract(BigInteger.ONE), orders[0].lastPurchaseBlock);
126-
assertEquals(limit2, orders[0].remaining);
126+
assertEquals(BigInteger.ZERO, orders[0].remaining);
127127
}
128128

129129
@Test
@@ -134,6 +134,7 @@ public void swapLPTokens_simple() {
134134
BigInteger amount = BigInteger.TEN.multiply(EXA);
135135
BigInteger pid = BigInteger.ONE;
136136
networkOwnedLiquidity.invoke(governance, "configureOrder", pid, BigInteger.valueOf(100000).multiply(EXA));
137+
sm.getBlock().increase(NetworkOwnedLiquidity.DEFAULT_ORDER_PERIOD.longValue());
137138

138139
Address baseToken = sICX.getAddress();
139140
Address quoteToken = bnUSD.getAddress();
@@ -198,6 +199,8 @@ public void swapLPTokens_multipleOrders() {
198199
BigInteger pid2 = BigInteger.TWO;
199200
networkOwnedLiquidity.invoke(governance, "configureOrder", pid1, EXA.multiply(EXA));
200201
networkOwnedLiquidity.invoke(governance, "configureOrder", pid2, EXA.multiply(EXA));
202+
networkOwnedLiquidity.invoke(governance, "setAvailableAmount", pid1, EXA.multiply(EXA));
203+
networkOwnedLiquidity.invoke(governance, "setAvailableAmount", pid2, EXA.multiply(EXA));
201204

202205
Address baseToken1 = sICX.getAddress();
203206
Address baseToken2 = sARCH.getAddress();
@@ -278,6 +281,7 @@ public void swapLPTokens_overSlippageLimit() {
278281
BigInteger amount = BigInteger.TEN.multiply(EXA);
279282
BigInteger pid = BigInteger.ONE;
280283
networkOwnedLiquidity.invoke(governance, "configureOrder", pid, EXA.multiply(EXA));
284+
networkOwnedLiquidity.invoke(governance, "setAvailableAmount", pid, EXA.multiply(EXA));
281285

282286
Address baseToken = sICX.getAddress();
283287
Address quoteToken = bnUSD.getAddress();
@@ -356,6 +360,7 @@ public void swapLPTokens_aboveLimit() {
356360
BigInteger expectedRewards = expectedUSDRewards.multiply(EXA).divide(ICXPriceInUSD);
357361
networkOwnedLiquidity.getAccount().addBalance(expectedRewards.multiply(BigInteger.valueOf(3)));
358362
networkOwnedLiquidity.invoke(governance, "configureOrder", pid, expectedRewards.multiply(BigInteger.TWO));
363+
networkOwnedLiquidity.invoke(governance, "setAvailableAmount", pid, expectedRewards.multiply(BigInteger.TWO));
359364

360365
// Act
361366
networkOwnedLiquidity.invoke(dex.account, "onIRC31Received", user.getAddress(), user.getAddress(), pid, amount,
@@ -389,6 +394,7 @@ public void swapLPTokens_non18Decimal() {
389394
BigInteger amount = BigInteger.TEN.multiply(EXA);
390395
BigInteger pid = BigInteger.ONE;
391396
networkOwnedLiquidity.invoke(governance, "configureOrder", pid, EXA.multiply(EXA));
397+
networkOwnedLiquidity.invoke(governance, "setAvailableAmount", pid, EXA.multiply(EXA));
392398

393399
Address baseToken = sICX.getAddress();
394400
Address quoteToken = bnUSD.getAddress();
@@ -442,6 +448,7 @@ public void swapLPTokens_nonUSDQuote() {
442448
BigInteger amount = BigInteger.TEN.multiply(EXA);
443449
BigInteger pid = BigInteger.ONE;
444450
networkOwnedLiquidity.invoke(governance, "configureOrder", pid, EXA.multiply(EXA));
451+
networkOwnedLiquidity.invoke(governance, "setAvailableAmount", pid, EXA.multiply(EXA));
445452

446453
Address baseToken = sARCH.getAddress();
447454
Address quoteToken = sICX.getAddress();
@@ -500,6 +507,7 @@ public void swapLPTokens_missPriced() {
500507
BigInteger amount = BigInteger.TEN.multiply(EXA);
501508
BigInteger pid = BigInteger.ONE;
502509
networkOwnedLiquidity.invoke(governance, "configureOrder", pid, EXA.multiply(EXA));
510+
networkOwnedLiquidity.invoke(governance, "setAvailableAmount", pid, EXA.multiply(EXA));
503511

504512
Address baseToken = sICX.getAddress();
505513
Address quoteToken = bnUSD.getAddress();

‎score-lib/src/main/java/icon/inflation/score/interfaces/INetworkOwnedLiquidity.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,24 @@ public interface INetworkOwnedLiquidity {
5252
BigInteger getInvestedEmissions();
5353

5454
/**
55-
* Configures a new liquidity order
55+
* Configures a liquidity order
5656
*
5757
* @param pid The poolId on the balanced dex
5858
* @param limit The max USD limit to purchase for each Order Period
5959
*/
6060
@External
6161
void configureOrder(BigInteger pid, BigInteger limit);
6262

63+
64+
/**
65+
* Configures the remaining amount of a liquidity order
66+
*
67+
* @param pid The poolId on the balanced dex
68+
* @param amount The amount to make available for purchase, max limited by the order limit.
69+
*/
70+
@External
71+
void setAvailableAmount(BigInteger pid, BigInteger amount);
72+
6373
/**
6474
* Removes a liquidity order
6575
*

‎score-lib/src/main/java/icon/inflation/score/structs/LiquidityOrder.java

+6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import score.ObjectReader;
44
import score.ObjectWriter;
5+
import score.Context;
56

67
import java.math.BigInteger;
78

@@ -12,6 +13,11 @@ public class LiquidityOrder {
1213
// return value only
1314
public BigInteger pid;
1415

16+
public LiquidityOrder() {
17+
lastPurchaseBlock = BigInteger.valueOf(Context.getBlockHeight());
18+
remaining = BigInteger.ZERO;
19+
}
20+
1521
public static void writeObject(ObjectWriter writer, LiquidityOrder liquidityOrder) {
1622
liquidityOrder.writeObject(writer);
1723
}

0 commit comments

Comments
 (0)
Please sign in to comment.