@hyperlane-xyz/sealevel-sdk 27.0.0

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 (222) hide show
  1. package/LICENSE.md +193 -0
  2. package/dist/accounts/mint.d.ts +43 -0
  3. package/dist/accounts/mint.d.ts.map +1 -0
  4. package/dist/accounts/mint.js +159 -0
  5. package/dist/accounts/mint.js.map +1 -0
  6. package/dist/accounts/multisig-ism-message-id.d.ts +14 -0
  7. package/dist/accounts/multisig-ism-message-id.d.ts.map +1 -0
  8. package/dist/accounts/multisig-ism-message-id.js +32 -0
  9. package/dist/accounts/multisig-ism-message-id.js.map +1 -0
  10. package/dist/accounts/test-ism.d.ts +5 -0
  11. package/dist/accounts/test-ism.d.ts.map +1 -0
  12. package/dist/accounts/test-ism.js +8 -0
  13. package/dist/accounts/test-ism.js.map +1 -0
  14. package/dist/accounts/token.d.ts +60 -0
  15. package/dist/accounts/token.d.ts.map +1 -0
  16. package/dist/accounts/token.js +127 -0
  17. package/dist/accounts/token.js.map +1 -0
  18. package/dist/clients/protocol.d.ts +21 -0
  19. package/dist/clients/protocol.d.ts.map +1 -0
  20. package/dist/clients/protocol.js +51 -0
  21. package/dist/clients/protocol.js.map +1 -0
  22. package/dist/clients/provider.d.ts +66 -0
  23. package/dist/clients/provider.d.ts.map +1 -0
  24. package/dist/clients/provider.js +237 -0
  25. package/dist/clients/provider.js.map +1 -0
  26. package/dist/clients/signer.d.ts +61 -0
  27. package/dist/clients/signer.d.ts.map +1 -0
  28. package/dist/clients/signer.js +314 -0
  29. package/dist/clients/signer.js.map +1 -0
  30. package/dist/codecs/account-data.d.ts +8 -0
  31. package/dist/codecs/account-data.d.ts.map +1 -0
  32. package/dist/codecs/account-data.js +20 -0
  33. package/dist/codecs/account-data.js.map +1 -0
  34. package/dist/codecs/binary.d.ts +34 -0
  35. package/dist/codecs/binary.d.ts.map +1 -0
  36. package/dist/codecs/binary.js +165 -0
  37. package/dist/codecs/binary.js.map +1 -0
  38. package/dist/codecs/shared.d.ts +81 -0
  39. package/dist/codecs/shared.d.ts.map +1 -0
  40. package/dist/codecs/shared.js +241 -0
  41. package/dist/codecs/shared.js.map +1 -0
  42. package/dist/constants.d.ts +13 -0
  43. package/dist/constants.d.ts.map +1 -0
  44. package/dist/constants.js +21 -0
  45. package/dist/constants.js.map +1 -0
  46. package/dist/deploy/program-deployer.d.ts +51 -0
  47. package/dist/deploy/program-deployer.d.ts.map +1 -0
  48. package/dist/deploy/program-deployer.js +176 -0
  49. package/dist/deploy/program-deployer.js.map +1 -0
  50. package/dist/deploy/resolve-program.d.ts +9 -0
  51. package/dist/deploy/resolve-program.d.ts.map +1 -0
  52. package/dist/deploy/resolve-program.js +24 -0
  53. package/dist/deploy/resolve-program.js.map +1 -0
  54. package/dist/generated/core-addresses.d.ts +14 -0
  55. package/dist/generated/core-addresses.d.ts.map +1 -0
  56. package/dist/generated/core-addresses.js +55 -0
  57. package/dist/generated/core-addresses.js.map +1 -0
  58. package/dist/hook/hook-artifact-manager.d.ts +17 -0
  59. package/dist/hook/hook-artifact-manager.d.ts.map +1 -0
  60. package/dist/hook/hook-artifact-manager.js +58 -0
  61. package/dist/hook/hook-artifact-manager.js.map +1 -0
  62. package/dist/hook/hook-query.d.ts +25 -0
  63. package/dist/hook/hook-query.d.ts.map +1 -0
  64. package/dist/hook/hook-query.js +46 -0
  65. package/dist/hook/hook-query.js.map +1 -0
  66. package/dist/hook/igp-hook.d.ts +28 -0
  67. package/dist/hook/igp-hook.d.ts.map +1 -0
  68. package/dist/hook/igp-hook.js +242 -0
  69. package/dist/hook/igp-hook.js.map +1 -0
  70. package/dist/hook/merkle-tree-hook.d.ts +23 -0
  71. package/dist/hook/merkle-tree-hook.d.ts.map +1 -0
  72. package/dist/hook/merkle-tree-hook.js +46 -0
  73. package/dist/hook/merkle-tree-hook.js.map +1 -0
  74. package/dist/hyperlane/program-bytes.d.ts +20 -0
  75. package/dist/hyperlane/program-bytes.d.ts.map +1 -0
  76. package/dist/hyperlane/program-bytes.js +80534 -0
  77. package/dist/hyperlane/program-bytes.js.map +1 -0
  78. package/dist/index.d.ts +21 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +27 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/instructions/igp.d.ts +66 -0
  83. package/dist/instructions/igp.d.ts.map +1 -0
  84. package/dist/instructions/igp.js +168 -0
  85. package/dist/instructions/igp.js.map +1 -0
  86. package/dist/instructions/interfaces.d.ts +52 -0
  87. package/dist/instructions/interfaces.d.ts.map +1 -0
  88. package/dist/instructions/interfaces.js +126 -0
  89. package/dist/instructions/interfaces.js.map +1 -0
  90. package/dist/instructions/loader.d.ts +11 -0
  91. package/dist/instructions/loader.d.ts.map +1 -0
  92. package/dist/instructions/loader.js +24 -0
  93. package/dist/instructions/loader.js.map +1 -0
  94. package/dist/instructions/multisig-ism-message-id.d.ts +32 -0
  95. package/dist/instructions/multisig-ism-message-id.d.ts.map +1 -0
  96. package/dist/instructions/multisig-ism-message-id.js +105 -0
  97. package/dist/instructions/multisig-ism-message-id.js.map +1 -0
  98. package/dist/instructions/test-ism.d.ts +16 -0
  99. package/dist/instructions/test-ism.d.ts.map +1 -0
  100. package/dist/instructions/test-ism.js +47 -0
  101. package/dist/instructions/test-ism.js.map +1 -0
  102. package/dist/instructions/token.d.ts +62 -0
  103. package/dist/instructions/token.d.ts.map +1 -0
  104. package/dist/instructions/token.js +257 -0
  105. package/dist/instructions/token.js.map +1 -0
  106. package/dist/instructions/utils.d.ts +19 -0
  107. package/dist/instructions/utils.d.ts.map +1 -0
  108. package/dist/instructions/utils.js +36 -0
  109. package/dist/instructions/utils.js.map +1 -0
  110. package/dist/ism/ism-artifact-manager.d.ts +14 -0
  111. package/dist/ism/ism-artifact-manager.d.ts.map +1 -0
  112. package/dist/ism/ism-artifact-manager.js +49 -0
  113. package/dist/ism/ism-artifact-manager.js.map +1 -0
  114. package/dist/ism/ism-query.d.ts +22 -0
  115. package/dist/ism/ism-query.d.ts.map +1 -0
  116. package/dist/ism/ism-query.js +53 -0
  117. package/dist/ism/ism-query.js.map +1 -0
  118. package/dist/ism/multisig-ism.d.ts +33 -0
  119. package/dist/ism/multisig-ism.d.ts.map +1 -0
  120. package/dist/ism/multisig-ism.js +113 -0
  121. package/dist/ism/multisig-ism.js.map +1 -0
  122. package/dist/ism/test-ism.d.ts +20 -0
  123. package/dist/ism/test-ism.d.ts.map +1 -0
  124. package/dist/ism/test-ism.js +57 -0
  125. package/dist/ism/test-ism.js.map +1 -0
  126. package/dist/pda.d.ts +17 -0
  127. package/dist/pda.d.ts.map +1 -0
  128. package/dist/pda.js +118 -0
  129. package/dist/pda.js.map +1 -0
  130. package/dist/rpc.d.ts +9 -0
  131. package/dist/rpc.d.ts.map +1 -0
  132. package/dist/rpc.js +21 -0
  133. package/dist/rpc.js.map +1 -0
  134. package/dist/testing/index.d.ts +3 -0
  135. package/dist/testing/index.d.ts.map +1 -0
  136. package/dist/testing/index.js +3 -0
  137. package/dist/testing/index.js.map +1 -0
  138. package/dist/testing/setup.d.ts +33 -0
  139. package/dist/testing/setup.d.ts.map +1 -0
  140. package/dist/testing/setup.js +120 -0
  141. package/dist/testing/setup.js.map +1 -0
  142. package/dist/testing/solana-container.d.ts +32 -0
  143. package/dist/testing/solana-container.d.ts.map +1 -0
  144. package/dist/testing/solana-container.js +289 -0
  145. package/dist/testing/solana-container.js.map +1 -0
  146. package/dist/tests/collateral-token.e2e-test.d.ts +2 -0
  147. package/dist/tests/collateral-token.e2e-test.d.ts.map +1 -0
  148. package/dist/tests/collateral-token.e2e-test.js +112 -0
  149. package/dist/tests/collateral-token.e2e-test.js.map +1 -0
  150. package/dist/tests/deploy.e2e-test.d.ts +2 -0
  151. package/dist/tests/deploy.e2e-test.d.ts.map +1 -0
  152. package/dist/tests/deploy.e2e-test.js +76 -0
  153. package/dist/tests/deploy.e2e-test.js.map +1 -0
  154. package/dist/tests/hook.e2e-test.d.ts +2 -0
  155. package/dist/tests/hook.e2e-test.d.ts.map +1 -0
  156. package/dist/tests/hook.e2e-test.js +176 -0
  157. package/dist/tests/hook.e2e-test.js.map +1 -0
  158. package/dist/tests/ism.e2e-test.d.ts +2 -0
  159. package/dist/tests/ism.e2e-test.d.ts.map +1 -0
  160. package/dist/tests/ism.e2e-test.js +167 -0
  161. package/dist/tests/ism.e2e-test.js.map +1 -0
  162. package/dist/tests/native-token.e2e-test.d.ts +2 -0
  163. package/dist/tests/native-token.e2e-test.d.ts.map +1 -0
  164. package/dist/tests/native-token.e2e-test.js +93 -0
  165. package/dist/tests/native-token.e2e-test.js.map +1 -0
  166. package/dist/tests/provider.e2e-test.d.ts +2 -0
  167. package/dist/tests/provider.e2e-test.d.ts.map +1 -0
  168. package/dist/tests/provider.e2e-test.js +87 -0
  169. package/dist/tests/provider.e2e-test.js.map +1 -0
  170. package/dist/tests/read-token.e2e-test.d.ts +2 -0
  171. package/dist/tests/read-token.e2e-test.d.ts.map +1 -0
  172. package/dist/tests/read-token.e2e-test.js +79 -0
  173. package/dist/tests/read-token.e2e-test.js.map +1 -0
  174. package/dist/tests/scale.unit-test.d.ts +2 -0
  175. package/dist/tests/scale.unit-test.d.ts.map +1 -0
  176. package/dist/tests/scale.unit-test.js +65 -0
  177. package/dist/tests/scale.unit-test.js.map +1 -0
  178. package/dist/tests/synthetic-token.e2e-test.d.ts +2 -0
  179. package/dist/tests/synthetic-token.e2e-test.d.ts.map +1 -0
  180. package/dist/tests/synthetic-token.e2e-test.js +115 -0
  181. package/dist/tests/synthetic-token.e2e-test.js.map +1 -0
  182. package/dist/tests/warp-token-suite.d.ts +26 -0
  183. package/dist/tests/warp-token-suite.d.ts.map +1 -0
  184. package/dist/tests/warp-token-suite.js +208 -0
  185. package/dist/tests/warp-token-suite.js.map +1 -0
  186. package/dist/tx.d.ts +23 -0
  187. package/dist/tx.d.ts.map +1 -0
  188. package/dist/tx.js +43 -0
  189. package/dist/tx.js.map +1 -0
  190. package/dist/types.d.ts +50 -0
  191. package/dist/types.d.ts.map +1 -0
  192. package/dist/types.js +2 -0
  193. package/dist/types.js.map +1 -0
  194. package/dist/warp/collateral-token.d.ts +21 -0
  195. package/dist/warp/collateral-token.d.ts.map +1 -0
  196. package/dist/warp/collateral-token.js +129 -0
  197. package/dist/warp/collateral-token.js.map +1 -0
  198. package/dist/warp/native-token.d.ts +21 -0
  199. package/dist/warp/native-token.d.ts.map +1 -0
  200. package/dist/warp/native-token.js +99 -0
  201. package/dist/warp/native-token.js.map +1 -0
  202. package/dist/warp/synthetic-token.d.ts +21 -0
  203. package/dist/warp/synthetic-token.d.ts.map +1 -0
  204. package/dist/warp/synthetic-token.js +180 -0
  205. package/dist/warp/synthetic-token.js.map +1 -0
  206. package/dist/warp/types.d.ts +16 -0
  207. package/dist/warp/types.d.ts.map +1 -0
  208. package/dist/warp/types.js +2 -0
  209. package/dist/warp/types.js.map +1 -0
  210. package/dist/warp/warp-artifact-manager.d.ts +14 -0
  211. package/dist/warp/warp-artifact-manager.d.ts.map +1 -0
  212. package/dist/warp/warp-artifact-manager.js +52 -0
  213. package/dist/warp/warp-artifact-manager.js.map +1 -0
  214. package/dist/warp/warp-query.d.ts +30 -0
  215. package/dist/warp/warp-query.d.ts.map +1 -0
  216. package/dist/warp/warp-query.js +66 -0
  217. package/dist/warp/warp-query.js.map +1 -0
  218. package/dist/warp/warp-tx.d.ts +64 -0
  219. package/dist/warp/warp-tx.d.ts.map +1 -0
  220. package/dist/warp/warp-tx.js +291 -0
  221. package/dist/warp/warp-tx.js.map +1 -0
  222. package/package.json +76 -0
@@ -0,0 +1,180 @@
1
+ import { ArtifactState, } from '@hyperlane-xyz/provider-sdk/artifact';
2
+ import { TokenType, } from '@hyperlane-xyz/provider-sdk/warp';
3
+ import { assert, isNullish, isZeroishAddress, ZERO_ADDRESS_HEX_32, } from '@hyperlane-xyz/utils';
4
+ import { getAddressEncoder, address as parseAddress, } from '@solana/kit';
5
+ import { fetchMintMetadata } from '../accounts/mint.js';
6
+ import { concatBytes, u32le, u64le, u8 } from '../codecs/binary.js';
7
+ import { RENT_SYSVAR_ADDRESS, SYSTEM_PROGRAM_ADDRESS, TOKEN_2022_PROGRAM_ADDRESS, } from '../constants.js';
8
+ import { resolveProgram } from '../deploy/resolve-program.js';
9
+ import { getTokenInitInstruction } from '../instructions/token.js';
10
+ import { buildInstruction, readonlyAccount, readonlySigner, writableAccount, writableSigner, } from '../instructions/utils.js';
11
+ import { deriveAtaPayerPda, deriveSyntheticMintPda } from '../pda.js';
12
+ import { fetchTokenAccount, routerBytesToHex } from './warp-query.js';
13
+ import { applyPostInitConfig, assertLocalDecimals, buildBaseInitData, buildFundAtaPayerInstruction, computeWarpTokenUpdateInstructions, remoteDecimalsToScale, scaleToRemoteDecimals, } from './warp-tx.js';
14
+ // Borsh discriminator for the Token 2022 InitializeTokenMetadata instruction.
15
+ const METADATA_INITIALIZE_DISCRIMINATOR = new Uint8Array([
16
+ 210, 225, 30, 162, 88, 184, 77, 141,
17
+ ]);
18
+ const addressEncoder = getAddressEncoder();
19
+ /**
20
+ * SPL Token 2022: InitializeMetadataPointer (extension type 39).
21
+ * authority and metadataAddress are encoded into the 66-byte payload.
22
+ */
23
+ function createInitializeMetadataPointerInstruction(mint, authority, metadataAddress) {
24
+ const data = new Uint8Array(66);
25
+ data[0] = 39; // extension type: MetadataPointer
26
+ data[1] = 0;
27
+ data.set(addressEncoder.encode(authority), 2);
28
+ data.set(addressEncoder.encode(metadataAddress), 34);
29
+ return buildInstruction(TOKEN_2022_PROGRAM_ADDRESS, [writableAccount(mint)], data);
30
+ }
31
+ /** SPL Token 2022: InitializeMint2 (discriminator 20). */
32
+ function createInitializeMint2Instruction(mint, decimals, mintAuthority) {
33
+ const data = concatBytes(u8(20), // InitializeMint2 discriminator
34
+ u8(decimals), addressEncoder.encode(mintAuthority), u8(0));
35
+ return buildInstruction(TOKEN_2022_PROGRAM_ADDRESS, [writableAccount(mint), readonlyAccount(RENT_SYSVAR_ADDRESS)], data);
36
+ }
37
+ /** SPL Token 2022: SetAuthority (discriminator 6, authority type 0 = MintTokens). */
38
+ function createSetAuthorityInstruction(mint, currentAuthority, newAuthority) {
39
+ const data = concatBytes(u8(6), // SetAuthority discriminator
40
+ u8(0), // authority type: MintTokens
41
+ u8(1), // has new authority
42
+ addressEncoder.encode(newAuthority));
43
+ return buildInstruction(TOKEN_2022_PROGRAM_ADDRESS, [writableAccount(mint), readonlySigner(currentAuthority)], data);
44
+ }
45
+ /** SPL Token 2022: InitializeTokenMetadata (Borsh discriminator). */
46
+ function createInitializeMetadataInstruction(mint, updateAuthority, mintAuthority, name, symbol, uri) {
47
+ const nameBytes = new TextEncoder().encode(name);
48
+ const symbolBytes = new TextEncoder().encode(symbol);
49
+ const uriBytes = new TextEncoder().encode(uri);
50
+ const data = concatBytes(METADATA_INITIALIZE_DISCRIMINATOR, u32le(nameBytes.length), nameBytes, u32le(symbolBytes.length), symbolBytes, u32le(uriBytes.length), uriBytes);
51
+ return buildInstruction(TOKEN_2022_PROGRAM_ADDRESS, [
52
+ writableAccount(mint),
53
+ readonlyAccount(updateAuthority),
54
+ readonlyAccount(mint),
55
+ readonlySigner(mintAuthority),
56
+ ], data);
57
+ }
58
+ export class SvmSyntheticTokenReader {
59
+ rpc;
60
+ constructor(rpc) {
61
+ this.rpc = rpc;
62
+ }
63
+ async read(programAddress) {
64
+ const programId = parseAddress(programAddress);
65
+ const token = await fetchTokenAccount(this.rpc, programId);
66
+ assert(!isNullish(token), `Synthetic token not initialized at ${programId}`);
67
+ const remoteRouters = {};
68
+ for (const [domain, router] of token.remoteRouters.entries()) {
69
+ remoteRouters[domain] = { address: routerBytesToHex(router) };
70
+ }
71
+ const destinationGas = {};
72
+ for (const [domain, gas] of token.destinationGas.entries()) {
73
+ destinationGas[domain] = gas.toString();
74
+ }
75
+ const { address: mintPda } = await deriveSyntheticMintPda(programId);
76
+ const metadata = await fetchMintMetadata(this.rpc, mintPda);
77
+ const config = {
78
+ type: TokenType.synthetic,
79
+ owner: token.owner ?? ZERO_ADDRESS_HEX_32,
80
+ mailbox: token.mailbox,
81
+ interchainSecurityModule: token.interchainSecurityModule
82
+ ? {
83
+ artifactState: ArtifactState.UNDERIVED,
84
+ deployed: { address: token.interchainSecurityModule },
85
+ }
86
+ : undefined,
87
+ hook: token.interchainGasPaymaster
88
+ ? {
89
+ artifactState: ArtifactState.UNDERIVED,
90
+ deployed: { address: token.interchainGasPaymaster.programId },
91
+ }
92
+ : undefined,
93
+ remoteRouters,
94
+ destinationGas,
95
+ name: metadata.name,
96
+ symbol: metadata.symbol,
97
+ decimals: token.decimals,
98
+ metadataUri: metadata.uri,
99
+ scale: remoteDecimalsToScale(token.decimals, token.remoteDecimals),
100
+ };
101
+ return {
102
+ artifactState: ArtifactState.DEPLOYED,
103
+ config,
104
+ deployed: { address: programId },
105
+ };
106
+ }
107
+ }
108
+ export class SvmSyntheticTokenWriter extends SvmSyntheticTokenReader {
109
+ config;
110
+ svmSigner;
111
+ constructor(config, rpc, svmSigner) {
112
+ super(rpc);
113
+ this.config = config;
114
+ this.svmSigner = svmSigner;
115
+ }
116
+ async create(artifact) {
117
+ const receipts = [];
118
+ const tokenConfig = artifact.config;
119
+ assert(tokenConfig.metadataUri !== undefined, 'metadataUri is required for Solana synthetic token deployments');
120
+ assertLocalDecimals(tokenConfig.decimals);
121
+ const remoteDecimals = scaleToRemoteDecimals(tokenConfig.decimals, tokenConfig.scale);
122
+ const { programAddress, receipts: deployReceipts } = await resolveProgram(this.config.program, this.svmSigner, this.rpc, true);
123
+ receipts.push(...deployReceipts);
124
+ const { address: mintPda } = await deriveSyntheticMintPda(programAddress);
125
+ const { address: ataPayerPda } = await deriveAtaPayerPda(programAddress);
126
+ const initData = await buildBaseInitData(tokenConfig, tokenConfig.decimals, remoteDecimals);
127
+ const initIx = await getTokenInitInstruction(programAddress, this.svmSigner.signer, initData, [writableAccount(mintPda), writableAccount(ataPayerPda)]);
128
+ const initMetadataPtrIx = createInitializeMetadataPointerInstruction(mintPda, this.svmSigner.signer.address, mintPda);
129
+ const initMintIx = createInitializeMint2Instruction(mintPda, tokenConfig.decimals, this.svmSigner.signer.address);
130
+ receipts.push(await this.svmSigner.send({
131
+ instructions: [initIx, initMetadataPtrIx, initMintIx],
132
+ computeUnits: 400_000,
133
+ skipPreflight: true,
134
+ }));
135
+ // Initialize Token 2022 metadata.
136
+ // Fund mint account to cover the rent increase from metadata TLV being
137
+ // appended to the mint account. Metadata on-chain layout (Borsh):
138
+ // TLV header(4) + update_authority(32) + mint(32)
139
+ // + name(4+N) + symbol(4+M) + uri(4+L) + additional_metadata(4)
140
+ const encoder = new TextEncoder();
141
+ const nameLen = encoder.encode(tokenConfig.name).length;
142
+ const symbolLen = encoder.encode(tokenConfig.symbol).length;
143
+ const uriLen = encoder.encode(tokenConfig.metadataUri).length;
144
+ const metadataSize = 4 + 32 + 32 + (4 + nameLen) + (4 + symbolLen) + (4 + uriLen) + 4;
145
+ const metadataRent = await this.rpc
146
+ .getMinimumBalanceForRentExemption(BigInt(metadataSize))
147
+ .send();
148
+ const fundMintIx = buildInstruction(SYSTEM_PROGRAM_ADDRESS, [writableSigner(this.svmSigner.signer), writableAccount(mintPda)], concatBytes(u32le(2), // SystemProgram::Transfer discriminator (u32 LE)
149
+ u64le(metadataRent)));
150
+ const initMetadataIx = createInitializeMetadataInstruction(mintPda, this.svmSigner.signer.address, this.svmSigner.signer, tokenConfig.name, tokenConfig.symbol, tokenConfig.metadataUri);
151
+ // Transfer mint authority to mintPda so the program owns minting.
152
+ // Bundled with metadata init to avoid leaving the deployer as mint
153
+ // authority if a separate authority-transfer tx were to fail.
154
+ const setAuthorityIx = createSetAuthorityInstruction(mintPda, this.svmSigner.signer, mintPda);
155
+ receipts.push(await this.svmSigner.send({
156
+ instructions: [fundMintIx, initMetadataIx, setAuthorityIx],
157
+ skipPreflight: true,
158
+ }));
159
+ const fundAtaPayerIx = await buildFundAtaPayerInstruction(this.rpc, this.svmSigner.signer.address, programAddress, this.config.ataPayerFundingAmount);
160
+ if (fundAtaPayerIx) {
161
+ receipts.push(await this.svmSigner.send({ instructions: [fundAtaPayerIx] }));
162
+ }
163
+ receipts.push(...(await applyPostInitConfig(this.svmSigner, programAddress, tokenConfig)));
164
+ return [
165
+ {
166
+ artifactState: ArtifactState.DEPLOYED,
167
+ config: tokenConfig,
168
+ deployed: { address: programAddress },
169
+ },
170
+ receipts,
171
+ ];
172
+ }
173
+ async update(artifact) {
174
+ const programId = parseAddress(artifact.deployed.address);
175
+ const current = await this.read(programId);
176
+ assert(!isZeroishAddress(current.config.owner), `Cannot update synthetic token ${programId}: token has no owner`);
177
+ return computeWarpTokenUpdateInstructions(current.config, artifact.config, programId, parseAddress(current.config.owner), this.rpc, `synthetic token ${programId}`);
178
+ }
179
+ }
180
+ //# 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,16 @@
1
+ import type { SvmProgramTarget } from '../types.js';
2
+ /**
3
+ * Deployment-time configuration for any SVM warp token.
4
+ * Passed to writer constructors; separate from the on-chain artifact config.
5
+ */
6
+ export type SvmWarpTokenConfig = Readonly<{
7
+ /** How to obtain the deployed program: fresh bytes or pre-existing ID. */
8
+ program: SvmProgramTarget;
9
+ /**
10
+ * Lamports to ensure the ATA payer PDA holds after deployment.
11
+ * Required for synthetic and collateral tokens to pay for recipient ATA
12
+ * creation on transfer_out.
13
+ */
14
+ ataPayerFundingAmount: bigint;
15
+ }>;
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/warp/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACxC,0EAA0E;IAC1E,OAAO,EAAE,gBAAgB,CAAC;IAC1B;;;;OAIG;IACH,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/warp/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { type Rpc, type SolanaRpcApi } from '@solana/kit';
2
+ import type { ArtifactReader, ArtifactWriter } from '@hyperlane-xyz/provider-sdk/artifact';
3
+ import type { DeployedRawWarpArtifact, DeployedWarpAddress, IRawWarpArtifactManager, RawWarpArtifactConfigs, WarpType } from '@hyperlane-xyz/provider-sdk/warp';
4
+ import type { SvmSigner } from '../clients/signer.js';
5
+ export declare class SvmWarpArtifactManager implements IRawWarpArtifactManager {
6
+ private readonly rpc;
7
+ private readonly ataPayerFundingAmount;
8
+ constructor(rpc: Rpc<SolanaRpcApi>, ataPayerFundingAmount?: bigint);
9
+ readWarpToken(tokenAddress: string): Promise<DeployedRawWarpArtifact>;
10
+ createReader<T extends WarpType>(type: T): ArtifactReader<RawWarpArtifactConfigs[T], DeployedWarpAddress>;
11
+ createWriter<T extends WarpType>(type: T, signer: SvmSigner): ArtifactWriter<RawWarpArtifactConfigs[T], DeployedWarpAddress>;
12
+ supportsHookUpdates(): boolean;
13
+ }
14
+ //# 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,EAAW,KAAK,GAAG,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,QAAQ,EACT,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAatD,qBAAa,sBAAuB,YAAW,uBAAuB;IAElE,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBADrB,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,EACtB,qBAAqB,GAAE,MAAqB;IAGzD,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAU3E,YAAY,CAAC,CAAC,SAAS,QAAQ,EAC7B,IAAI,EAAE,CAAC,GACN,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC;IAejE,YAAY,CAAC,CAAC,SAAS,QAAQ,EAC7B,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,SAAS,GAChB,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC;IA2CjE,mBAAmB,IAAI,OAAO;CAG/B"}
@@ -0,0 +1,52 @@
1
+ import { address } from '@solana/kit';
2
+ import { HYPERLANE_SVM_PROGRAM_BYTES } from '../hyperlane/program-bytes.js';
3
+ import { SvmCollateralTokenReader, SvmCollateralTokenWriter, } from './collateral-token.js';
4
+ import { SvmNativeTokenReader, SvmNativeTokenWriter } from './native-token.js';
5
+ import { SvmSyntheticTokenReader, SvmSyntheticTokenWriter, } from './synthetic-token.js';
6
+ import { detectWarpTokenType } from './warp-query.js';
7
+ export class SvmWarpArtifactManager {
8
+ rpc;
9
+ ataPayerFundingAmount;
10
+ constructor(rpc, ataPayerFundingAmount = 100000000n) {
11
+ this.rpc = rpc;
12
+ this.ataPayerFundingAmount = ataPayerFundingAmount;
13
+ }
14
+ async readWarpToken(tokenAddress) {
15
+ const tokenType = await detectWarpTokenType(this.rpc, address(tokenAddress));
16
+ const reader = this.createReader(tokenType);
17
+ return reader.read(tokenAddress);
18
+ }
19
+ createReader(type) {
20
+ const readers = {
21
+ native: () => new SvmNativeTokenReader(this.rpc),
22
+ synthetic: () => new SvmSyntheticTokenReader(this.rpc),
23
+ collateral: () => new SvmCollateralTokenReader(this.rpc),
24
+ };
25
+ return readers[type]();
26
+ }
27
+ createWriter(type, signer) {
28
+ const writers = {
29
+ native: () => new SvmNativeTokenWriter({
30
+ program: { programBytes: HYPERLANE_SVM_PROGRAM_BYTES.tokenNative },
31
+ ataPayerFundingAmount: this.ataPayerFundingAmount,
32
+ }, this.rpc, signer),
33
+ synthetic: () => new SvmSyntheticTokenWriter({
34
+ program: {
35
+ programBytes: HYPERLANE_SVM_PROGRAM_BYTES.tokenSynthetic,
36
+ },
37
+ ataPayerFundingAmount: this.ataPayerFundingAmount,
38
+ }, this.rpc, signer),
39
+ collateral: () => new SvmCollateralTokenWriter({
40
+ program: {
41
+ programBytes: HYPERLANE_SVM_PROGRAM_BYTES.tokenCollateral,
42
+ },
43
+ ataPayerFundingAmount: this.ataPayerFundingAmount,
44
+ }, this.rpc, signer),
45
+ };
46
+ return writers[type]();
47
+ }
48
+ supportsHookUpdates() {
49
+ return true;
50
+ }
51
+ }
52
+ //# 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":"AAAA,OAAO,EAAE,OAAO,EAA+B,MAAM,aAAa,CAAC;AAenE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,OAAO,sBAAsB;IAEd;IACA;IAFnB,YACmB,GAAsB,EACtB,wBAAgC,UAAY;QAD5C,QAAG,GAAH,GAAG,CAAmB;QACtB,0BAAqB,GAArB,qBAAqB,CAAuB;IAC5D,CAAC;IAEJ,KAAK,CAAC,aAAa,CAAC,YAAoB;QACtC,MAAM,SAAS,GAAG,MAAM,mBAAmB,CACzC,IAAI,CAAC,GAAG,EACR,OAAO,CAAC,YAAY,CAAC,CACtB,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAED,YAAY,CACV,IAAO;QAEP,MAAM,OAAO,GAKT;YACF,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;YAChD,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC;YACtD,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC;SACzD,CAAC;QAEF,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,YAAY,CACV,IAAO,EACP,MAAiB;QAEjB,MAAM,OAAO,GAKT;YACF,MAAM,EAAE,GAAG,EAAE,CACX,IAAI,oBAAoB,CACtB;gBACE,OAAO,EAAE,EAAE,YAAY,EAAE,2BAA2B,CAAC,WAAW,EAAE;gBAClE,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;aAClD,EACD,IAAI,CAAC,GAAG,EACR,MAAM,CACP;YACH,SAAS,EAAE,GAAG,EAAE,CACd,IAAI,uBAAuB,CACzB;gBACE,OAAO,EAAE;oBACP,YAAY,EAAE,2BAA2B,CAAC,cAAc;iBACzD;gBACD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;aAClD,EACD,IAAI,CAAC,GAAG,EACR,MAAM,CACP;YACH,UAAU,EAAE,GAAG,EAAE,CACf,IAAI,wBAAwB,CAC1B;gBACE,OAAO,EAAE;oBACP,YAAY,EAAE,2BAA2B,CAAC,eAAe;iBAC1D;gBACD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;aAClD,EACD,IAAI,CAAC,GAAG,EACR,MAAM,CACP;SACJ,CAAC;QAEF,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,30 @@
1
+ import { type Address } from '@solana/kit';
2
+ import { type HyperlaneTokenAccountData } from '../accounts/token.js';
3
+ import type { SvmRpc } from '../types.js';
4
+ export declare enum SvmWarpTokenType {
5
+ Native = "native",
6
+ Synthetic = "synthetic",
7
+ Collateral = "collateral"
8
+ }
9
+ /**
10
+ * Fetches and decodes the HyperlaneToken PDA for a given warp program.
11
+ * Returns null if the account does not exist or is not initialized.
12
+ */
13
+ export declare function fetchTokenAccount(rpc: SvmRpc, programId: Address): Promise<HyperlaneTokenAccountData | null>;
14
+ /**
15
+ * Detects the warp token type by checking which type-specific PDA exists on-chain.
16
+ *
17
+ * Each token type creates exactly one unique PDA during init:
18
+ * Native: nativeCollateralPda ["hyperlane_token", "-", "native_collateral"]
19
+ * Synthetic: syntheticMintPda ["hyperlane_token", "-", "mint"]
20
+ * Collateral: escrowPda ["hyperlane_token", "-", "escrow"]
21
+ */
22
+ export declare function detectWarpTokenType(rpc: SvmRpc, programId: Address): Promise<SvmWarpTokenType>;
23
+ /** Converts a 32-byte router H256 to a 0x-prefixed hex string. */
24
+ export declare function routerBytesToHex(bytes: Uint8Array): string;
25
+ /**
26
+ * Converts a 0x-prefixed hex string to a 32-byte Uint8Array.
27
+ * Asserts the result is exactly 32 bytes.
28
+ */
29
+ export declare function routerHexToBytes(hex: string): Uint8Array;
30
+ //# 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,KAAK,OAAO,EAAuB,MAAM,aAAa,CAAC;AAIhE,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,sBAAsB,CAAC;AAO9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB,UAAU,eAAe;CAC1B;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAK3C;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC,gBAAgB,CAAC,CA+B3B;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAE1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAOxD"}
@@ -0,0 +1,66 @@
1
+ import { fetchEncodedAccount } from '@solana/kit';
2
+ import { assert, fromHexString, toHexString } from '@hyperlane-xyz/utils';
3
+ import { decodeHyperlaneTokenAccount, } from '../accounts/token.js';
4
+ import { deriveHyperlaneTokenPda, deriveNativeCollateralPda, deriveSyntheticMintPda, deriveEscrowPda, } from '../pda.js';
5
+ export var SvmWarpTokenType;
6
+ (function (SvmWarpTokenType) {
7
+ SvmWarpTokenType["Native"] = "native";
8
+ SvmWarpTokenType["Synthetic"] = "synthetic";
9
+ SvmWarpTokenType["Collateral"] = "collateral";
10
+ })(SvmWarpTokenType || (SvmWarpTokenType = {}));
11
+ /**
12
+ * Fetches and decodes the HyperlaneToken PDA for a given warp program.
13
+ * Returns null if the account does not exist or is not initialized.
14
+ */
15
+ export async function fetchTokenAccount(rpc, programId) {
16
+ const { address: tokenPda } = await deriveHyperlaneTokenPda(programId);
17
+ const account = await fetchEncodedAccount(rpc, tokenPda);
18
+ if (!account.exists)
19
+ return null;
20
+ return decodeHyperlaneTokenAccount(account.data);
21
+ }
22
+ /**
23
+ * Detects the warp token type by checking which type-specific PDA exists on-chain.
24
+ *
25
+ * Each token type creates exactly one unique PDA during init:
26
+ * Native: nativeCollateralPda ["hyperlane_token", "-", "native_collateral"]
27
+ * Synthetic: syntheticMintPda ["hyperlane_token", "-", "mint"]
28
+ * Collateral: escrowPda ["hyperlane_token", "-", "escrow"]
29
+ */
30
+ export async function detectWarpTokenType(rpc, programId) {
31
+ const [{ address: nativeCollateralPda }, { address: syntheticMintPda }, { address: escrowPda },] = await Promise.all([
32
+ deriveNativeCollateralPda(programId),
33
+ deriveSyntheticMintPda(programId),
34
+ deriveEscrowPda(programId),
35
+ ]);
36
+ const [nativeAccount, syntheticAccount, collateralAccount] = await Promise.all([
37
+ fetchEncodedAccount(rpc, nativeCollateralPda),
38
+ fetchEncodedAccount(rpc, syntheticMintPda),
39
+ fetchEncodedAccount(rpc, escrowPda),
40
+ ]);
41
+ const matches = [];
42
+ if (nativeAccount.exists)
43
+ matches.push(SvmWarpTokenType.Native);
44
+ if (syntheticAccount.exists)
45
+ matches.push(SvmWarpTokenType.Synthetic);
46
+ if (collateralAccount.exists)
47
+ matches.push(SvmWarpTokenType.Collateral);
48
+ assert(matches.length === 1, matches.length === 0
49
+ ? `Unable to detect warp token type for program ${programId}: no type-specific PDA found`
50
+ : `Ambiguous warp token type for program ${programId}: multiple type-specific PDAs exist (${matches.join(', ')})`);
51
+ return matches[0];
52
+ }
53
+ /** Converts a 32-byte router H256 to a 0x-prefixed hex string. */
54
+ export function routerBytesToHex(bytes) {
55
+ return toHexString(Buffer.from(bytes));
56
+ }
57
+ /**
58
+ * Converts a 0x-prefixed hex string to a 32-byte Uint8Array.
59
+ * Asserts the result is exactly 32 bytes.
60
+ */
61
+ export function routerHexToBytes(hex) {
62
+ const bytes = fromHexString(hex);
63
+ assert(bytes.length === 32, `Router address must be 32 bytes (64 hex chars), got ${bytes.length}`);
64
+ return bytes;
65
+ }
66
+ //# 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,64 @@
1
+ import { type Address } from '@solana/kit';
2
+ import { type RawWarpArtifactConfig } from '@hyperlane-xyz/provider-sdk/warp';
3
+ import type { SvmSigner } from '../clients/signer.js';
4
+ import { type TokenInitInstructionData } from '../instructions/token.js';
5
+ import type { AnnotatedSvmTransaction, SvmInstruction, SvmReceipt, SvmRpc } from '../types.js';
6
+ /**
7
+ * Asserts that `localDecimals` does not exceed the SVM maximum of 9.
8
+ * The on-chain program stores decimals as u8 and the decimal-conversion math
9
+ * overflows for values > 9. Mirrors the Rust client's `assert_decimals_max`.
10
+ */
11
+ export declare function assertLocalDecimals(localDecimals: number): void;
12
+ /**
13
+ * Derives `remoteDecimals` from `localDecimals` and the optional `scale` factor.
14
+ * scale = 10^(remoteDecimals - localDecimals), so
15
+ * remoteDecimals = localDecimals + log10(scale).
16
+ * Falls back to localDecimals when scale is absent or 1.
17
+ * Supports both upscaling (scale >= 1, e.g. 1e9) and downscaling
18
+ * (scale < 1, e.g. 1e-4) to match the on-chain program which stores
19
+ * decimals and remote_decimals as independent u8 values.
20
+ * Asserts that scale is an exact power of 10.
21
+ */
22
+ export declare function scaleToRemoteDecimals(localDecimals: number, scale?: number): number;
23
+ /**
24
+ * Derives the `scale` factor from on-chain `localDecimals` and `remoteDecimals`.
25
+ * Returns undefined when there is no scaling (remoteDecimals === localDecimals).
26
+ */
27
+ export declare function remoteDecimalsToScale(localDecimals: number, remoteDecimals: number): number | undefined;
28
+ /**
29
+ * Builds the TokenInitInstructionData shared by all warp token types.
30
+ * The caller is responsible for passing the token-type-specific decimals.
31
+ */
32
+ export declare function buildBaseInitData(config: Pick<RawWarpArtifactConfig, 'mailbox' | 'interchainSecurityModule' | 'hook'>, decimals: number, remoteDecimals: number): Promise<TokenInitInstructionData>;
33
+ /**
34
+ * Sends post-init configuration (remote routers + destination gas) in
35
+ * separate, batched transactions — matching the Rust CLI behaviour — to
36
+ * stay within Solana's 1232-byte transaction size limit.
37
+ *
38
+ * Router enrollments and gas configs are issued as independent instruction
39
+ * streams so each can use its full per-tx budget.
40
+ */
41
+ export declare function applyPostInitConfig(signer: SvmSigner, programId: Address, config: Pick<RawWarpArtifactConfig, 'remoteRouters' | 'destinationGas'>): Promise<SvmReceipt[]>;
42
+ /**
43
+ * Returns a System Program transfer instruction to top up the ATA payer PDA
44
+ * to at least `targetLamports`, or undefined if already sufficiently funded.
45
+ * For synthetic and collateral tokens the ATA payer funds recipient ATA
46
+ * creation on transfer_out.
47
+ */
48
+ export declare function buildFundAtaPayerInstruction(rpc: SvmRpc, payer: Address, programId: Address, targetLamports: bigint): Promise<SvmInstruction | undefined>;
49
+ /**
50
+ * Diffs current vs expected config and returns the minimal set of annotated
51
+ * update transactions needed to reconcile them, batched to stay within
52
+ * Solana's 1232-byte transaction size limit.
53
+ *
54
+ * Transaction grouping:
55
+ * 1. ISM + IGP hook changes (combined, both are small)
56
+ * 2. Router unenroll/enroll batches (MAX_ROUTERS_PER_TX each)
57
+ * 3. Gas config unenroll/enroll batches (MAX_GAS_CONFIGS_PER_TX each)
58
+ * 4. Ownership transfer (always last, own tx)
59
+ *
60
+ * @param label - Prefix used for transaction annotations,
61
+ * e.g. "native token <programId>"
62
+ */
63
+ export declare function computeWarpTokenUpdateInstructions(current: RawWarpArtifactConfig, expected: RawWarpArtifactConfig, programId: Address, ownerAddress: Address, rpc: SvmRpc, label: string): Promise<AnnotatedSvmTransaction[]>;
64
+ //# 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,KAAK,OAAO,EAA2B,MAAM,aAAa,CAAC;AAEpE,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,kCAAkC,CAAC;AAQ1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAMtD,OAAO,EAML,KAAK,wBAAwB,EAC9B,MAAM,0BAA0B,CAAC;AASlC,OAAO,KAAK,EACV,uBAAuB,EACvB,cAAc,EACd,UAAU,EACV,MAAM,EACP,MAAM,aAAa,CAAC;AAOrB;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAO/D;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAoCR;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,MAAM,GAAG,SAAS,CAGpB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,IAAI,CACV,qBAAqB,EACrB,SAAS,GAAG,0BAA0B,GAAG,MAAM,CAChD,EACD,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,wBAAwB,CAAC,CA6BnC;AAYD;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,OAAO,EAClB,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,eAAe,GAAG,gBAAgB,CAAC,GACtE,OAAO,CAAC,UAAU,EAAE,CAAC,CA0CvB;AAED;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,OAAO,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAgBrC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kCAAkC,CACtD,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,qBAAqB,EAC/B,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,OAAO,EACrB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,uBAAuB,EAAE,CAAC,CA+LpC"}