@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
@@ -14,7 +14,7 @@ export function mkVersionRecordTokenPolicy(
14
14
  params: VersionRecordTokenParams,
15
15
  ): MintingPolicy {
16
16
  return {
17
- type: 'PlutusV2',
17
+ type: 'PlutusV3',
18
18
  script: applyParamsToScript(_versionRecordTokenPolicy.cborHex, [
19
19
  castVersionRecordTokenParams(params),
20
20
  ]),
@@ -23,7 +23,7 @@ export function mkVersionRecordTokenPolicy(
23
23
 
24
24
  export const mkVersionRegistryValidator = (): SpendingValidator => {
25
25
  return {
26
- type: 'PlutusV2',
26
+ type: 'PlutusV3',
27
27
  script: _versionRegistryValidator.cborHex,
28
28
  };
29
29
  };
@@ -1,18 +1,17 @@
1
- import { Core as EvoCore } from '@evolution-sdk/evolution';
1
+ import { TSchema, Data } from '@evolution-sdk/evolution';
2
2
  import { DEFAULT_SCHEMA_OPTIONS } from '../../types/evolution-schema-options';
3
3
 
4
- const VersionRecordDatumSchema = EvoCore.TSchema.Struct({
5
- upgradeId: EvoCore.TSchema.Integer,
4
+ const VersionRecordDatumSchema = TSchema.Struct({
5
+ upgradeId: TSchema.Integer,
6
6
  /// Underlying representation of the following mapping: ValidatorHash -> UpgradePath
7
- upgradePaths: EvoCore.TSchema.Map(
8
- EvoCore.TSchema.ByteArray,
9
- EvoCore.TSchema.ByteArray,
7
+ upgradePaths: TSchema.Array(
8
+ TSchema.Tuple([TSchema.ByteArray, TSchema.ByteArray]),
10
9
  ),
11
10
  });
12
11
  export type VersionRecordDatum = typeof VersionRecordDatumSchema.Type;
13
12
 
14
13
  export function serialiseVersionRecordDatum(d: VersionRecordDatum): string {
15
- return EvoCore.Data.withSchema(
14
+ return Data.withSchema(
16
15
  VersionRecordDatumSchema,
17
16
  DEFAULT_SCHEMA_OPTIONS,
18
17
  ).toCBORHex(d);
package/src/index.ts CHANGED
@@ -1,58 +1,75 @@
1
1
  export * from './contracts/cdp/transactions';
2
2
  export * from './contracts/cdp/helpers';
3
3
  export * from './contracts/cdp/types';
4
+ export * from './contracts/cdp/types-new';
4
5
  export * from './contracts/cdp/scripts';
5
6
  export * from './contracts/cdp-creator/types';
6
7
  export * from './contracts/cdp-creator/scripts';
7
8
  export * from './contracts/poll/scripts';
8
9
  export * from './contracts/collector/transactions';
9
- export * from './contracts/collector/types';
10
+ export * from './contracts/collector/types-new';
10
11
  export * from './contracts/gov/transactions';
11
12
  export * from './contracts/gov/types';
12
13
  export * from './contracts/gov/types-new';
13
14
  export * from './contracts/stability-pool/transactions';
14
- export * from './contracts/stability-pool/types-new';
15
- export * from './contracts/staking/helpers';
16
15
  export * from './contracts/staking/transactions';
17
- export * from './contracts/staking/types';
16
+ export * from './contracts/staking/helpers';
18
17
  export * from './contracts/staking/types-new';
18
+ export * from './contracts/staking/types';
19
19
  export * from './contracts/interest-oracle/transactions';
20
20
  export * from './contracts/interest-oracle/types';
21
- export * from './contracts/interest-oracle/scripts';
21
+ export * from './contracts/interest-oracle/types-new';
22
22
  export * from './contracts/interest-oracle/helpers';
23
- export * from './contracts/price-oracle/transactions';
24
- export * from './contracts/price-oracle/types';
25
- export * from './contracts/price-oracle/helpers';
23
+ export * from './contracts/interest-collection/helpers';
24
+ export * from './contracts/interest-collection/types';
25
+ export * from './contracts/interest-collection/types-new';
26
+ export * from './contracts/interest-collection/scripts';
27
+ export * from './contracts/interest-collection/transactions';
28
+ export * from './contracts/interest-oracle/scripts';
26
29
  export * from './contracts/version-registry/types';
27
30
  export * from './contracts/version-registry/scripts';
28
31
  export * from './contracts/treasury/transactions';
29
- export * from './utils/lucid-utils';
32
+ export * from './contracts/treasury/helpers';
30
33
  export * from './contracts/stability-pool/helpers';
31
34
  export * from './utils/time-helpers';
32
35
  export * from './contracts/cdp/scripts';
33
36
  export * from './contracts/collector/scripts';
34
37
  export * from './contracts/treasury/scripts';
35
- export * from './contracts/treasury/types';
36
38
  export * from './contracts/execute/types';
39
+ export * from './contracts/execute/types-new';
37
40
  export * from './contracts/execute/scripts';
38
41
  export * from './contracts/price-oracle/types';
39
42
  export * from './contracts/stability-pool/types';
43
+ export * from './contracts/stability-pool/types-new';
40
44
  export * from './contracts/poll/types-poll-shard';
41
45
  export * from './contracts/poll/types-poll-manager';
42
- export * from './contracts/poll/types-poll';
43
46
  export * from './types/generic';
47
+ export * from './types/rational';
44
48
  export * from './types/system-params';
45
- export * from './contracts/lrp/helpers';
46
- export * from './contracts/lrp/transactions';
47
- export * from './contracts/lrp/scripts';
48
- export * from './contracts/lrp/types';
49
- export * from './utils/helper-txs';
49
+ export * from './contracts/rob/helpers';
50
+ export * from './contracts/rob/types';
51
+ export * from './contracts/rob/types-new';
52
+ export * from './contracts/rob/transactions';
53
+ export * from './contracts/rob/scripts';
50
54
  export * from './contracts/one-shot/transactions';
55
+ export * from './contracts/rob-leverage/transactions';
56
+ export * from './contracts/rob-leverage/helpers';
57
+ export * from './contracts/price-oracle/transactions';
58
+ export * from './contracts/price-oracle/types';
59
+ export * from './contracts/price-oracle/types-new';
60
+ export * from './contracts/price-oracle/scripts';
51
61
  export * from './utils/utils';
52
62
  export * from './utils/array-utils';
53
- export * from './utils/value-helpers';
54
- export * from './contracts/leverage/transactions';
55
- export * from './contracts/leverage/helpers';
63
+ export * from './utils/lucid-utils';
64
+ export * from './utils/helper-txs';
65
+ export * from './utils/bigint-utils';
56
66
  export * from './contracts/initialize/types';
57
67
  export * from './contracts/initialize/helpers';
58
- export * from './contracts/initialize/transactions';
68
+ export * from './contracts/initialize/actions';
69
+ export * from './utils/pyth';
70
+ export * from './contracts/pyth-feed/types';
71
+ export * from './contracts/pyth-feed/scripts';
72
+ export * from './contracts/iasset/types';
73
+ export * from './contracts/stableswap/helpers';
74
+ export * from './contracts/stableswap/transactions';
75
+ export * from './contracts/stableswap/types-new';
@@ -1,10 +1,11 @@
1
+ import { AssetClass } from '@3rd-eye-labs/cardano-offchain-common';
1
2
  import {
2
3
  applyParamsToScript,
3
4
  Constr,
4
5
  MintingPolicy,
5
6
  ScriptType,
7
+ toHex,
6
8
  } from '@lucid-evolution/lucid';
7
- import { AssetClass } from '../types/generic';
8
9
 
9
10
  const authPolicyData = {
10
11
  type: 'PlutusV2' as ScriptType,
@@ -16,7 +17,7 @@ export function mkAuthTokenPolicy(ac: AssetClass, tn: string): MintingPolicy {
16
17
  return {
17
18
  type: authPolicyData.type,
18
19
  script: applyParamsToScript(authPolicyData.cborHex, [
19
- new Constr(0, [ac.currencySymbol, ac.tokenName]),
20
+ new Constr(0, [toHex(ac.currencySymbol), toHex(ac.tokenName)]),
20
21
  tn,
21
22
  ]),
22
23
  };
@@ -1,10 +1,11 @@
1
+ import { AssetClass } from '@3rd-eye-labs/cardano-offchain-common';
1
2
  import {
2
3
  applyParamsToScript,
3
4
  Constr,
4
5
  MintingPolicy,
5
6
  ScriptType,
7
+ toHex,
6
8
  } from '@lucid-evolution/lucid';
7
- import { AssetClass } from '../types/generic';
8
9
 
9
10
  const iassetPolicyData = {
10
11
  type: 'PlutusV2' as ScriptType,
@@ -16,7 +17,7 @@ export function mkIAssetTokenPolicy(ac: AssetClass): MintingPolicy {
16
17
  return {
17
18
  type: iassetPolicyData.type,
18
19
  script: applyParamsToScript(iassetPolicyData.cborHex, [
19
- new Constr(0, [ac.currencySymbol, ac.tokenName]),
20
+ new Constr(0, [toHex(ac.currencySymbol), toHex(ac.tokenName)]),
20
21
  ]),
21
22
  };
22
23
  }
@@ -1,6 +1,6 @@
1
- import { CodecOptions } from '@evolution-sdk/evolution/core/CBOR';
1
+ import { CBOR } from '@evolution-sdk/evolution';
2
2
 
3
- /**
3
+ /**`
4
4
  * This is related to our on-chain codebase for aiken v1.0.26-alpha
5
5
  */
6
6
  export const DEFAULT_SCHEMA_OPTIONS = {
@@ -13,4 +13,4 @@ export const DEFAULT_SCHEMA_OPTIONS = {
13
13
  useMinimalEncoding: true,
14
14
  mapsAsObjects: false,
15
15
  encodeMapAsPairs: false,
16
- } as const satisfies CodecOptions;
16
+ } as const satisfies CBOR.CodecOptions;
@@ -1,24 +1,23 @@
1
- import {
2
- credentialToAddress,
3
- Data,
4
- getAddressDetails,
5
- Credential,
6
- Network,
7
- } from '@lucid-evolution/lucid';
8
- import { match, P } from 'ts-pattern';
1
+ import { AssetClass } from '@3rd-eye-labs/cardano-offchain-common';
2
+ import { Data, fromHex, toHex, UTxO } from '@lucid-evolution/lucid';
9
3
 
10
4
  export const AssetClassSchema = Data.Object({
11
5
  currencySymbol: Data.Bytes(),
12
6
  /** Use the HEX encoding */
13
7
  tokenName: Data.Bytes(),
14
8
  });
15
- export type AssetClass = Data.Static<typeof AssetClassSchema>;
9
+ export type AssetClassD = Data.Static<typeof AssetClassSchema>;
16
10
 
17
- export const OutputReferenceSchema = Data.Object({
18
- txHash: Data.Object({ hash: Data.Bytes() }),
19
- outputIndex: Data.Integer(),
20
- });
21
- export type OutputReference = Data.Static<typeof OutputReferenceSchema>;
11
+ export function toAssetClassFromLucid(asset: AssetClassD): AssetClass {
12
+ return {
13
+ currencySymbol: fromHex(asset.currencySymbol),
14
+ tokenName: fromHex(asset.tokenName),
15
+ };
16
+ }
17
+
18
+ export function getAssetClassComparisonStr(asset: AssetClass): string {
19
+ return `${toHex(asset.currencySymbol)}${toHex(asset.tokenName)}`;
20
+ }
22
21
 
23
22
  export const VerificationKeyHashSchema = Data.Bytes();
24
23
 
@@ -46,79 +45,8 @@ export const StakeCredentialSchema = Data.Enum([
46
45
  }),
47
46
  ]);
48
47
 
49
- export const AddressSchema = Data.Object({
50
- paymentCredential: CredentialSchema,
51
- stakeCredential: Data.Nullable(StakeCredentialSchema),
52
- });
53
- export type AddressD = Data.Static<typeof AddressSchema>;
54
- export const AddressD = AddressSchema as unknown as AddressD;
55
-
56
- export function addressToBech32(address: AddressD, network: Network): string {
57
- const matchCred = (cred: CredentialD) =>
58
- match(cred)
59
- .returnType<Credential>()
60
- .with({ PublicKeyCredential: [P.select()] }, (pkh) => {
61
- return { type: 'Key', hash: pkh };
62
- })
63
- .with({ ScriptCredential: [P.select()] }, (scriptCred) => {
64
- return { type: 'Script', hash: scriptCred };
65
- })
66
- .exhaustive();
67
-
68
- const stakeCred: Credential | undefined = match(address.stakeCredential)
69
- .returnType<Credential | undefined>()
70
- .with(P.nullish, () => undefined)
71
- .with({ Inline: [P.select()] }, (cred) => matchCred(cred))
72
- .otherwise(() => {
73
- throw new Error('Unexpected stake credential format.');
74
- });
48
+ export type StakeCredential = Data.Static<typeof StakeCredentialSchema>;
49
+ export const StakeCredential =
50
+ StakeCredentialSchema as unknown as StakeCredential;
75
51
 
76
- const cred: Credential = matchCred(address.paymentCredential);
77
-
78
- return credentialToAddress(network, cred, stakeCred);
79
- }
80
-
81
- export function addressFromBech32(address: string): AddressD {
82
- const details = getAddressDetails(address);
83
-
84
- const matchCred = (cred: Credential): CredentialD => {
85
- return match(cred)
86
- .returnType<CredentialD>()
87
- .with({ type: 'Key', hash: P.select() }, (pkh) => {
88
- return {
89
- PublicKeyCredential: [pkh],
90
- };
91
- })
92
- .with({ type: 'Script', hash: P.select() }, (scriptHash) => ({
93
- ScriptCredential: [scriptHash],
94
- }))
95
- .exhaustive();
96
- };
97
-
98
- return match(details)
99
- .returnType<AddressD>()
100
- .with(
101
- { paymentCredential: P.nullish },
102
- { type: P.not(P.union('Base', 'Enterprise')) },
103
- (_) => {
104
- throw new Error('Invalid address provided');
105
- },
106
- )
107
- .narrow()
108
- .otherwise((details) => ({
109
- paymentCredential: matchCred(details.paymentCredential),
110
- stakeCredential: details.stakeCredential
111
- ? {
112
- Inline: [matchCred(details.stakeCredential)],
113
- }
114
- : null,
115
- }));
116
- }
117
-
118
- export interface CurrencySymbol {
119
- unCurrencySymbol: string;
120
- }
121
-
122
- export interface TokenName {
123
- unTokenName: string;
124
- }
52
+ export type ParsedOutput<T> = { utxo: UTxO; datum: T };
@@ -0,0 +1,48 @@
1
+ import { TSchema, Data } from '@evolution-sdk/evolution';
2
+ import { Schema } from 'effect';
3
+
4
+ const OpaqueData = Schema.typeSchema(Data.DataSchema);
5
+
6
+ export const MultisigSchema = TSchema.Union(
7
+ TSchema.Struct(
8
+ {
9
+ Signature: TSchema.Struct(
10
+ {
11
+ keyHash: TSchema.ByteArray,
12
+ },
13
+ { flatFields: true },
14
+ ),
15
+ },
16
+ { flatInUnion: true },
17
+ ),
18
+ TSchema.Struct(
19
+ {
20
+ AtLeast: TSchema.Struct(
21
+ {
22
+ required: TSchema.Integer,
23
+ authSignatories: TSchema.Array(OpaqueData),
24
+ },
25
+ { flatFields: true },
26
+ ),
27
+ },
28
+ { flatInUnion: true },
29
+ ),
30
+ );
31
+
32
+ export type Multisig = typeof MultisigSchema.Type;
33
+
34
+ export function parseMultisig(datum: string): Multisig {
35
+ return Data.withSchema(MultisigSchema).fromCBORHex(datum);
36
+ }
37
+
38
+ export function fromDataMultisig(data: Data.Data): Multisig {
39
+ return Data.withSchema(MultisigSchema).fromCBORHex(Data.toCBORHex(data));
40
+ }
41
+
42
+ export function toDataMultisig(data: Multisig): Data.Data {
43
+ return Data.withSchema(MultisigSchema).toData(data);
44
+ }
45
+
46
+ export function serialiseMultisig(datum: Multisig): string {
47
+ return Data.withSchema(MultisigSchema).toCBORHex(datum);
48
+ }
@@ -1,12 +1,13 @@
1
- import { Data } from '@lucid-evolution/lucid';
1
+ import { TSchema } from '@evolution-sdk/evolution';
2
+ import { divideOnChainCompatible } from '../utils/bigint-utils';
2
3
 
3
4
  export const OCD_DECIMAL_UNIT: bigint = 1_000_000n;
4
5
 
5
- export const OnChainDecimalSchema = Data.Object({
6
- getOnChainInt: Data.Integer(),
6
+ export const OnChainDecimalSchema = TSchema.Struct({
7
+ getOnChainInt: TSchema.Integer,
7
8
  });
8
- export type OnChainDecimal = Data.Static<typeof OnChainDecimalSchema>;
9
- export const OnChainDecimal = OnChainDecimalSchema as unknown as OnChainDecimal;
9
+
10
+ export type OnChainDecimal = typeof OnChainDecimalSchema.Type;
10
11
 
11
12
  export function ocdCeil(a: OnChainDecimal): bigint {
12
13
  const whole = a.getOnChainInt / OCD_DECIMAL_UNIT;
@@ -24,13 +25,19 @@ export function ocdNegate(a: OnChainDecimal): OnChainDecimal {
24
25
 
25
26
  export function ocdMul(a: OnChainDecimal, b: OnChainDecimal): OnChainDecimal {
26
27
  return {
27
- getOnChainInt: (a.getOnChainInt * b.getOnChainInt) / OCD_DECIMAL_UNIT,
28
+ getOnChainInt: divideOnChainCompatible(
29
+ a.getOnChainInt * b.getOnChainInt,
30
+ OCD_DECIMAL_UNIT,
31
+ ),
28
32
  };
29
33
  }
30
34
 
31
35
  export function ocdDiv(a: OnChainDecimal, b: OnChainDecimal): OnChainDecimal {
32
36
  return {
33
- getOnChainInt: (a.getOnChainInt * OCD_DECIMAL_UNIT) / b.getOnChainInt,
37
+ getOnChainInt: divideOnChainCompatible(
38
+ a.getOnChainInt * OCD_DECIMAL_UNIT,
39
+ b.getOnChainInt,
40
+ ),
34
41
  };
35
42
  }
36
43
 
@@ -0,0 +1,61 @@
1
+ import { TSchema } from '@evolution-sdk/evolution';
2
+ import { divideOnChainCompatible } from '../utils/bigint-utils';
3
+
4
+ export const RationalSchema = TSchema.Struct({
5
+ numerator: TSchema.Integer,
6
+ denominator: TSchema.Integer,
7
+ });
8
+
9
+ export type Rational = typeof RationalSchema.Type;
10
+
11
+ export const rationalZero: Rational = { numerator: 0n, denominator: 1n };
12
+
13
+ export function rationalFromInt(a: bigint): Rational {
14
+ return { numerator: a, denominator: 1n };
15
+ }
16
+
17
+ export function rationalFloor(a: Rational): bigint {
18
+ return divideOnChainCompatible(a.numerator, a.denominator);
19
+ }
20
+
21
+ export function rationalCeil(a: Rational): bigint {
22
+ const intDiv = a.numerator / a.denominator;
23
+ return a.numerator % a.denominator > 0n ? intDiv + 1n : intDiv;
24
+ }
25
+
26
+ export function rationalNegate(a: Rational): Rational {
27
+ return { numerator: -a.numerator, denominator: a.denominator };
28
+ }
29
+
30
+ export function rationalAdd(a: Rational, b: Rational): Rational {
31
+ return {
32
+ numerator: a.numerator * b.denominator + b.numerator * a.denominator,
33
+ denominator: a.denominator * b.denominator,
34
+ };
35
+ }
36
+
37
+ export function rationalSub(a: Rational, b: Rational): Rational {
38
+ return {
39
+ numerator: a.numerator * b.denominator - b.numerator * a.denominator,
40
+ denominator: a.denominator * b.denominator,
41
+ };
42
+ }
43
+
44
+ export function rationalMul(a: Rational, b: Rational): Rational {
45
+ return {
46
+ numerator: a.numerator * b.numerator,
47
+ denominator: a.denominator * b.denominator,
48
+ };
49
+ }
50
+
51
+ export function rationalDiv(a: Rational, b: Rational): Rational {
52
+ if (b.numerator === 0n) throw new Error('Cannot divide by zero.');
53
+ return {
54
+ numerator: a.numerator * b.denominator,
55
+ denominator: a.denominator * b.numerator,
56
+ };
57
+ }
58
+
59
+ export function rationalToFloat(a: Rational): number {
60
+ return Number(a.numerator) / Number(a.denominator);
61
+ }