@indigo-labs/indigo-sdk 0.5.5 → 0.5.6

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 (204) hide show
  1. package/package.json +11 -1
  2. package/.claude/settings.local.json +0 -7
  3. package/.github/workflows/ci.yml +0 -66
  4. package/.husky/pre-commit +0 -1
  5. package/.nvmrc +0 -1
  6. package/.prettierignore +0 -1
  7. package/.prettierrc +0 -6
  8. package/eslint.config.mjs +0 -42
  9. package/scripts/bench.sh +0 -62
  10. package/scripts/run-repeat.sh +0 -22
  11. package/src/contracts/cdp/helpers.ts +0 -173
  12. package/src/contracts/cdp/scripts.ts +0 -70
  13. package/src/contracts/cdp/transactions.ts +0 -1584
  14. package/src/contracts/cdp/types-new.ts +0 -277
  15. package/src/contracts/cdp/types.ts +0 -43
  16. package/src/contracts/cdp-creator/queries.ts +0 -30
  17. package/src/contracts/cdp-creator/scripts.ts +0 -45
  18. package/src/contracts/cdp-creator/types-new.ts +0 -50
  19. package/src/contracts/cdp-creator/types.ts +0 -24
  20. package/src/contracts/collector/scripts.ts +0 -32
  21. package/src/contracts/collector/transactions.ts +0 -50
  22. package/src/contracts/collector/types-new.ts +0 -17
  23. package/src/contracts/execute/scripts.ts +0 -57
  24. package/src/contracts/execute/types-new.ts +0 -44
  25. package/src/contracts/execute/types.ts +0 -24
  26. package/src/contracts/gov/helpers.ts +0 -351
  27. package/src/contracts/gov/scripts.ts +0 -41
  28. package/src/contracts/gov/transactions.ts +0 -1607
  29. package/src/contracts/gov/types-new.ts +0 -268
  30. package/src/contracts/gov/types.ts +0 -22
  31. package/src/contracts/iasset/helpers.ts +0 -170
  32. package/src/contracts/iasset/queries.ts +0 -102
  33. package/src/contracts/iasset/scripts.ts +0 -38
  34. package/src/contracts/iasset/types.ts +0 -154
  35. package/src/contracts/initialize/actions.ts +0 -789
  36. package/src/contracts/initialize/helpers.ts +0 -616
  37. package/src/contracts/initialize/types.ts +0 -116
  38. package/src/contracts/interest-collection/helpers.ts +0 -19
  39. package/src/contracts/interest-collection/queries.ts +0 -66
  40. package/src/contracts/interest-collection/scripts.ts +0 -44
  41. package/src/contracts/interest-collection/transactions.ts +0 -433
  42. package/src/contracts/interest-collection/types-new.ts +0 -50
  43. package/src/contracts/interest-collection/types.ts +0 -26
  44. package/src/contracts/interest-oracle/helpers.ts +0 -61
  45. package/src/contracts/interest-oracle/scripts.ts +0 -18
  46. package/src/contracts/interest-oracle/transactions.ts +0 -151
  47. package/src/contracts/interest-oracle/types-new.ts +0 -32
  48. package/src/contracts/interest-oracle/types.ts +0 -16
  49. package/src/contracts/one-shot/scripts.ts +0 -12
  50. package/src/contracts/one-shot/transactions.ts +0 -66
  51. package/src/contracts/one-shot/types.ts +0 -22
  52. package/src/contracts/poll/helpers.ts +0 -37
  53. package/src/contracts/poll/scripts.ts +0 -71
  54. package/src/contracts/poll/types-poll-manager.ts +0 -20
  55. package/src/contracts/poll/types-poll-new.ts +0 -196
  56. package/src/contracts/poll/types-poll-shard.ts +0 -16
  57. package/src/contracts/price-oracle/helpers.ts +0 -30
  58. package/src/contracts/price-oracle/scripts.ts +0 -18
  59. package/src/contracts/price-oracle/transactions.ts +0 -115
  60. package/src/contracts/price-oracle/types-new.ts +0 -50
  61. package/src/contracts/price-oracle/types.ts +0 -16
  62. package/src/contracts/pyth-feed/helpers.ts +0 -82
  63. package/src/contracts/pyth-feed/scripts.ts +0 -15
  64. package/src/contracts/pyth-feed/types.ts +0 -181
  65. package/src/contracts/rob/helpers.ts +0 -666
  66. package/src/contracts/rob/scripts.ts +0 -35
  67. package/src/contracts/rob/transactions.ts +0 -423
  68. package/src/contracts/rob/types-new.ts +0 -128
  69. package/src/contracts/rob/types.ts +0 -16
  70. package/src/contracts/rob-leverage/helpers.ts +0 -422
  71. package/src/contracts/rob-leverage/transactions.ts +0 -368
  72. package/src/contracts/stability-pool/helpers.ts +0 -798
  73. package/src/contracts/stability-pool/queries.ts +0 -132
  74. package/src/contracts/stability-pool/scripts.ts +0 -51
  75. package/src/contracts/stability-pool/transactions.ts +0 -921
  76. package/src/contracts/stability-pool/types-new.ts +0 -385
  77. package/src/contracts/stability-pool/types.ts +0 -25
  78. package/src/contracts/stableswap/helpers.ts +0 -507
  79. package/src/contracts/stableswap/scripts.ts +0 -37
  80. package/src/contracts/stableswap/transactions.ts +0 -475
  81. package/src/contracts/stableswap/types-new.ts +0 -131
  82. package/src/contracts/stableswap/types.ts +0 -17
  83. package/src/contracts/staking/helpers.ts +0 -136
  84. package/src/contracts/staking/scripts.ts +0 -41
  85. package/src/contracts/staking/transactions.ts +0 -349
  86. package/src/contracts/staking/types-new.ts +0 -137
  87. package/src/contracts/staking/types.ts +0 -17
  88. package/src/contracts/treasury/helpers.ts +0 -21
  89. package/src/contracts/treasury/queries.ts +0 -100
  90. package/src/contracts/treasury/scripts.ts +0 -27
  91. package/src/contracts/treasury/transactions.ts +0 -334
  92. package/src/contracts/treasury/types-new.ts +0 -69
  93. package/src/contracts/treasury/types.ts +0 -14
  94. package/src/contracts/version-registry/scripts.ts +0 -29
  95. package/src/contracts/version-registry/types-new.ts +0 -18
  96. package/src/contracts/version-registry/types.ts +0 -17
  97. package/src/index.ts +0 -99
  98. package/src/scripts/always-fail-validator.ts +0 -7
  99. package/src/scripts/auth-token-policy.ts +0 -24
  100. package/src/scripts/iasset-policy.ts +0 -23
  101. package/src/types/evolution-schema-options.ts +0 -16
  102. package/src/types/generic.ts +0 -52
  103. package/src/types/multisig.ts +0 -48
  104. package/src/types/on-chain-decimal.ts +0 -57
  105. package/src/types/rational.ts +0 -76
  106. package/src/types/system-params.ts +0 -463
  107. package/src/utils/array-utils.ts +0 -108
  108. package/src/utils/bigint-utils.ts +0 -35
  109. package/src/utils/helper-txs.ts +0 -31
  110. package/src/utils/indigo-helpers.ts +0 -17
  111. package/src/utils/lucid-utils.ts +0 -125
  112. package/src/utils/oracle-helpers.ts +0 -62
  113. package/src/utils/pyth/decode.ts +0 -223
  114. package/src/utils/pyth/encode.ts +0 -262
  115. package/src/utils/pyth/index.ts +0 -14
  116. package/src/utils/pyth/types.ts +0 -87
  117. package/src/utils/time-helpers.ts +0 -4
  118. package/src/utils/utils.ts +0 -25
  119. package/src/validators/always-succeed-validator.ts +0 -6
  120. package/src/validators/cdp-creator-validator.ts +0 -7
  121. package/src/validators/cdp-redeem-validator.ts +0 -7
  122. package/src/validators/cdp-validator.ts +0 -7
  123. package/src/validators/collector-validator.ts +0 -7
  124. package/src/validators/execute-validator.ts +0 -7
  125. package/src/validators/governance-validator.ts +0 -7
  126. package/src/validators/iasset-validator.ts +0 -7
  127. package/src/validators/interest-collection-validator.ts +0 -7
  128. package/src/validators/interest-oracle-validator.ts +0 -7
  129. package/src/validators/one-shot-policy.ts +0 -7
  130. package/src/validators/poll-manager-validator.ts +0 -7
  131. package/src/validators/poll-shard-validator.ts +0 -7
  132. package/src/validators/price-oracle-validator.ts +0 -7
  133. package/src/validators/pyth-feed-validator.ts +0 -7
  134. package/src/validators/rob-validator.ts +0 -7
  135. package/src/validators/stability-pool-validator.ts +0 -7
  136. package/src/validators/stableswap-validator.ts +0 -7
  137. package/src/validators/staking-validator.ts +0 -7
  138. package/src/validators/treasury-validator.ts +0 -7
  139. package/src/validators/version-record-policy.ts +0 -7
  140. package/src/validators/version-registry-validator.ts +0 -7
  141. package/tests/always-succeed/script.ts +0 -7
  142. package/tests/array-utils.test.ts +0 -92
  143. package/tests/bigint-utils.test.ts +0 -41
  144. package/tests/cdp/actions.ts +0 -680
  145. package/tests/cdp/cdp-helpers.ts +0 -55
  146. package/tests/cdp/cdp-queries.ts +0 -423
  147. package/tests/cdp/cdp.test.ts +0 -6730
  148. package/tests/cdp/transactions-mutated.ts +0 -1733
  149. package/tests/data/system-params.json +0 -1155
  150. package/tests/datums.test.ts +0 -302
  151. package/tests/endpoints/initialize.ts +0 -78
  152. package/tests/endpoints/interest-collector.ts +0 -37
  153. package/tests/endpoints/treasury.ts +0 -70
  154. package/tests/gov/actions.ts +0 -381
  155. package/tests/gov/gov.test.ts +0 -5147
  156. package/tests/gov/governance-queries.ts +0 -37
  157. package/tests/hash-checks.test.ts +0 -112
  158. package/tests/indigo-test-helpers.ts +0 -99
  159. package/tests/initialize.test.ts +0 -79
  160. package/tests/interest-calculations.test.ts +0 -120
  161. package/tests/interest-collection/interest-collection.test.ts +0 -843
  162. package/tests/interest-collection/transactions-mutated.ts +0 -260
  163. package/tests/interest-oracle.test.ts +0 -93
  164. package/tests/mock/assets-mock.ts +0 -243
  165. package/tests/mock/protocol-params-mock.ts +0 -21
  166. package/tests/price-oracle/actions.ts +0 -161
  167. package/tests/price-oracle/price-oracle-queries.ts +0 -12
  168. package/tests/price-oracle/price-oracle.test.ts +0 -228
  169. package/tests/price-oracle/transactions-mutated.ts +0 -59
  170. package/tests/pyth/endpoints.ts +0 -96
  171. package/tests/pyth/helpers.ts +0 -37
  172. package/tests/pyth/pyth-encoding.test.ts +0 -376
  173. package/tests/pyth/pyth-feeds.test.ts +0 -943
  174. package/tests/pyth/pyth-indigo.test.ts +0 -505
  175. package/tests/pyth/pyth.test.ts +0 -299
  176. package/tests/queries/collector-queries.ts +0 -27
  177. package/tests/queries/execute-queries.ts +0 -47
  178. package/tests/queries/iasset-queries.ts +0 -149
  179. package/tests/queries/interest-oracle-queries.ts +0 -12
  180. package/tests/queries/poll-queries.ts +0 -97
  181. package/tests/queries/staking-queries.ts +0 -54
  182. package/tests/rob/actions.ts +0 -56
  183. package/tests/rob/rob-leverage.test.ts +0 -2555
  184. package/tests/rob/rob-queries.ts +0 -95
  185. package/tests/rob/rob.test.ts +0 -3677
  186. package/tests/rob/transactions-mutated.ts +0 -844
  187. package/tests/script-size.test.ts +0 -240
  188. package/tests/setup.ts +0 -135
  189. package/tests/stability-pool/actions.ts +0 -229
  190. package/tests/stability-pool.test.ts +0 -6491
  191. package/tests/stableswap/stableswap-actions.ts +0 -83
  192. package/tests/stableswap/stableswap-queries.ts +0 -98
  193. package/tests/stableswap/stableswap.test.ts +0 -4471
  194. package/tests/stableswap/transactions-mutated.ts +0 -348
  195. package/tests/staking.test.ts +0 -172
  196. package/tests/test-helpers.ts +0 -94
  197. package/tests/treasury/actions.ts +0 -67
  198. package/tests/treasury/treasury.test.ts +0 -320
  199. package/tests/utils/asserts.ts +0 -87
  200. package/tests/utils/benchmark-utils.ts +0 -130
  201. package/tests/utils/index.ts +0 -168
  202. package/tsconfig.build.json +0 -4
  203. package/tsconfig.json +0 -27
  204. package/vitest.config.ts +0 -11
@@ -1,789 +0,0 @@
1
- import {
2
- addAssets,
3
- credentialToRewardAddress,
4
- fromHex,
5
- fromText,
6
- LucidEvolution,
7
- mintingPolicyToId,
8
- scriptHashToCredential,
9
- toHex,
10
- validatorToScriptHash,
11
- } from '@lucid-evolution/lucid';
12
- import {
13
- AssetClass,
14
- mkAssetsOf,
15
- mkLovelacesOf,
16
- } from '@3rd-eye-labs/cardano-offchain-common';
17
- import type { AssetInfo, InitialAssetParam, InitializeOptions } from './types';
18
- import type {
19
- CdpParamsSP,
20
- CdpRedeemParamsSP,
21
- ExecuteParamsSP,
22
- PythConfig,
23
- PythFeedConfig,
24
- ScriptCredential,
25
- SystemParams,
26
- VersionRecordParams,
27
- } from '../../types/system-params';
28
- import type { CollectorParamsSP, GovParamsSP } from '../../types/system-params';
29
- import type {
30
- CDPCreatorParamsSP,
31
- IAssetParamsSP,
32
- InterestCollectionParamsSP,
33
- PollManagerParamsSP,
34
- PollShardParamsSP,
35
- RobParamsSP,
36
- StabilityPoolParamsSP,
37
- StakingParamsSP,
38
- StableswapParamsSP,
39
- TreasuryParamsSP,
40
- } from '../../types/system-params';
41
- import type { ProtocolParams } from '../gov/types-new';
42
- import {
43
- fromSysParamsPythFeedParams,
44
- toSystemParamsAsset,
45
- } from '../../types/system-params';
46
- import { mkAuthTokenPolicy } from '../../scripts/auth-token-policy';
47
- import { mkIAssetTokenPolicy } from '../../scripts/iasset-policy';
48
- import {
49
- mkVersionRecordTokenPolicy,
50
- mkVersionRegistryValidator,
51
- } from '../version-registry/scripts';
52
- import {
53
- mkCdpRedeemValidatorFromSP,
54
- mkCdpValidatorFromSP,
55
- } from '../cdp/scripts';
56
- import { mkExecuteValidatorFromSP } from '../execute/scripts';
57
- import {
58
- mkPollManagerValidatorFromSP,
59
- mkPollShardValidatorFromSP,
60
- } from '../poll/scripts';
61
- import { mkRobValidatorFromSP } from '../rob/scripts';
62
- import { mkStableswapValidatorFromSP } from '../stableswap/scripts';
63
- import { mkCollectorValidatorFromSP } from '../collector/scripts';
64
- import { mkInterestCollectionValidatorFromSP } from '../interest-collection/scripts';
65
- import { mkIAssetValidatorFromSP } from '../iasset/scripts';
66
- import { mkPythFeedValidator } from '../pyth-feed/scripts';
67
- import { mkStakingValidatorFromSP } from '../staking/scripts';
68
- import { mkStabilityPoolValidatorFromSP } from '../stability-pool/scripts';
69
- import { mkTreasuryValidatorFromSP } from '../treasury/scripts';
70
- import { mkCDPCreatorValidatorFromSP } from '../cdp-creator/scripts';
71
- import { mkGovValidatorFromSP } from '../gov/scripts';
72
- import {
73
- deriveAuthToken,
74
- initScriptRef,
75
- initCollector,
76
- initCDPCreator,
77
- initGovernance,
78
- initInterestCollector,
79
- initStakingManager,
80
- initTreasury,
81
- initializeAsset,
82
- mintAuthTokenDirect,
83
- mintOneTimeAsset,
84
- INIT_TOKEN_NAMES,
85
- } from './helpers';
86
- import { runAndAwaitTxBuilder } from '../../../tests/test-helpers';
87
- import { match } from 'ts-pattern';
88
- import { initPyth } from '../../../tests/pyth/endpoints';
89
-
90
- const DEFAULT_STAKING_CRED: ScriptCredential = {
91
- tag: 'StakingHash',
92
- contents: {
93
- tag: 'ScriptCredential',
94
- contents: 'b8358aadd30c60eba168608ad5e875592e9b7cb8c700827cde87f9a3',
95
- },
96
- };
97
-
98
- /**
99
- * Initialize Pyth config from an existing Pyth state asset (e.g. from test's initPyth).
100
- * Caller is responsible for creating the Pyth state asset before calling this.
101
- */
102
- export async function initPythConfig(
103
- lucid: LucidEvolution,
104
- initialAssets: InitialAssetParam[],
105
- pythStateAsset: AssetClass,
106
- ): Promise<PythConfig> {
107
- let allPythFeeds: { [key: string]: PythFeedConfig } = {};
108
-
109
- for (const asset of initialAssets) {
110
- for (const collateral of asset.collateralAssets) {
111
- const result = await match(collateral.priceOracle)
112
- .returnType<Promise<{ [key: string]: PythFeedConfig }>>()
113
- .with({ tag: '_pyth_oracle_nft' }, async (val) => {
114
- const pythFeedValidator = mkPythFeedValidator(
115
- fromSysParamsPythFeedParams(val.pythFeedParams),
116
- );
117
- const pythFeedValHash = validatorToScriptHash(pythFeedValidator);
118
- const pythFeedValScriptRef = await initScriptRef(
119
- lucid,
120
- pythFeedValidator,
121
- );
122
-
123
- try {
124
- // Register the stake key for pyth feed validator.
125
- await runAndAwaitTxBuilder(
126
- lucid,
127
- lucid.newTx().register.Stake(
128
- credentialToRewardAddress(lucid.config().network!, {
129
- hash: validatorToScriptHash(pythFeedValidator),
130
- type: 'Script',
131
- }),
132
- ),
133
- );
134
- } catch (error) {
135
- const message =
136
- error instanceof Error ? error.message : String(error);
137
- if (
138
- !message.includes('StakeKeyRegisteredDELEG') &&
139
- !message.includes(
140
- 'Trying to re-register some already known credentials.',
141
- )
142
- ) {
143
- throw error;
144
- }
145
- }
146
- const key = `${asset.name}/${toHex(collateral.collateralAsset.currencySymbol)}.${toHex(collateral.collateralAsset.tokenName)}`;
147
-
148
- return {
149
- [key]: {
150
- params: val.pythFeedParams,
151
- pythFeedValHash,
152
- pythFeedValScriptRef: { input: pythFeedValScriptRef },
153
- } satisfies PythFeedConfig,
154
- };
155
- })
156
- .otherwise(() => Promise.resolve({}));
157
-
158
- allPythFeeds = { ...allPythFeeds, ...result };
159
- }
160
- }
161
-
162
- return {
163
- pythStateAssetClass: toSystemParamsAsset(pythStateAsset),
164
- pythFeeds: allPythFeeds,
165
- };
166
- }
167
-
168
- export async function init(
169
- lucid: LucidEvolution,
170
- defaultInitialAssets: InitialAssetParam[],
171
- mkPythBasedAssets: (
172
- pythStateNft: AssetClass,
173
- ) => InitialAssetParam[] = () => [],
174
- protocolParams: ProtocolParams,
175
- initOptions: InitializeOptions,
176
- spStakingCred: ScriptCredential | undefined = DEFAULT_STAKING_CRED,
177
- treasuryStakingCred: ScriptCredential | undefined = DEFAULT_STAKING_CRED,
178
- ): Promise<[SystemParams, AssetInfo[]]> {
179
- const startSlot = lucid.currentSlot();
180
-
181
- const {
182
- totalIndySupply,
183
- numCdpCreators,
184
- treasuryIndyAmount,
185
- numCollectors,
186
- numInterestCollectors,
187
- numTreasuryUtxos,
188
- accountCreateFeeLovelaces,
189
- accountProcessingCooldownMs,
190
- interestSettlementCooldown,
191
- partialRedemptionExtraFeeLovelace,
192
- biasTime,
193
- gBiasTime,
194
- accountProcessingBiasTime,
195
- interestCollectorUtxoLovelaces,
196
- } = initOptions;
197
- const tn = INIT_TOKEN_NAMES;
198
-
199
- const indyAsset = await mintOneTimeAsset(lucid, tn.indy, totalIndySupply);
200
- const daoAsset = await mintOneTimeAsset(lucid, tn.dao, 1n);
201
- const govNftAsset = await mintOneTimeAsset(lucid, tn.govNft, 1n);
202
-
203
- const pollToken = deriveAuthToken(govNftAsset, tn.pollManager);
204
- const upgradeToken = deriveAuthToken(pollToken, tn.upgrade);
205
- const iassetToken = deriveAuthToken(upgradeToken, tn.iasset);
206
- const collateralAssetAuthToken = deriveAuthToken(
207
- iassetToken,
208
- tn.collateralAsset,
209
- );
210
- const stabilityPoolToken = deriveAuthToken(upgradeToken, tn.stabilityPool);
211
-
212
- const versionRecordParams: VersionRecordParams = {
213
- upgradeToken: toSystemParamsAsset(upgradeToken),
214
- };
215
- const versionRecordTokenPolicy = mkVersionRecordTokenPolicy({
216
- upgradeToken: {
217
- currencySymbol: toHex(upgradeToken.currencySymbol),
218
- tokenName: toHex(upgradeToken.tokenName),
219
- },
220
- });
221
- const versionRecordToken: AssetClass = {
222
- currencySymbol: fromHex(mintingPolicyToId(versionRecordTokenPolicy)),
223
- tokenName: fromHex(fromText(tn.versionRecord)),
224
- };
225
-
226
- const versionRegistryValidator = mkVersionRegistryValidator();
227
- const versionRegistryValHash = validatorToScriptHash(
228
- versionRegistryValidator,
229
- );
230
-
231
- const cdpCreatorAsset = await mintOneTimeAsset(
232
- lucid,
233
- tn.cdpCreator,
234
- numCdpCreators,
235
- );
236
- const cdpToken = deriveAuthToken(cdpCreatorAsset, tn.cdp);
237
-
238
- const stakingManagerAsset = await mintOneTimeAsset(
239
- lucid,
240
- tn.stakingManager,
241
- 1n,
242
- );
243
- const stakingToken = deriveAuthToken(stakingManagerAsset, tn.staking);
244
-
245
- const collectorParams: CollectorParamsSP = {
246
- stakingManagerNFT: toSystemParamsAsset(stakingManagerAsset),
247
- stakingToken: toSystemParamsAsset(stakingToken),
248
- versionRecordToken: toSystemParamsAsset(versionRecordToken),
249
- };
250
- const collectorValidator = mkCollectorValidatorFromSP(collectorParams);
251
- const collectorValHash = validatorToScriptHash(collectorValidator);
252
-
253
- const stakingParams: StakingParamsSP = {
254
- stakingManagerNFT: toSystemParamsAsset(stakingManagerAsset),
255
- stakingToken: toSystemParamsAsset(stakingToken),
256
- versionRecordToken: toSystemParamsAsset(versionRecordToken),
257
- pollToken: toSystemParamsAsset(pollToken),
258
- indyToken: toSystemParamsAsset(indyAsset),
259
- collectorValHash: collectorValHash,
260
- };
261
- const stakingValHash = validatorToScriptHash(
262
- mkStakingValidatorFromSP(stakingParams),
263
- );
264
-
265
- await initStakingManager(lucid, stakingParams);
266
-
267
- const iassetParams: IAssetParamsSP = {
268
- upgradeToken: toSystemParamsAsset(upgradeToken),
269
- versionRecordToken: toSystemParamsAsset(versionRecordToken),
270
- };
271
- const iassetValidator = mkIAssetValidatorFromSP(iassetParams);
272
- const iassetValHash = validatorToScriptHash(iassetValidator);
273
-
274
- const assetSymbolPolicy = mkIAssetTokenPolicy(cdpToken);
275
- const assetSymbol = mintingPolicyToId(assetSymbolPolicy);
276
-
277
- const snapshotEpochToScaleToSumToken = deriveAuthToken(
278
- stabilityPoolToken,
279
- tn.snapshotEpochToScaleToSum,
280
- );
281
- const accountToken = deriveAuthToken(stabilityPoolToken, tn.account);
282
-
283
- const stabilityPoolParams: StabilityPoolParamsSP = {
284
- assetSymbol: { unCurrencySymbol: assetSymbol },
285
- stabilityPoolToken: toSystemParamsAsset(stabilityPoolToken),
286
- snapshotEpochToScaleToSumToken: toSystemParamsAsset(
287
- snapshotEpochToScaleToSumToken,
288
- ),
289
- accountToken: toSystemParamsAsset(accountToken),
290
- cdpToken: toSystemParamsAsset(cdpToken),
291
- iAssetAuthToken: toSystemParamsAsset(iassetToken),
292
- versionRecordToken: toSystemParamsAsset(versionRecordToken),
293
- iassetValHash: iassetValHash,
294
- accountCreateFeeLovelaces: Number(accountCreateFeeLovelaces),
295
- accountProcessingCooldownMs: Number(accountProcessingCooldownMs),
296
- accountProcessingBiasMs: accountProcessingBiasTime
297
- ? Number(accountProcessingBiasTime)
298
- : Number(biasTime),
299
- stakeCredential: spStakingCred,
300
- };
301
-
302
- const stabilityPoolValidator =
303
- mkStabilityPoolValidatorFromSP(stabilityPoolParams);
304
- const stabilityPoolValHash = validatorToScriptHash(stabilityPoolValidator);
305
-
306
- const treasuryParams: TreasuryParamsSP = {
307
- upgradeToken: toSystemParamsAsset(upgradeToken),
308
- versionRecordToken: toSystemParamsAsset(versionRecordToken),
309
- treasuryUtxosStakeCredential: treasuryStakingCred,
310
- };
311
-
312
- const treasuryValidator = mkTreasuryValidatorFromSP(treasuryParams);
313
- const treasuryValHash = validatorToScriptHash(treasuryValidator);
314
-
315
- await initTreasury(
316
- lucid,
317
- treasuryParams,
318
- daoAsset,
319
- indyAsset,
320
- treasuryIndyAmount,
321
- numTreasuryUtxos,
322
- );
323
-
324
- const multisigUtxoNft = await mintOneTimeAsset(lucid, tn.multisigUtxo, 1n);
325
-
326
- const interestCollectionParams: InterestCollectionParamsSP = {
327
- versionRecordNft: toSystemParamsAsset(versionRecordToken),
328
- multisigUtxoNft: toSystemParamsAsset(multisigUtxoNft),
329
- cdpAuthTk: toSystemParamsAsset(cdpToken),
330
- collateralAssetAuthTk: toSystemParamsAsset(collateralAssetAuthToken),
331
- govAuthTk: toSystemParamsAsset(govNftAsset),
332
- cdpAssetSymbol: { unCurrencySymbol: assetSymbol },
333
- cdpBiasTime: BigInt(biasTime),
334
- interestSettlementCooldown,
335
- };
336
-
337
- const interestCollectionValidator = mkInterestCollectionValidatorFromSP(
338
- interestCollectionParams,
339
- );
340
- const interestCollectionValHash = validatorToScriptHash(
341
- interestCollectionValidator,
342
- );
343
-
344
- await initInterestCollector(
345
- lucid,
346
- interestCollectionValHash,
347
- multisigUtxoNft,
348
- numInterestCollectors,
349
- interestCollectorUtxoLovelaces,
350
- );
351
- const pythStateNft = await initPyth(lucid);
352
-
353
- const initialAssets = [
354
- ...defaultInitialAssets,
355
- ...mkPythBasedAssets(pythStateNft),
356
- ];
357
-
358
- const pythConfig = await initPythConfig(lucid, initialAssets, pythStateNft);
359
-
360
- const cdpRedeemParams: CdpRedeemParamsSP = {
361
- cdpAuthToken: toSystemParamsAsset(cdpToken),
362
- cdpAssetSymbol: { unCurrencySymbol: assetSymbol },
363
- iAssetAuthToken: toSystemParamsAsset(iassetToken),
364
- collateralAssetAuthToken: toSystemParamsAsset(collateralAssetAuthToken),
365
- interestCollectorValHash: interestCollectionValHash,
366
- iassetValHash: iassetValHash,
367
- treasuryValHash: treasuryValHash,
368
- govNFT: toSystemParamsAsset(govNftAsset),
369
- partialRedemptionExtraFeeLovelace,
370
- biasTime,
371
- };
372
-
373
- const cdpRedeemValidator = mkCdpRedeemValidatorFromSP(cdpRedeemParams);
374
- const cdpRedeemValHash = validatorToScriptHash(cdpRedeemValidator);
375
-
376
- const cdpRedeemRewardAddr = credentialToRewardAddress(
377
- lucid.config().network!,
378
- scriptHashToCredential(cdpRedeemValHash),
379
- );
380
-
381
- try {
382
- await runAndAwaitTxBuilder(
383
- lucid,
384
- lucid.newTx().register.Stake(cdpRedeemRewardAddr),
385
- );
386
- } catch (error) {
387
- const message = error instanceof Error ? error.message : String(error);
388
- if (
389
- !message.includes('StakeKeyRegisteredDELEG') &&
390
- !message.includes('Trying to re-register some already known credentials.')
391
- ) {
392
- throw error;
393
- }
394
- }
395
- const cdpParams: CdpParamsSP = {
396
- cdpAuthToken: toSystemParamsAsset(cdpToken),
397
- cdpAssetSymbol: { unCurrencySymbol: assetSymbol },
398
- iAssetAuthToken: toSystemParamsAsset(iassetToken),
399
- collateralAssetAuthToken: toSystemParamsAsset(collateralAssetAuthToken),
400
- stabilityPoolAuthToken: toSystemParamsAsset(stabilityPoolToken),
401
- upgradeToken: toSystemParamsAsset(upgradeToken),
402
- versionRecordToken: toSystemParamsAsset(versionRecordToken),
403
- interestCollectorValHash: interestCollectionValHash,
404
- spValHash: stabilityPoolValHash,
405
- iassetValHash: iassetValHash,
406
- treasuryValHash: treasuryValHash,
407
- cdpRedeemValHash: cdpRedeemValHash,
408
- biasTime,
409
- };
410
- const cdpValidator = mkCdpValidatorFromSP(cdpParams);
411
- const cdpValHash = validatorToScriptHash(cdpValidator);
412
-
413
- const cdpCreatorParams: CDPCreatorParamsSP = {
414
- cdpCreatorNft: toSystemParamsAsset(cdpCreatorAsset),
415
- cdpAssetCs: { unCurrencySymbol: assetSymbol },
416
- cdpAuthTk: toSystemParamsAsset(cdpToken),
417
- iAssetAuthTk: toSystemParamsAsset(iassetToken),
418
- collateralAssetAuthTk: toSystemParamsAsset(collateralAssetAuthToken),
419
- versionRecordToken: toSystemParamsAsset(versionRecordToken),
420
- upgradeToken: toSystemParamsAsset(upgradeToken),
421
- iassetValHash: iassetValHash,
422
- cdpScriptHash: cdpValHash,
423
- treasuryValHash: treasuryValHash,
424
- biasTime: cdpParams.biasTime,
425
- };
426
- const cdpCreatorValidator = mkCDPCreatorValidatorFromSP(cdpCreatorParams);
427
- const cdpCreatorValHash = validatorToScriptHash(cdpCreatorValidator);
428
-
429
- const stableswapParams: StableswapParamsSP = {
430
- iassetSymbol: { unCurrencySymbol: assetSymbol },
431
- cdpToken: toSystemParamsAsset(cdpToken),
432
- versionRecordToken: toSystemParamsAsset(versionRecordToken),
433
- cdpValHash: cdpValHash,
434
- treasuryValHash: treasuryValHash,
435
- };
436
- const stableswapValidator = mkStableswapValidatorFromSP(stableswapParams);
437
- const stableswapValHash = validatorToScriptHash(stableswapValidator);
438
-
439
- await initCollector(lucid, collectorParams, numCollectors);
440
-
441
- const assetInfos: AssetInfo[] = [];
442
- if (initialAssets.length > 0) {
443
- await mintAuthTokenDirect(lucid, govNftAsset, tn.pollManager, 1n);
444
- await mintAuthTokenDirect(lucid, pollToken, tn.upgrade, 1n);
445
- if (initialAssets.length > 0) {
446
- await mintAuthTokenDirect(
447
- lucid,
448
- upgradeToken,
449
- tn.iasset,
450
- BigInt(initialAssets.length),
451
- );
452
- }
453
-
454
- const totalCollateralAssetsCount = initialAssets.reduce(
455
- (acc, asset) => acc + asset.collateralAssets.length,
456
- 0,
457
- );
458
- const totalStablePoolsCount = initialAssets.reduce(
459
- (acc, asset) => acc + asset.stablepools.length,
460
- 0,
461
- );
462
-
463
- if (totalCollateralAssetsCount > 0n) {
464
- // We must first send a single cdp creator asset to the wallet address to avoid the "Must consume exactly 1 asset" error
465
- await runAndAwaitTxBuilder(
466
- lucid,
467
- lucid
468
- .newTx()
469
- .pay.ToAddress(
470
- await lucid.wallet().address(),
471
- addAssets(
472
- mkAssetsOf(iassetToken, 1n),
473
- mkLovelacesOf(BigInt(totalCollateralAssetsCount) * 5000000n),
474
- ),
475
- ),
476
- );
477
-
478
- await mintAuthTokenDirect(
479
- lucid,
480
- iassetToken,
481
- tn.collateralAsset,
482
- BigInt(totalCollateralAssetsCount),
483
- );
484
- }
485
-
486
- if (totalStablePoolsCount > 0n) {
487
- // We must first send a single cdp creator asset to the wallet address to avoid the "Must consume exactly 1 asset" error
488
- await runAndAwaitTxBuilder(
489
- lucid,
490
- lucid
491
- .newTx()
492
- .pay.ToAddress(
493
- await lucid.wallet().address(),
494
- addAssets(
495
- mkAssetsOf(cdpCreatorAsset, 1n),
496
- mkLovelacesOf(BigInt(totalStablePoolsCount) * 5000000n),
497
- ),
498
- ),
499
- );
500
- await mintAuthTokenDirect(
501
- lucid,
502
- cdpCreatorAsset,
503
- tn.cdp,
504
- BigInt(totalStablePoolsCount),
505
- );
506
- }
507
-
508
- if (initialAssets.length > 0) {
509
- await mintAuthTokenDirect(
510
- lucid,
511
- upgradeToken,
512
- tn.stabilityPool,
513
- BigInt(initialAssets.length),
514
- );
515
-
516
- for (const asset of initialAssets) {
517
- const assetInfo = await initializeAsset(
518
- lucid,
519
- iassetParams,
520
- iassetToken,
521
- collateralAssetAuthToken,
522
- cdpToken,
523
- cdpParams,
524
- stableswapValHash,
525
- stabilityPoolParams,
526
- stabilityPoolToken,
527
- asset,
528
- pythConfig,
529
- );
530
-
531
- assetInfos.push(assetInfo);
532
- }
533
- }
534
-
535
- await mintAuthTokenDirect(lucid, pollToken, tn.upgrade, -1n);
536
- await mintAuthTokenDirect(lucid, govNftAsset, tn.pollManager, -1n);
537
- }
538
-
539
- // Send the CDP creator UTxOs after initializing the assets to allow for the creation of stableswap pools
540
- await initCDPCreator(lucid, cdpCreatorParams, numCdpCreators);
541
-
542
- const executeParams: ExecuteParamsSP = {
543
- govNFT: toSystemParamsAsset(govNftAsset),
544
- upgradeToken: toSystemParamsAsset(upgradeToken),
545
- iAssetToken: toSystemParamsAsset(iassetToken),
546
- collateralAssetToken: toSystemParamsAsset(collateralAssetAuthToken),
547
- stabilityPoolToken: toSystemParamsAsset(stabilityPoolToken),
548
- cdpCreatorToken: toSystemParamsAsset(cdpCreatorAsset),
549
- cdpToken: toSystemParamsAsset(cdpToken),
550
- versionRecordToken: toSystemParamsAsset(versionRecordToken),
551
- iassetValHash: iassetValHash,
552
- cdpValHash: cdpValHash,
553
- sPoolValHash: stabilityPoolValHash,
554
- versionRegistryValHash: versionRegistryValHash,
555
- treasuryValHash: treasuryValHash,
556
- };
557
- const executeValidator = mkExecuteValidatorFromSP(executeParams);
558
- const executeValHash = validatorToScriptHash(executeValidator);
559
-
560
- const pollShardParams: PollShardParamsSP = {
561
- pollToken: toSystemParamsAsset(pollToken),
562
- stakingToken: toSystemParamsAsset(stakingToken),
563
- indyAsset: toSystemParamsAsset(indyAsset),
564
- stakingValHash: stakingValHash,
565
- };
566
- const pollShardValidator = mkPollShardValidatorFromSP(pollShardParams);
567
- const pollShardValHash = validatorToScriptHash(pollShardValidator);
568
-
569
- const pollManagerParams: PollManagerParamsSP = {
570
- govNFT: toSystemParamsAsset(govNftAsset),
571
- pollToken: toSystemParamsAsset(pollToken),
572
- upgradeToken: toSystemParamsAsset(upgradeToken),
573
- indyAsset: toSystemParamsAsset(indyAsset),
574
- govExecuteValHash: executeValHash,
575
- pBiasTime: BigInt(biasTime),
576
- shardsValHash: pollShardValHash,
577
- treasuryValHash: treasuryValHash,
578
- };
579
- const pollManagerValidator = mkPollManagerValidatorFromSP(pollManagerParams);
580
- const pollManagerValHash = validatorToScriptHash(pollManagerValidator);
581
-
582
- const govParams: GovParamsSP = {
583
- gBiasTime: gBiasTime ? BigInt(gBiasTime) : BigInt(biasTime),
584
- govNFT: toSystemParamsAsset(govNftAsset),
585
- pollToken: toSystemParamsAsset(pollToken),
586
- upgradeToken: toSystemParamsAsset(upgradeToken),
587
- indyAsset: toSystemParamsAsset(indyAsset),
588
- versionRecordToken: toSystemParamsAsset(versionRecordToken),
589
- pollManagerValHash: pollManagerValHash,
590
- iassetValHash: iassetValHash,
591
- daoIdentityToken: toSystemParamsAsset(daoAsset),
592
- iAssetAuthToken: toSystemParamsAsset(iassetToken),
593
- iassetSymbol: { unCurrencySymbol: assetSymbol },
594
- };
595
- const govValidator = mkGovValidatorFromSP(govParams);
596
- const govValHash = validatorToScriptHash(govValidator);
597
-
598
- await initGovernance(
599
- lucid,
600
- govParams,
601
- govNftAsset,
602
- initialAssets,
603
- protocolParams,
604
- );
605
-
606
- const robParams: RobParamsSP = {
607
- iassetAuthToken: cdpParams.iAssetAuthToken,
608
- collateralAssetAuthToken: cdpParams.collateralAssetAuthToken,
609
- iassetPolicyId: cdpParams.cdpAssetSymbol,
610
- iassetValHash: iassetValHash,
611
- versionRecordToken: cdpParams.versionRecordToken,
612
- };
613
-
614
- const robValidator = mkRobValidatorFromSP(robParams);
615
- const robValHash = validatorToScriptHash(robValidator);
616
-
617
- // Policy scripts needed for script refs (deriveAuthToken only returns AssetClass)
618
- const cdpTokenPolicy = mkAuthTokenPolicy(cdpCreatorAsset, fromText(tn.cdp));
619
- const iassetTokenPolicy = mkAuthTokenPolicy(
620
- upgradeToken,
621
- fromText(tn.iasset),
622
- );
623
- const accountTokenPolicy = mkAuthTokenPolicy(
624
- stabilityPoolToken,
625
- fromText(tn.account),
626
- );
627
- const stabilityPoolTokenPolicy = mkAuthTokenPolicy(
628
- upgradeToken,
629
- fromText(tn.stabilityPool),
630
- );
631
- const pollTokenPolicy = mkAuthTokenPolicy(
632
- govNftAsset,
633
- fromText(tn.pollManager),
634
- );
635
- const stakingTokenPolicy = mkAuthTokenPolicy(
636
- stakingManagerAsset,
637
- fromText(tn.staking),
638
- );
639
- const collateralAssetAuthTokenPolicy = mkAuthTokenPolicy(
640
- iassetToken,
641
- fromText(tn.collateralAsset),
642
- );
643
- const upgradeTokenPolicy = mkAuthTokenPolicy(pollToken, fromText(tn.upgrade));
644
- const snapshotEpochToScaleToSumTokenPolicy = mkAuthTokenPolicy(
645
- stabilityPoolToken,
646
- fromText(tn.snapshotEpochToScaleToSum),
647
- );
648
-
649
- const sysParams: SystemParams = {
650
- cdpParams: cdpParams,
651
- iassetParams: iassetParams,
652
- cdpCreatorParams: cdpCreatorParams,
653
- cdpRedeemParams: cdpRedeemParams,
654
- collectorParams: collectorParams,
655
- executeParams: executeParams,
656
- govParams: govParams,
657
- stakingParams: stakingParams,
658
- stabilityPoolParams: stabilityPoolParams,
659
- stableswapParams: stableswapParams,
660
- treasuryParams: treasuryParams,
661
- pollShardParams: pollShardParams,
662
- pollManagerParams: pollManagerParams,
663
- interestCollectionParams: interestCollectionParams,
664
- indyToken: toSystemParamsAsset(indyAsset),
665
- robParams: robParams,
666
- versionRecordParams: versionRecordParams,
667
- startTime: {
668
- slot: startSlot,
669
- blockHeader: 'TODO',
670
- },
671
- scriptReferences: {
672
- interestCollectionValidatorRef: {
673
- input: await initScriptRef(lucid, interestCollectionValidator),
674
- },
675
- robValidatorRef: {
676
- input: await initScriptRef(lucid, robValidator),
677
- },
678
- cdpCreatorValidatorRef: {
679
- input: await initScriptRef(lucid, cdpCreatorValidator),
680
- },
681
- cdpValidatorRef: {
682
- input: await initScriptRef(lucid, cdpValidator),
683
- },
684
- cdpRedeemValidatorRef: {
685
- input: await initScriptRef(lucid, cdpRedeemValidator),
686
- },
687
- collectorValidatorRef: {
688
- input: await initScriptRef(lucid, collectorValidator),
689
- },
690
- executeValidatorRef: {
691
- input: await initScriptRef(lucid, executeValidator),
692
- },
693
- pollShardValidatorRef: {
694
- input: await initScriptRef(lucid, pollShardValidator),
695
- },
696
- pollManagerValidatorRef: {
697
- input: await initScriptRef(lucid, pollManagerValidator),
698
- },
699
- iAssetTokenPolicyRef: {
700
- input: await initScriptRef(lucid, assetSymbolPolicy),
701
- },
702
- stakingValidatorRef: {
703
- input: await initScriptRef(
704
- lucid,
705
- mkStakingValidatorFromSP(stakingParams),
706
- ),
707
- },
708
- stabilityPoolValidatorRef: {
709
- input: await initScriptRef(lucid, stabilityPoolValidator),
710
- },
711
- stableswapValidatorRef: {
712
- input: await initScriptRef(lucid, stableswapValidator),
713
- },
714
- treasuryValidatorRef: {
715
- input: await initScriptRef(lucid, treasuryValidator),
716
- },
717
- governanceValidatorRef: {
718
- input: await initScriptRef(lucid, govValidator),
719
- },
720
- versionRegistryValidatorRef: {
721
- input: await initScriptRef(lucid, versionRegistryValidator),
722
- },
723
- iassetValidatorRef: {
724
- input: await initScriptRef(lucid, iassetValidator),
725
- },
726
- authTokenPolicies: {
727
- cdpAuthTokenRef: {
728
- input: await initScriptRef(lucid, cdpTokenPolicy),
729
- },
730
- iAssetAuthTokenRef: {
731
- input: await initScriptRef(lucid, iassetTokenPolicy),
732
- },
733
- accountTokenRef: {
734
- input: await initScriptRef(lucid, accountTokenPolicy),
735
- },
736
- stabilityPoolAuthTokenRef: {
737
- input: await initScriptRef(lucid, stabilityPoolTokenPolicy),
738
- },
739
- pollManagerTokenRef: {
740
- input: await initScriptRef(lucid, pollTokenPolicy),
741
- },
742
- stakingTokenRef: {
743
- input: await initScriptRef(lucid, stakingTokenPolicy),
744
- },
745
- versionRecordTokenPolicyRef: {
746
- input: await initScriptRef(lucid, versionRecordTokenPolicy),
747
- },
748
- iAssetTokenRef: {
749
- input: await initScriptRef(lucid, assetSymbolPolicy),
750
- },
751
- collateralAssetTokenRef: {
752
- input: await initScriptRef(lucid, collateralAssetAuthTokenPolicy),
753
- },
754
- upgradeTokenRef: {
755
- input: await initScriptRef(lucid, upgradeTokenPolicy),
756
- },
757
- stabilityPoolTokenRef: {
758
- input: await initScriptRef(lucid, stabilityPoolTokenPolicy),
759
- },
760
- snapshotEpochToScaleToSumTokenRef: {
761
- input: await initScriptRef(
762
- lucid,
763
- snapshotEpochToScaleToSumTokenPolicy,
764
- ),
765
- },
766
- },
767
- },
768
- validatorHashes: {
769
- cdpCreatorHash: cdpCreatorValHash,
770
- cdpHash: cdpValHash,
771
- executeHash: executeValHash,
772
- govHash: govValHash,
773
- interestCollectionHash: interestCollectionValHash,
774
- pollShardHash: pollShardValHash,
775
- pollManagerHash: pollManagerValHash,
776
- treasuryHash: treasuryValHash,
777
- stabilityPoolHash: stabilityPoolValHash,
778
- stableswapHash: stableswapValHash,
779
- stakingHash: stakingValHash,
780
- collectorHash: collectorValHash,
781
- versionRegistryHash: versionRegistryValHash,
782
- robHash: robValHash,
783
- iassetHash: iassetValHash,
784
- },
785
- pythConfig,
786
- };
787
-
788
- return [sysParams, assetInfos];
789
- }