@indigo-labs/indigo-sdk 0.1.21 → 0.1.23

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.
Files changed (135) hide show
  1. package/.github/workflows/ci.yml +3 -8
  2. package/.github/workflows/test.yml +44 -0
  3. package/dist/index.d.mts +670 -1291
  4. package/dist/index.d.ts +670 -1291
  5. package/dist/index.js +2240 -4669
  6. package/dist/index.mjs +2221 -4618
  7. package/eslint.config.mjs +1 -7
  8. package/package.json +4 -9
  9. package/src/contracts/cdp.ts +746 -0
  10. package/src/contracts/collector.ts +98 -0
  11. package/src/contracts/gov.ts +1 -0
  12. package/src/contracts/interest-oracle.ts +149 -0
  13. package/src/contracts/{lrp/transactions.ts → lrp.ts} +14 -14
  14. package/src/contracts/{one-shot/transactions.ts → one-shot.ts} +3 -3
  15. package/src/contracts/stability-pool.ts +690 -0
  16. package/src/contracts/staking.ts +348 -0
  17. package/src/contracts/treasury.ts +112 -0
  18. package/src/helpers/asset-helpers.ts +63 -0
  19. package/src/{utils → helpers}/helper-txs.ts +0 -1
  20. package/src/{utils/utils.ts → helpers/helpers.ts} +10 -0
  21. package/src/{contracts/interest-oracle/helpers.ts → helpers/interest-oracle.ts} +9 -37
  22. package/src/{contracts/stability-pool/helpers.ts → helpers/stability-pool-helpers.ts} +6 -110
  23. package/src/helpers/staking-helpers.ts +94 -0
  24. package/src/helpers/time-helpers.ts +4 -0
  25. package/src/{utils → helpers}/value-helpers.ts +0 -10
  26. package/src/index.ts +33 -38
  27. package/src/{validators → scripts}/cdp-creator-validator.ts +50 -4
  28. package/src/{validators → scripts}/cdp-validator.ts +5 -3
  29. package/src/{validators → scripts}/collector-validator.ts +3 -2
  30. package/src/scripts/execute-validator.ts +52 -0
  31. package/src/{validators/governance-validator.ts → scripts/gov-validator.ts} +40 -3
  32. package/src/{validators → scripts}/interest-oracle-validator.ts +20 -4
  33. package/src/scripts/lrp-validator.ts +40 -0
  34. package/src/{contracts/one-shot/scripts.ts → scripts/one-shot-policy.ts} +1 -1
  35. package/src/scripts/poll-manager-validator.ts +52 -0
  36. package/src/{validators → scripts}/poll-shard-validator.ts +43 -3
  37. package/src/{contracts/price-oracle/scripts.ts → scripts/price-oracle-validator.ts} +4 -1
  38. package/src/{validators → scripts}/stability-pool-validator.ts +57 -4
  39. package/src/{validators → scripts}/staking-validator.ts +3 -2
  40. package/src/{validators → scripts}/treasury-validator.ts +3 -2
  41. package/src/{validators → scripts}/version-record-policy.ts +23 -4
  42. package/src/{validators/execute-validator.ts → scripts/version-registry.ts} +11 -3
  43. package/src/types/generic.ts +60 -78
  44. package/src/{contracts/cdp-creator/types.ts → types/indigo/cdp-creator.ts} +4 -6
  45. package/src/types/indigo/cdp.ts +88 -0
  46. package/src/types/indigo/execute.ts +21 -0
  47. package/src/types/indigo/gov.ts +51 -0
  48. package/src/{contracts/interest-oracle/types.ts → types/indigo/interest-oracle.ts} +1 -1
  49. package/src/{contracts/lrp/types.ts → types/indigo/lrp.ts} +2 -2
  50. package/src/types/indigo/poll-manager.ts +21 -0
  51. package/src/types/indigo/poll-shard.ts +16 -0
  52. package/src/{contracts/price-oracle/types.ts → types/indigo/price-oracle.ts} +4 -16
  53. package/src/types/indigo/stability-pool.ts +233 -0
  54. package/src/types/indigo/staking.ts +99 -0
  55. package/src/{contracts/version-registry/types.ts → types/indigo/version-record.ts} +1 -1
  56. package/src/types/on-chain-decimal.ts +0 -22
  57. package/src/types/system-params.ts +11 -22
  58. package/tests/datums.test.ts +108 -125
  59. package/tests/endpoints/initialize.ts +338 -240
  60. package/tests/hash-checks.test.ts +21 -26
  61. package/tests/indigo-test-helpers.ts +55 -1
  62. package/tests/initialize.test.ts +5 -10
  63. package/tests/interest-calculations.test.ts +18 -18
  64. package/tests/interest-oracle.test.ts +18 -20
  65. package/tests/lrp.test.ts +65 -191
  66. package/tests/queries/governance-queries.ts +16 -19
  67. package/tests/queries/iasset-queries.ts +23 -46
  68. package/tests/queries/interest-oracle-queries.ts +6 -3
  69. package/tests/queries/lrp-queries.ts +2 -2
  70. package/tests/queries/price-oracle-queries.ts +22 -5
  71. package/tests/queries/stability-pool-queries.ts +8 -10
  72. package/tests/queries/staking-queries.ts +19 -28
  73. package/tests/stability-pool.test.ts +71 -186
  74. package/tests/staking.test.ts +23 -30
  75. package/tests/test-helpers.ts +2 -11
  76. package/tsconfig.json +1 -3
  77. package/vitest.config.ts +1 -1
  78. package/src/contracts/cdp/helpers.ts +0 -167
  79. package/src/contracts/cdp/scripts.ts +0 -33
  80. package/src/contracts/cdp/transactions.ts +0 -1310
  81. package/src/contracts/cdp/types.ts +0 -161
  82. package/src/contracts/cdp-creator/scripts.ts +0 -39
  83. package/src/contracts/collector/scripts.ts +0 -32
  84. package/src/contracts/collector/transactions.ts +0 -44
  85. package/src/contracts/execute/scripts.ts +0 -48
  86. package/src/contracts/execute/types.ts +0 -57
  87. package/src/contracts/gov/helpers.ts +0 -157
  88. package/src/contracts/gov/scripts.ts +0 -34
  89. package/src/contracts/gov/transactions.ts +0 -1224
  90. package/src/contracts/gov/types-new.ts +0 -115
  91. package/src/contracts/gov/types.ts +0 -89
  92. package/src/contracts/interest-oracle/scripts.ts +0 -18
  93. package/src/contracts/interest-oracle/transactions.ts +0 -149
  94. package/src/contracts/lrp/scripts.ts +0 -27
  95. package/src/contracts/poll/helpers.ts +0 -55
  96. package/src/contracts/poll/scripts.ts +0 -72
  97. package/src/contracts/poll/types-poll-manager.ts +0 -38
  98. package/src/contracts/poll/types-poll-shard.ts +0 -38
  99. package/src/contracts/poll/types-poll.ts +0 -88
  100. package/src/contracts/price-oracle/transactions.ts +0 -112
  101. package/src/contracts/stability-pool/scripts.ts +0 -46
  102. package/src/contracts/stability-pool/transactions.ts +0 -660
  103. package/src/contracts/stability-pool/types-new.ts +0 -208
  104. package/src/contracts/stability-pool/types.ts +0 -42
  105. package/src/contracts/staking/helpers.ts +0 -116
  106. package/src/contracts/staking/scripts.ts +0 -41
  107. package/src/contracts/staking/transactions.ts +0 -268
  108. package/src/contracts/staking/types-new.ts +0 -81
  109. package/src/contracts/staking/types.ts +0 -41
  110. package/src/contracts/treasury/scripts.ts +0 -37
  111. package/src/contracts/treasury/transactions.ts +0 -44
  112. package/src/contracts/treasury/types.ts +0 -55
  113. package/src/contracts/version-registry/scripts.ts +0 -29
  114. package/src/contracts/version-registry/types-new.ts +0 -19
  115. package/src/contracts/vesting/helpers.ts +0 -267
  116. package/src/types/evolution-schema-options.ts +0 -16
  117. package/src/utils/bigint-utils.ts +0 -7
  118. package/src/utils/time-helpers.ts +0 -4
  119. package/src/validators/lrp-validator.ts +0 -7
  120. package/src/validators/poll-manager-validator.ts +0 -7
  121. package/src/validators/version-registry-validator.ts +0 -7
  122. package/tests/cdp.test.ts +0 -1565
  123. package/tests/gov.test.ts +0 -1874
  124. package/tests/mock/assets-mock.ts +0 -59
  125. package/tests/queries/cdp-queries.ts +0 -144
  126. package/tests/queries/collector-queries.ts +0 -26
  127. package/tests/queries/execute-queries.ts +0 -46
  128. package/tests/queries/poll-queries.ts +0 -97
  129. package/tests/queries/treasury-queries.ts +0 -19
  130. package/tests/utils/asserts.ts +0 -13
  131. package/tests/utils/index.ts +0 -50
  132. /package/src/{utils → helpers}/indigo-helpers.ts +0 -0
  133. /package/src/{utils → helpers}/lucid-utils.ts +0 -0
  134. /package/src/{contracts/price-oracle/helpers.ts → helpers/price-oracle-helpers.ts} +0 -0
  135. /package/src/{contracts/one-shot/types.ts → types/one-shot.ts} +0 -0
@@ -1,167 +0,0 @@
1
- import Decimal from 'decimal.js';
2
- import {
3
- OCD_DECIMAL_UNIT,
4
- ocdAdd,
5
- ocdCeil,
6
- ocdDiv,
7
- ocdMul,
8
- ocdNegate,
9
- ocdSub,
10
- OnChainDecimal,
11
- } from '../../types/on-chain-decimal';
12
- import { Network, slotToUnixTime, UTxO } from '@lucid-evolution/lucid';
13
- import { CDPContent } from './types';
14
- import { calculateAccruedInterest } from '../interest-oracle/helpers';
15
- import { match, P } from 'ts-pattern';
16
- import { InterestOracleDatum } from '../interest-oracle/types';
17
- import { lovelacesAmt } from '../../utils/value-helpers';
18
- import { calculateFeeFromPercentage } from '../../utils/indigo-helpers';
19
-
20
- /**
21
- * This is mostly for debugging purposes.
22
- */
23
- export function cdpCollateralRatioPercentage(
24
- currentSlot: number,
25
- iassetPrice: OnChainDecimal,
26
- cdpUtxo: UTxO,
27
- cdpContent: CDPContent,
28
- interestOracleDatum: InterestOracleDatum,
29
- network: Network,
30
- ): number {
31
- const currentTime = BigInt(slotToUnixTime(network, currentSlot));
32
-
33
- return match(cdpContent.cdpFees)
34
- .with({ ActiveCDPInterestTracking: P.select() }, (interest) => {
35
- const interestAdaAmt = ocdMul(
36
- {
37
- getOnChainInt: calculateAccruedInterest(
38
- currentTime,
39
- interest.unitaryInterestSnapshot,
40
- cdpContent.mintedAmt,
41
- interest.lastSettled,
42
- interestOracleDatum,
43
- ),
44
- },
45
- iassetPrice,
46
- ).getOnChainInt;
47
-
48
- const collateral = lovelacesAmt(cdpUtxo.assets) - interestAdaAmt;
49
-
50
- return (
51
- Number(
52
- ocdDiv(
53
- { getOnChainInt: collateral * 100n },
54
- ocdMul({ getOnChainInt: cdpContent.mintedAmt }, iassetPrice),
55
- ).getOnChainInt,
56
- ) / Number(OCD_DECIMAL_UNIT)
57
- );
58
- })
59
- .with({ FrozenCDPAccumulatedFees: P.any }, () => 0)
60
- .exhaustive();
61
- }
62
-
63
- /**
64
- * The amount of iassets to redeem to reach the RMR.
65
- */
66
- export function calculateIAssetRedemptionAmt(
67
- collateralAmt: bigint,
68
- mintedAmt: bigint,
69
- price: OnChainDecimal,
70
- rmr: OnChainDecimal,
71
- ): bigint {
72
- const hundred: OnChainDecimal = {
73
- getOnChainInt: 100n * OCD_DECIMAL_UNIT,
74
- };
75
-
76
- const res = ocdAdd(
77
- ocdNegate(
78
- ocdDiv({ getOnChainInt: collateralAmt * OCD_DECIMAL_UNIT }, price),
79
- ),
80
- ocdDiv(
81
- ocdMul(rmr, { getOnChainInt: mintedAmt * OCD_DECIMAL_UNIT }),
82
- hundred,
83
- ),
84
- );
85
-
86
- return ocdCeil(
87
- ocdDiv(
88
- res,
89
- ocdSub(ocdDiv(rmr, hundred), {
90
- getOnChainInt: OCD_DECIMAL_UNIT,
91
- }),
92
- ),
93
- );
94
- }
95
-
96
- /**
97
- * Calculates the allowable redemption amount so the min collateral constraint still holds.
98
- * It caps the redemption amount to still satisfy the min collateral.
99
- *
100
- * Returns uncapped max iassets /\ capped max iassets
101
- *
102
- * The derived calculation comes from the following equation where:
103
- * c - collateral
104
- * m - min collateral
105
- * r - reimburstment ratio
106
- * x - redemption amount
107
- *
108
- * `c - x + r * x = m`
109
- * `-x + r * x = m - c`
110
- * `x * (r - 1) = m - c`
111
- * `x = (m - c) / r - 1`
112
- */
113
- export function calculateMinCollateralCappedIAssetRedemptionAmt(
114
- collateralAmt: bigint,
115
- mintedAmt: bigint,
116
- price: OnChainDecimal,
117
- rmr: OnChainDecimal,
118
- reimburstmentPercentage: OnChainDecimal,
119
- minCollateral: bigint,
120
- ): {
121
- uncappedIAssetRedemptionAmt: bigint;
122
- cappedIAssetRedemptionAmt: bigint;
123
- } {
124
- const uncappedMaxIAssetRedemptionAmt = calculateIAssetRedemptionAmt(
125
- collateralAmt,
126
- mintedAmt,
127
- price,
128
- rmr,
129
- );
130
- const uncappedMaxRedemptionLovelacesAmt = ocdMul(price, {
131
- getOnChainInt: uncappedMaxIAssetRedemptionAmt,
132
- }).getOnChainInt;
133
-
134
- const maxReimburstment = calculateFeeFromPercentage(
135
- reimburstmentPercentage,
136
- uncappedMaxRedemptionLovelacesAmt,
137
- );
138
-
139
- const doesMaxBreakMinCollateral =
140
- collateralAmt - uncappedMaxRedemptionLovelacesAmt + maxReimburstment <
141
- minCollateral;
142
-
143
- if (!doesMaxBreakMinCollateral) {
144
- return {
145
- uncappedIAssetRedemptionAmt: uncappedMaxIAssetRedemptionAmt,
146
- cappedIAssetRedemptionAmt: uncappedMaxIAssetRedemptionAmt,
147
- };
148
- // already below min collateral
149
- } else if (collateralAmt <= minCollateral) {
150
- return {
151
- uncappedIAssetRedemptionAmt: uncappedMaxIAssetRedemptionAmt,
152
- cappedIAssetRedemptionAmt: 0n,
153
- };
154
- } else {
155
- const resLovelaces = Decimal(
156
- (minCollateral - collateralAmt) * 100_000_000n,
157
- ).div(reimburstmentPercentage.getOnChainInt - 100_000_000n);
158
- const resIAsset = resLovelaces.div(
159
- Decimal(price.getOnChainInt).div(OCD_DECIMAL_UNIT),
160
- );
161
-
162
- return {
163
- uncappedIAssetRedemptionAmt: uncappedMaxIAssetRedemptionAmt,
164
- cappedIAssetRedemptionAmt: BigInt(resIAsset.floor().toNumber()),
165
- };
166
- }
167
- }
@@ -1,33 +0,0 @@
1
- import { applyParamsToScript, SpendingValidator } from '@lucid-evolution/lucid';
2
- import { CdpParamsSP, fromSystemParamsAsset } from '../../types/system-params';
3
- import { castCdpParams } from './types';
4
- import { _cdpValidator } from '../../validators/cdp-validator';
5
-
6
- export const mkCdpValidatorFromSP = (
7
- params: CdpParamsSP,
8
- ): SpendingValidator => {
9
- return {
10
- type: 'PlutusV2',
11
- script: applyParamsToScript(_cdpValidator.cborHex, [
12
- castCdpParams({
13
- cdp_auth_token: fromSystemParamsAsset(params.cdpAuthToken),
14
- cdp_asset_symbol: params.cdpAssetSymbol.unCurrencySymbol,
15
- iasset_auth_token: fromSystemParamsAsset(params.iAssetAuthToken),
16
- stability_pool_auth_token: fromSystemParamsAsset(
17
- params.stabilityPoolAuthToken,
18
- ),
19
- version_record_token: fromSystemParamsAsset(params.versionRecordToken),
20
- upgrade_token: fromSystemParamsAsset(params.upgradeToken),
21
- collector_val_hash: params.collectorValHash,
22
- sp_val_hash: params.spValHash,
23
- gov_nft: fromSystemParamsAsset(params.govNFT),
24
- min_collateral_in_lovelace: BigInt(params.minCollateralInLovelace),
25
- partial_redemption_extra_fee_lovelace: BigInt(
26
- params.partialRedemptionExtraFeeLovelace,
27
- ),
28
- bias_time: BigInt(params.biasTime),
29
- treasury_val_hash: params.treasuryValHash,
30
- }),
31
- ]),
32
- };
33
- };