@recoillink/radix-sdk 0.0.0-stage → 45.0.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 (200) hide show
  1. package/LICENSE.md +193 -0
  2. package/README.md +42 -2
  3. package/dist/clients/protocol.d.ts +31 -0
  4. package/dist/clients/protocol.d.ts.map +1 -0
  5. package/dist/clients/protocol.js +95 -0
  6. package/dist/clients/protocol.js.map +1 -0
  7. package/dist/clients/provider.d.ts +60 -0
  8. package/dist/clients/provider.d.ts.map +1 -0
  9. package/dist/clients/provider.js +187 -0
  10. package/dist/clients/provider.js.map +1 -0
  11. package/dist/clients/signer.d.ts +24 -0
  12. package/dist/clients/signer.d.ts.map +1 -0
  13. package/dist/clients/signer.js +86 -0
  14. package/dist/clients/signer.js.map +1 -0
  15. package/dist/hook/hook-artifact-manager.d.ts +17 -0
  16. package/dist/hook/hook-artifact-manager.d.ts.map +1 -0
  17. package/dist/hook/hook-artifact-manager.js +60 -0
  18. package/dist/hook/hook-artifact-manager.js.map +1 -0
  19. package/dist/hook/hook-query.d.ts +22 -0
  20. package/dist/hook/hook-query.d.ts.map +1 -0
  21. package/dist/hook/hook-query.js +79 -0
  22. package/dist/hook/hook-query.js.map +1 -0
  23. package/dist/hook/hook-tx.d.ts +21 -0
  24. package/dist/hook/hook-tx.d.ts.map +1 -0
  25. package/dist/hook/hook-tx.js +26 -0
  26. package/dist/hook/hook-tx.js.map +1 -0
  27. package/dist/hook/igp-hook.d.ts +24 -0
  28. package/dist/hook/igp-hook.d.ts.map +1 -0
  29. package/dist/hook/igp-hook.js +148 -0
  30. package/dist/hook/igp-hook.js.map +1 -0
  31. package/dist/hook/merkle-tree-hook.d.ts +24 -0
  32. package/dist/hook/merkle-tree-hook.d.ts.map +1 -0
  33. package/dist/hook/merkle-tree-hook.js +51 -0
  34. package/dist/hook/merkle-tree-hook.js.map +1 -0
  35. package/dist/index.d.ts +13 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +12 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/ism/ism-artifact-manager.d.ts +14 -0
  40. package/dist/ism/ism-artifact-manager.d.ts.map +1 -0
  41. package/dist/ism/ism-artifact-manager.js +67 -0
  42. package/dist/ism/ism-artifact-manager.js.map +1 -0
  43. package/dist/ism/ism-query.d.ts +23 -0
  44. package/dist/ism/ism-query.d.ts.map +1 -0
  45. package/dist/ism/ism-query.js +84 -0
  46. package/dist/ism/ism-query.js.map +1 -0
  47. package/dist/ism/ism-tx.d.ts +31 -0
  48. package/dist/ism/ism-tx.d.ts.map +1 -0
  49. package/dist/ism/ism-tx.js +43 -0
  50. package/dist/ism/ism-tx.js.map +1 -0
  51. package/dist/ism/multisig-ism.d.ts +38 -0
  52. package/dist/ism/multisig-ism.d.ts.map +1 -0
  53. package/dist/ism/multisig-ism.js +107 -0
  54. package/dist/ism/multisig-ism.js.map +1 -0
  55. package/dist/ism/routing-ism.d.ts +23 -0
  56. package/dist/ism/routing-ism.d.ts.map +1 -0
  57. package/dist/ism/routing-ism.js +129 -0
  58. package/dist/ism/routing-ism.js.map +1 -0
  59. package/dist/ism/test-ism.d.ts +23 -0
  60. package/dist/ism/test-ism.d.ts.map +1 -0
  61. package/dist/ism/test-ism.js +49 -0
  62. package/dist/ism/test-ism.js.map +1 -0
  63. package/dist/mailbox/mailbox-artifact-manager.d.ts +15 -0
  64. package/dist/mailbox/mailbox-artifact-manager.d.ts.map +1 -0
  65. package/dist/mailbox/mailbox-artifact-manager.js +29 -0
  66. package/dist/mailbox/mailbox-artifact-manager.js.map +1 -0
  67. package/dist/mailbox/mailbox-query.d.ts +12 -0
  68. package/dist/mailbox/mailbox-query.d.ts.map +1 -0
  69. package/dist/mailbox/mailbox-query.js +72 -0
  70. package/dist/mailbox/mailbox-query.js.map +1 -0
  71. package/dist/mailbox/mailbox-query.test.d.ts +2 -0
  72. package/dist/mailbox/mailbox-query.test.d.ts.map +1 -0
  73. package/dist/mailbox/mailbox-query.test.js +65 -0
  74. package/dist/mailbox/mailbox-query.test.js.map +1 -0
  75. package/dist/mailbox/mailbox-tx.d.ts +21 -0
  76. package/dist/mailbox/mailbox-tx.d.ts.map +1 -0
  77. package/dist/mailbox/mailbox-tx.js +27 -0
  78. package/dist/mailbox/mailbox-tx.js.map +1 -0
  79. package/dist/mailbox/mailbox.d.ts +24 -0
  80. package/dist/mailbox/mailbox.d.ts.map +1 -0
  81. package/dist/mailbox/mailbox.js +171 -0
  82. package/dist/mailbox/mailbox.js.map +1 -0
  83. package/dist/runtime.d.ts +7 -0
  84. package/dist/runtime.d.ts.map +1 -0
  85. package/dist/runtime.js +6 -0
  86. package/dist/runtime.js.map +1 -0
  87. package/dist/testing/constants.d.ts +61 -0
  88. package/dist/testing/constants.d.ts.map +1 -0
  89. package/dist/testing/constants.js +65 -0
  90. package/dist/testing/constants.js.map +1 -0
  91. package/dist/testing/index.d.ts +8 -0
  92. package/dist/testing/index.d.ts.map +1 -0
  93. package/dist/testing/index.js +11 -0
  94. package/dist/testing/index.js.map +1 -0
  95. package/dist/testing/node.d.ts +13 -0
  96. package/dist/testing/node.d.ts.map +1 -0
  97. package/dist/testing/node.js +42 -0
  98. package/dist/testing/node.js.map +1 -0
  99. package/dist/testing/setup.d.ts +20 -0
  100. package/dist/testing/setup.d.ts.map +1 -0
  101. package/dist/testing/setup.js +57 -0
  102. package/dist/testing/setup.js.map +1 -0
  103. package/dist/tests/e2e-test.setup.d.ts +3 -0
  104. package/dist/tests/e2e-test.setup.d.ts.map +1 -0
  105. package/dist/tests/e2e-test.setup.js +32 -0
  106. package/dist/tests/e2e-test.setup.js.map +1 -0
  107. package/dist/tests/hook.e2e-test.d.ts +2 -0
  108. package/dist/tests/hook.e2e-test.d.ts.map +1 -0
  109. package/dist/tests/hook.e2e-test.js +374 -0
  110. package/dist/tests/hook.e2e-test.js.map +1 -0
  111. package/dist/tests/ism.e2e-test.d.ts +2 -0
  112. package/dist/tests/ism.e2e-test.d.ts.map +1 -0
  113. package/dist/tests/ism.e2e-test.js +256 -0
  114. package/dist/tests/ism.e2e-test.js.map +1 -0
  115. package/dist/tests/mailbox.e2e-test.d.ts +2 -0
  116. package/dist/tests/mailbox.e2e-test.d.ts.map +1 -0
  117. package/dist/tests/mailbox.e2e-test.js +250 -0
  118. package/dist/tests/mailbox.e2e-test.js.map +1 -0
  119. package/dist/tests/validator-announce.e2e-test.d.ts +2 -0
  120. package/dist/tests/validator-announce.e2e-test.d.ts.map +1 -0
  121. package/dist/tests/validator-announce.e2e-test.js +107 -0
  122. package/dist/tests/validator-announce.e2e-test.js.map +1 -0
  123. package/dist/tests/warp.e2e-test.d.ts +2 -0
  124. package/dist/tests/warp.e2e-test.d.ts.map +1 -0
  125. package/dist/tests/warp.e2e-test.js +597 -0
  126. package/dist/tests/warp.e2e-test.js.map +1 -0
  127. package/dist/utils/base-query.d.ts +188 -0
  128. package/dist/utils/base-query.d.ts.map +1 -0
  129. package/dist/utils/base-query.js +209 -0
  130. package/dist/utils/base-query.js.map +1 -0
  131. package/dist/utils/base.d.ts +67 -0
  132. package/dist/utils/base.d.ts.map +1 -0
  133. package/dist/utils/base.js +355 -0
  134. package/dist/utils/base.js.map +1 -0
  135. package/dist/utils/constants.d.ts +20 -0
  136. package/dist/utils/constants.d.ts.map +1 -0
  137. package/dist/utils/constants.js +20 -0
  138. package/dist/utils/constants.js.map +1 -0
  139. package/dist/utils/signer.d.ts +17 -0
  140. package/dist/utils/signer.d.ts.map +1 -0
  141. package/dist/utils/signer.js +60 -0
  142. package/dist/utils/signer.js.map +1 -0
  143. package/dist/utils/types.d.ts +141 -0
  144. package/dist/utils/types.d.ts.map +1 -0
  145. package/dist/utils/types.js +39 -0
  146. package/dist/utils/types.js.map +1 -0
  147. package/dist/utils/utils.d.ts +8 -0
  148. package/dist/utils/utils.d.ts.map +1 -0
  149. package/dist/utils/utils.js +47 -0
  150. package/dist/utils/utils.js.map +1 -0
  151. package/dist/utils/utils.test.d.ts +2 -0
  152. package/dist/utils/utils.test.d.ts.map +1 -0
  153. package/dist/utils/utils.test.js +27 -0
  154. package/dist/utils/utils.test.js.map +1 -0
  155. package/dist/validator-announce/validator-announce-artifact-manager.d.ts +14 -0
  156. package/dist/validator-announce/validator-announce-artifact-manager.d.ts.map +1 -0
  157. package/dist/validator-announce/validator-announce-artifact-manager.js +21 -0
  158. package/dist/validator-announce/validator-announce-artifact-manager.js.map +1 -0
  159. package/dist/validator-announce/validator-announce-query.d.ts +6 -0
  160. package/dist/validator-announce/validator-announce-query.d.ts.map +1 -0
  161. package/dist/validator-announce/validator-announce-query.js +10 -0
  162. package/dist/validator-announce/validator-announce-query.js.map +1 -0
  163. package/dist/validator-announce/validator-announce-tx.d.ts +4 -0
  164. package/dist/validator-announce/validator-announce-tx.d.ts.map +1 -0
  165. package/dist/validator-announce/validator-announce-tx.js +6 -0
  166. package/dist/validator-announce/validator-announce-tx.js.map +1 -0
  167. package/dist/validator-announce/validator-announce.d.ts +23 -0
  168. package/dist/validator-announce/validator-announce.d.ts.map +1 -0
  169. package/dist/validator-announce/validator-announce.js +52 -0
  170. package/dist/validator-announce/validator-announce.js.map +1 -0
  171. package/dist/warp/collateral-token.d.ts +23 -0
  172. package/dist/warp/collateral-token.d.ts.map +1 -0
  173. package/dist/warp/collateral-token.js +130 -0
  174. package/dist/warp/collateral-token.js.map +1 -0
  175. package/dist/warp/populate.d.ts +71 -0
  176. package/dist/warp/populate.d.ts.map +1 -0
  177. package/dist/warp/populate.js +110 -0
  178. package/dist/warp/populate.js.map +1 -0
  179. package/dist/warp/query.d.ts +44 -0
  180. package/dist/warp/query.d.ts.map +1 -0
  181. package/dist/warp/query.js +163 -0
  182. package/dist/warp/query.js.map +1 -0
  183. package/dist/warp/synthetic-token.d.ts +23 -0
  184. package/dist/warp/synthetic-token.d.ts.map +1 -0
  185. package/dist/warp/synthetic-token.js +131 -0
  186. package/dist/warp/synthetic-token.js.map +1 -0
  187. package/dist/warp/warp-artifact-manager.d.ts +15 -0
  188. package/dist/warp/warp-artifact-manager.d.ts.map +1 -0
  189. package/dist/warp/warp-artifact-manager.js +49 -0
  190. package/dist/warp/warp-artifact-manager.js.map +1 -0
  191. package/dist/warp/warp-query.d.ts +9 -0
  192. package/dist/warp/warp-query.d.ts.map +1 -0
  193. package/dist/warp/warp-query.js +130 -0
  194. package/dist/warp/warp-query.js.map +1 -0
  195. package/dist/warp/warp-tx.d.ts +48 -0
  196. package/dist/warp/warp-tx.d.ts.map +1 -0
  197. package/dist/warp/warp-tx.js +125 -0
  198. package/dist/warp/warp-tx.js.map +1 -0
  199. package/docker-compose.yml +139 -0
  200. package/package.json +74 -3
@@ -0,0 +1,130 @@
1
+ import { assert, ensure0x } from '@recoillink/utils';
2
+ import { getComponentOwner, getComponentState, getFieldHexValueFromEntityState, getFieldPropertyFromEntityState, getFieldValueFromEntityState, getKeysFromKvStore, getRadixComponentDetails, getResourceAddress, tryGetFieldValueFromEntityState, } from '../utils/base-query.js';
3
+ import { RADIX_COMPONENT_NAMES, RADIX_WARP_TOKEN_FIELD_NAMES, RadixWarpTokenType, } from '../utils/types.js';
4
+ export function providerWarpTokenTypeFromRadixTokenType(tokenType) {
5
+ switch (tokenType) {
6
+ case RadixWarpTokenType.COLLATERAL:
7
+ return 'collateral';
8
+ case RadixWarpTokenType.SYNTHETIC:
9
+ return 'synthetic';
10
+ default: {
11
+ const invalidValue = tokenType;
12
+ throw new Error(`Unknown warp token type: ${invalidValue}`);
13
+ }
14
+ }
15
+ }
16
+ export async function getRadixWarpTokenType(gateway, tokenAddress) {
17
+ const { tokenType } = await getRawWarpTokenData(gateway, tokenAddress);
18
+ return tokenType;
19
+ }
20
+ export async function getCollateralWarpTokenConfig(gateway, base, tokenAddress) {
21
+ const [tokenState, baseTokenData] = await getWarpTokenConfig(gateway, tokenAddress);
22
+ assert(baseTokenData.type === RadixWarpTokenType.COLLATERAL, `Expected token at address ${tokenAddress} to be of type ${RadixWarpTokenType.COLLATERAL} but got ${baseTokenData.type}`);
23
+ const tokenTypeFields = getFieldPropertyFromEntityState(RADIX_WARP_TOKEN_FIELD_NAMES.TOKEN_TYPE, tokenAddress, tokenState, 'fields');
24
+ const collateralTokenAddress = getResourceAddress(tokenAddress, {
25
+ fields: tokenTypeFields,
26
+ });
27
+ const metadata = await base.getMetadata({ resource: collateralTokenAddress });
28
+ return {
29
+ mailbox: baseTokenData.mailbox,
30
+ owner: baseTokenData.owner,
31
+ token: collateralTokenAddress,
32
+ type: RadixWarpTokenType.COLLATERAL,
33
+ destinationGas: baseTokenData.destinationGas,
34
+ interchainSecurityModule: baseTokenData.interchainSecurityModule,
35
+ remoteRouters: baseTokenData.remoteRouters,
36
+ decimals: metadata.decimals,
37
+ name: metadata.name,
38
+ symbol: metadata.symbol,
39
+ };
40
+ }
41
+ export async function getSyntheticWarpTokenConfig(gateway, base, tokenAddress) {
42
+ const [tokenState, baseTokenData] = await getWarpTokenConfig(gateway, tokenAddress);
43
+ assert(baseTokenData.type === RadixWarpTokenType.SYNTHETIC, `Expected token at address ${tokenAddress} to be of type ${RadixWarpTokenType.SYNTHETIC} but got ${baseTokenData.type}`);
44
+ const resourceManagerFields = tokenState.fields.find((f) => f.field_name === RADIX_WARP_TOKEN_FIELD_NAMES.RESOURCE_MANAGER)?.fields ?? [];
45
+ const syntheticResourceAddress = getResourceAddress(tokenAddress, {
46
+ fields: resourceManagerFields,
47
+ });
48
+ const metadata = await base.getMetadata({
49
+ resource: syntheticResourceAddress,
50
+ });
51
+ return {
52
+ mailbox: baseTokenData.mailbox,
53
+ owner: baseTokenData.owner,
54
+ type: RadixWarpTokenType.SYNTHETIC,
55
+ destinationGas: baseTokenData.destinationGas,
56
+ interchainSecurityModule: baseTokenData.interchainSecurityModule,
57
+ remoteRouters: baseTokenData.remoteRouters,
58
+ decimals: metadata.decimals,
59
+ name: metadata.name,
60
+ symbol: metadata.symbol,
61
+ };
62
+ }
63
+ async function getRawWarpTokenData(gateway, tokenAddress) {
64
+ const tokenDetails = await getRadixComponentDetails(gateway, tokenAddress, RADIX_COMPONENT_NAMES.HYP_TOKEN);
65
+ assert(tokenDetails.blueprint_name === RADIX_COMPONENT_NAMES.HYP_TOKEN, `Expected component at address ${tokenAddress} to be "HypToken" but got ${tokenDetails.blueprint_name}`);
66
+ const tokenState = getComponentState(tokenAddress, tokenDetails);
67
+ const tokenType = getFieldPropertyFromEntityState(RADIX_WARP_TOKEN_FIELD_NAMES.TOKEN_TYPE, tokenAddress, tokenState, 'variant_name');
68
+ assert(tokenType === RadixWarpTokenType.COLLATERAL ||
69
+ tokenType === RadixWarpTokenType.SYNTHETIC, `Unknown token type: ${tokenType}`);
70
+ return {
71
+ tokenType,
72
+ tokenDetails,
73
+ };
74
+ }
75
+ async function getWarpTokenConfig(gateway, tokenAddress) {
76
+ const { tokenDetails, tokenType } = await getRawWarpTokenData(gateway, tokenAddress);
77
+ const owner = await getComponentOwner(gateway, tokenAddress, tokenDetails);
78
+ const tokenState = getComponentState(tokenAddress, tokenDetails);
79
+ const ismAddress = tryGetFieldValueFromEntityState(RADIX_WARP_TOKEN_FIELD_NAMES.ISM, tokenState);
80
+ const mailboxAddress = getFieldValueFromEntityState(RADIX_WARP_TOKEN_FIELD_NAMES.MAILBOX, tokenAddress, tokenState);
81
+ const { destinationGas, remoteRouters } = await getWarpTokenRemoteRoutersConfig(gateway, tokenAddress, tokenState);
82
+ return [
83
+ tokenState,
84
+ {
85
+ type: tokenType,
86
+ mailbox: mailboxAddress,
87
+ owner,
88
+ destinationGas,
89
+ interchainSecurityModule: ismAddress,
90
+ remoteRouters,
91
+ },
92
+ ];
93
+ }
94
+ async function getWarpTokenRemoteRoutersConfig(gateway, tokenAddress, tokenState) {
95
+ const destinationGas = {};
96
+ const remoteRouters = {};
97
+ const remote_routers_kv_address = getFieldValueFromEntityState(RADIX_WARP_TOKEN_FIELD_NAMES.ENROLLED_ROUTERS, tokenAddress, tokenState);
98
+ const keys = await getKeysFromKvStore(gateway, remote_routers_kv_address);
99
+ for (const key of keys) {
100
+ const { entries } = await gateway.state.innerClient.keyValueStoreData({
101
+ stateKeyValueStoreDataRequest: {
102
+ key_value_store_address: remote_routers_kv_address,
103
+ keys: [{ key_hex: key.raw_hex }],
104
+ },
105
+ });
106
+ const rawRemoteDomain = key.programmatic_json;
107
+ assert(rawRemoteDomain.kind === 'U32', `Expected domain id to be stored as a number on warp token at address ${tokenAddress}`);
108
+ const domainId = parseInt(rawRemoteDomain.value);
109
+ const [entry] = entries;
110
+ assert(entry, `Expected to find at least one entry with key ${domainId} on warp token at address ${tokenAddress}`);
111
+ const rawRouter = entry.value.programmatic_json;
112
+ assert(rawRouter.kind === 'Tuple', `Expected router to be an object on warp token at address ${tokenAddress}`);
113
+ const routerFields = rawRouter.fields ?? [];
114
+ const remoteAddress = getFieldHexValueFromEntityState(RADIX_WARP_TOKEN_FIELD_NAMES.RECIPIENT, tokenAddress, {
115
+ fields: routerFields,
116
+ }, ensure0x);
117
+ const gas = tryGetFieldValueFromEntityState(RADIX_WARP_TOKEN_FIELD_NAMES.GAS, {
118
+ fields: routerFields,
119
+ }) ?? '0';
120
+ destinationGas[domainId] = gas;
121
+ remoteRouters[domainId] = {
122
+ address: remoteAddress,
123
+ };
124
+ }
125
+ return {
126
+ destinationGas,
127
+ remoteRouters,
128
+ };
129
+ }
130
+ //# sourceMappingURL=warp-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warp-query.js","sourceRoot":"","sources":["../../src/warp/warp-query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { GatewayApiClient } from '@radixdlt/babylon-gateway-api-sdk';
2
+ import { TransactionManifest } from '@radixdlt/radix-engine-toolkit';
3
+ import { ArtifactDeployed } from '@recoillink/provider-sdk/artifact';
4
+ import { DeployedWarpAddress, RawWarpArtifactConfig } from '@recoillink/provider-sdk/warp';
5
+ import { RadixBase } from '../utils/base.js';
6
+ import { AnnotatedRadixTransaction } from '../utils/types.js';
7
+ export declare function getCreateCollateralTokenTx(base: Readonly<RadixBase>, fromAddress: string, { mailbox, originDenom, }: {
8
+ mailbox: string;
9
+ originDenom: string;
10
+ }): Promise<TransactionManifest>;
11
+ export declare function getCreateSyntheticTokenTx(base: Readonly<RadixBase>, fromAddress: string, { mailbox, name, symbol, divisibility, }: {
12
+ mailbox: string;
13
+ name: string;
14
+ symbol: string;
15
+ divisibility: number;
16
+ }): Promise<TransactionManifest>;
17
+ export declare function getSetTokenOwnerTx(base: Readonly<RadixBase>, gateway: Readonly<GatewayApiClient>, fromAddress: string, { tokenAddress, newOwner, }: {
18
+ tokenAddress: string;
19
+ newOwner: string;
20
+ }): Promise<TransactionManifest>;
21
+ export declare function getSetTokenIsmTx(base: Readonly<RadixBase>, fromAddress: string, { tokenAddress, ismAddress, }: {
22
+ tokenAddress: string;
23
+ ismAddress?: string;
24
+ }): Promise<TransactionManifest>;
25
+ export declare function getEnrollRemoteRouterTx(base: Readonly<RadixBase>, fromAddress: string, { tokenAddress, remoteDomainId, remoteRouterAddress, destinationGas, }: {
26
+ tokenAddress: string;
27
+ remoteDomainId: number;
28
+ remoteRouterAddress: string;
29
+ destinationGas: string;
30
+ }): Promise<TransactionManifest>;
31
+ export declare function getUnenrollRemoteRouterTx(base: Readonly<RadixBase>, fromAddress: string, { tokenAddress, remoteDomainId, }: {
32
+ tokenAddress: string;
33
+ remoteDomainId: number;
34
+ }): Promise<TransactionManifest>;
35
+ /**
36
+ * Generates update transactions for a warp token by comparing current on-chain state
37
+ * with desired configuration. Returns transactions for ISM updates, router enrollment/unenrollment,
38
+ * and ownership transfer (always last).
39
+ *
40
+ * @param expectedArtifactState The desired warp token configuration with deployment address
41
+ * @param reader Reader instance to fetch current on-chain state
42
+ * @param base RadixBase instance for transaction building
43
+ * @param gateway GatewayApiClient for owner queries
44
+ * @param signerAddress Address of the transaction signer
45
+ * @returns Array of transactions to execute in order
46
+ */
47
+ export declare function getWarpTokenUpdateTxs<TConfig extends RawWarpArtifactConfig>(expectedArtifactState: ArtifactDeployed<TConfig, DeployedWarpAddress>, currentArtifactState: ArtifactDeployed<TConfig, DeployedWarpAddress>, base: Readonly<RadixBase>, gateway: Readonly<GatewayApiClient>, signerAddress: string): Promise<AnnotatedRadixTransaction[]>;
48
+ //# sourceMappingURL=warp-tx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warp-tx.d.ts","sourceRoot":"","sources":["../../src/warp/warp-tx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EACL,mBAAmB,EAOpB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EAEtB,MAAM,+BAA+B,CAAC;AAavC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACL,yBAAyB,EAG1B,MAAM,mBAAmB,CAAC;AAQ3B,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,EACzB,WAAW,EAAE,MAAM,EACnB,EACE,OAAO,EACP,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB,GACA,OAAO,CAAC,mBAAmB,CAAC,CAQ9B;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,EACzB,WAAW,EAAE,MAAM,EACnB,EACE,OAAO,EACP,IAAI,EACJ,MAAM,EACN,YAAY,GACb,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB,GACA,OAAO,CAAC,mBAAmB,CAAC,CAW9B;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,EACzB,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACnC,WAAW,EAAE,MAAM,EACnB,EACE,YAAY,EACZ,QAAQ,GACT,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,mBAAmB,CAAC,CA0B9B;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,EACzB,WAAW,EAAE,MAAM,EACnB,EACE,YAAY,EACZ,UAAU,GACX,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,OAAO,CAAC,mBAAmB,CAAC,CAa9B;AAED,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,EACzB,WAAW,EAAE,MAAM,EACnB,EACE,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,cAAc,GACf,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;CACxB,GACA,OAAO,CAAC,mBAAmB,CAAC,CAW9B;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,EACzB,WAAW,EAAE,MAAM,EACnB,EACE,YAAY,EACZ,cAAc,GACf,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB,GACA,OAAO,CAAC,mBAAmB,CAAC,CAO9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,SAAS,qBAAqB,EAErC,qBAAqB,EAAE,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,CAAC,EACrE,oBAAoB,EAAE,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,CAAC,EACpE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,EACzB,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACnC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAsEtC"}
@@ -0,0 +1,125 @@
1
+ import { address, decimal, enumeration, str, u8, u32, } from '@radixdlt/radix-engine-toolkit';
2
+ import { computeRemoteRoutersUpdates, } from '@recoillink/provider-sdk/warp';
3
+ import { assert, eqAddressRadix, eqOptionalAddress, isZeroishAddress, strip0x, } from '@recoillink/utils';
4
+ import { getComponentOwnershipInfo, getRadixComponentDetails, } from '../utils/base-query.js';
5
+ import { INSTRUCTIONS, RADIX_COMPONENT_NAMES, } from '../utils/types.js';
6
+ import { bytes } from '../utils/utils.js';
7
+ function withErrorContext(context, error) {
8
+ const message = error instanceof Error ? error.message : String(error);
9
+ return new Error(`${context}: ${message}`);
10
+ }
11
+ export async function getCreateCollateralTokenTx(base, fromAddress, { mailbox, originDenom, }) {
12
+ return base.createCallFunctionManifest(fromAddress, base.getHyperlanePackageDefAddress(), RADIX_COMPONENT_NAMES.HYP_TOKEN, INSTRUCTIONS.INSTANTIATE, [enumeration(0, address(originDenom)), address(mailbox)]);
13
+ }
14
+ export async function getCreateSyntheticTokenTx(base, fromAddress, { mailbox, name, symbol, divisibility, }) {
15
+ return base.createCallFunctionManifest(fromAddress, base.getHyperlanePackageDefAddress(), RADIX_COMPONENT_NAMES.HYP_TOKEN, INSTRUCTIONS.INSTANTIATE, [
16
+ enumeration(1, str(name), str(symbol), str(''), u8(divisibility)),
17
+ address(mailbox),
18
+ ]);
19
+ }
20
+ export async function getSetTokenOwnerTx(base, gateway, fromAddress, { tokenAddress, newOwner, }) {
21
+ const tokenDetails = await getRadixComponentDetails(gateway, tokenAddress, RADIX_COMPONENT_NAMES.HYP_TOKEN).catch((error) => {
22
+ throw withErrorContext(`Failed to fetch Radix token details for ownership transfer (token=${tokenAddress})`, error);
23
+ });
24
+ const ownershipInfo = getComponentOwnershipInfo(tokenAddress, tokenDetails);
25
+ const resourceAddress = ownershipInfo.rule?.access_rule?.proof_rule?.requirement?.resource;
26
+ assert(resourceAddress, `Expected ownershipInfo.rule.access_rule.proof_rule.requirement.resource for token ${tokenAddress}`);
27
+ return base.transfer({
28
+ from_address: fromAddress,
29
+ to_address: newOwner,
30
+ resource_address: resourceAddress,
31
+ amount: '1',
32
+ });
33
+ }
34
+ export async function getSetTokenIsmTx(base, fromAddress, { tokenAddress, ismAddress, }) {
35
+ return base.createCallMethodManifestWithOwner(fromAddress, tokenAddress, 'set_ism', [
36
+ // Set or unset the ism based on the input value
37
+ // undefined or zero address → unset (use default ISM)
38
+ ismAddress && !isZeroishAddress(ismAddress)
39
+ ? enumeration(1, address(ismAddress))
40
+ : enumeration(0),
41
+ ]);
42
+ }
43
+ export async function getEnrollRemoteRouterTx(base, fromAddress, { tokenAddress, remoteDomainId, remoteRouterAddress, destinationGas, }) {
44
+ return base.createCallMethodManifestWithOwner(fromAddress, tokenAddress, 'enroll_remote_router', [
45
+ u32(remoteDomainId),
46
+ bytes(strip0x(remoteRouterAddress)),
47
+ decimal(destinationGas),
48
+ ]);
49
+ }
50
+ export async function getUnenrollRemoteRouterTx(base, fromAddress, { tokenAddress, remoteDomainId, }) {
51
+ return base.createCallMethodManifestWithOwner(fromAddress, tokenAddress, 'unroll_remote_router', [u32(remoteDomainId)]);
52
+ }
53
+ /**
54
+ * Generates update transactions for a warp token by comparing current on-chain state
55
+ * with desired configuration. Returns transactions for ISM updates, router enrollment/unenrollment,
56
+ * and ownership transfer (always last).
57
+ *
58
+ * @param expectedArtifactState The desired warp token configuration with deployment address
59
+ * @param reader Reader instance to fetch current on-chain state
60
+ * @param base RadixBase instance for transaction building
61
+ * @param gateway GatewayApiClient for owner queries
62
+ * @param signerAddress Address of the transaction signer
63
+ * @returns Array of transactions to execute in order
64
+ */
65
+ export async function getWarpTokenUpdateTxs(expectedArtifactState, currentArtifactState, base, gateway, signerAddress) {
66
+ const { config: expectedConfig, deployed } = expectedArtifactState;
67
+ const { config: currentConfig } = currentArtifactState;
68
+ const updateTxs = [];
69
+ // Update ISM if changed
70
+ const currentIsm = currentConfig.interchainSecurityModule?.deployed.address;
71
+ const newIsm = expectedConfig.interchainSecurityModule?.deployed.address;
72
+ if (!eqOptionalAddress(currentIsm, newIsm, eqAddressRadix)) {
73
+ const setIsmTx = await getSetTokenIsmTx(base, signerAddress, {
74
+ tokenAddress: deployed.address,
75
+ ismAddress: newIsm,
76
+ });
77
+ updateTxs.push({
78
+ annotation: 'Updating token ISM',
79
+ networkId: base.getNetworkId(),
80
+ manifest: setIsmTx,
81
+ });
82
+ }
83
+ // Compute router updates
84
+ const routerDiff = computeRemoteRoutersUpdates(currentConfig, expectedConfig, eqAddressRadix);
85
+ // Unenroll removed routers
86
+ for (const domainId of routerDiff.toUnenroll) {
87
+ const unenrollTx = await getUnenrollRemoteRouterTx(base, signerAddress, {
88
+ tokenAddress: deployed.address,
89
+ remoteDomainId: domainId,
90
+ });
91
+ updateTxs.push({
92
+ annotation: `Unenrolling router for domain ${domainId}`,
93
+ networkId: base.getNetworkId(),
94
+ manifest: unenrollTx,
95
+ });
96
+ }
97
+ // Enroll or update routers
98
+ for (const { domainId, routerAddress, gas } of routerDiff.toEnroll) {
99
+ const enrollTx = await getEnrollRemoteRouterTx(base, signerAddress, {
100
+ tokenAddress: deployed.address,
101
+ remoteDomainId: domainId,
102
+ remoteRouterAddress: routerAddress,
103
+ destinationGas: gas,
104
+ });
105
+ updateTxs.push({
106
+ annotation: `Enrolling/updating router for domain ${domainId}`,
107
+ networkId: base.getNetworkId(),
108
+ manifest: enrollTx,
109
+ });
110
+ }
111
+ // Owner transfer must be last transaction as the current owner executes all updates
112
+ if (!eqAddressRadix(currentConfig.owner, expectedConfig.owner)) {
113
+ const setOwnerTx = await getSetTokenOwnerTx(base, gateway, signerAddress, {
114
+ tokenAddress: deployed.address,
115
+ newOwner: expectedConfig.owner,
116
+ });
117
+ updateTxs.push({
118
+ annotation: 'Setting new token owner',
119
+ networkId: base.getNetworkId(),
120
+ manifest: setOwnerTx,
121
+ });
122
+ }
123
+ return updateTxs;
124
+ }
125
+ //# sourceMappingURL=warp-tx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warp-tx.js","sourceRoot":"","sources":["../../src/warp/warp-tx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ # Modified from rust/main/utils/run-locally/src/radix/docker-compose.yml
2
+ services:
3
+ fullnode:
4
+ image: 'radixdlt/babylon-node:v1.3.0.1'
5
+ profiles: ['fullnode']
6
+ init: true
7
+ ports:
8
+ - '127.0.0.1:${RADIX_CORE_PORT:-3333}:3333'
9
+ cap_add:
10
+ - NET_ADMIN
11
+ deploy:
12
+ restart_policy:
13
+ condition: on-failure
14
+ environment:
15
+ # Full node configuration
16
+ FULLNODE_NETWORK_ID: 240
17
+ FULLNODE_LOG_LEVEL: info
18
+ FULLNODE_NETWORK_BOOTSTRAP_NODE: 'radix://node_tdx_2_1qwz237kqdpct5l3yjhmna66uxja2ymrf3x6hh528ng3gtvnwndtn5rsrad4@3.210.187.161'
19
+ FULLNODE_KEY_PASSWORD: 'fullnode_key_password'
20
+ RADIXDLT_LOG_LEVEL: info
21
+ RADIXDLT_CORE_API_PORT: 3333
22
+ RADIXDLT_SYSTEM_API_PORT: 3334
23
+ RADIXDLT_PROMETHEUS_API_PORT: 3335
24
+ RADIXDLT_ENGINE_STATE_API_PORT: 3336
25
+ RADIXDLT_NETWORK_SEEDS_REMOTE: ''
26
+ JAVA_OPTS: -server -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -XX:+AlwaysPreTouch -Dguice_bytecode_gen_option=DISABLED -Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts -Djavax.net.ssl.trustStoreType=jks -Djava.security.egd=file:/dev/urandom -Dcom.sun.management.jmxremote.port=9011 -Dcom.sun.management.jmxremote.rmi.port=9011 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=core -agentlib:jdwp=transport=dt_socket,address=*:50505,suspend=n,server=y --enable-preview
27
+ RADIXDLT_HOST_IP_ADDRESS: core0
28
+ RADIXDLT_NODE_KEY: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY=
29
+ RADIXDLT_GENESIS_DATA: /wYAAHNOYVBwWQAHAgCfdxlxngUUXCEGCgEACQEABQkHKAAAIQoJZAAAAAr0DRoICrgLCRsMCuCTBAUKFTQYoABAehDzWgUVMgEAIKAAAGSns7bgDTIWAAFWDVUuRAAYABBjLV7HaxWBDQHAICICAAEgIQEGIAchA//5e9V1Xu6kIEU6FDVSNdOC9kcvhWihiy8FehRgKXVWAQEBAWJ1APCVICECAgwEbmFtZSIAAQwTRGVmYXVsdCB2YWxpZGF0b3IgMQIMCGluZm9fdXJsIg0BDBhodHRwczovL3d3dy5yYWRpeGRsdC5jb22A0V2lblLuqlWNSPddLPYcqXQbJq7Y9QscHefNoU86AQIggAHR0ouStuhEmbg7B5fvUjVVPut+2qDOokPBEowv5zcgIQECIAchA//5dtEAASgACSEKAKBeSwE0oAAAAEDq7XRG0JwsnwwBKw0B4CAMCgx0cmFuc2Zlcl94cmQIcmFkaXN3YXAIbWV0YWRhdGERZnVuZ2libGVfcmVzb3VyY2UVbm9uX0IWAPBpHWFjY291bnRfYXV0aG9yaXplZF9kZXBvc2l0b3JzDmdsb2JhbF9uX293bmVkJm5vbl9mdW5naWJsZV9yZXNvdXJjZV93aXRoX3JlbW90ZV90eXBlGWt2X3N0b3JlX3dpdGhfcmVtb3RlXwEaPA9tYXhfdHJhbnNhY3Rpb24=
30
+ RADIXDLT_DB_HISTORICAL_SUBSTATE_VALUES_ENABLE: true
31
+
32
+ postgres_db:
33
+ image: 'postgres:15.2-alpine'
34
+ shm_size: 256m
35
+ profiles:
36
+ [
37
+ 'network-gateway-built',
38
+ 'network-gateway-image',
39
+ 'network-gateway-resources',
40
+ ]
41
+ # The default shutdown mode for this container is SIGINT:
42
+ # https://github.com/docker-library/postgres/blob/e483778176ca34bcbe83ee17000820d4f6e64c28/12/alpine/Dockerfile
43
+ # This enables fast Shutdown mode - see eg https://www.postgresql.org/docs/10/server-shutdown.html
44
+ stop_grace_period: 90s # Ensure the DB is allowed time to stop to prevent needing to recover on next start-up
45
+ deploy:
46
+ restart_policy:
47
+ condition: on-failure
48
+ environment:
49
+ # Database configuration
50
+ POSTGRES_USER: 'db_dev_superuser'
51
+ POSTGRES_PASSWORD: 'db_dev_password'
52
+ POSTGRES_DB: 'radixdlt_ledger'
53
+ healthcheck:
54
+ test: pg_isready -U db_dev_superuser -d radixdlt_ledger
55
+ interval: 10s
56
+ timeout: 3s
57
+ retries: 3
58
+
59
+ database_migrations: # This is the base -- the _image and _built containers are defined below
60
+ image: 'radixdlt/babylon-ng-database-migrations:v1.10.3'
61
+ profiles: ['NONE']
62
+ environment:
63
+ # Database configuration
64
+ ConnectionStrings__NetworkGatewayMigrations: 'Host=postgres_db:5432;Database=radixdlt_ledger;Username=db_dev_superuser;Password=db_dev_password'
65
+
66
+ data_aggregator:
67
+ image: 'radixdlt/babylon-ng-data-aggregator:v1.10.3'
68
+ profiles: ['NONE']
69
+ deploy:
70
+ restart_policy:
71
+ condition: on-failure
72
+ environment:
73
+ # WIPE_DATABASE: "true"
74
+ ASPNETCORE_URLS: 'http://*:8080' # Binds to 8080 on all interfaces
75
+ CustomJsonConfigurationFilePath: '/home/radixdlt/network-gateway/config.json'
76
+ ConnectionStrings__NetworkGatewayReadWrite: 'Host=postgres_db:5432;Database=radixdlt_ledger;Username=db_dev_superuser;Password=db_dev_password'
77
+ DataAggregator__Network__NetworkName: 'localnet'
78
+ DataAggregator__Network__DisableCoreApiHttpsCertificateChecks: 'false'
79
+ # Node configuration
80
+ DataAggregator__Network__CoreApiNodes__0__Name: 'One'
81
+ DataAggregator__Network__CoreApiNodes__0__CoreApiAddress: 'http://fullnode:3333/core'
82
+ DataAggregator__Network__CoreApiNodes__0__CoreApiAuthorizationHeader: ''
83
+ DataAggregator__Network__CoreApiNodes__0__Enabled: 'true'
84
+ GatewayApi__Network__CoreApiNodes__1__Enabled: 'false'
85
+ GatewayApi__Network__CoreApiNodes__2__Enabled: 'false'
86
+ GatewayApi__Network__CoreApiNodes__3__Enabled: 'false'
87
+
88
+ gateway_api:
89
+ image: 'radixdlt/babylon-ng-gateway-api:v1.10.3'
90
+ profiles: ['NONE']
91
+ ports:
92
+ - '127.0.0.1:${RADIX_GATEWAY_PORT:-5308}:8080'
93
+ deploy:
94
+ restart_policy:
95
+ condition: on-failure
96
+ environment:
97
+ ASPNETCORE_URLS: 'http://*:8080'
98
+ CustomJsonConfigurationFilePath: '/home/radixdlt/network-gateway/config.json'
99
+ ConnectionStrings__NetworkGatewayReadOnly: 'Host=postgres_db:5432;Database=radixdlt_ledger;Username=db_dev_superuser;Password=db_dev_password'
100
+ ConnectionStrings__NetworkGatewayReadWrite: 'Host=postgres_db:5432;Database=radixdlt_ledger;Username=db_dev_superuser;Password=db_dev_password'
101
+ GatewayApi__Endpoint__MaxPageSize: '30'
102
+ GatewayApi__Endpoint__DefaultPageSize: '30'
103
+ GatewayApi__AcceptableLedgerLag__PreventReadRequestsIfDbLedgerIsBehind: 'true'
104
+ GatewayApi__AcceptableLedgerLag__PreventConstructionRequestsIfDbLedgerIsBehind: 'true'
105
+ GatewayApi__Network__NetworkName: 'localnet'
106
+ GatewayApi__Network__DisableCoreApiHttpsCertificateChecks: 'false'
107
+ # Node configuration
108
+ GatewayApi__Network__CoreApiNodes__0__Name: 'One'
109
+ GatewayApi__Network__CoreApiNodes__0__CoreApiAddress: 'http://fullnode:3333/core'
110
+ GatewayApi__Network__CoreApiNodes__0__CoreApiAuthorizationHeader: ''
111
+ GatewayApi__Network__CoreApiNodes__0__RequestWeighting: '1'
112
+ GatewayApi__Network__CoreApiNodes__0__Enabled: 'true'
113
+ GatewayApi__Network__CoreApiNodes__1__Enabled: 'false'
114
+ GatewayApi__Network__CoreApiNodes__2__Enabled: 'false'
115
+ GatewayApi__Network__CoreApiNodes__3__Enabled: 'false'
116
+
117
+ database_migrations_image:
118
+ extends:
119
+ service: database_migrations
120
+ profiles: ['network-gateway-image']
121
+ depends_on:
122
+ postgres_db:
123
+ condition: service_healthy
124
+
125
+ data_aggregator_image:
126
+ extends:
127
+ service: data_aggregator
128
+ profiles: ['network-gateway-image']
129
+ depends_on:
130
+ database_migrations_image:
131
+ condition: service_completed_successfully
132
+
133
+ gateway_api_image:
134
+ extends:
135
+ service: gateway_api
136
+ profiles: ['network-gateway-image']
137
+ depends_on:
138
+ database_migrations_image:
139
+ condition: service_completed_successfully
package/package.json CHANGED
@@ -1,6 +1,77 @@
1
1
  {
2
2
  "name": "@recoillink/radix-sdk",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "45.0.1",
4
+ "description": "Recoil Link TypeScript SDK for the Radix Hyperlane SDK module",
5
+ "keywords": [
6
+ "blockchain",
7
+ "hyperlane",
8
+ "radix",
9
+ "sdk"
10
+ ],
11
+ "homepage": "https://github.com/recoil-labs/recoil-link",
12
+ "license": "Apache-2.0",
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "https://github.com/recoil-labs/recoil-link"
16
+ },
17
+ "files": [
18
+ "/dist",
19
+ "docker-compose.yml"
20
+ ],
21
+ "type": "module",
22
+ "types": "dist/index.d.ts",
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "default": "./dist/index.js"
27
+ },
28
+ "./runtime": {
29
+ "types": "./dist/runtime.d.ts",
30
+ "default": "./dist/runtime.js"
31
+ },
32
+ "./testing": {
33
+ "types": "./dist/testing/index.d.ts",
34
+ "default": "./dist/testing/index.js"
35
+ }
36
+ },
37
+ "dependencies": {
38
+ "@recoillink/provider-sdk": "11.0.1",
39
+ "@recoillink/utils": "45.0.1",
40
+ "@radixdlt/babylon-core-api-sdk": "^1.3.0",
41
+ "@radixdlt/babylon-gateway-api-sdk": "^1.10.1",
42
+ "@radixdlt/radix-engine-toolkit": "^1.0.5",
43
+ "bignumber.js": "^9.1.1",
44
+ "decimal.js": "^10.4.3",
45
+ "ethers": "^5.8.0"
46
+ },
47
+ "devDependencies": {
48
+ "@recoillink/tsconfig": "^45.0.1",
49
+ "@types/chai": "^4.3.11",
50
+ "@types/chai-as-promised": "^8",
51
+ "@types/mocha": "^10.0.1",
52
+ "@types/node": "^26.1.2",
53
+ "chai": "^4.5.0",
54
+ "chai-as-promised": "^8.0.1",
55
+ "mocha": "^11.7.6",
56
+ "mocha-steps": "^1.3.0",
57
+ "oxfmt": "^0.62.0",
58
+ "testcontainers": "11.12.0",
59
+ "ts-node": "^10.9.2",
60
+ "tsx": "^4.23.1",
61
+ "typescript": "npm:@typescript/typescript6@6.0.2"
62
+ },
63
+ "engines": {
64
+ "node": ">=22"
65
+ },
66
+ "scripts": {
67
+ "build": "rm -rf ./dist && tsc",
68
+ "format": "oxfmt --write ./src",
69
+ "lint": "oxlint -c ../../oxlint.json",
70
+ "clean": "rm -rf ./dist ./cache",
71
+ "dev": "tsc --watch",
72
+ "test": "echo \"no tests in radix-sdk\"",
73
+ "test:unit": "mocha --config .mocharc.json",
74
+ "test:ci": "pnpm test:unit",
75
+ "test:e2e": "mocha --config .mocharc.e2e.json"
76
+ }
6
77
  }