@indigo-labs/indigo-sdk 0.1.13 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +11 -8
- package/dist/index.mjs +11 -8
- package/package.json +1 -1
- package/src/contracts/stability-pool.ts +54 -50
- package/tests/stability-pool.test.ts +56 -0
package/dist/index.js
CHANGED
|
@@ -1625,6 +1625,15 @@ var StabilityPoolContract = class {
|
|
|
1625
1625
|
action: request
|
|
1626
1626
|
}
|
|
1627
1627
|
};
|
|
1628
|
+
let value = {
|
|
1629
|
+
lovelace: BigInt(
|
|
1630
|
+
params.stabilityPoolParams.requestCollateralLovelaces + params.stabilityPoolParams.accountAdjustmentFeeLovelaces
|
|
1631
|
+
),
|
|
1632
|
+
[params.stabilityPoolParams.accountToken[0].unCurrencySymbol + (0, import_lucid17.fromText)(params.stabilityPoolParams.accountToken[1].unTokenName)]: 1n
|
|
1633
|
+
};
|
|
1634
|
+
if (amount > 0n) {
|
|
1635
|
+
value[params.stabilityPoolParams.assetSymbol.unCurrencySymbol + (0, import_lucid17.fromText)(asset)] = amount;
|
|
1636
|
+
}
|
|
1628
1637
|
return lucid.newTx().readFrom([stabilityPoolScriptRef]).collectFrom([accountUtxo], serialiseStabilityPoolRedeemer(redeemer)).pay.ToContract(
|
|
1629
1638
|
(0, import_lucid17.credentialToAddress)(lucid.config().network, {
|
|
1630
1639
|
hash: (0, import_lucid17.validatorToScriptHash)(
|
|
@@ -1640,13 +1649,7 @@ var StabilityPoolContract = class {
|
|
|
1640
1649
|
}
|
|
1641
1650
|
})
|
|
1642
1651
|
},
|
|
1643
|
-
|
|
1644
|
-
lovelace: BigInt(
|
|
1645
|
-
params.stabilityPoolParams.requestCollateralLovelaces + params.stabilityPoolParams.accountAdjustmentFeeLovelaces
|
|
1646
|
-
),
|
|
1647
|
-
[params.stabilityPoolParams.accountToken[0].unCurrencySymbol + (0, import_lucid17.fromText)(params.stabilityPoolParams.accountToken[1].unTokenName)]: 1n,
|
|
1648
|
-
[params.stabilityPoolParams.assetSymbol.unCurrencySymbol + (0, import_lucid17.fromText)(asset)]: amount
|
|
1649
|
-
}
|
|
1652
|
+
value
|
|
1650
1653
|
).addSignerKey(pkh.hash);
|
|
1651
1654
|
}
|
|
1652
1655
|
static async closeAccount(accountUtxo, params, lucid) {
|
|
@@ -1830,7 +1833,7 @@ var StabilityPoolContract = class {
|
|
|
1830
1833
|
);
|
|
1831
1834
|
const isDepositOrRewardWithdrawal = amount > 0n;
|
|
1832
1835
|
const bigIntMax = (...args) => args.reduce((m, e) => e > m ? e : m);
|
|
1833
|
-
const balanceChange = isDepositOrRewardWithdrawal ? amount : bigIntMax(amount, fromSPInteger(
|
|
1836
|
+
const balanceChange = isDepositOrRewardWithdrawal ? amount : bigIntMax(amount, fromSPInteger(updatedAccountSnapshot.depositVal));
|
|
1834
1837
|
const newAccountSnapshot = {
|
|
1835
1838
|
...updatedAccountSnapshot,
|
|
1836
1839
|
depositVal: spAdd(
|
package/dist/index.mjs
CHANGED
|
@@ -1504,6 +1504,15 @@ var StabilityPoolContract = class {
|
|
|
1504
1504
|
action: request
|
|
1505
1505
|
}
|
|
1506
1506
|
};
|
|
1507
|
+
let value = {
|
|
1508
|
+
lovelace: BigInt(
|
|
1509
|
+
params.stabilityPoolParams.requestCollateralLovelaces + params.stabilityPoolParams.accountAdjustmentFeeLovelaces
|
|
1510
|
+
),
|
|
1511
|
+
[params.stabilityPoolParams.accountToken[0].unCurrencySymbol + fromText6(params.stabilityPoolParams.accountToken[1].unTokenName)]: 1n
|
|
1512
|
+
};
|
|
1513
|
+
if (amount > 0n) {
|
|
1514
|
+
value[params.stabilityPoolParams.assetSymbol.unCurrencySymbol + fromText6(asset)] = amount;
|
|
1515
|
+
}
|
|
1507
1516
|
return lucid.newTx().readFrom([stabilityPoolScriptRef]).collectFrom([accountUtxo], serialiseStabilityPoolRedeemer(redeemer)).pay.ToContract(
|
|
1508
1517
|
credentialToAddress4(lucid.config().network, {
|
|
1509
1518
|
hash: validatorToScriptHash4(
|
|
@@ -1519,13 +1528,7 @@ var StabilityPoolContract = class {
|
|
|
1519
1528
|
}
|
|
1520
1529
|
})
|
|
1521
1530
|
},
|
|
1522
|
-
|
|
1523
|
-
lovelace: BigInt(
|
|
1524
|
-
params.stabilityPoolParams.requestCollateralLovelaces + params.stabilityPoolParams.accountAdjustmentFeeLovelaces
|
|
1525
|
-
),
|
|
1526
|
-
[params.stabilityPoolParams.accountToken[0].unCurrencySymbol + fromText6(params.stabilityPoolParams.accountToken[1].unTokenName)]: 1n,
|
|
1527
|
-
[params.stabilityPoolParams.assetSymbol.unCurrencySymbol + fromText6(asset)]: amount
|
|
1528
|
-
}
|
|
1531
|
+
value
|
|
1529
1532
|
).addSignerKey(pkh.hash);
|
|
1530
1533
|
}
|
|
1531
1534
|
static async closeAccount(accountUtxo, params, lucid) {
|
|
@@ -1709,7 +1712,7 @@ var StabilityPoolContract = class {
|
|
|
1709
1712
|
);
|
|
1710
1713
|
const isDepositOrRewardWithdrawal = amount > 0n;
|
|
1711
1714
|
const bigIntMax = (...args) => args.reduce((m, e) => e > m ? e : m);
|
|
1712
|
-
const balanceChange = isDepositOrRewardWithdrawal ? amount : bigIntMax(amount, fromSPInteger(
|
|
1715
|
+
const balanceChange = isDepositOrRewardWithdrawal ? amount : bigIntMax(amount, fromSPInteger(updatedAccountSnapshot.depositVal));
|
|
1713
1716
|
const newAccountSnapshot = {
|
|
1714
1717
|
...updatedAccountSnapshot,
|
|
1715
1718
|
depositVal: spAdd(
|
package/package.json
CHANGED
|
@@ -51,7 +51,7 @@ export class StabilityPoolContract {
|
|
|
51
51
|
const [pkh, _skh] = await addrDetails(lucid);
|
|
52
52
|
const minLovelaces = BigInt(
|
|
53
53
|
params.stabilityPoolParams.accountCreateFeeLovelaces +
|
|
54
|
-
|
|
54
|
+
params.stabilityPoolParams.requestCollateralLovelaces,
|
|
55
55
|
);
|
|
56
56
|
const datum: StabilityPoolDatum = {
|
|
57
57
|
Account: {
|
|
@@ -83,7 +83,7 @@ export class StabilityPoolContract {
|
|
|
83
83
|
{
|
|
84
84
|
lovelace: minLovelaces,
|
|
85
85
|
[params.stabilityPoolParams.assetSymbol.unCurrencySymbol +
|
|
86
|
-
|
|
86
|
+
fromText(asset)]: amount,
|
|
87
87
|
},
|
|
88
88
|
)
|
|
89
89
|
.addSignerKey(pkh.hash);
|
|
@@ -124,6 +124,19 @@ export class StabilityPoolContract {
|
|
|
124
124
|
},
|
|
125
125
|
};
|
|
126
126
|
|
|
127
|
+
let value = {
|
|
128
|
+
lovelace: BigInt(
|
|
129
|
+
params.stabilityPoolParams.requestCollateralLovelaces +
|
|
130
|
+
params.stabilityPoolParams.accountAdjustmentFeeLovelaces,
|
|
131
|
+
),
|
|
132
|
+
[params.stabilityPoolParams.accountToken[0].unCurrencySymbol +
|
|
133
|
+
fromText(params.stabilityPoolParams.accountToken[1].unTokenName)]: 1n,
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
if (amount > 0n) {
|
|
137
|
+
value[params.stabilityPoolParams.assetSymbol.unCurrencySymbol + fromText(asset)] = amount;
|
|
138
|
+
}
|
|
139
|
+
|
|
127
140
|
return lucid
|
|
128
141
|
.newTx()
|
|
129
142
|
.readFrom([stabilityPoolScriptRef])
|
|
@@ -143,16 +156,7 @@ export class StabilityPoolContract {
|
|
|
143
156
|
},
|
|
144
157
|
}),
|
|
145
158
|
},
|
|
146
|
-
|
|
147
|
-
lovelace: BigInt(
|
|
148
|
-
params.stabilityPoolParams.requestCollateralLovelaces +
|
|
149
|
-
params.stabilityPoolParams.accountAdjustmentFeeLovelaces,
|
|
150
|
-
),
|
|
151
|
-
[params.stabilityPoolParams.accountToken[0].unCurrencySymbol +
|
|
152
|
-
fromText(params.stabilityPoolParams.accountToken[1].unTokenName)]: 1n,
|
|
153
|
-
[params.stabilityPoolParams.assetSymbol.unCurrencySymbol +
|
|
154
|
-
fromText(asset)]: amount,
|
|
155
|
-
},
|
|
159
|
+
value
|
|
156
160
|
)
|
|
157
161
|
.addSignerKey(pkh.hash);
|
|
158
162
|
}
|
|
@@ -211,10 +215,10 @@ export class StabilityPoolContract {
|
|
|
211
215
|
{
|
|
212
216
|
lovelace: BigInt(
|
|
213
217
|
params.stabilityPoolParams.requestCollateralLovelaces +
|
|
214
|
-
|
|
218
|
+
params.stabilityPoolParams.accountAdjustmentFeeLovelaces,
|
|
215
219
|
),
|
|
216
220
|
[params.stabilityPoolParams.accountToken[0].unCurrencySymbol +
|
|
217
|
-
|
|
221
|
+
fromText(params.stabilityPoolParams.accountToken[1].unTokenName)]: 1n,
|
|
218
222
|
},
|
|
219
223
|
)
|
|
220
224
|
.addSignerKey(pkh.hash);
|
|
@@ -316,16 +320,16 @@ export class StabilityPoolContract {
|
|
|
316
320
|
stabilityPoolUtxo.assets.lovelace +
|
|
317
321
|
BigInt(params.stabilityPoolParams.accountCreateFeeLovelaces),
|
|
318
322
|
[params.stabilityPoolParams.stabilityPoolToken[0].unCurrencySymbol +
|
|
319
|
-
|
|
323
|
+
fromText(params.stabilityPoolParams.stabilityPoolToken[1].unTokenName)]:
|
|
320
324
|
1n,
|
|
321
325
|
[params.stabilityPoolParams.assetSymbol.unCurrencySymbol +
|
|
322
|
-
|
|
326
|
+
fromText(asset)]: stabilityPoolAssetToken + reqAmount,
|
|
323
327
|
};
|
|
324
328
|
|
|
325
329
|
tx.mintAssets(
|
|
326
330
|
{
|
|
327
331
|
[params.stabilityPoolParams.accountToken[0].unCurrencySymbol +
|
|
328
|
-
|
|
332
|
+
fromText(params.stabilityPoolParams.accountToken[1].unTokenName)]: 1n,
|
|
329
333
|
},
|
|
330
334
|
Data.to(new Constr(0, [])),
|
|
331
335
|
);
|
|
@@ -366,7 +370,7 @@ export class StabilityPoolContract {
|
|
|
366
370
|
accountUtxo.assets.lovelace -
|
|
367
371
|
BigInt(params.stabilityPoolParams.accountCreateFeeLovelaces),
|
|
368
372
|
[params.stabilityPoolParams.accountToken[0].unCurrencySymbol +
|
|
369
|
-
|
|
373
|
+
fromText(params.stabilityPoolParams.accountToken[1].unTokenName)]: 1n,
|
|
370
374
|
},
|
|
371
375
|
);
|
|
372
376
|
} else if ('Adjust' in accountDatum.request) {
|
|
@@ -394,9 +398,10 @@ export class StabilityPoolContract {
|
|
|
394
398
|
const isDepositOrRewardWithdrawal: boolean = amount > 0n;
|
|
395
399
|
const bigIntMax = (...args: bigint[]): bigint =>
|
|
396
400
|
args.reduce((m, e) => (e > m ? e : m));
|
|
401
|
+
|
|
397
402
|
const balanceChange: bigint = isDepositOrRewardWithdrawal
|
|
398
403
|
? amount
|
|
399
|
-
: bigIntMax(amount, fromSPInteger(
|
|
404
|
+
: bigIntMax(amount, fromSPInteger(updatedAccountSnapshot.depositVal));
|
|
400
405
|
const newAccountSnapshot: StabilityPoolSnapshot = {
|
|
401
406
|
...updatedAccountSnapshot,
|
|
402
407
|
depositVal: spAdd(
|
|
@@ -418,9 +423,9 @@ export class StabilityPoolContract {
|
|
|
418
423
|
isDepositOrRewardWithdrawal || newPoolDepositExcludingFee.value === 0n
|
|
419
424
|
? 0n
|
|
420
425
|
: calculateFeeFromPercentage(
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
426
|
+
iassetDatum.stabilityPoolWithdrawalFeePercentage,
|
|
427
|
+
-balanceChange,
|
|
428
|
+
);
|
|
424
429
|
const newPoolDeposit = spAdd(
|
|
425
430
|
newPoolDepositExcludingFee,
|
|
426
431
|
mkSPInteger(withdrawalFee),
|
|
@@ -429,12 +434,12 @@ export class StabilityPoolContract {
|
|
|
429
434
|
withdrawalFee === 0n
|
|
430
435
|
? stabilityPoolDatum.snapshot.productVal
|
|
431
436
|
: spMul(
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
437
|
+
stabilityPoolDatum.snapshot.productVal,
|
|
438
|
+
spAdd(
|
|
439
|
+
mkSPInteger(1n),
|
|
440
|
+
spDiv(mkSPInteger(withdrawalFee), newPoolDepositExcludingFee),
|
|
441
|
+
),
|
|
442
|
+
);
|
|
438
443
|
const newPoolSum = spAdd(
|
|
439
444
|
stabilityPoolDatum.snapshot.sumVal,
|
|
440
445
|
spDiv(
|
|
@@ -463,7 +468,6 @@ export class StabilityPoolContract {
|
|
|
463
468
|
await CollectorContract.feeTx(rewardLovelacesFee, lucid, params, tx);
|
|
464
469
|
|
|
465
470
|
tx.readFrom([govUtxo, iAssetUtxo, ...refInputs]);
|
|
466
|
-
|
|
467
471
|
tx.pay.ToContract(
|
|
468
472
|
stabilityPoolUtxo.address,
|
|
469
473
|
{
|
|
@@ -484,14 +488,14 @@ export class StabilityPoolContract {
|
|
|
484
488
|
BigInt(params.stabilityPoolParams.accountAdjustmentFeeLovelaces) -
|
|
485
489
|
reward,
|
|
486
490
|
[params.stabilityPoolParams.stabilityPoolToken[0].unCurrencySymbol +
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
491
|
+
fromText(
|
|
492
|
+
params.stabilityPoolParams.stabilityPoolToken[1].unTokenName,
|
|
493
|
+
)]: 1n,
|
|
490
494
|
[params.stabilityPoolParams.assetSymbol.unCurrencySymbol +
|
|
491
|
-
|
|
495
|
+
fromText(asset)]:
|
|
492
496
|
stabilityPoolUtxo.assets[
|
|
493
|
-
|
|
494
|
-
|
|
497
|
+
params.stabilityPoolParams.assetSymbol.unCurrencySymbol +
|
|
498
|
+
fromText(asset)
|
|
495
499
|
] +
|
|
496
500
|
balanceChange +
|
|
497
501
|
withdrawalFee,
|
|
@@ -518,7 +522,7 @@ export class StabilityPoolContract {
|
|
|
518
522
|
BigInt(params.stabilityPoolParams.accountAdjustmentFeeLovelaces) -
|
|
519
523
|
2_000_000n,
|
|
520
524
|
[params.stabilityPoolParams.accountToken[0].unCurrencySymbol +
|
|
521
|
-
|
|
525
|
+
fromText(params.stabilityPoolParams.accountToken[1].unTokenName)]: 1n,
|
|
522
526
|
},
|
|
523
527
|
);
|
|
524
528
|
|
|
@@ -543,9 +547,9 @@ export class StabilityPoolContract {
|
|
|
543
547
|
lovelace: reward - rewardLovelacesFee + 2_000_000n,
|
|
544
548
|
...(amount < 0n
|
|
545
549
|
? {
|
|
546
|
-
|
|
550
|
+
[params.stabilityPoolParams.assetSymbol.unCurrencySymbol +
|
|
547
551
|
fromText(asset)]: -(amount - withdrawalFee),
|
|
548
|
-
|
|
552
|
+
}
|
|
549
553
|
: {}),
|
|
550
554
|
},
|
|
551
555
|
);
|
|
@@ -584,9 +588,9 @@ export class StabilityPoolContract {
|
|
|
584
588
|
newPoolDepositExcludingFee.value === 0n
|
|
585
589
|
? 0n
|
|
586
590
|
: calculateFeeFromPercentage(
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
591
|
+
iassetDatum.stabilityPoolWithdrawalFeePercentage,
|
|
592
|
+
withdrawnAmt.value,
|
|
593
|
+
);
|
|
590
594
|
|
|
591
595
|
const [newPoolDeposit, newPoolProduct] = updatePoolSnapshotWithdrawalFee(
|
|
592
596
|
mkSPInteger(withdrawalFeeAmount),
|
|
@@ -611,7 +615,7 @@ export class StabilityPoolContract {
|
|
|
611
615
|
tx.mintAssets(
|
|
612
616
|
{
|
|
613
617
|
[params.stabilityPoolParams.accountToken[0].unCurrencySymbol +
|
|
614
|
-
|
|
618
|
+
fromText(params.stabilityPoolParams.accountToken[1].unTokenName)]:
|
|
615
619
|
-1n,
|
|
616
620
|
},
|
|
617
621
|
Data.to(new Constr(0, [])),
|
|
@@ -619,8 +623,8 @@ export class StabilityPoolContract {
|
|
|
619
623
|
|
|
620
624
|
const assetOutputAmountForSP =
|
|
621
625
|
stabilityPoolUtxo.assets[
|
|
622
|
-
|
|
623
|
-
|
|
626
|
+
params.stabilityPoolParams.assetSymbol.unCurrencySymbol +
|
|
627
|
+
fromText(asset)
|
|
624
628
|
] -
|
|
625
629
|
fromSPInteger(withdrawnAmt) -
|
|
626
630
|
withdrawalFeeAmount;
|
|
@@ -641,14 +645,14 @@ export class StabilityPoolContract {
|
|
|
641
645
|
{
|
|
642
646
|
lovelace: stabilityPoolUtxo.assets.lovelace - reward,
|
|
643
647
|
[params.stabilityPoolParams.stabilityPoolToken[0].unCurrencySymbol +
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
648
|
+
fromText(
|
|
649
|
+
params.stabilityPoolParams.stabilityPoolToken[1].unTokenName,
|
|
650
|
+
)]: 1n,
|
|
647
651
|
...(assetOutputAmountForSP > 0n
|
|
648
652
|
? {
|
|
649
|
-
|
|
653
|
+
[params.stabilityPoolParams.assetSymbol.unCurrencySymbol +
|
|
650
654
|
fromText(asset)]: assetOutputAmountForSP,
|
|
651
|
-
|
|
655
|
+
}
|
|
652
656
|
: {}),
|
|
653
657
|
},
|
|
654
658
|
);
|
|
@@ -673,7 +677,7 @@ export class StabilityPoolContract {
|
|
|
673
677
|
{
|
|
674
678
|
lovelace: accountUtxo.assets.lovelace + reward - rewardLovelacesFee,
|
|
675
679
|
[params.stabilityPoolParams.assetSymbol.unCurrencySymbol +
|
|
676
|
-
|
|
680
|
+
fromText(asset)]: fromSPInteger(withdrawnAmt) - withdrawalFeeAmount,
|
|
677
681
|
},
|
|
678
682
|
);
|
|
679
683
|
}
|
|
@@ -253,6 +253,62 @@ test<LucidContext>('Stability Pool - Adjust Account', async ({
|
|
|
253
253
|
lucid,
|
|
254
254
|
),
|
|
255
255
|
);
|
|
256
|
+
|
|
257
|
+
// Withdraw 10n iUSD from the stability pool account.
|
|
258
|
+
lucid.selectWallet.fromSeed(users.user.seedPhrase);
|
|
259
|
+
|
|
260
|
+
stabilityPoolUtxo = await findStabilityPool(
|
|
261
|
+
lucid,
|
|
262
|
+
systemParams.validatorHashes.stabilityPoolHash,
|
|
263
|
+
{
|
|
264
|
+
currencySymbol:
|
|
265
|
+
systemParams.stabilityPoolParams.stabilityPoolToken[0].unCurrencySymbol,
|
|
266
|
+
tokenName: fromText(
|
|
267
|
+
systemParams.stabilityPoolParams.stabilityPoolToken[1].unTokenName,
|
|
268
|
+
),
|
|
269
|
+
},
|
|
270
|
+
'iUSD',
|
|
271
|
+
);
|
|
272
|
+
|
|
273
|
+
accountUtxo = await findStabilityPoolAccount(
|
|
274
|
+
lucid,
|
|
275
|
+
systemParams.validatorHashes.stabilityPoolHash,
|
|
276
|
+
pkh.hash,
|
|
277
|
+
'iUSD',
|
|
278
|
+
);
|
|
279
|
+
|
|
280
|
+
await runAndAwaitTx(
|
|
281
|
+
lucid,
|
|
282
|
+
StabilityPoolContract.adjustAccount(
|
|
283
|
+
'iUSD',
|
|
284
|
+
-10n,
|
|
285
|
+
accountUtxo,
|
|
286
|
+
systemParams,
|
|
287
|
+
lucid,
|
|
288
|
+
),
|
|
289
|
+
);
|
|
290
|
+
lucid.selectWallet.fromSeed(users.admin.seedPhrase);
|
|
291
|
+
|
|
292
|
+
accountUtxo = await findStabilityPoolAccount(
|
|
293
|
+
lucid,
|
|
294
|
+
systemParams.validatorHashes.stabilityPoolHash,
|
|
295
|
+
pkh.hash,
|
|
296
|
+
'iUSD',
|
|
297
|
+
);
|
|
298
|
+
|
|
299
|
+
await runAndAwaitTx(
|
|
300
|
+
lucid,
|
|
301
|
+
StabilityPoolContract.processRequest(
|
|
302
|
+
'iUSD',
|
|
303
|
+
stabilityPoolUtxo,
|
|
304
|
+
accountUtxo,
|
|
305
|
+
govUtxo,
|
|
306
|
+
assetUtxo,
|
|
307
|
+
undefined,
|
|
308
|
+
systemParams,
|
|
309
|
+
lucid,
|
|
310
|
+
),
|
|
311
|
+
);
|
|
256
312
|
});
|
|
257
313
|
|
|
258
314
|
test<LucidContext>('Stability Pool - Close Account', async ({
|