@indigo-labs/indigo-sdk 0.2.42 → 0.3.1

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 (202) hide show
  1. package/.github/workflows/ci.yml +4 -2
  2. package/README.md +88 -15
  3. package/dist/index.d.mts +3012 -2194
  4. package/dist/index.d.ts +3012 -2194
  5. package/dist/index.js +9849 -6198
  6. package/dist/index.mjs +8733 -4933
  7. package/package.json +14 -3
  8. package/src/contracts/cdp/helpers.ts +68 -72
  9. package/src/contracts/cdp/scripts.ts +50 -13
  10. package/src/contracts/cdp/transactions.ts +841 -546
  11. package/src/contracts/cdp/types-new.ts +256 -0
  12. package/src/contracts/cdp/types.ts +26 -144
  13. package/src/contracts/cdp-creator/scripts.ts +15 -9
  14. package/src/contracts/cdp-creator/types-new.ts +50 -0
  15. package/src/contracts/cdp-creator/types.ts +5 -31
  16. package/src/contracts/collector/scripts.ts +1 -1
  17. package/src/contracts/collector/transactions.ts +23 -13
  18. package/src/contracts/collector/types-new.ts +17 -0
  19. package/src/contracts/execute/scripts.ts +19 -10
  20. package/src/contracts/execute/types-new.ts +44 -0
  21. package/src/contracts/execute/types.ts +5 -38
  22. package/src/contracts/gov/helpers.ts +187 -51
  23. package/src/contracts/gov/scripts.ts +17 -10
  24. package/src/contracts/gov/transactions.ts +599 -271
  25. package/src/contracts/gov/types-new.ts +253 -100
  26. package/src/contracts/gov/types.ts +4 -71
  27. package/src/contracts/iasset/helpers.ts +172 -0
  28. package/src/contracts/iasset/scripts.ts +38 -0
  29. package/src/contracts/iasset/types.ts +154 -0
  30. package/src/contracts/initialize/actions.ts +768 -0
  31. package/src/contracts/initialize/helpers.ts +611 -36
  32. package/src/contracts/initialize/types.ts +102 -28
  33. package/src/contracts/interest-collection/helpers.ts +19 -0
  34. package/src/contracts/interest-collection/scripts.ts +44 -0
  35. package/src/contracts/interest-collection/transactions.ts +436 -0
  36. package/src/contracts/interest-collection/types-new.ts +50 -0
  37. package/src/contracts/interest-collection/types.ts +26 -0
  38. package/src/contracts/interest-oracle/helpers.ts +2 -30
  39. package/src/contracts/interest-oracle/scripts.ts +1 -1
  40. package/src/contracts/interest-oracle/transactions.ts +21 -16
  41. package/src/contracts/interest-oracle/types-new.ts +32 -0
  42. package/src/contracts/interest-oracle/types.ts +1 -40
  43. package/src/contracts/one-shot/transactions.ts +1 -2
  44. package/src/contracts/poll/helpers.ts +5 -23
  45. package/src/contracts/poll/scripts.ts +12 -13
  46. package/src/contracts/poll/types-poll-manager.ts +1 -19
  47. package/src/contracts/poll/types-poll-new.ts +170 -0
  48. package/src/contracts/poll/types-poll-shard.ts +2 -24
  49. package/src/contracts/price-oracle/helpers.ts +1 -4
  50. package/src/contracts/price-oracle/scripts.ts +3 -8
  51. package/src/contracts/price-oracle/transactions.ts +32 -25
  52. package/src/contracts/price-oracle/types-new.ts +50 -0
  53. package/src/contracts/price-oracle/types.ts +2 -36
  54. package/src/contracts/pyth-feed/helpers.ts +58 -0
  55. package/src/contracts/pyth-feed/scripts.ts +15 -0
  56. package/src/contracts/pyth-feed/types.ts +181 -0
  57. package/src/contracts/rob/helpers.ts +405 -0
  58. package/src/contracts/rob/scripts.ts +35 -0
  59. package/src/contracts/rob/transactions.ts +410 -0
  60. package/src/contracts/rob/types-new.ts +128 -0
  61. package/src/contracts/rob/types.ts +16 -0
  62. package/src/contracts/rob-leverage/helpers.ts +424 -0
  63. package/src/contracts/{leverage → rob-leverage}/transactions.ts +68 -48
  64. package/src/contracts/stability-pool/helpers.ts +714 -230
  65. package/src/contracts/stability-pool/scripts.ts +20 -15
  66. package/src/contracts/stability-pool/transactions.ts +628 -496
  67. package/src/contracts/stability-pool/types-new.ts +247 -100
  68. package/src/contracts/stability-pool/types.ts +5 -22
  69. package/src/contracts/stableswap/helpers.ts +22 -0
  70. package/src/contracts/stableswap/scripts.ts +37 -0
  71. package/src/contracts/stableswap/transactions.ts +647 -0
  72. package/src/contracts/stableswap/types-new.ts +131 -0
  73. package/src/contracts/stableswap/types.ts +17 -0
  74. package/src/contracts/staking/helpers.ts +49 -34
  75. package/src/contracts/staking/scripts.ts +1 -1
  76. package/src/contracts/staking/transactions.ts +85 -130
  77. package/src/contracts/staking/types-new.ts +60 -28
  78. package/src/contracts/staking/types.ts +1 -28
  79. package/src/contracts/treasury/helpers.ts +21 -0
  80. package/src/contracts/treasury/scripts.ts +16 -26
  81. package/src/contracts/treasury/transactions.ts +256 -27
  82. package/src/contracts/treasury/types-new.ts +69 -0
  83. package/src/contracts/treasury/types.ts +2 -43
  84. package/src/contracts/version-registry/scripts.ts +2 -2
  85. package/src/contracts/version-registry/types-new.ts +6 -7
  86. package/src/index.ts +37 -20
  87. package/src/scripts/auth-token-policy.ts +3 -2
  88. package/src/scripts/iasset-policy.ts +3 -2
  89. package/src/types/evolution-schema-options.ts +3 -3
  90. package/src/types/generic.ts +17 -89
  91. package/src/types/multisig.ts +48 -0
  92. package/src/types/on-chain-decimal.ts +14 -7
  93. package/src/types/rational.ts +61 -0
  94. package/src/types/system-params.ts +237 -41
  95. package/src/utils/array-utils.ts +70 -1
  96. package/src/utils/bigint-utils.ts +12 -0
  97. package/src/utils/indigo-helpers.ts +8 -10
  98. package/src/utils/lucid-utils.ts +47 -40
  99. package/src/utils/oracle-helpers.ts +62 -0
  100. package/src/utils/pyth/decode.ts +223 -0
  101. package/src/utils/pyth/encode.ts +262 -0
  102. package/src/utils/pyth/index.ts +14 -0
  103. package/src/utils/pyth/types.ts +87 -0
  104. package/src/validators/always-succeed-validator.ts +6 -0
  105. package/src/validators/cdp-creator-validator.ts +2 -2
  106. package/src/validators/cdp-redeem-validator.ts +7 -0
  107. package/src/validators/cdp-validator.ts +2 -2
  108. package/src/validators/collector-validator.ts +2 -2
  109. package/src/validators/execute-validator.ts +2 -2
  110. package/src/validators/governance-validator.ts +2 -2
  111. package/src/validators/iasset-validator.ts +7 -0
  112. package/src/validators/interest-collection-validator.ts +7 -0
  113. package/src/validators/interest-oracle-validator.ts +2 -2
  114. package/src/validators/poll-manager-validator.ts +2 -2
  115. package/src/validators/poll-shard-validator.ts +2 -2
  116. package/src/validators/price-oracle-validator.ts +7 -0
  117. package/src/validators/pyth-feed-validator.ts +7 -0
  118. package/src/validators/rob-validator.ts +7 -0
  119. package/src/validators/stability-pool-validator.ts +2 -2
  120. package/src/validators/stableswap-validator.ts +7 -0
  121. package/src/validators/staking-validator.ts +2 -2
  122. package/src/validators/treasury-validator.ts +2 -2
  123. package/src/validators/version-record-policy.ts +2 -2
  124. package/src/validators/version-registry-validator.ts +2 -2
  125. package/tests/always-succeed/script.ts +7 -0
  126. package/tests/bigint-utils.test.ts +41 -0
  127. package/tests/cdp/actions.ts +610 -0
  128. package/tests/cdp/cdp-helpers.ts +55 -0
  129. package/tests/cdp/cdp-queries.ts +440 -0
  130. package/tests/cdp/cdp.test.ts +6087 -0
  131. package/tests/cdp/transactions-mutated.ts +1729 -0
  132. package/tests/data/system-params.json +177 -34
  133. package/tests/datums.test.ts +209 -210
  134. package/tests/endpoints/initialize.ts +68 -0
  135. package/tests/endpoints/interest-collector.ts +37 -0
  136. package/tests/endpoints/treasury.ts +70 -0
  137. package/tests/gov/actions.ts +406 -0
  138. package/tests/gov/gov.test.ts +4450 -0
  139. package/tests/{queries → gov}/governance-queries.ts +6 -3
  140. package/tests/hash-checks.test.ts +38 -11
  141. package/tests/indigo-test-helpers.ts +100 -0
  142. package/tests/initialize.test.ts +61 -9
  143. package/tests/interest-collection/interest-collection.test.ts +892 -0
  144. package/tests/interest-collection/interest-collector-queries.ts +49 -0
  145. package/tests/interest-collection/transactions-mutated.ts +260 -0
  146. package/tests/interest-oracle.test.ts +43 -35
  147. package/tests/mock/assets-mock.ts +234 -23
  148. package/tests/mock/protocol-params-mock.ts +21 -0
  149. package/tests/price-oracle/actions.ts +163 -0
  150. package/tests/price-oracle/price-oracle-queries.ts +12 -0
  151. package/tests/price-oracle/price-oracle.test.ts +240 -0
  152. package/tests/price-oracle/transactions-mutated.ts +62 -0
  153. package/tests/pyth/endpoints.ts +96 -0
  154. package/tests/pyth/helpers.ts +37 -0
  155. package/tests/pyth/pyth-encoding.test.ts +376 -0
  156. package/tests/pyth/pyth-indigo.test.ts +509 -0
  157. package/tests/pyth/pyth.test.ts +300 -0
  158. package/tests/queries/execute-queries.ts +6 -5
  159. package/tests/queries/iasset-queries.ts +175 -5
  160. package/tests/queries/interest-oracle-queries.ts +4 -2
  161. package/tests/queries/poll-queries.ts +8 -9
  162. package/tests/queries/stability-pool-queries.ts +95 -48
  163. package/tests/queries/staking-queries.ts +4 -2
  164. package/tests/queries/treasury-queries.ts +80 -5
  165. package/tests/rob/actions.ts +58 -0
  166. package/tests/{lrp-leverage.test.ts → rob/rob-leverage.test.ts} +393 -296
  167. package/tests/rob/rob-queries.ts +95 -0
  168. package/tests/rob/rob.test.ts +3762 -0
  169. package/tests/rob/transactions-mutated.ts +853 -0
  170. package/tests/script-size.test.ts +240 -0
  171. package/tests/setup.ts +135 -0
  172. package/tests/stability-pool/actions.ts +220 -0
  173. package/tests/stability-pool.test.ts +6121 -667
  174. package/tests/stableswap/stableswap-actions.ts +84 -0
  175. package/tests/stableswap/stableswap-queries.ts +89 -0
  176. package/tests/stableswap/stableswap.test.ts +3891 -0
  177. package/tests/stableswap/transactions-mutated.ts +348 -0
  178. package/tests/staking.test.ts +82 -99
  179. package/tests/test-helpers.ts +58 -11
  180. package/tests/treasury.test.ts +242 -0
  181. package/tests/utils/asserts.ts +74 -0
  182. package/tests/utils/benchmark-utils.ts +81 -0
  183. package/tests/utils/index.ts +122 -4
  184. package/tsconfig.json +9 -1
  185. package/vitest.config.ts +3 -1
  186. package/src/contracts/collector/types.ts +0 -16
  187. package/src/contracts/initialize/transactions.ts +0 -891
  188. package/src/contracts/leverage/helpers.ts +0 -424
  189. package/src/contracts/lrp/helpers.ts +0 -294
  190. package/src/contracts/lrp/scripts.ts +0 -27
  191. package/src/contracts/lrp/transactions.ts +0 -250
  192. package/src/contracts/lrp/types.ts +0 -131
  193. package/src/contracts/poll/types-poll.ts +0 -88
  194. package/src/contracts/vesting/helpers.ts +0 -218
  195. package/src/utils/value-helpers.ts +0 -37
  196. package/src/validators/lrp-validator.ts +0 -7
  197. package/tests/cdp.test.ts +0 -1528
  198. package/tests/gov.test.ts +0 -2011
  199. package/tests/lrp.test.ts +0 -673
  200. package/tests/queries/cdp-queries.ts +0 -220
  201. package/tests/queries/lrp-queries.ts +0 -76
  202. package/tests/queries/price-oracle-queries.ts +0 -10
@@ -1,21 +1,31 @@
1
- import { Core as EvoCore } from '@evolution-sdk/evolution';
1
+ import { TSchema, Data } from '@evolution-sdk/evolution';
2
2
  import { match, P } from 'ts-pattern';
3
- import { AddressSchema } from '@3rd-eye-labs/cardano-offchain-common';
3
+ import { option as O, function as F } from 'fp-ts';
4
+
4
5
  import { DEFAULT_SCHEMA_OPTIONS } from '../../types/evolution-schema-options';
6
+ import {
7
+ AddressSchema,
8
+ AssetClassSchema,
9
+ OutputReferenceSchema,
10
+ } from '@3rd-eye-labs/cardano-offchain-common';
11
+ import {
12
+ divideOnChainCompatible,
13
+ zeroNegatives,
14
+ } from '../../utils/bigint-utils';
5
15
 
6
- export const SPIntegerSchema = EvoCore.TSchema.Struct({
7
- value: EvoCore.TSchema.Integer,
16
+ export const SPIntegerSchema = TSchema.Struct({
17
+ value: TSchema.Integer,
8
18
  });
9
19
 
10
20
  export type SPInteger = typeof SPIntegerSchema.Type;
11
21
 
12
- const AccountActionSchema = EvoCore.TSchema.Union(
13
- EvoCore.TSchema.Literal('Create', { flatInUnion: true }),
14
- EvoCore.TSchema.Struct(
22
+ const AccountActionSchema = TSchema.Union(
23
+ TSchema.Literal('Create', { flatInUnion: true }),
24
+ TSchema.Struct(
15
25
  {
16
- Adjust: EvoCore.TSchema.Struct(
26
+ Adjust: TSchema.Struct(
17
27
  {
18
- amount: EvoCore.TSchema.Integer,
28
+ amount: TSchema.Integer,
19
29
  outputAddress: AddressSchema,
20
30
  },
21
31
  { flatFields: true },
@@ -23,10 +33,10 @@ const AccountActionSchema = EvoCore.TSchema.Union(
23
33
  },
24
34
  { flatInUnion: true },
25
35
  ),
26
- EvoCore.TSchema.Struct(
36
+ TSchema.Struct(
27
37
  {
28
- Close: EvoCore.TSchema.Struct(
29
- { outputAddress: AddressSchema },
38
+ Close: TSchema.Struct(
39
+ { outputAddress: AddressSchema, maxTxFee: TSchema.Integer },
30
40
  { flatFields: true },
31
41
  ),
32
42
  },
@@ -36,97 +46,194 @@ const AccountActionSchema = EvoCore.TSchema.Union(
36
46
 
37
47
  export type AccountAction = typeof AccountActionSchema.Type;
38
48
 
39
- export const EpochToScaleToSumSchema = EvoCore.TSchema.Map(
40
- EvoCore.TSchema.Struct({
41
- epoch: EvoCore.TSchema.Integer,
42
- scale: EvoCore.TSchema.Integer,
43
- }),
44
- SPIntegerSchema,
45
- );
49
+ const SumSnapshotSchema = TSchema.Struct({
50
+ sumVal: SPIntegerSchema,
51
+ isLastInEpoch: TSchema.Boolean,
52
+ isFirstSnapshot: TSchema.Boolean,
53
+ });
54
+
55
+ export type SumSnapshot = typeof SumSnapshotSchema.Type;
46
56
 
47
- export type EpochToScaleToSum = typeof EpochToScaleToSumSchema.Type;
57
+ const EpochToScaleKeySchema = TSchema.Struct({
58
+ epoch: TSchema.Integer,
59
+ scale: TSchema.Integer,
60
+ });
61
+
62
+ export type EpochToScaleKey = typeof EpochToScaleKeySchema.Type;
63
+
64
+ const EpochToScaleToSumEntrySchema = TSchema.Tuple([
65
+ EpochToScaleKeySchema,
66
+ SumSnapshotSchema,
67
+ ]);
48
68
 
49
- const StabilityPoolSnapshotSchema = EvoCore.TSchema.Struct({
69
+ export type EpochToScaleToSumEntry = typeof EpochToScaleToSumEntrySchema.Type;
70
+
71
+ const StateSnapshotSchema = TSchema.Struct({
50
72
  productVal: SPIntegerSchema,
51
73
  depositVal: SPIntegerSchema,
52
- sumVal: SPIntegerSchema,
53
- epoch: EvoCore.TSchema.Integer,
54
- scale: EvoCore.TSchema.Integer,
74
+ epoch: TSchema.Integer,
75
+ scale: TSchema.Integer,
55
76
  });
77
+ export type StateSnapshot = typeof StateSnapshotSchema.Type;
56
78
 
57
- export type StabilityPoolSnapshot = typeof StabilityPoolSnapshotSchema.Type;
79
+ const AssetSnapshotSchema = TSchema.Struct({
80
+ currentSumVal: SPIntegerSchema,
81
+ epoch2scale2sum: TSchema.Array(EpochToScaleToSumEntrySchema),
82
+ });
83
+ export type AssetSnapshot = typeof AssetSnapshotSchema.Type;
84
+
85
+ const AssetStateSchema = TSchema.Tuple([AssetClassSchema, AssetSnapshotSchema]);
86
+ export type AssetState = typeof AssetStateSchema.Type;
58
87
 
59
- export const StabilityPoolContentSchema = EvoCore.TSchema.Struct({
60
- asset: EvoCore.TSchema.ByteArray,
61
- poolSnapshot: StabilityPoolSnapshotSchema,
62
- epochToScaleToSum: EpochToScaleToSumSchema,
88
+ export const StabilityPoolContentSchema = TSchema.Struct({
89
+ iasset: TSchema.ByteArray,
90
+ state: StateSnapshotSchema,
91
+ assetStates: TSchema.Array(AssetStateSchema),
63
92
  });
64
93
 
65
94
  export type StabilityPoolContent = typeof StabilityPoolContentSchema.Type;
66
95
 
67
- export const AccountContentSchema = EvoCore.TSchema.Struct({
68
- owner: EvoCore.TSchema.ByteArray,
69
- asset: EvoCore.TSchema.ByteArray,
70
- accountSnapshot: StabilityPoolSnapshotSchema,
71
- request: EvoCore.TSchema.NullOr(AccountActionSchema),
96
+ export const AccountContentSchema = TSchema.Struct({
97
+ owner: TSchema.ByteArray,
98
+ iasset: TSchema.ByteArray,
99
+ state: StateSnapshotSchema,
100
+ assetSums: TSchema.Array(TSchema.Tuple([AssetClassSchema, SPIntegerSchema])),
101
+ request: TSchema.NullOr(AccountActionSchema),
102
+ lastRequestProcessingTime: TSchema.Integer,
72
103
  });
73
104
 
74
105
  export type AccountContent = typeof AccountContentSchema.Type;
75
106
 
76
- export const SnapshotEpochToScaleToSumContentSchema = EvoCore.TSchema.Struct({
77
- snapshot: EpochToScaleToSumSchema,
78
- asset: EvoCore.TSchema.ByteArray,
107
+ export const SnapshotEpochToScaleToSumContentSchema = TSchema.Struct({
108
+ snapshot: TSchema.Array(EpochToScaleToSumEntrySchema),
109
+ iasset: TSchema.ByteArray,
110
+ collateralAsset: AssetClassSchema,
79
111
  });
80
112
 
81
113
  export type SnapshotEpochToScaleToSumContent =
82
114
  typeof SnapshotEpochToScaleToSumContentSchema.Type;
83
115
 
84
- export const StabilityPoolDatumSchema = EvoCore.TSchema.Union(
85
- EvoCore.TSchema.Struct(
116
+ export const StabilityPoolDatumSchema = TSchema.Union(
117
+ TSchema.Struct(
86
118
  { StabilityPool: StabilityPoolContentSchema },
87
119
  { flatInUnion: true },
88
120
  ),
89
- EvoCore.TSchema.Struct(
90
- { Account: AccountContentSchema },
121
+ TSchema.Struct({ Account: AccountContentSchema }, { flatInUnion: true }),
122
+ TSchema.Struct(
123
+ { SnapshotEpochToScaleToSum: SnapshotEpochToScaleToSumContentSchema },
91
124
  { flatInUnion: true },
92
125
  ),
93
- EvoCore.TSchema.Struct(
94
- { SnapshotEpochToScaleToSum: SnapshotEpochToScaleToSumContentSchema },
126
+ );
127
+
128
+ const E2S2SIndexSchema = TSchema.Union(
129
+ TSchema.Struct(
130
+ { StabilityPoolListIdx: TSchema.Integer },
95
131
  { flatInUnion: true },
96
132
  ),
133
+ TSchema.Struct(
134
+ {
135
+ RefInputIdx: TSchema.Struct(
136
+ {
137
+ refInputIdx: TSchema.Integer,
138
+ snapshotListIdx: TSchema.Integer,
139
+ },
140
+ { flatFields: true },
141
+ ),
142
+ },
143
+ { flatInUnion: true },
144
+ ),
145
+ );
146
+
147
+ export type E2S2SIndex = typeof E2S2SIndexSchema.Type;
148
+
149
+ const E2S2SIndicesPerAssetSchema = TSchema.Array(
150
+ TSchema.Tuple([E2S2SIndexSchema, TSchema.NullOr(E2S2SIndexSchema)]),
151
+ );
152
+
153
+ export type E2S2SIndicesPerAsset = typeof E2S2SIndicesPerAssetSchema.Type;
154
+
155
+ const ProcessRequestAccountContentSchema = TSchema.Struct(
156
+ {
157
+ poolInputIdx: TSchema.Integer,
158
+ accountInputIdx: TSchema.Integer,
159
+ e2s2sIdxs: E2S2SIndicesPerAssetSchema,
160
+ currentTime: TSchema.Integer,
161
+ },
162
+ { flatFields: true },
97
163
  );
98
164
 
99
- export const StabilityPoolRedeemerSchema = EvoCore.TSchema.Union(
100
- EvoCore.TSchema.Struct(
101
- { RequestAction: AccountActionSchema },
165
+ export type ProcessRequestAccountContent =
166
+ typeof ProcessRequestAccountContentSchema.Type;
167
+
168
+ export const StabilityPoolRedeemerSchema = TSchema.Union(
169
+ TSchema.Struct({ RequestAction: AccountActionSchema }, { flatInUnion: true }),
170
+ TSchema.Struct(
171
+ {
172
+ ProcessRequestPool: TSchema.Struct(
173
+ {
174
+ poolInputIdx: TSchema.Integer,
175
+ accountInputIdx: TSchema.Integer,
176
+ },
177
+ { flatFields: true },
178
+ ),
179
+ },
102
180
  { flatInUnion: true },
103
181
  ),
104
- EvoCore.TSchema.Struct(
182
+ TSchema.Struct(
105
183
  {
106
- ProcessRequest: EvoCore.TSchema.Struct({
107
- txHash: EvoCore.TSchema.Struct({ hash: EvoCore.TSchema.ByteArray }),
108
- outputIndex: EvoCore.TSchema.Integer,
109
- }),
184
+ ProcessRequestAccount: ProcessRequestAccountContentSchema,
110
185
  },
111
186
  { flatInUnion: true },
112
187
  ),
113
- EvoCore.TSchema.Literal('AnnulRequest', { flatInUnion: true }),
114
- EvoCore.TSchema.Literal('LiquidateCDP', { flatInUnion: true }),
115
- EvoCore.TSchema.Literal('RecordEpochToScaleToSum', { flatInUnion: true }),
116
- EvoCore.TSchema.Literal('UpgradeVersion', { flatInUnion: true }),
188
+ TSchema.Literal('AnnulRequest', { flatInUnion: true }),
189
+ TSchema.Struct(
190
+ {
191
+ LiquidateCDP: TSchema.Struct(
192
+ {
193
+ cdpIdx: TSchema.Integer,
194
+ },
195
+ { flatFields: true },
196
+ ),
197
+ },
198
+ { flatInUnion: true },
199
+ ),
200
+ TSchema.Literal('RecordEpochToScaleToSum', { flatInUnion: true }),
201
+ TSchema.Literal('UpgradeVersion', { flatInUnion: true }),
117
202
  );
118
203
 
119
204
  export type StabilityPoolRedeemer = typeof StabilityPoolRedeemerSchema.Type;
120
205
 
206
+ const ActionReturnDatumSchema = TSchema.Union(
207
+ TSchema.Struct(
208
+ {
209
+ IndigoStabilityPoolAccountAdjustment: OutputReferenceSchema,
210
+ },
211
+ { flatInUnion: true },
212
+ ),
213
+ TSchema.Struct(
214
+ {
215
+ IndigoStabilityPoolAccountClosure: OutputReferenceSchema,
216
+ },
217
+ { flatInUnion: true },
218
+ ),
219
+ );
220
+
221
+ export type ActionReturnDatum = typeof ActionReturnDatumSchema.Type;
222
+
223
+ export function serialiseActionReturnDatum(d: ActionReturnDatum): string {
224
+ return Data.withSchema(
225
+ ActionReturnDatumSchema,
226
+ DEFAULT_SCHEMA_OPTIONS,
227
+ ).toCBORHex(d);
228
+ }
229
+
121
230
  export function serialiseStabilityPoolRedeemer(
122
231
  r: StabilityPoolRedeemer,
123
232
  ): string {
124
- const rdmr = EvoCore.Data.withSchema(
233
+ return Data.withSchema(
125
234
  StabilityPoolRedeemerSchema,
126
235
  DEFAULT_SCHEMA_OPTIONS,
127
236
  ).toCBORHex(r);
128
-
129
- return rdmr;
130
237
  }
131
238
 
132
239
  export function serialiseStabilityPoolDatum(
@@ -136,63 +243,99 @@ export function serialiseStabilityPoolDatum(
136
243
  */
137
244
  useIndefiniteMaps: boolean = false,
138
245
  ): string {
139
- const datum = EvoCore.Data.withSchema(StabilityPoolDatumSchema, {
246
+ return Data.withSchema(StabilityPoolDatumSchema, {
140
247
  ...DEFAULT_SCHEMA_OPTIONS,
141
248
  useIndefiniteMaps: useIndefiniteMaps,
142
249
  }).toCBORHex(d);
250
+ }
251
+
252
+ export function parseStabilityPoolDatum(
253
+ datum: string,
254
+ ): O.Option<StabilityPoolContent> {
255
+ try {
256
+ return match(
257
+ Data.withSchema(
258
+ StabilityPoolDatumSchema,
259
+ DEFAULT_SCHEMA_OPTIONS,
260
+ ).fromCBORHex(datum),
261
+ )
262
+ .with({ StabilityPool: P.select() }, (res) => O.some(res))
263
+ .otherwise(() => O.none);
264
+ } catch (_) {
265
+ return O.none;
266
+ }
267
+ }
268
+ export function parseStabilityPoolDatumOrThrow(
269
+ datum: string,
270
+ ): StabilityPoolContent {
271
+ return F.pipe(
272
+ parseStabilityPoolDatum(datum),
273
+ O.match(() => {
274
+ throw new Error('Expected stability pool datum.');
275
+ }, F.identity),
276
+ );
277
+ }
143
278
 
144
- return datum;
145
- }
146
-
147
- export function parseStabilityPoolDatum(datum: string): StabilityPoolContent {
148
- return match(
149
- EvoCore.Data.withSchema(
150
- StabilityPoolDatumSchema,
151
- DEFAULT_SCHEMA_OPTIONS,
152
- ).fromCBORHex(datum),
153
- )
154
- .with({ StabilityPool: P.select() }, (res) => res)
155
- .otherwise(() => {
156
- throw new Error('Expected a Stability Pool datum.');
157
- });
158
- }
159
-
160
- export function parseAccountDatum(datum: string): AccountContent {
161
- return match(
162
- EvoCore.Data.withSchema(
163
- StabilityPoolDatumSchema,
164
- DEFAULT_SCHEMA_OPTIONS,
165
- ).fromCBORHex(datum),
166
- )
167
- .with({ Account: P.select() }, (res) => res)
168
- .otherwise(() => {
169
- throw new Error('Expected a Stability Pool datum.');
170
- });
279
+ export function parseAccountDatum(datum: string): O.Option<AccountContent> {
280
+ try {
281
+ return match(
282
+ Data.withSchema(
283
+ StabilityPoolDatumSchema,
284
+ DEFAULT_SCHEMA_OPTIONS,
285
+ ).fromCBORHex(datum),
286
+ )
287
+ .with({ Account: P.select() }, (res) => O.some(res))
288
+ .otherwise(() => O.none);
289
+ } catch (_) {
290
+ return O.none;
291
+ }
292
+ }
293
+ export function parseAccountDatumOrThrow(datum: string): AccountContent {
294
+ return F.pipe(
295
+ parseAccountDatum(datum),
296
+ O.match(() => {
297
+ throw new Error('Expected account datum.');
298
+ }, F.identity),
299
+ );
171
300
  }
301
+
172
302
  export function parseSnapshotEpochToScaleToSumDatum(
173
303
  datum: string,
304
+ ): O.Option<SnapshotEpochToScaleToSumContent> {
305
+ try {
306
+ return match(
307
+ Data.withSchema(
308
+ StabilityPoolDatumSchema,
309
+ DEFAULT_SCHEMA_OPTIONS,
310
+ ).fromCBORHex(datum),
311
+ )
312
+ .with({ SnapshotEpochToScaleToSum: P.select() }, (res) => O.some(res))
313
+ .otherwise(() => O.none);
314
+ } catch (_) {
315
+ return O.none;
316
+ }
317
+ }
318
+
319
+ export function parseSnapshotEpochToScaleToSumDatumOrThrow(
320
+ datum: string,
174
321
  ): SnapshotEpochToScaleToSumContent {
175
- return match(
176
- EvoCore.Data.withSchema(
177
- StabilityPoolDatumSchema,
178
- DEFAULT_SCHEMA_OPTIONS,
179
- ).fromCBORHex(datum),
180
- )
181
- .with({ SnapshotEpochToScaleToSum: P.select() }, (res) => res)
182
- .otherwise(() => {
183
- throw new Error('Expected a Stability Pool datum.');
184
- });
322
+ return F.pipe(
323
+ parseSnapshotEpochToScaleToSumDatum(datum),
324
+ O.match(() => {
325
+ throw new Error('Expected snapshot e2s2s datum.');
326
+ }, F.identity),
327
+ );
185
328
  }
186
329
 
187
330
  /** SP Integer */
188
- const spPrecision: bigint = 1000000000000000000n;
331
+ const spPrecision: bigint = 1_000_000_000_000_000_000n;
189
332
 
190
333
  export function mkSPInteger(value: bigint): SPInteger {
191
334
  return { value: value * spPrecision };
192
335
  }
193
336
 
194
337
  export function fromSPInteger(value: SPInteger): bigint {
195
- return value.value / spPrecision;
338
+ return divideOnChainCompatible(value.value, spPrecision);
196
339
  }
197
340
 
198
341
  export function spAdd(a: SPInteger, b: SPInteger): SPInteger {
@@ -204,9 +347,13 @@ export function spSub(a: SPInteger, b: SPInteger): SPInteger {
204
347
  }
205
348
 
206
349
  export function spMul(a: SPInteger, b: SPInteger): SPInteger {
207
- return { value: (a.value * b.value) / spPrecision };
350
+ return { value: divideOnChainCompatible(a.value * b.value, spPrecision) };
208
351
  }
209
352
 
210
353
  export function spDiv(a: SPInteger, b: SPInteger): SPInteger {
211
- return { value: (a.value * spPrecision) / b.value };
354
+ return { value: divideOnChainCompatible(a.value * spPrecision, b.value) };
355
+ }
356
+
357
+ export function spZeroNegatives(a: SPInteger): SPInteger {
358
+ return { value: zeroNegatives(a.value) };
212
359
  }
@@ -1,22 +1,5 @@
1
1
  import { Data } from '@lucid-evolution/lucid';
2
- import { AssetClassSchema, OutputReferenceSchema } from '../../types/generic';
3
-
4
- export const ActionReturnDatumSchema = Data.Enum([
5
- Data.Object({
6
- IndigoStabilityPoolAccountAdjustment: Data.Object({
7
- spent_account: OutputReferenceSchema,
8
- }),
9
- }),
10
- Data.Object({
11
- IndigoStabilityPoolAccountClosure: Data.Object({
12
- closed_account: OutputReferenceSchema,
13
- }),
14
- }),
15
- ]);
16
-
17
- export type ActionReturnDatum = Data.Static<typeof ActionReturnDatumSchema>;
18
- export const ActionReturnDatum =
19
- ActionReturnDatumSchema as unknown as ActionReturnDatum;
2
+ import { AssetClassSchema, StakeCredentialSchema } from '../../types/generic';
20
3
 
21
4
  /** SP Parameters */
22
5
  const StabilityPoolParamsSchema = Data.Object({
@@ -27,11 +10,11 @@ const StabilityPoolParamsSchema = Data.Object({
27
10
  cdpToken: AssetClassSchema,
28
11
  iAssetAuthToken: AssetClassSchema,
29
12
  versionRecordToken: AssetClassSchema,
30
- collectorValHash: Data.Bytes(),
31
- govNFT: AssetClassSchema,
13
+ iassetValHash: Data.Bytes(),
32
14
  accountCreateFeeLovelaces: Data.Integer(),
33
- accountAdjustmentFeeLovelaces: Data.Integer(),
34
- requestCollateralLovelaces: Data.Integer(),
15
+ accountProcessingCooldownMs: Data.Integer(),
16
+ accountProcessingBiasMs: Data.Integer(),
17
+ stakeCredential: Data.Nullable(StakeCredentialSchema),
35
18
  });
36
19
  export type StabilityPoolParams = Data.Static<typeof StabilityPoolParamsSchema>;
37
20
  export const StabilityPoolParams =
@@ -0,0 +1,22 @@
1
+ import { fromHex, fromText, OutRef } from '@lucid-evolution/lucid';
2
+ import { serialiseStableswapOutputDatum } from './types-new';
3
+ import { Data } from '@evolution-sdk/evolution';
4
+
5
+ export const BASE_MAX_EXECUTION_FEE = 1_000_000n;
6
+
7
+ export function createDestinationDatum(
8
+ datum: Data.Data | null,
9
+ outRef: OutRef,
10
+ ): string {
11
+ if (!datum) {
12
+ return serialiseStableswapOutputDatum([
13
+ fromHex(fromText('IndigoStableswap')),
14
+ {
15
+ txHash: fromHex(outRef.txHash),
16
+ outputIndex: BigInt(outRef.outputIndex),
17
+ },
18
+ ]);
19
+ }
20
+
21
+ return Data.toCBORHex(datum);
22
+ }
@@ -0,0 +1,37 @@
1
+ import { applyParamsToScript, SpendingValidator } from '@lucid-evolution/lucid';
2
+ import { castStableswapParams, StableswapParams } from './types';
3
+ import {
4
+ fromSystemParamsAssetLucid,
5
+ StableswapParamsSP,
6
+ } from '../../types/system-params';
7
+ import { _stableswapValidator } from '../../validators/stableswap-validator';
8
+
9
+ export const mkStableswapValidator = (
10
+ params: StableswapParams,
11
+ ): SpendingValidator => {
12
+ return {
13
+ type: 'PlutusV3',
14
+ script: applyParamsToScript(_stableswapValidator.cborHex, [
15
+ castStableswapParams(params),
16
+ ]),
17
+ };
18
+ };
19
+
20
+ export const mkStableswapValidatorFromSP = (
21
+ params: StableswapParamsSP,
22
+ ): SpendingValidator => {
23
+ return {
24
+ type: 'PlutusV3',
25
+ script: applyParamsToScript(_stableswapValidator.cborHex, [
26
+ castStableswapParams({
27
+ iassetSymbol: params.iassetSymbol.unCurrencySymbol,
28
+ cdpToken: fromSystemParamsAssetLucid(params.cdpToken),
29
+ versionRecordToken: fromSystemParamsAssetLucid(
30
+ params.versionRecordToken,
31
+ ),
32
+ cdpValHash: params.cdpValHash,
33
+ treasuryValHash: params.treasuryValHash,
34
+ }),
35
+ ]),
36
+ };
37
+ };