@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,110 @@
1
+ import { address, decimal, enumeration, str, u8, u32, } from '@radixdlt/radix-engine-toolkit';
2
+ import { BigNumber } from 'bignumber.js';
3
+ import { assert, isNullish, isZeroishAddress, strip0x, } from '@recoillink/utils';
4
+ import { INSTRUCTIONS } from '../utils/types.js';
5
+ import { bytes } from '../utils/utils.js';
6
+ export class RadixWarpPopulate {
7
+ gateway;
8
+ base;
9
+ query;
10
+ packageAddress;
11
+ constructor(gateway, base, query, packageAddress) {
12
+ this.gateway = gateway;
13
+ this.base = base;
14
+ this.query = query;
15
+ this.packageAddress = packageAddress;
16
+ }
17
+ createCollateralToken({ from_address, mailbox, origin_denom, }) {
18
+ return this.base.createCallFunctionManifest(from_address, this.packageAddress, 'HypToken', INSTRUCTIONS.INSTANTIATE, [enumeration(0, address(origin_denom)), address(mailbox)]);
19
+ }
20
+ createSyntheticToken({ from_address, mailbox, name, symbol, divisibility, }) {
21
+ return this.base.createCallFunctionManifest(from_address, this.packageAddress, 'HypToken', INSTRUCTIONS.INSTANTIATE, [
22
+ enumeration(1, str(name), str(symbol), str(''), u8(divisibility)),
23
+ address(mailbox),
24
+ ]);
25
+ }
26
+ async setTokenOwner({ from_address, token, new_owner, }) {
27
+ const details = await this.gateway.state.getEntityDetailsVaultAggregated(token);
28
+ const resource = details.details.role_assignments.owner
29
+ .rule.access_rule.proof_rule.requirement.resource;
30
+ return this.base.transfer({
31
+ from_address,
32
+ to_address: new_owner,
33
+ resource_address: resource,
34
+ amount: '1',
35
+ });
36
+ }
37
+ async setTokenIsm({ from_address, token, ism, }) {
38
+ const ismAddress = isNullish(ism) || isZeroishAddress(ism)
39
+ ? enumeration(0)
40
+ : enumeration(1, address(ism));
41
+ return this.base.createCallMethodManifestWithOwner(from_address, token, 'set_ism', [ismAddress]);
42
+ }
43
+ async enrollRemoteRouter({ from_address, token, receiver_domain, receiver_address, gas, }) {
44
+ return this.base.createCallMethodManifestWithOwner(from_address, token, 'enroll_remote_router', [u32(receiver_domain), bytes(strip0x(receiver_address)), decimal(gas)]);
45
+ }
46
+ async unenrollRemoteRouter({ from_address, token, receiver_domain, }) {
47
+ return this.base.createCallMethodManifestWithOwner(from_address, token, 'unroll_remote_router', [u32(receiver_domain)]);
48
+ }
49
+ async remoteTransfer({ from_address, token, destination_domain, recipient, amount, max_fee, }) {
50
+ const { denom, decimals } = await this.query.getToken({ token });
51
+ const tokenAmount = new BigNumber(amount)
52
+ .dividedBy(new BigNumber(10).pow(decimals))
53
+ .toFixed(decimals);
54
+ assert(denom, `no origin_denom found on token ${token}`);
55
+ return getTransferRemoteManifest({
56
+ from_address,
57
+ token,
58
+ destination_domain,
59
+ recipient,
60
+ tokenAmount,
61
+ max_fee,
62
+ origin_denom: denom,
63
+ });
64
+ }
65
+ }
66
+ export function getTransferRemoteManifest({ from_address, token, destination_domain, recipient, tokenAmount, max_fee, origin_denom, }) {
67
+ return `
68
+ CALL_METHOD
69
+ Address("${from_address}")
70
+ "withdraw"
71
+ Address("${origin_denom}")
72
+ Decimal("${tokenAmount}")
73
+ ;
74
+ CALL_METHOD
75
+ Address("${from_address}")
76
+ "withdraw"
77
+ Address("${max_fee.denom}")
78
+ Decimal("${max_fee.amount}")
79
+ ;
80
+ TAKE_FROM_WORKTOP
81
+ Address("${origin_denom}")
82
+ Decimal("${tokenAmount}")
83
+ Bucket("bucket1")
84
+ ;
85
+ TAKE_FROM_WORKTOP
86
+ Address("${max_fee.denom}")
87
+ Decimal("${max_fee.amount}")
88
+ Bucket("bucket2")
89
+ ;
90
+ CALL_METHOD
91
+ Address("${token}")
92
+ "transfer_remote"
93
+ ${destination_domain}u32
94
+ Bytes("${recipient}")
95
+ Bucket("bucket1")
96
+ Array<Bucket>(
97
+ Bucket("bucket2")
98
+ )
99
+ Enum<0u8>()
100
+ Enum<0u8>()
101
+ ;
102
+ CALL_METHOD
103
+ Address("${from_address}")
104
+ "try_deposit_batch_or_abort"
105
+ Expression("ENTIRE_WORKTOP")
106
+ Enum<0u8>()
107
+ ;
108
+ `;
109
+ }
110
+ //# sourceMappingURL=populate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"populate.js","sourceRoot":"","sources":["../../src/warp/populate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { GatewayApiClient } from '@radixdlt/babylon-gateway-api-sdk';
2
+ import { RadixBase } from '../utils/base.js';
3
+ export declare class RadixWarpQuery {
4
+ protected networkId: number;
5
+ protected gateway: GatewayApiClient;
6
+ protected base: RadixBase;
7
+ constructor(networkId: number, gateway: GatewayApiClient, base: RadixBase);
8
+ getToken({ token }: {
9
+ token: string;
10
+ }): Promise<{
11
+ address: string;
12
+ owner: string;
13
+ tokenType: 'Collateral' | 'Synthetic';
14
+ mailboxAddress: string;
15
+ ismAddress: string;
16
+ hookAddress: string;
17
+ denom: string;
18
+ name: string;
19
+ symbol: string;
20
+ description: string;
21
+ decimals: number;
22
+ }>;
23
+ getRemoteRouters({ token }: {
24
+ token: string;
25
+ }): Promise<{
26
+ address: string;
27
+ remoteRouters: {
28
+ receiverDomainId: number;
29
+ receiverAddress: string;
30
+ gas: string;
31
+ }[];
32
+ }>;
33
+ getBridgedSupply({ token }: {
34
+ token: string;
35
+ }): Promise<bigint>;
36
+ quoteRemoteTransfer({ token, destination_domain, }: {
37
+ token: string;
38
+ destination_domain: number;
39
+ }): Promise<{
40
+ denom: string;
41
+ amount: bigint;
42
+ }>;
43
+ }
44
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/warp/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAOrE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAO7C,qBAAa,cAAc;IACzB,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACpC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC;IAE1B,YAAY,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAIxE;IAEY,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAC3D,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,YAAY,GAAG,WAAW,CAAC;QACtC,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAiFD;IAEY,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QACnE,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE;YACb,gBAAgB,EAAE,MAAM,CAAC;YACzB,eAAe,EAAE,MAAM,CAAC;YACxB,GAAG,EAAE,MAAM,CAAC;SACb,EAAE,CAAC;KACL,CAAC,CA2DD;IAEY,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB3E;IAEY,mBAAmB,CAAC,EAC/B,KAAK,EACL,kBAAkB,GACnB,EAAE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,kBAAkB,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAkE7C;CACF"}
@@ -0,0 +1,163 @@
1
+ import { generateRandomNonce } from '@radixdlt/radix-engine-toolkit';
2
+ import { BigNumber } from 'bignumber.js';
3
+ import { assert } from '@recoillink/utils';
4
+ import { getKeysFromKvStore } from '../utils/base-query.js';
5
+ import { EPOCH_VALIDITY_RANGE, READ_ACCOUNT_HEX_PUBLIC_KEY, } from '../utils/constants.js';
6
+ export class RadixWarpQuery {
7
+ networkId;
8
+ gateway;
9
+ base;
10
+ constructor(networkId, gateway, base) {
11
+ this.networkId = networkId;
12
+ this.gateway = gateway;
13
+ this.base = base;
14
+ }
15
+ async getToken({ token }) {
16
+ const details = await this.gateway.state.getEntityDetailsVaultAggregated(token);
17
+ assert(details.details.blueprint_name === 'HypToken', `Expected contract at address ${token} to be "HypToken" but got ${details.details.blueprint_name}`);
18
+ const ownerResource = details.details.role_assignments
19
+ .owner.rule.access_rule.proof_rule.requirement.resource;
20
+ const { items } = await this.gateway.extensions.getResourceHolders(ownerResource);
21
+ const resourceHolders = [
22
+ ...new Set(items.map((item) => item.holder_address)),
23
+ ];
24
+ assert(resourceHolders.length === 1, `expected token holders of resource ${ownerResource} to be one, found ${resourceHolders.length} holders instead`);
25
+ const [resourceHolder] = resourceHolders;
26
+ assert(resourceHolder, `Expected a token holder of resource ${ownerResource}`);
27
+ const fields = details.details.state.fields;
28
+ const token_type = fields.find((f) => f.field_name === 'token_type')?.variant_name ?? '';
29
+ assert(token_type === 'Collateral' || token_type === 'Synthetic', `unknown token type: ${token_type}`);
30
+ const tokenType = token_type === 'Collateral' ? 'Collateral' : 'Synthetic';
31
+ const ismFields = fields.find((f) => f.field_name === 'ism')?.fields ?? [];
32
+ const tokenTypeFields = fields.find((f) => f.field_name === 'token_type')?.fields ?? [];
33
+ let origin_denom;
34
+ let metadata = {
35
+ name: '',
36
+ symbol: '',
37
+ description: '',
38
+ decimals: 0,
39
+ };
40
+ if (token_type === 'Collateral') {
41
+ origin_denom =
42
+ tokenTypeFields.find((t) => t.type_name === 'ResourceAddress')?.value ??
43
+ '';
44
+ metadata = await this.base.getMetadata({ resource: origin_denom });
45
+ }
46
+ else if (token_type === 'Synthetic') {
47
+ origin_denom =
48
+ (fields.find((f) => f.field_name === 'resource_manager')?.fields ?? []).find((r) => r.type_name === 'ResourceAddress')?.value ?? '';
49
+ metadata = await this.base.getMetadata({ resource: origin_denom });
50
+ }
51
+ const result = {
52
+ address: token,
53
+ owner: resourceHolder,
54
+ tokenType,
55
+ mailboxAddress: fields.find((f) => f.field_name === 'mailbox')?.value ?? '',
56
+ ismAddress: ismFields[0]?.value ?? '',
57
+ hookAddress: '',
58
+ denom: origin_denom,
59
+ ...metadata,
60
+ };
61
+ return result;
62
+ }
63
+ async getRemoteRouters({ token }) {
64
+ const details = await this.gateway.state.getEntityDetailsVaultAggregated(token);
65
+ assert(details.details.blueprint_name === 'HypToken', `Expected contract at address ${token} to be "HypToken" but got ${details.details.blueprint_name}`);
66
+ const fields = details.details.state.fields;
67
+ const enrolledRoutersKeyValueStore = fields.find((f) => f.field_name === 'enrolled_routers')?.value ?? '';
68
+ assert(enrolledRoutersKeyValueStore, `found no enrolled routers on token ${token}`);
69
+ const remoteRouters = [];
70
+ const keys = await getKeysFromKvStore(this.gateway, enrolledRoutersKeyValueStore);
71
+ for (const key of keys) {
72
+ const { entries } = await this.gateway.state.innerClient.keyValueStoreData({
73
+ stateKeyValueStoreDataRequest: {
74
+ key_value_store_address: enrolledRoutersKeyValueStore,
75
+ keys: [
76
+ {
77
+ key_hex: key.raw_hex,
78
+ },
79
+ ],
80
+ },
81
+ });
82
+ const [entry] = entries;
83
+ assert(entry, `found no remote router entry for key ${key.raw_hex}`);
84
+ const routerFields = entry.value.programmatic_json?.fields ?? [];
85
+ remoteRouters.push({
86
+ receiverDomainId: parseInt(routerFields.find((r) => r.field_name === 'domain')?.value ?? ''),
87
+ receiverAddress: routerFields.find((r) => r.field_name === 'recipient')?.hex ?? '',
88
+ gas: routerFields.find((r) => r.field_name === 'gas')?.value ?? '',
89
+ });
90
+ }
91
+ const result = {
92
+ address: token,
93
+ remoteRouters,
94
+ };
95
+ return result;
96
+ }
97
+ async getBridgedSupply({ token }) {
98
+ const { tokenType, denom } = await this.getToken({ token });
99
+ switch (tokenType) {
100
+ case 'Collateral': {
101
+ // if the token is collateral we get the token contract balance
102
+ // of the origin denom
103
+ return this.base.getBalance({ address: token, resource: denom });
104
+ }
105
+ case 'Synthetic': {
106
+ // if the token is synthetic we get the total supply of the synthetic
107
+ // resource
108
+ return this.base.getTotalSupply({ resource: denom });
109
+ }
110
+ default: {
111
+ throw new Error(`unknown token type: ${tokenType}`);
112
+ }
113
+ }
114
+ }
115
+ async quoteRemoteTransfer({ token, destination_domain, }) {
116
+ const constructionMetadata = await this.gateway.transaction.innerClient.transactionConstruction();
117
+ const response = await this.gateway.transaction.innerClient.transactionPreview({
118
+ transactionPreviewRequest: {
119
+ manifest: `
120
+ CALL_METHOD
121
+ Address("${token}")
122
+ "quote_remote_transfer"
123
+ ${destination_domain}u32
124
+ Bytes("0000000000000000000000000000000000000000000000000000000000000000")
125
+ Decimal("0")
126
+ ;
127
+ `,
128
+ nonce: generateRandomNonce(),
129
+ signer_public_keys: [
130
+ {
131
+ key_type: 'EddsaEd25519',
132
+ key_hex: READ_ACCOUNT_HEX_PUBLIC_KEY,
133
+ },
134
+ ],
135
+ flags: {
136
+ use_free_credit: true,
137
+ },
138
+ start_epoch_inclusive: constructionMetadata.ledger_state.epoch,
139
+ end_epoch_exclusive: constructionMetadata.ledger_state.epoch + EPOCH_VALIDITY_RANGE,
140
+ },
141
+ });
142
+ assert(!response.receipt.error_message, `${response.receipt.error_message}`);
143
+ const output = response.receipt.output;
144
+ assert(output.length, `found no output for quote_remote_transfer method`);
145
+ const [methodOutput] = output;
146
+ assert(methodOutput, `found no output for quote_remote_transfer method`);
147
+ const programmaticJson = methodOutput.programmatic_json;
148
+ assert('entries' in programmaticJson, 'programmatic_json is not in the expected format');
149
+ const entries = programmaticJson.entries;
150
+ assert(entries.length > 0, `quote_remote_transfer returned no resources`);
151
+ assert(entries.length < 2, `quote_remote_transfer returned multiple resources`);
152
+ const [entry] = entries;
153
+ assert(entry, `quote_remote_transfer returned no resources`);
154
+ return {
155
+ denom: entry.key.value,
156
+ amount: BigInt(new BigNumber(entry.value.value)
157
+ .times(new BigNumber(10).pow(18))
158
+ .integerValue(BigNumber.ROUND_FLOOR)
159
+ .toFixed(0)),
160
+ };
161
+ }
162
+ }
163
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/warp/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { GatewayApiClient } from '@radixdlt/babylon-gateway-api-sdk';
2
+ import { ArtifactDeployed, ArtifactNew, ArtifactReader, ArtifactWriter } from '@recoillink/provider-sdk/artifact';
3
+ import { TxReceipt } from '@recoillink/provider-sdk/module';
4
+ import { DeployedWarpAddress, RawSyntheticWarpArtifactConfig } from '@recoillink/provider-sdk/warp';
5
+ import { RadixBase } from '../utils/base.js';
6
+ import { RadixBaseSigner } from '../utils/signer.js';
7
+ import { AnnotatedRadixTransaction } from '../utils/types.js';
8
+ export declare class RadixSyntheticTokenReader implements ArtifactReader<RawSyntheticWarpArtifactConfig, DeployedWarpAddress> {
9
+ protected readonly gateway: GatewayApiClient;
10
+ protected readonly base: RadixBase;
11
+ constructor(gateway: GatewayApiClient, base: RadixBase);
12
+ read(address: string): Promise<ArtifactDeployed<RawSyntheticWarpArtifactConfig, DeployedWarpAddress>>;
13
+ }
14
+ export declare class RadixSyntheticTokenWriter extends RadixSyntheticTokenReader implements ArtifactWriter<RawSyntheticWarpArtifactConfig, DeployedWarpAddress> {
15
+ private readonly signer;
16
+ constructor(gateway: GatewayApiClient, signer: RadixBaseSigner, base: RadixBase);
17
+ create(artifact: ArtifactNew<RawSyntheticWarpArtifactConfig>): Promise<[
18
+ ArtifactDeployed<RawSyntheticWarpArtifactConfig, DeployedWarpAddress>,
19
+ TxReceipt[]
20
+ ]>;
21
+ update(artifact: ArtifactDeployed<RawSyntheticWarpArtifactConfig, DeployedWarpAddress>): Promise<AnnotatedRadixTransaction[]>;
22
+ }
23
+ //# sourceMappingURL=synthetic-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synthetic-token.d.ts","sourceRoot":"","sources":["../../src/warp/synthetic-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAGrE,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,cAAc,EAEd,cAAc,EACf,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAE/B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAe9D,qBAAa,yBAA0B,YAAW,cAAc,CAC9D,8BAA8B,EAC9B,mBAAmB,CACpB;IAEG,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB;IAC5C,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS;IAFpC,YACqB,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,SAAS,EAChC;IAEE,IAAI,CACR,OAAO,EAAE,MAAM,GACd,OAAO,CACR,gBAAgB,CAAC,8BAA8B,EAAE,mBAAmB,CAAC,CACtE,CAuCA;CACF;AAED,qBAAa,yBACX,SAAQ,yBACR,YACE,cAAc,CAAC,8BAA8B,EAAE,mBAAmB,CAAC;IAInE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFzB,YACE,OAAO,EAAE,gBAAgB,EACR,MAAM,EAAE,eAAe,EACxC,IAAI,EAAE,SAAS,EAGhB;IAEK,MAAM,CACV,QAAQ,EAAE,WAAW,CAAC,8BAA8B,CAAC,GACpD,OAAO,CACR;QACE,gBAAgB,CAAC,8BAA8B,EAAE,mBAAmB,CAAC;QACrE,SAAS,EAAE;KACZ,CACF,CAqHA;IAEK,MAAM,CACV,QAAQ,EAAE,gBAAgB,CACxB,8BAA8B,EAC9B,mBAAmB,CACpB,GACA,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAWtC;CACF"}
@@ -0,0 +1,131 @@
1
+ import { AltVM } from '@recoillink/provider-sdk';
2
+ import { ArtifactState, } from '@recoillink/provider-sdk/artifact';
3
+ import { computeRemoteRoutersUpdates, } from '@recoillink/provider-sdk/warp';
4
+ import { eqAddressRadix } from '@recoillink/utils';
5
+ import { getSyntheticWarpTokenConfig } from './warp-query.js';
6
+ import { getCreateSyntheticTokenTx, getEnrollRemoteRouterTx, getSetTokenIsmTx, getWarpTokenUpdateTxs, } from './warp-tx.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 class RadixSyntheticTokenReader {
12
+ gateway;
13
+ base;
14
+ constructor(gateway, base) {
15
+ this.gateway = gateway;
16
+ this.base = base;
17
+ }
18
+ async read(address) {
19
+ // Fetch token info
20
+ const token = await getSyntheticWarpTokenConfig(this.gateway, this.base, address).catch((error) => {
21
+ throw withErrorContext(`Failed to read synthetic warp token config (address=${address})`, error);
22
+ });
23
+ const config = {
24
+ type: AltVM.TokenType.synthetic,
25
+ owner: token.owner,
26
+ mailbox: token.mailbox,
27
+ interchainSecurityModule: token.interchainSecurityModule
28
+ ? {
29
+ artifactState: ArtifactState.UNDERIVED,
30
+ deployed: {
31
+ address: token.interchainSecurityModule,
32
+ },
33
+ }
34
+ : undefined,
35
+ remoteRouters: token.remoteRouters,
36
+ destinationGas: token.destinationGas,
37
+ name: token.name,
38
+ symbol: token.symbol,
39
+ decimals: token.decimals,
40
+ };
41
+ return {
42
+ artifactState: ArtifactState.DEPLOYED,
43
+ config,
44
+ deployed: {
45
+ address,
46
+ },
47
+ };
48
+ }
49
+ }
50
+ export class RadixSyntheticTokenWriter extends RadixSyntheticTokenReader {
51
+ signer;
52
+ constructor(gateway, signer, base) {
53
+ super(gateway, base);
54
+ this.signer = signer;
55
+ }
56
+ async create(artifact) {
57
+ const { config } = artifact;
58
+ const allReceipts = [];
59
+ // Create the synthetic token
60
+ const transactionManifest = await getCreateSyntheticTokenTx(this.base, this.signer.getAddress(), {
61
+ mailbox: config.mailbox,
62
+ name: config.name,
63
+ symbol: config.symbol,
64
+ divisibility: config.decimals,
65
+ }).catch((error) => {
66
+ throw withErrorContext(`Failed to build synthetic create transaction (signer=${this.signer.getAddress()}, mailbox=${config.mailbox}, name=${config.name}, symbol=${config.symbol})`, error);
67
+ });
68
+ const createReceipt = await this.signer
69
+ .signAndBroadcast(transactionManifest)
70
+ .catch((error) => {
71
+ throw withErrorContext(`Failed to create synthetic warp token (signer=${this.signer.getAddress()}, mailbox=${config.mailbox}, name=${config.name}, symbol=${config.symbol})`, error);
72
+ });
73
+ const address = await this.base
74
+ .getNewComponent(createReceipt)
75
+ .catch((error) => {
76
+ throw withErrorContext('Failed to resolve created synthetic token address from transaction receipt', error);
77
+ });
78
+ allReceipts.push(createReceipt);
79
+ // Set ISM if configured
80
+ if (config.interchainSecurityModule) {
81
+ const ismAddress = config.interchainSecurityModule.deployed.address;
82
+ const setIsmTx = await getSetTokenIsmTx(this.base, this.signer.getAddress(), {
83
+ tokenAddress: address,
84
+ ismAddress,
85
+ }).catch((error) => {
86
+ throw withErrorContext(`Failed to build set ISM transaction for synthetic warp token ${address}`, error);
87
+ });
88
+ const ismReceipt = await this.signer
89
+ .signAndBroadcast(setIsmTx)
90
+ .catch((error) => {
91
+ throw withErrorContext(`Failed to set ISM for synthetic warp token ${address}`, error);
92
+ });
93
+ allReceipts.push(ismReceipt);
94
+ }
95
+ const { toEnroll } = computeRemoteRoutersUpdates({ destinationGas: {}, remoteRouters: {} }, config, eqAddressRadix);
96
+ // Enroll remote routers
97
+ for (const { domainId, gas, routerAddress } of toEnroll) {
98
+ const enrollTx = await getEnrollRemoteRouterTx(this.base, this.signer.getAddress(), {
99
+ tokenAddress: address,
100
+ remoteDomainId: domainId,
101
+ remoteRouterAddress: routerAddress,
102
+ destinationGas: gas,
103
+ }).catch((error) => {
104
+ throw withErrorContext(`Failed to build enroll remote router transaction for synthetic warp token ${address} (domain=${domainId}, router=${routerAddress})`, error);
105
+ });
106
+ const enrollReceipt = await this.signer
107
+ .signAndBroadcast(enrollTx)
108
+ .catch((error) => {
109
+ throw withErrorContext(`Failed to enroll remote router for synthetic warp token ${address} (domain=${domainId}, router=${routerAddress})`, error);
110
+ });
111
+ allReceipts.push(enrollReceipt);
112
+ }
113
+ // We don't transfer ownership here because after deployment the token needs to be
114
+ // enrolled with the other tokens deployed and only the owner can perform that enrollment.
115
+ const deployedArtifact = {
116
+ artifactState: ArtifactState.DEPLOYED,
117
+ config: artifact.config,
118
+ deployed: {
119
+ address,
120
+ },
121
+ };
122
+ return [deployedArtifact, allReceipts];
123
+ }
124
+ async update(artifact) {
125
+ const currentArtifactState = await this.read(artifact.deployed.address);
126
+ return getWarpTokenUpdateTxs(artifact, currentArtifactState, this.base, this.gateway,
127
+ // The current owner is the only one that can execute the update transactions
128
+ currentArtifactState.config.owner);
129
+ }
130
+ }
131
+ //# sourceMappingURL=synthetic-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synthetic-token.js","sourceRoot":"","sources":["../../src/warp/synthetic-token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { GatewayApiClient } from '@radixdlt/babylon-gateway-api-sdk';
2
+ import { ArtifactReader, ArtifactWriter } from '@recoillink/provider-sdk/artifact';
3
+ import { DeployedRawWarpArtifact, DeployedWarpAddress, IRawWarpArtifactManager, RawWarpArtifactConfigs, WarpType } from '@recoillink/provider-sdk/warp';
4
+ import { RadixSigner } from '../clients/signer.js';
5
+ import { RadixBase } from '../utils/base.js';
6
+ export declare class RadixWarpArtifactManager implements IRawWarpArtifactManager {
7
+ private readonly gateway;
8
+ private readonly base;
9
+ constructor(gateway: GatewayApiClient, base: RadixBase);
10
+ supportsHookUpdates(): boolean;
11
+ readWarpToken(address: string): Promise<DeployedRawWarpArtifact>;
12
+ createReader<T extends WarpType>(type: T): ArtifactReader<RawWarpArtifactConfigs[T], DeployedWarpAddress>;
13
+ createWriter<T extends WarpType>(type: T, signer: RadixSigner): ArtifactWriter<RawWarpArtifactConfigs[T], DeployedWarpAddress>;
14
+ }
15
+ //# sourceMappingURL=warp-artifact-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warp-artifact-manager.d.ts","sourceRoot":"","sources":["../../src/warp/warp-artifact-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,OAAO,EACL,cAAc,EACd,cAAc,EACf,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,QAAQ,EACT,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAe7C,qBAAa,wBAAyB,YAAW,uBAAuB;IAEpE,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFvB,YACmB,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,SAAS,EAC9B;IAEJ,mBAAmB,IAAI,OAAO,CAE7B;IAEK,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CASrE;IAED,YAAY,CAAC,CAAC,SAAS,QAAQ,EAC7B,IAAI,EAAE,CAAC,GACN,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAkBhE;IAED,YAAY,CAAC,CAAC,SAAS,QAAQ,EAC7B,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,WAAW,GAClB,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAsBhE;CACF"}
@@ -0,0 +1,49 @@
1
+ import { RadixCollateralTokenReader, RadixCollateralTokenWriter, } from './collateral-token.js';
2
+ import { RadixSyntheticTokenReader, RadixSyntheticTokenWriter, } from './synthetic-token.js';
3
+ import { getRadixWarpTokenType, providerWarpTokenTypeFromRadixTokenType, } from './warp-query.js';
4
+ export class RadixWarpArtifactManager {
5
+ gateway;
6
+ base;
7
+ constructor(gateway, base) {
8
+ this.gateway = gateway;
9
+ this.base = base;
10
+ }
11
+ supportsHookUpdates() {
12
+ return false;
13
+ }
14
+ async readWarpToken(address) {
15
+ // Detect warp token type first
16
+ const warpType = await getRadixWarpTokenType(this.gateway, address);
17
+ // Get the appropriate reader and read the token
18
+ const reader = this.createReader(providerWarpTokenTypeFromRadixTokenType(warpType));
19
+ return reader.read(address);
20
+ }
21
+ createReader(type) {
22
+ const readers = {
23
+ collateral: () => new RadixCollateralTokenReader(this.gateway, this.base),
24
+ synthetic: () => new RadixSyntheticTokenReader(this.gateway, this.base),
25
+ native: () => {
26
+ throw new Error('Native tokens are not supported on Radix');
27
+ },
28
+ crossCollateral: () => {
29
+ throw new Error('Cross-collateral tokens are not supported on Radix');
30
+ },
31
+ };
32
+ return readers[type]();
33
+ }
34
+ createWriter(type, signer) {
35
+ const baseSigner = signer.getBaseSigner();
36
+ const writers = {
37
+ collateral: () => new RadixCollateralTokenWriter(this.gateway, baseSigner, this.base),
38
+ synthetic: () => new RadixSyntheticTokenWriter(this.gateway, baseSigner, this.base),
39
+ native: () => {
40
+ throw new Error('Native tokens are not supported on Radix');
41
+ },
42
+ crossCollateral: () => {
43
+ throw new Error('Cross-collateral tokens are not supported on Radix');
44
+ },
45
+ };
46
+ return writers[type]();
47
+ }
48
+ }
49
+ //# sourceMappingURL=warp-artifact-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warp-artifact-manager.js","sourceRoot":"","sources":["../../src/warp/warp-artifact-manager.ts"],"names":[],"mappings":"AAiBA,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,qBAAqB,EACrB,uCAAuC,GACxC,MAAM,iBAAiB,CAAC;AAEzB,MAAM,OAAO,wBAAwB;IAEhB,OAAO;IACP,IAAI;IAFvB,YACmB,OAAyB,EACzB,IAAe;uBADf,OAAO;oBACP,IAAI;IACpB,CAAC;IAEJ,mBAAmB;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAe;QACjC,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEpE,gDAAgD;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAC9B,uCAAuC,CAAC,QAAQ,CAAC,CAClD,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,YAAY,CACV,IAAO;QAEP,MAAM,OAAO,GAKT;YACF,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;YACzE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;YACvE,MAAM,EAAE,GAAG,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YACD,eAAe,EAAE,GAAG,EAAE;gBACpB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxE,CAAC;SACF,CAAC;QAEF,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,YAAY,CACV,IAAO,EACP,MAAmB;QAEnB,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;QAE1C,MAAM,OAAO,GAKT;YACF,UAAU,EAAE,GAAG,EAAE,CACf,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;YACrE,SAAS,EAAE,GAAG,EAAE,CACd,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;YACpE,MAAM,EAAE,GAAG,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YACD,eAAe,EAAE,GAAG,EAAE;gBACpB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxE,CAAC;SACF,CAAC;QAEF,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { GatewayApiClient } from '@radixdlt/babylon-gateway-api-sdk';
2
+ import { TokenType } from '@recoillink/provider-sdk/warp';
3
+ import { RadixBase } from '../utils/base.js';
4
+ import { RadixCollateralWarpTokenConfig, RadixSyntheticWarpTokenConfig, RadixWarpTokenType } from '../utils/types.js';
5
+ export declare function providerWarpTokenTypeFromRadixTokenType(tokenType: RadixWarpTokenType): TokenType;
6
+ export declare function getRadixWarpTokenType(gateway: Readonly<GatewayApiClient>, tokenAddress: string): Promise<RadixWarpTokenType>;
7
+ export declare function getCollateralWarpTokenConfig(gateway: Readonly<GatewayApiClient>, base: Readonly<RadixBase>, tokenAddress: string): Promise<RadixCollateralWarpTokenConfig>;
8
+ export declare function getSyntheticWarpTokenConfig(gateway: Readonly<GatewayApiClient>, base: Readonly<RadixBase>, tokenAddress: string): Promise<RadixSyntheticWarpTokenConfig>;
9
+ //# sourceMappingURL=warp-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warp-query.d.ts","sourceRoot":"","sources":["../../src/warp/warp-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAc1D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAML,8BAA8B,EAC9B,6BAA6B,EAE7B,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAE3B,wBAAgB,uCAAuC,CACrD,SAAS,EAAE,kBAAkB,GAC5B,SAAS,CAWX;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACnC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAI7B;AAED,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACnC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,EACzB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,8BAA8B,CAAC,CAkCzC;AAED,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACnC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,EACzB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,6BAA6B,CAAC,CAiCxC"}