@humanode-hyperlane/cosmos-sdk 0.0.0-stage → 30.0.0-humanode.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 (191) hide show
  1. package/LICENSE.md +193 -0
  2. package/README.md +82 -2
  3. package/dist/clients/protocol.d.ts +24 -0
  4. package/dist/clients/protocol.d.ts.map +1 -0
  5. package/dist/clients/protocol.js +70 -0
  6. package/dist/clients/protocol.js.map +1 -0
  7. package/dist/clients/provider.d.ts +70 -0
  8. package/dist/clients/provider.d.ts.map +1 -0
  9. package/dist/clients/provider.js +397 -0
  10. package/dist/clients/provider.js.map +1 -0
  11. package/dist/clients/signer.d.ts +55 -0
  12. package/dist/clients/signer.d.ts.map +1 -0
  13. package/dist/clients/signer.js +377 -0
  14. package/dist/clients/signer.js.map +1 -0
  15. package/dist/hook/hook-artifact-manager.d.ts +72 -0
  16. package/dist/hook/hook-artifact-manager.d.ts.map +1 -0
  17. package/dist/hook/hook-artifact-manager.js +139 -0
  18. package/dist/hook/hook-artifact-manager.js.map +1 -0
  19. package/dist/hook/hook-query.d.ts +42 -0
  20. package/dist/hook/hook-query.d.ts.map +1 -0
  21. package/dist/hook/hook-query.js +95 -0
  22. package/dist/hook/hook-query.js.map +1 -0
  23. package/dist/hook/hook-tx.d.ts +47 -0
  24. package/dist/hook/hook-tx.d.ts.map +1 -0
  25. package/dist/hook/hook-tx.js +76 -0
  26. package/dist/hook/hook-tx.js.map +1 -0
  27. package/dist/hook/igp-hook.d.ts +30 -0
  28. package/dist/hook/igp-hook.d.ts.map +1 -0
  29. package/dist/hook/igp-hook.js +150 -0
  30. package/dist/hook/igp-hook.js.map +1 -0
  31. package/dist/hook/merkle-tree-hook.d.ts +32 -0
  32. package/dist/hook/merkle-tree-hook.d.ts.map +1 -0
  33. package/dist/hook/merkle-tree-hook.js +60 -0
  34. package/dist/hook/merkle-tree-hook.js.map +1 -0
  35. package/dist/hyperlane/core/messages.d.ts +16 -0
  36. package/dist/hyperlane/core/messages.d.ts.map +1 -0
  37. package/dist/hyperlane/core/messages.js +2 -0
  38. package/dist/hyperlane/core/messages.js.map +1 -0
  39. package/dist/hyperlane/core/query.d.ts +18 -0
  40. package/dist/hyperlane/core/query.d.ts.map +1 -0
  41. package/dist/hyperlane/core/query.js +18 -0
  42. package/dist/hyperlane/core/query.js.map +1 -0
  43. package/dist/hyperlane/interchain_security/messages.d.ts +36 -0
  44. package/dist/hyperlane/interchain_security/messages.d.ts.map +1 -0
  45. package/dist/hyperlane/interchain_security/messages.js +2 -0
  46. package/dist/hyperlane/interchain_security/messages.js.map +1 -0
  47. package/dist/hyperlane/interchain_security/query.d.ts +36 -0
  48. package/dist/hyperlane/interchain_security/query.d.ts.map +1 -0
  49. package/dist/hyperlane/interchain_security/query.js +49 -0
  50. package/dist/hyperlane/interchain_security/query.js.map +1 -0
  51. package/dist/hyperlane/post_dispatch/messages.d.ts +32 -0
  52. package/dist/hyperlane/post_dispatch/messages.d.ts.map +1 -0
  53. package/dist/hyperlane/post_dispatch/messages.js +2 -0
  54. package/dist/hyperlane/post_dispatch/messages.js.map +1 -0
  55. package/dist/hyperlane/post_dispatch/query.d.ts +24 -0
  56. package/dist/hyperlane/post_dispatch/query.d.ts.map +1 -0
  57. package/dist/hyperlane/post_dispatch/query.js +21 -0
  58. package/dist/hyperlane/post_dispatch/query.js.map +1 -0
  59. package/dist/hyperlane/warp/messages.d.ts +28 -0
  60. package/dist/hyperlane/warp/messages.d.ts.map +1 -0
  61. package/dist/hyperlane/warp/messages.js +2 -0
  62. package/dist/hyperlane/warp/messages.js.map +1 -0
  63. package/dist/hyperlane/warp/query.d.ts +18 -0
  64. package/dist/hyperlane/warp/query.d.ts.map +1 -0
  65. package/dist/hyperlane/warp/query.js +16 -0
  66. package/dist/hyperlane/warp/query.js.map +1 -0
  67. package/dist/index.d.ts +30 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +36 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/ism/ism-artifact-manager.d.ts +69 -0
  72. package/dist/ism/ism-artifact-manager.d.ts.map +1 -0
  73. package/dist/ism/ism-artifact-manager.js +144 -0
  74. package/dist/ism/ism-artifact-manager.js.map +1 -0
  75. package/dist/ism/ism-query.d.ts +71 -0
  76. package/dist/ism/ism-query.d.ts.map +1 -0
  77. package/dist/ism/ism-query.js +133 -0
  78. package/dist/ism/ism-query.js.map +1 -0
  79. package/dist/ism/ism-tx.d.ts +30 -0
  80. package/dist/ism/ism-tx.d.ts.map +1 -0
  81. package/dist/ism/ism-tx.js +76 -0
  82. package/dist/ism/ism-tx.js.map +1 -0
  83. package/dist/ism/multisig-ism.d.ts +51 -0
  84. package/dist/ism/multisig-ism.d.ts.map +1 -0
  85. package/dist/ism/multisig-ism.js +120 -0
  86. package/dist/ism/multisig-ism.js.map +1 -0
  87. package/dist/ism/routing-ism.d.ts +30 -0
  88. package/dist/ism/routing-ism.d.ts.map +1 -0
  89. package/dist/ism/routing-ism.js +126 -0
  90. package/dist/ism/routing-ism.js.map +1 -0
  91. package/dist/ism/test-ism.d.ts +29 -0
  92. package/dist/ism/test-ism.d.ts.map +1 -0
  93. package/dist/ism/test-ism.js +56 -0
  94. package/dist/ism/test-ism.js.map +1 -0
  95. package/dist/mailbox/mailbox-artifact-manager.d.ts +48 -0
  96. package/dist/mailbox/mailbox-artifact-manager.d.ts.map +1 -0
  97. package/dist/mailbox/mailbox-artifact-manager.js +82 -0
  98. package/dist/mailbox/mailbox-artifact-manager.js.map +1 -0
  99. package/dist/mailbox/mailbox-query.d.ts +12 -0
  100. package/dist/mailbox/mailbox-query.d.ts.map +1 -0
  101. package/dist/mailbox/mailbox-query.js +29 -0
  102. package/dist/mailbox/mailbox-query.js.map +1 -0
  103. package/dist/mailbox/mailbox-tx.d.ts +37 -0
  104. package/dist/mailbox/mailbox-tx.d.ts.map +1 -0
  105. package/dist/mailbox/mailbox-tx.js +68 -0
  106. package/dist/mailbox/mailbox-tx.js.map +1 -0
  107. package/dist/mailbox/mailbox.d.ts +30 -0
  108. package/dist/mailbox/mailbox.d.ts.map +1 -0
  109. package/dist/mailbox/mailbox.js +168 -0
  110. package/dist/mailbox/mailbox.js.map +1 -0
  111. package/dist/registry.d.ts +21 -0
  112. package/dist/registry.d.ts.map +1 -0
  113. package/dist/registry.js +373 -0
  114. package/dist/registry.js.map +1 -0
  115. package/dist/testing/constants.d.ts +10 -0
  116. package/dist/testing/constants.d.ts.map +1 -0
  117. package/dist/testing/constants.js +30 -0
  118. package/dist/testing/constants.js.map +1 -0
  119. package/dist/testing/index.d.ts +8 -0
  120. package/dist/testing/index.d.ts.map +1 -0
  121. package/dist/testing/index.js +10 -0
  122. package/dist/testing/index.js.map +1 -0
  123. package/dist/testing/node.d.ts +4 -0
  124. package/dist/testing/node.d.ts.map +1 -0
  125. package/dist/testing/node.js +35 -0
  126. package/dist/testing/node.js.map +1 -0
  127. package/dist/testing/utils.d.ts +10 -0
  128. package/dist/testing/utils.d.ts.map +1 -0
  129. package/dist/testing/utils.js +29 -0
  130. package/dist/testing/utils.js.map +1 -0
  131. package/dist/tests/1_interchain_security.e2e-test.d.ts +2 -0
  132. package/dist/tests/1_interchain_security.e2e-test.d.ts.map +1 -0
  133. package/dist/tests/1_interchain_security.e2e-test.js +171 -0
  134. package/dist/tests/1_interchain_security.e2e-test.js.map +1 -0
  135. package/dist/tests/2_core.e2e-test.d.ts +2 -0
  136. package/dist/tests/2_core.e2e-test.d.ts.map +1 -0
  137. package/dist/tests/2_core.e2e-test.js +120 -0
  138. package/dist/tests/2_core.e2e-test.js.map +1 -0
  139. package/dist/tests/3_post_dispatch.e2e-test.d.ts +2 -0
  140. package/dist/tests/3_post_dispatch.e2e-test.d.ts.map +1 -0
  141. package/dist/tests/3_post_dispatch.e2e-test.js +130 -0
  142. package/dist/tests/3_post_dispatch.e2e-test.js.map +1 -0
  143. package/dist/tests/4_warp.e2e-test.d.ts +2 -0
  144. package/dist/tests/4_warp.e2e-test.d.ts.map +1 -0
  145. package/dist/tests/4_warp.e2e-test.js +284 -0
  146. package/dist/tests/4_warp.e2e-test.js.map +1 -0
  147. package/dist/tests/5_warp_artifact.e2e-test.d.ts +2 -0
  148. package/dist/tests/5_warp_artifact.e2e-test.d.ts.map +1 -0
  149. package/dist/tests/5_warp_artifact.e2e-test.js +520 -0
  150. package/dist/tests/5_warp_artifact.e2e-test.js.map +1 -0
  151. package/dist/tests/e2e-test.setup.d.ts +2 -0
  152. package/dist/tests/e2e-test.setup.d.ts.map +1 -0
  153. package/dist/tests/e2e-test.setup.js +13 -0
  154. package/dist/tests/e2e-test.setup.js.map +1 -0
  155. package/dist/tests/hooks.e2e-test.d.ts +2 -0
  156. package/dist/tests/hooks.e2e-test.d.ts.map +1 -0
  157. package/dist/tests/hooks.e2e-test.js +314 -0
  158. package/dist/tests/hooks.e2e-test.js.map +1 -0
  159. package/dist/tests/mailbox.e2e-test.d.ts +2 -0
  160. package/dist/tests/mailbox.e2e-test.d.ts.map +1 -0
  161. package/dist/tests/mailbox.e2e-test.js +355 -0
  162. package/dist/tests/mailbox.e2e-test.js.map +1 -0
  163. package/dist/utils/base.d.ts +22 -0
  164. package/dist/utils/base.d.ts.map +1 -0
  165. package/dist/utils/base.js +35 -0
  166. package/dist/utils/base.js.map +1 -0
  167. package/dist/utils/types.d.ts +44 -0
  168. package/dist/utils/types.d.ts.map +1 -0
  169. package/dist/utils/types.js +2 -0
  170. package/dist/utils/types.js.map +1 -0
  171. package/dist/warp/collateral-token.d.ts +21 -0
  172. package/dist/warp/collateral-token.d.ts.map +1 -0
  173. package/dist/warp/collateral-token.js +119 -0
  174. package/dist/warp/collateral-token.js.map +1 -0
  175. package/dist/warp/synthetic-token.d.ts +21 -0
  176. package/dist/warp/synthetic-token.d.ts.map +1 -0
  177. package/dist/warp/synthetic-token.js +98 -0
  178. package/dist/warp/synthetic-token.js.map +1 -0
  179. package/dist/warp/warp-artifact-manager.d.ts +17 -0
  180. package/dist/warp/warp-artifact-manager.d.ts.map +1 -0
  181. package/dist/warp/warp-artifact-manager.js +101 -0
  182. package/dist/warp/warp-artifact-manager.js.map +1 -0
  183. package/dist/warp/warp-query.d.ts +9 -0
  184. package/dist/warp/warp-query.d.ts.map +1 -0
  185. package/dist/warp/warp-query.js +105 -0
  186. package/dist/warp/warp-query.js.map +1 -0
  187. package/dist/warp/warp-tx.d.ts +31 -0
  188. package/dist/warp/warp-tx.d.ts.map +1 -0
  189. package/dist/warp/warp-tx.js +127 -0
  190. package/dist/warp/warp-tx.js.map +1 -0
  191. package/package.json +61 -3
@@ -0,0 +1,520 @@
1
+ import chai, { expect } from 'chai';
2
+ import chaiAsPromised from 'chai-as-promised';
3
+ import { AltVM } from '@humanode-hyperlane/provider-sdk';
4
+ import { ArtifactState, } from '@humanode-hyperlane/provider-sdk/artifact';
5
+ import { assert, eqAddressCosmos } from '@humanode-hyperlane/utils';
6
+ import { DEFAULT_E2E_TEST_TIMEOUT } from '../testing/constants.js';
7
+ import { createSigner } from '../testing/utils.js';
8
+ import { CosmosWarpArtifactManager } from '../warp/warp-artifact-manager.js';
9
+ chai.use(chaiAsPromised);
10
+ describe('Cosmos Warp Artifacts (e2e)', function () {
11
+ this.timeout(DEFAULT_E2E_TEST_TIMEOUT);
12
+ let cosmosSigner;
13
+ let providerSdkSigner;
14
+ let otherProviderSdkSigner;
15
+ let artifactManager;
16
+ let mailboxAddress;
17
+ let deployerAddress;
18
+ let newOwnerAddress;
19
+ let testIsmAddress;
20
+ let secondIsmAddress;
21
+ const DOMAIN_1 = 42;
22
+ const DOMAIN_2 = 96;
23
+ before(async () => {
24
+ cosmosSigner = (await createSigner('alice'));
25
+ providerSdkSigner = cosmosSigner;
26
+ deployerAddress = cosmosSigner.getSignerAddress();
27
+ // Create new owner address (using bob signer)
28
+ otherProviderSdkSigner = await createSigner('bob');
29
+ newOwnerAddress = otherProviderSdkSigner.getSignerAddress();
30
+ const rpcUrls = cosmosSigner.getRpcUrls();
31
+ assert(rpcUrls.length > 0, 'Expected at least 1 rpc url for the tests');
32
+ artifactManager = new CosmosWarpArtifactManager(rpcUrls);
33
+ // Create ISM addresses for tests
34
+ const ism1 = await cosmosSigner.createNoopIsm({});
35
+ testIsmAddress = ism1.ismAddress;
36
+ const ism2 = await cosmosSigner.createNoopIsm({});
37
+ secondIsmAddress = ism2.ismAddress;
38
+ // Set up mailbox for tests
39
+ const mailboxResponse = await cosmosSigner.createMailbox({
40
+ domainId: 1234,
41
+ defaultIsmAddress: testIsmAddress,
42
+ });
43
+ mailboxAddress = mailboxResponse.mailboxAddress;
44
+ });
45
+ // Table-driven tests for both token types
46
+ const tokenTestCases = [
47
+ {
48
+ type: AltVM.TokenType.collateral,
49
+ name: 'collateral',
50
+ getConfig: () => ({
51
+ type: AltVM.TokenType.collateral,
52
+ owner: deployerAddress,
53
+ mailbox: mailboxAddress,
54
+ token: 'uhyp',
55
+ name: '',
56
+ symbol: '',
57
+ decimals: 0,
58
+ remoteRouters: {},
59
+ destinationGas: {},
60
+ }),
61
+ expectedFields: {
62
+ token: 'uhyp',
63
+ name: '',
64
+ symbol: '',
65
+ decimals: 0,
66
+ },
67
+ },
68
+ {
69
+ type: AltVM.TokenType.synthetic,
70
+ name: 'synthetic',
71
+ getConfig: () => ({
72
+ type: AltVM.TokenType.synthetic,
73
+ owner: deployerAddress,
74
+ mailbox: mailboxAddress,
75
+ name: '',
76
+ symbol: '',
77
+ decimals: 0,
78
+ remoteRouters: {},
79
+ destinationGas: {},
80
+ }),
81
+ expectedFields: {
82
+ name: '',
83
+ symbol: '',
84
+ decimals: 0,
85
+ },
86
+ },
87
+ ];
88
+ tokenTestCases.forEach(({ type, name, getConfig, expectedFields }) => {
89
+ describe(`${name} token`, () => {
90
+ it('should create and read token', async () => {
91
+ const config = getConfig();
92
+ const writer = artifactManager.createWriter(type, cosmosSigner);
93
+ const [result, receipts] = await writer.create({ config });
94
+ expect(result.artifactState).to.equal(ArtifactState.DEPLOYED);
95
+ expect(result.config.type).to.equal(type);
96
+ expect(result.deployed.address).to.be.a('string').and.not.be.empty;
97
+ expect(receipts).to.be.an('array').with.length.greaterThan(0);
98
+ // Verify expected fields
99
+ if (expectedFields) {
100
+ for (const [field, expectedValue] of Object.entries(expectedFields)) {
101
+ expect(result.config[field]).to.equal(expectedValue);
102
+ }
103
+ }
104
+ // Read back the token
105
+ const reader = artifactManager.createReader(type);
106
+ const readToken = await reader.read(result.deployed.address);
107
+ expect(readToken.artifactState).to.equal(ArtifactState.DEPLOYED);
108
+ expect(readToken.config.type).to.equal(type);
109
+ expect(readToken.deployed.address).to.equal(result.deployed.address);
110
+ });
111
+ it('should enroll remote routers', async () => {
112
+ const initialConfig = getConfig();
113
+ const writer = artifactManager.createWriter(type, cosmosSigner);
114
+ const [deployedToken] = await writer.create({
115
+ config: initialConfig,
116
+ });
117
+ // Update with remote routers
118
+ const updatedConfig = {
119
+ ...deployedToken,
120
+ config: {
121
+ ...deployedToken.config,
122
+ remoteRouters: {
123
+ [DOMAIN_1]: {
124
+ address: '0xc2c6885c3c9e16064d86ce46b7a1ac57888a1e60b2ce88d2504347d3418399c4',
125
+ },
126
+ [DOMAIN_2]: {
127
+ address: '0x1aac830e4d71000c25149af643b5a18c7a907e2d36147d8b57c5847b03ea5528',
128
+ },
129
+ },
130
+ destinationGas: {
131
+ [DOMAIN_1]: '100000',
132
+ [DOMAIN_2]: '200000',
133
+ },
134
+ },
135
+ };
136
+ const txs = await writer.update(updatedConfig);
137
+ expect(txs).to.be.an('array').with.length.greaterThan(0);
138
+ for (const tx of txs) {
139
+ await providerSdkSigner.sendAndConfirmTransaction(tx);
140
+ }
141
+ // Verify
142
+ const reader = artifactManager.createReader(type);
143
+ const readToken = await reader.read(deployedToken.deployed.address);
144
+ expect(readToken.config.remoteRouters[DOMAIN_1].address).to.equal('0xc2c6885c3c9e16064d86ce46b7a1ac57888a1e60b2ce88d2504347d3418399c4');
145
+ expect(readToken.config.remoteRouters[DOMAIN_2].address).to.equal('0x1aac830e4d71000c25149af643b5a18c7a907e2d36147d8b57c5847b03ea5528');
146
+ expect(readToken.config.destinationGas[DOMAIN_1]).to.equal('100000');
147
+ expect(readToken.config.destinationGas[DOMAIN_2]).to.equal('200000');
148
+ });
149
+ it('should unenroll removed routers', async () => {
150
+ const initialConfig = getConfig();
151
+ initialConfig.remoteRouters = {
152
+ [DOMAIN_1]: {
153
+ address: '0xc2c6885c3c9e16064d86ce46b7a1ac57888a1e60b2ce88d2504347d3418399c4',
154
+ },
155
+ [DOMAIN_2]: {
156
+ address: '0x1aac830e4d71000c25149af643b5a18c7a907e2d36147d8b57c5847b03ea5528',
157
+ },
158
+ };
159
+ initialConfig.destinationGas = {
160
+ [DOMAIN_1]: '100000',
161
+ [DOMAIN_2]: '200000',
162
+ };
163
+ const writer = artifactManager.createWriter(type, cosmosSigner);
164
+ const [deployedToken] = await writer.create({
165
+ config: initialConfig,
166
+ });
167
+ // Remove DOMAIN_2
168
+ const updatedConfig = {
169
+ ...deployedToken,
170
+ config: {
171
+ ...deployedToken.config,
172
+ remoteRouters: {
173
+ [DOMAIN_1]: {
174
+ address: '0xc2c6885c3c9e16064d86ce46b7a1ac57888a1e60b2ce88d2504347d3418399c4',
175
+ },
176
+ },
177
+ destinationGas: {
178
+ [DOMAIN_1]: '100000',
179
+ },
180
+ },
181
+ };
182
+ const txs = await writer.update(updatedConfig);
183
+ expect(txs).to.be.an('array').with.length.greaterThan(0);
184
+ for (const tx of txs) {
185
+ await providerSdkSigner.sendAndConfirmTransaction(tx);
186
+ }
187
+ // Verify DOMAIN_2 was unenrolled
188
+ const reader = artifactManager.createReader(type);
189
+ const readToken = await reader.read(deployedToken.deployed.address);
190
+ expect(readToken.config.remoteRouters[DOMAIN_1]).to.exist;
191
+ expect(readToken.config.remoteRouters[DOMAIN_2]).to.be.undefined;
192
+ });
193
+ it('should update when only destination gas changes', async () => {
194
+ const initialConfig = getConfig();
195
+ const routerAddress = '0xc2c6885c3c9e16064d86ce46b7a1ac57888a1e60b2ce88d2504347d3418399c4';
196
+ // Create with initial gas value
197
+ initialConfig.remoteRouters = {
198
+ [DOMAIN_1]: { address: routerAddress },
199
+ };
200
+ initialConfig.destinationGas = {
201
+ [DOMAIN_1]: '100000',
202
+ };
203
+ const writer = artifactManager.createWriter(type, cosmosSigner);
204
+ const [deployedToken] = await writer.create({
205
+ config: initialConfig,
206
+ });
207
+ // Verify initial gas value
208
+ const reader = artifactManager.createReader(type);
209
+ const readToken1 = await reader.read(deployedToken.deployed.address);
210
+ expect(readToken1.config.destinationGas[DOMAIN_1]).to.equal('100000');
211
+ // Update only gas (router address unchanged)
212
+ const updatedConfig = {
213
+ ...deployedToken,
214
+ config: {
215
+ ...deployedToken.config,
216
+ remoteRouters: {
217
+ [DOMAIN_1]: { address: routerAddress }, // Same address
218
+ },
219
+ destinationGas: {
220
+ [DOMAIN_1]: '200000', // Changed gas
221
+ },
222
+ },
223
+ };
224
+ const txs = await writer.update(updatedConfig);
225
+ expect(txs).to.be.an('array').with.length.greaterThan(0);
226
+ // Execute update
227
+ for (const tx of txs) {
228
+ await providerSdkSigner.sendAndConfirmTransaction(tx);
229
+ }
230
+ // Verify gas changed
231
+ const readToken2 = await reader.read(deployedToken.deployed.address);
232
+ expect(readToken2.config.destinationGas[DOMAIN_1]).to.equal('200000');
233
+ expect(eqAddressCosmos(readToken2.config.remoteRouters[DOMAIN_1].address, routerAddress)).to.be.true;
234
+ });
235
+ it('should transfer ownership via update (ownership last)', async () => {
236
+ const initialConfig = getConfig();
237
+ const writer = artifactManager.createWriter(type, cosmosSigner);
238
+ const [deployedToken] = await writer.create({
239
+ config: initialConfig,
240
+ });
241
+ const customIsmAddress = testIsmAddress;
242
+ // Update routers, ISM, AND ownership
243
+ const updatedConfig = {
244
+ ...deployedToken,
245
+ config: {
246
+ ...deployedToken.config,
247
+ owner: newOwnerAddress,
248
+ interchainSecurityModule: {
249
+ artifactState: ArtifactState.UNDERIVED,
250
+ deployed: {
251
+ address: customIsmAddress,
252
+ },
253
+ },
254
+ remoteRouters: {
255
+ [DOMAIN_1]: {
256
+ address: '0xc2c6885c3c9e16064d86ce46b7a1ac57888a1e60b2ce88d2504347d3418399c4',
257
+ },
258
+ },
259
+ destinationGas: {
260
+ [DOMAIN_1]: '100000',
261
+ },
262
+ },
263
+ };
264
+ const txs = await writer.update(updatedConfig);
265
+ expect(txs).to.be.an('array').with.length.greaterThan(0);
266
+ // Verify ownership transfer is the LAST transaction
267
+ const lastTx = txs[txs.length - 1];
268
+ expect(lastTx.annotation).to.include('owner');
269
+ // Execute all transactions
270
+ for (const tx of txs) {
271
+ await providerSdkSigner.sendAndConfirmTransaction(tx);
272
+ }
273
+ // Verify router enrollment, ISM, AND ownership transfer succeeded
274
+ const reader = artifactManager.createReader(type);
275
+ const readToken = await reader.read(deployedToken.deployed.address);
276
+ expect(readToken.config.remoteRouters[DOMAIN_1].address).to.equal('0xc2c6885c3c9e16064d86ce46b7a1ac57888a1e60b2ce88d2504347d3418399c4');
277
+ assert(readToken.config.interchainSecurityModule?.deployed.address, 'ISM address should be set');
278
+ expect(eqAddressCosmos(readToken.config.interchainSecurityModule.deployed.address, customIsmAddress)).to.be.true;
279
+ expect(eqAddressCosmos(readToken.config.owner, newOwnerAddress)).to.be
280
+ .true;
281
+ });
282
+ it('should return no update transactions when config is unchanged', async () => {
283
+ const config = getConfig();
284
+ const writer = artifactManager.createWriter(type, cosmosSigner);
285
+ const [deployedToken] = await writer.create({ config });
286
+ const txs = await writer.update(deployedToken);
287
+ expect(txs).to.be.an('array').with.length(0);
288
+ });
289
+ describe('ISM updates', function () {
290
+ // Note: Cosmos does not support unsetting ISM (changing from address to undefined)
291
+ // because the underlying chain code doesn't support it yet
292
+ it('should set ISM when changed from undefined to address', async () => {
293
+ const initialConfig = getConfig();
294
+ // Start with no ISM
295
+ initialConfig.interchainSecurityModule = undefined;
296
+ const writer = artifactManager.createWriter(type, cosmosSigner);
297
+ const [deployedToken] = await writer.create({
298
+ config: initialConfig,
299
+ });
300
+ // Verify ISM is unset
301
+ const reader = artifactManager.createReader(type);
302
+ const readToken1 = await reader.read(deployedToken.deployed.address);
303
+ expect(readToken1.config.interchainSecurityModule).to.be.undefined;
304
+ // Update to set ISM
305
+ const customIsmAddress = testIsmAddress;
306
+ const updatedConfig = {
307
+ ...deployedToken,
308
+ config: {
309
+ ...deployedToken.config,
310
+ interchainSecurityModule: {
311
+ artifactState: ArtifactState.UNDERIVED,
312
+ deployed: {
313
+ address: customIsmAddress,
314
+ },
315
+ },
316
+ },
317
+ };
318
+ const txs = await writer.update(updatedConfig);
319
+ expect(txs).to.be.an('array').with.length.greaterThan(0);
320
+ // Execute update
321
+ for (const tx of txs) {
322
+ await providerSdkSigner.sendAndConfirmTransaction(tx);
323
+ }
324
+ // Verify ISM is now set
325
+ const readToken2 = await reader.read(deployedToken.deployed.address);
326
+ assert(readToken2.config.interchainSecurityModule?.deployed.address, 'ISM address should be set');
327
+ expect(eqAddressCosmos(readToken2.config.interchainSecurityModule.deployed.address, customIsmAddress)).to.be.true;
328
+ });
329
+ it('should change ISM when updated to different address', async () => {
330
+ const initialConfig = getConfig();
331
+ const firstIsmAddress = testIsmAddress;
332
+ // Create with first ISM
333
+ initialConfig.interchainSecurityModule = {
334
+ artifactState: ArtifactState.UNDERIVED,
335
+ deployed: {
336
+ address: firstIsmAddress,
337
+ },
338
+ };
339
+ const writer = artifactManager.createWriter(type, cosmosSigner);
340
+ const [deployedToken] = await writer.create({
341
+ config: initialConfig,
342
+ });
343
+ // Verify first ISM is set
344
+ const reader = artifactManager.createReader(type);
345
+ const readToken1 = await reader.read(deployedToken.deployed.address);
346
+ assert(readToken1.config.interchainSecurityModule?.deployed.address, 'ISM address should be set');
347
+ expect(eqAddressCosmos(readToken1.config.interchainSecurityModule.deployed.address, firstIsmAddress)).to.be.true;
348
+ // Update to second ISM
349
+ const updatedConfig = {
350
+ ...deployedToken,
351
+ config: {
352
+ ...deployedToken.config,
353
+ interchainSecurityModule: {
354
+ artifactState: ArtifactState.UNDERIVED,
355
+ deployed: {
356
+ address: secondIsmAddress,
357
+ },
358
+ },
359
+ },
360
+ };
361
+ const txs = await writer.update(updatedConfig);
362
+ expect(txs).to.be.an('array').with.length.greaterThan(0);
363
+ // Execute update
364
+ for (const tx of txs) {
365
+ await providerSdkSigner.sendAndConfirmTransaction(tx);
366
+ }
367
+ // Verify ISM changed to second address
368
+ const readToken2 = await reader.read(deployedToken.deployed.address);
369
+ assert(readToken2.config.interchainSecurityModule?.deployed.address, 'ISM address should be set');
370
+ expect(eqAddressCosmos(readToken2.config.interchainSecurityModule.deployed.address, secondIsmAddress)).to.be.true;
371
+ });
372
+ it('should not generate ISM update tx when ISM unchanged', async () => {
373
+ const initialConfig = getConfig();
374
+ const customIsmAddress = testIsmAddress;
375
+ // Create with ISM
376
+ initialConfig.interchainSecurityModule = {
377
+ artifactState: ArtifactState.UNDERIVED,
378
+ deployed: {
379
+ address: customIsmAddress,
380
+ },
381
+ };
382
+ const writer = artifactManager.createWriter(type, cosmosSigner);
383
+ const [deployedToken] = await writer.create({
384
+ config: initialConfig,
385
+ });
386
+ // Update with same ISM (no change)
387
+ const txs = await writer.update(deployedToken);
388
+ // Should have no transactions (ISM unchanged)
389
+ expect(txs).to.be.an('array').with.length(0);
390
+ });
391
+ it('should not generate ISM update tx when both undefined', async () => {
392
+ const initialConfig = getConfig();
393
+ // Create without ISM
394
+ initialConfig.interchainSecurityModule = undefined;
395
+ const writer = artifactManager.createWriter(type, cosmosSigner);
396
+ const [deployedToken] = await writer.create({
397
+ config: initialConfig,
398
+ });
399
+ // Update with ISM still undefined (no change)
400
+ const txs = await writer.update(deployedToken);
401
+ // Should have no transactions (ISM still undefined)
402
+ expect(txs).to.be.an('array').with.length(0);
403
+ });
404
+ it('should not generate ISM update tx when current ism is undefined and the 0 address is provided in the config', async () => {
405
+ const initialConfig = getConfig();
406
+ const writer = artifactManager.createWriter(type, cosmosSigner);
407
+ const [deployedToken] = await writer.create({
408
+ config: initialConfig,
409
+ });
410
+ const updatedConfig = {
411
+ ...deployedToken,
412
+ config: {
413
+ ...deployedToken.config,
414
+ interchainSecurityModule: {
415
+ artifactState: ArtifactState.UNDERIVED,
416
+ deployed: {
417
+ address: '0x0000000000000000000000000000000000000000',
418
+ },
419
+ },
420
+ },
421
+ };
422
+ // Try to update with ISM still undefined (should not generate tx)
423
+ const txs = await writer.update(updatedConfig);
424
+ // Should generate 0 transactions (ISM unchanged)
425
+ expect(txs).to.be.an('array').with.length(0);
426
+ });
427
+ });
428
+ it('should encode all update transactions with current owner as sender after ownership transfer', async () => {
429
+ const initialConfig = getConfig();
430
+ // Create with initial state
431
+ initialConfig.remoteRouters = {
432
+ [DOMAIN_1]: {
433
+ address: '0xc2c6885c3c9e16064d86ce46b7a1ac57888a1e60b2ce88d2504347d3418399c4',
434
+ },
435
+ };
436
+ initialConfig.destinationGas = {
437
+ [DOMAIN_1]: '100000',
438
+ };
439
+ const writer = artifactManager.createWriter(type, cosmosSigner);
440
+ const [deployedToken] = await writer.create({
441
+ config: initialConfig,
442
+ });
443
+ const signerAddress = cosmosSigner.getSignerAddress();
444
+ // Transfer ownership to bob (newOwnerAddress)
445
+ const ownershipTransferConfig = {
446
+ ...deployedToken,
447
+ config: {
448
+ ...deployedToken.config,
449
+ owner: newOwnerAddress,
450
+ },
451
+ };
452
+ const ownershipTxs = await writer.update(ownershipTransferConfig);
453
+ for (const tx of ownershipTxs) {
454
+ await providerSdkSigner.sendAndConfirmTransaction(tx);
455
+ }
456
+ // Read token to verify ownership transfer
457
+ const tokenAfterOwnershipTransfer = await writer.read(deployedToken.deployed.address);
458
+ expect(eqAddressCosmos(tokenAfterOwnershipTransfer.config.owner, newOwnerAddress)).to.be.true;
459
+ // Now perform multiple updates: ISM set, router unenroll, new router enroll
460
+ const updatedConfig = {
461
+ ...tokenAfterOwnershipTransfer,
462
+ deployed: deployedToken.deployed,
463
+ config: {
464
+ ...tokenAfterOwnershipTransfer.config,
465
+ interchainSecurityModule: {
466
+ artifactState: ArtifactState.UNDERIVED,
467
+ deployed: {
468
+ address: secondIsmAddress,
469
+ },
470
+ },
471
+ remoteRouters: {
472
+ // Remove DOMAIN_1, add DOMAIN_2
473
+ [DOMAIN_2]: {
474
+ address: '0x1aac830e4d71000c25149af643b5a18c7a907e2d36147d8b57c5847b03ea5528',
475
+ },
476
+ },
477
+ destinationGas: {
478
+ [DOMAIN_2]: '200000',
479
+ },
480
+ },
481
+ };
482
+ const updateTxs = await writer.update(updatedConfig);
483
+ expect(updateTxs).to.be.an('array').with.length.greaterThan(0);
484
+ // Validate ALL update transactions are encoded for the CURRENT owner (not signer)
485
+ for (const tx of updateTxs) {
486
+ // Cosmos transactions have the owner in the value field
487
+ const txValue = tx.value;
488
+ expect(txValue).to.have.property('owner');
489
+ // Transaction must be encoded for current owner (newOwnerAddress), not signer
490
+ expect(eqAddressCosmos(txValue.owner, newOwnerAddress)).to.be.true;
491
+ expect(eqAddressCosmos(txValue.owner, signerAddress)).to.be.false;
492
+ // Execute transaction
493
+ await otherProviderSdkSigner.sendAndConfirmTransaction(tx);
494
+ }
495
+ // Verify all updates succeeded
496
+ const finalToken = await writer.read(deployedToken.deployed.address);
497
+ assert(finalToken.config.interchainSecurityModule?.deployed.address, 'Expected ism address to be defined');
498
+ expect(eqAddressCosmos(finalToken.config.interchainSecurityModule?.deployed.address, secondIsmAddress)).to.be.true;
499
+ expect(finalToken.config.remoteRouters[DOMAIN_1]).to.be.undefined;
500
+ expect(finalToken.config.remoteRouters[DOMAIN_2]).to.exist;
501
+ expect(finalToken.config.destinationGas[DOMAIN_2]).to.equal('200000');
502
+ });
503
+ });
504
+ });
505
+ describe('Generic warp token reading via readWarpToken', () => {
506
+ tokenTestCases.forEach(({ type, name, getConfig }) => {
507
+ it(`should detect and read ${name} token`, async () => {
508
+ const config = getConfig();
509
+ const writer = artifactManager.createWriter(type, cosmosSigner);
510
+ const [deployedToken] = await writer.create({ config });
511
+ // Read via generic readWarpToken (without knowing the type)
512
+ const readToken = await artifactManager.readWarpToken(deployedToken.deployed.address);
513
+ expect(readToken.artifactState).to.equal(ArtifactState.DEPLOYED);
514
+ expect(readToken.config.type).to.equal(type);
515
+ expect(readToken.deployed.address).to.equal(deployedToken.deployed.address);
516
+ });
517
+ });
518
+ });
519
+ });
520
+ //# sourceMappingURL=5_warp_artifact.e2e-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"5_warp_artifact.e2e-test.js","sourceRoot":"","sources":["../../src/tests/5_warp_artifact.e2e-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=e2e-test.setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e-test.setup.d.ts","sourceRoot":"","sources":["../../src/tests/e2e-test.setup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { DEFAULT_E2E_TEST_TIMEOUT, TEST_COSMOS_CHAIN_METADATA, } from '../testing/constants.js';
2
+ import { runCosmosNode } from '../testing/node.js';
3
+ let cosmosNodeInstance;
4
+ before(async function () {
5
+ this.timeout(DEFAULT_E2E_TEST_TIMEOUT);
6
+ cosmosNodeInstance = await runCosmosNode(TEST_COSMOS_CHAIN_METADATA);
7
+ });
8
+ after(async function () {
9
+ if (cosmosNodeInstance) {
10
+ await cosmosNodeInstance.stop();
11
+ }
12
+ });
13
+ //# sourceMappingURL=e2e-test.setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e-test.setup.js","sourceRoot":"","sources":["../../src/tests/e2e-test.setup.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,IAAI,kBAA6D,CAAC;AAElE,MAAM,CAAC,KAAK;IACV,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAEvC,kBAAkB,GAAG,MAAM,aAAa,CAAC,0BAA0B,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;AAEH,KAAK,CAAC,KAAK;IACT,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,kBAAkB,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hooks.e2e-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.e2e-test.d.ts","sourceRoot":"","sources":["../../src/tests/hooks.e2e-test.ts"],"names":[],"mappings":""}