@indigo-labs/indigo-sdk 0.5.5 → 0.5.7

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 (208) hide show
  1. package/dist/index.d.mts +4 -2
  2. package/dist/index.d.ts +4 -2
  3. package/dist/index.js +6 -3
  4. package/dist/index.mjs +5 -3
  5. package/package.json +11 -1
  6. package/.claude/settings.local.json +0 -7
  7. package/.github/workflows/ci.yml +0 -66
  8. package/.husky/pre-commit +0 -1
  9. package/.nvmrc +0 -1
  10. package/.prettierignore +0 -1
  11. package/.prettierrc +0 -6
  12. package/eslint.config.mjs +0 -42
  13. package/scripts/bench.sh +0 -62
  14. package/scripts/run-repeat.sh +0 -22
  15. package/src/contracts/cdp/helpers.ts +0 -173
  16. package/src/contracts/cdp/scripts.ts +0 -70
  17. package/src/contracts/cdp/transactions.ts +0 -1584
  18. package/src/contracts/cdp/types-new.ts +0 -277
  19. package/src/contracts/cdp/types.ts +0 -43
  20. package/src/contracts/cdp-creator/queries.ts +0 -30
  21. package/src/contracts/cdp-creator/scripts.ts +0 -45
  22. package/src/contracts/cdp-creator/types-new.ts +0 -50
  23. package/src/contracts/cdp-creator/types.ts +0 -24
  24. package/src/contracts/collector/scripts.ts +0 -32
  25. package/src/contracts/collector/transactions.ts +0 -50
  26. package/src/contracts/collector/types-new.ts +0 -17
  27. package/src/contracts/execute/scripts.ts +0 -57
  28. package/src/contracts/execute/types-new.ts +0 -44
  29. package/src/contracts/execute/types.ts +0 -24
  30. package/src/contracts/gov/helpers.ts +0 -351
  31. package/src/contracts/gov/scripts.ts +0 -41
  32. package/src/contracts/gov/transactions.ts +0 -1607
  33. package/src/contracts/gov/types-new.ts +0 -268
  34. package/src/contracts/gov/types.ts +0 -22
  35. package/src/contracts/iasset/helpers.ts +0 -170
  36. package/src/contracts/iasset/queries.ts +0 -102
  37. package/src/contracts/iasset/scripts.ts +0 -38
  38. package/src/contracts/iasset/types.ts +0 -154
  39. package/src/contracts/initialize/actions.ts +0 -789
  40. package/src/contracts/initialize/helpers.ts +0 -616
  41. package/src/contracts/initialize/types.ts +0 -116
  42. package/src/contracts/interest-collection/helpers.ts +0 -19
  43. package/src/contracts/interest-collection/queries.ts +0 -66
  44. package/src/contracts/interest-collection/scripts.ts +0 -44
  45. package/src/contracts/interest-collection/transactions.ts +0 -433
  46. package/src/contracts/interest-collection/types-new.ts +0 -50
  47. package/src/contracts/interest-collection/types.ts +0 -26
  48. package/src/contracts/interest-oracle/helpers.ts +0 -61
  49. package/src/contracts/interest-oracle/scripts.ts +0 -18
  50. package/src/contracts/interest-oracle/transactions.ts +0 -151
  51. package/src/contracts/interest-oracle/types-new.ts +0 -32
  52. package/src/contracts/interest-oracle/types.ts +0 -16
  53. package/src/contracts/one-shot/scripts.ts +0 -12
  54. package/src/contracts/one-shot/transactions.ts +0 -66
  55. package/src/contracts/one-shot/types.ts +0 -22
  56. package/src/contracts/poll/helpers.ts +0 -37
  57. package/src/contracts/poll/scripts.ts +0 -71
  58. package/src/contracts/poll/types-poll-manager.ts +0 -20
  59. package/src/contracts/poll/types-poll-new.ts +0 -196
  60. package/src/contracts/poll/types-poll-shard.ts +0 -16
  61. package/src/contracts/price-oracle/helpers.ts +0 -30
  62. package/src/contracts/price-oracle/scripts.ts +0 -18
  63. package/src/contracts/price-oracle/transactions.ts +0 -115
  64. package/src/contracts/price-oracle/types-new.ts +0 -50
  65. package/src/contracts/price-oracle/types.ts +0 -16
  66. package/src/contracts/pyth-feed/helpers.ts +0 -82
  67. package/src/contracts/pyth-feed/scripts.ts +0 -15
  68. package/src/contracts/pyth-feed/types.ts +0 -181
  69. package/src/contracts/rob/helpers.ts +0 -666
  70. package/src/contracts/rob/scripts.ts +0 -35
  71. package/src/contracts/rob/transactions.ts +0 -423
  72. package/src/contracts/rob/types-new.ts +0 -128
  73. package/src/contracts/rob/types.ts +0 -16
  74. package/src/contracts/rob-leverage/helpers.ts +0 -422
  75. package/src/contracts/rob-leverage/transactions.ts +0 -368
  76. package/src/contracts/stability-pool/helpers.ts +0 -798
  77. package/src/contracts/stability-pool/queries.ts +0 -132
  78. package/src/contracts/stability-pool/scripts.ts +0 -51
  79. package/src/contracts/stability-pool/transactions.ts +0 -921
  80. package/src/contracts/stability-pool/types-new.ts +0 -385
  81. package/src/contracts/stability-pool/types.ts +0 -25
  82. package/src/contracts/stableswap/helpers.ts +0 -507
  83. package/src/contracts/stableswap/scripts.ts +0 -37
  84. package/src/contracts/stableswap/transactions.ts +0 -475
  85. package/src/contracts/stableswap/types-new.ts +0 -131
  86. package/src/contracts/stableswap/types.ts +0 -17
  87. package/src/contracts/staking/helpers.ts +0 -136
  88. package/src/contracts/staking/scripts.ts +0 -41
  89. package/src/contracts/staking/transactions.ts +0 -349
  90. package/src/contracts/staking/types-new.ts +0 -137
  91. package/src/contracts/staking/types.ts +0 -17
  92. package/src/contracts/treasury/helpers.ts +0 -21
  93. package/src/contracts/treasury/queries.ts +0 -100
  94. package/src/contracts/treasury/scripts.ts +0 -27
  95. package/src/contracts/treasury/transactions.ts +0 -334
  96. package/src/contracts/treasury/types-new.ts +0 -69
  97. package/src/contracts/treasury/types.ts +0 -14
  98. package/src/contracts/version-registry/scripts.ts +0 -29
  99. package/src/contracts/version-registry/types-new.ts +0 -18
  100. package/src/contracts/version-registry/types.ts +0 -17
  101. package/src/index.ts +0 -99
  102. package/src/scripts/always-fail-validator.ts +0 -7
  103. package/src/scripts/auth-token-policy.ts +0 -24
  104. package/src/scripts/iasset-policy.ts +0 -23
  105. package/src/types/evolution-schema-options.ts +0 -16
  106. package/src/types/generic.ts +0 -52
  107. package/src/types/multisig.ts +0 -48
  108. package/src/types/on-chain-decimal.ts +0 -57
  109. package/src/types/rational.ts +0 -76
  110. package/src/types/system-params.ts +0 -463
  111. package/src/utils/array-utils.ts +0 -108
  112. package/src/utils/bigint-utils.ts +0 -35
  113. package/src/utils/helper-txs.ts +0 -31
  114. package/src/utils/indigo-helpers.ts +0 -17
  115. package/src/utils/lucid-utils.ts +0 -125
  116. package/src/utils/oracle-helpers.ts +0 -62
  117. package/src/utils/pyth/decode.ts +0 -223
  118. package/src/utils/pyth/encode.ts +0 -262
  119. package/src/utils/pyth/index.ts +0 -14
  120. package/src/utils/pyth/types.ts +0 -87
  121. package/src/utils/time-helpers.ts +0 -4
  122. package/src/utils/utils.ts +0 -25
  123. package/src/validators/always-succeed-validator.ts +0 -6
  124. package/src/validators/cdp-creator-validator.ts +0 -7
  125. package/src/validators/cdp-redeem-validator.ts +0 -7
  126. package/src/validators/cdp-validator.ts +0 -7
  127. package/src/validators/collector-validator.ts +0 -7
  128. package/src/validators/execute-validator.ts +0 -7
  129. package/src/validators/governance-validator.ts +0 -7
  130. package/src/validators/iasset-validator.ts +0 -7
  131. package/src/validators/interest-collection-validator.ts +0 -7
  132. package/src/validators/interest-oracle-validator.ts +0 -7
  133. package/src/validators/one-shot-policy.ts +0 -7
  134. package/src/validators/poll-manager-validator.ts +0 -7
  135. package/src/validators/poll-shard-validator.ts +0 -7
  136. package/src/validators/price-oracle-validator.ts +0 -7
  137. package/src/validators/pyth-feed-validator.ts +0 -7
  138. package/src/validators/rob-validator.ts +0 -7
  139. package/src/validators/stability-pool-validator.ts +0 -7
  140. package/src/validators/stableswap-validator.ts +0 -7
  141. package/src/validators/staking-validator.ts +0 -7
  142. package/src/validators/treasury-validator.ts +0 -7
  143. package/src/validators/version-record-policy.ts +0 -7
  144. package/src/validators/version-registry-validator.ts +0 -7
  145. package/tests/always-succeed/script.ts +0 -7
  146. package/tests/array-utils.test.ts +0 -92
  147. package/tests/bigint-utils.test.ts +0 -41
  148. package/tests/cdp/actions.ts +0 -680
  149. package/tests/cdp/cdp-helpers.ts +0 -55
  150. package/tests/cdp/cdp-queries.ts +0 -423
  151. package/tests/cdp/cdp.test.ts +0 -6730
  152. package/tests/cdp/transactions-mutated.ts +0 -1733
  153. package/tests/data/system-params.json +0 -1155
  154. package/tests/datums.test.ts +0 -302
  155. package/tests/endpoints/initialize.ts +0 -78
  156. package/tests/endpoints/interest-collector.ts +0 -37
  157. package/tests/endpoints/treasury.ts +0 -70
  158. package/tests/gov/actions.ts +0 -381
  159. package/tests/gov/gov.test.ts +0 -5147
  160. package/tests/gov/governance-queries.ts +0 -37
  161. package/tests/hash-checks.test.ts +0 -112
  162. package/tests/indigo-test-helpers.ts +0 -99
  163. package/tests/initialize.test.ts +0 -79
  164. package/tests/interest-calculations.test.ts +0 -120
  165. package/tests/interest-collection/interest-collection.test.ts +0 -843
  166. package/tests/interest-collection/transactions-mutated.ts +0 -260
  167. package/tests/interest-oracle.test.ts +0 -93
  168. package/tests/mock/assets-mock.ts +0 -243
  169. package/tests/mock/protocol-params-mock.ts +0 -21
  170. package/tests/price-oracle/actions.ts +0 -161
  171. package/tests/price-oracle/price-oracle-queries.ts +0 -12
  172. package/tests/price-oracle/price-oracle.test.ts +0 -228
  173. package/tests/price-oracle/transactions-mutated.ts +0 -59
  174. package/tests/pyth/endpoints.ts +0 -96
  175. package/tests/pyth/helpers.ts +0 -37
  176. package/tests/pyth/pyth-encoding.test.ts +0 -376
  177. package/tests/pyth/pyth-feeds.test.ts +0 -943
  178. package/tests/pyth/pyth-indigo.test.ts +0 -505
  179. package/tests/pyth/pyth.test.ts +0 -299
  180. package/tests/queries/collector-queries.ts +0 -27
  181. package/tests/queries/execute-queries.ts +0 -47
  182. package/tests/queries/iasset-queries.ts +0 -149
  183. package/tests/queries/interest-oracle-queries.ts +0 -12
  184. package/tests/queries/poll-queries.ts +0 -97
  185. package/tests/queries/staking-queries.ts +0 -54
  186. package/tests/rob/actions.ts +0 -56
  187. package/tests/rob/rob-leverage.test.ts +0 -2555
  188. package/tests/rob/rob-queries.ts +0 -95
  189. package/tests/rob/rob.test.ts +0 -3677
  190. package/tests/rob/transactions-mutated.ts +0 -844
  191. package/tests/script-size.test.ts +0 -240
  192. package/tests/setup.ts +0 -135
  193. package/tests/stability-pool/actions.ts +0 -229
  194. package/tests/stability-pool.test.ts +0 -6491
  195. package/tests/stableswap/stableswap-actions.ts +0 -83
  196. package/tests/stableswap/stableswap-queries.ts +0 -98
  197. package/tests/stableswap/stableswap.test.ts +0 -4471
  198. package/tests/stableswap/transactions-mutated.ts +0 -348
  199. package/tests/staking.test.ts +0 -172
  200. package/tests/test-helpers.ts +0 -94
  201. package/tests/treasury/actions.ts +0 -67
  202. package/tests/treasury/treasury.test.ts +0 -320
  203. package/tests/utils/asserts.ts +0 -87
  204. package/tests/utils/benchmark-utils.ts +0 -130
  205. package/tests/utils/index.ts +0 -168
  206. package/tsconfig.build.json +0 -4
  207. package/tsconfig.json +0 -27
  208. 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
- }