@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.
- package/LICENSE.md +193 -0
- package/README.md +82 -2
- package/dist/clients/protocol.d.ts +24 -0
- package/dist/clients/protocol.d.ts.map +1 -0
- package/dist/clients/protocol.js +70 -0
- package/dist/clients/protocol.js.map +1 -0
- package/dist/clients/provider.d.ts +70 -0
- package/dist/clients/provider.d.ts.map +1 -0
- package/dist/clients/provider.js +397 -0
- package/dist/clients/provider.js.map +1 -0
- package/dist/clients/signer.d.ts +55 -0
- package/dist/clients/signer.d.ts.map +1 -0
- package/dist/clients/signer.js +377 -0
- package/dist/clients/signer.js.map +1 -0
- package/dist/hook/hook-artifact-manager.d.ts +72 -0
- package/dist/hook/hook-artifact-manager.d.ts.map +1 -0
- package/dist/hook/hook-artifact-manager.js +139 -0
- package/dist/hook/hook-artifact-manager.js.map +1 -0
- package/dist/hook/hook-query.d.ts +42 -0
- package/dist/hook/hook-query.d.ts.map +1 -0
- package/dist/hook/hook-query.js +95 -0
- package/dist/hook/hook-query.js.map +1 -0
- package/dist/hook/hook-tx.d.ts +47 -0
- package/dist/hook/hook-tx.d.ts.map +1 -0
- package/dist/hook/hook-tx.js +76 -0
- package/dist/hook/hook-tx.js.map +1 -0
- package/dist/hook/igp-hook.d.ts +30 -0
- package/dist/hook/igp-hook.d.ts.map +1 -0
- package/dist/hook/igp-hook.js +150 -0
- package/dist/hook/igp-hook.js.map +1 -0
- package/dist/hook/merkle-tree-hook.d.ts +32 -0
- package/dist/hook/merkle-tree-hook.d.ts.map +1 -0
- package/dist/hook/merkle-tree-hook.js +60 -0
- package/dist/hook/merkle-tree-hook.js.map +1 -0
- package/dist/hyperlane/core/messages.d.ts +16 -0
- package/dist/hyperlane/core/messages.d.ts.map +1 -0
- package/dist/hyperlane/core/messages.js +2 -0
- package/dist/hyperlane/core/messages.js.map +1 -0
- package/dist/hyperlane/core/query.d.ts +18 -0
- package/dist/hyperlane/core/query.d.ts.map +1 -0
- package/dist/hyperlane/core/query.js +18 -0
- package/dist/hyperlane/core/query.js.map +1 -0
- package/dist/hyperlane/interchain_security/messages.d.ts +36 -0
- package/dist/hyperlane/interchain_security/messages.d.ts.map +1 -0
- package/dist/hyperlane/interchain_security/messages.js +2 -0
- package/dist/hyperlane/interchain_security/messages.js.map +1 -0
- package/dist/hyperlane/interchain_security/query.d.ts +36 -0
- package/dist/hyperlane/interchain_security/query.d.ts.map +1 -0
- package/dist/hyperlane/interchain_security/query.js +49 -0
- package/dist/hyperlane/interchain_security/query.js.map +1 -0
- package/dist/hyperlane/post_dispatch/messages.d.ts +32 -0
- package/dist/hyperlane/post_dispatch/messages.d.ts.map +1 -0
- package/dist/hyperlane/post_dispatch/messages.js +2 -0
- package/dist/hyperlane/post_dispatch/messages.js.map +1 -0
- package/dist/hyperlane/post_dispatch/query.d.ts +24 -0
- package/dist/hyperlane/post_dispatch/query.d.ts.map +1 -0
- package/dist/hyperlane/post_dispatch/query.js +21 -0
- package/dist/hyperlane/post_dispatch/query.js.map +1 -0
- package/dist/hyperlane/warp/messages.d.ts +28 -0
- package/dist/hyperlane/warp/messages.d.ts.map +1 -0
- package/dist/hyperlane/warp/messages.js +2 -0
- package/dist/hyperlane/warp/messages.js.map +1 -0
- package/dist/hyperlane/warp/query.d.ts +18 -0
- package/dist/hyperlane/warp/query.d.ts.map +1 -0
- package/dist/hyperlane/warp/query.js +16 -0
- package/dist/hyperlane/warp/query.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/ism/ism-artifact-manager.d.ts +69 -0
- package/dist/ism/ism-artifact-manager.d.ts.map +1 -0
- package/dist/ism/ism-artifact-manager.js +144 -0
- package/dist/ism/ism-artifact-manager.js.map +1 -0
- package/dist/ism/ism-query.d.ts +71 -0
- package/dist/ism/ism-query.d.ts.map +1 -0
- package/dist/ism/ism-query.js +133 -0
- package/dist/ism/ism-query.js.map +1 -0
- package/dist/ism/ism-tx.d.ts +30 -0
- package/dist/ism/ism-tx.d.ts.map +1 -0
- package/dist/ism/ism-tx.js +76 -0
- package/dist/ism/ism-tx.js.map +1 -0
- package/dist/ism/multisig-ism.d.ts +51 -0
- package/dist/ism/multisig-ism.d.ts.map +1 -0
- package/dist/ism/multisig-ism.js +120 -0
- package/dist/ism/multisig-ism.js.map +1 -0
- package/dist/ism/routing-ism.d.ts +30 -0
- package/dist/ism/routing-ism.d.ts.map +1 -0
- package/dist/ism/routing-ism.js +126 -0
- package/dist/ism/routing-ism.js.map +1 -0
- package/dist/ism/test-ism.d.ts +29 -0
- package/dist/ism/test-ism.d.ts.map +1 -0
- package/dist/ism/test-ism.js +56 -0
- package/dist/ism/test-ism.js.map +1 -0
- package/dist/mailbox/mailbox-artifact-manager.d.ts +48 -0
- package/dist/mailbox/mailbox-artifact-manager.d.ts.map +1 -0
- package/dist/mailbox/mailbox-artifact-manager.js +82 -0
- package/dist/mailbox/mailbox-artifact-manager.js.map +1 -0
- package/dist/mailbox/mailbox-query.d.ts +12 -0
- package/dist/mailbox/mailbox-query.d.ts.map +1 -0
- package/dist/mailbox/mailbox-query.js +29 -0
- package/dist/mailbox/mailbox-query.js.map +1 -0
- package/dist/mailbox/mailbox-tx.d.ts +37 -0
- package/dist/mailbox/mailbox-tx.d.ts.map +1 -0
- package/dist/mailbox/mailbox-tx.js +68 -0
- package/dist/mailbox/mailbox-tx.js.map +1 -0
- package/dist/mailbox/mailbox.d.ts +30 -0
- package/dist/mailbox/mailbox.d.ts.map +1 -0
- package/dist/mailbox/mailbox.js +168 -0
- package/dist/mailbox/mailbox.js.map +1 -0
- package/dist/registry.d.ts +21 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +373 -0
- package/dist/registry.js.map +1 -0
- package/dist/testing/constants.d.ts +10 -0
- package/dist/testing/constants.d.ts.map +1 -0
- package/dist/testing/constants.js +30 -0
- package/dist/testing/constants.js.map +1 -0
- package/dist/testing/index.d.ts +8 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +10 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/node.d.ts +4 -0
- package/dist/testing/node.d.ts.map +1 -0
- package/dist/testing/node.js +35 -0
- package/dist/testing/node.js.map +1 -0
- package/dist/testing/utils.d.ts +10 -0
- package/dist/testing/utils.d.ts.map +1 -0
- package/dist/testing/utils.js +29 -0
- package/dist/testing/utils.js.map +1 -0
- package/dist/tests/1_interchain_security.e2e-test.d.ts +2 -0
- package/dist/tests/1_interchain_security.e2e-test.d.ts.map +1 -0
- package/dist/tests/1_interchain_security.e2e-test.js +171 -0
- package/dist/tests/1_interchain_security.e2e-test.js.map +1 -0
- package/dist/tests/2_core.e2e-test.d.ts +2 -0
- package/dist/tests/2_core.e2e-test.d.ts.map +1 -0
- package/dist/tests/2_core.e2e-test.js +120 -0
- package/dist/tests/2_core.e2e-test.js.map +1 -0
- package/dist/tests/3_post_dispatch.e2e-test.d.ts +2 -0
- package/dist/tests/3_post_dispatch.e2e-test.d.ts.map +1 -0
- package/dist/tests/3_post_dispatch.e2e-test.js +130 -0
- package/dist/tests/3_post_dispatch.e2e-test.js.map +1 -0
- package/dist/tests/4_warp.e2e-test.d.ts +2 -0
- package/dist/tests/4_warp.e2e-test.d.ts.map +1 -0
- package/dist/tests/4_warp.e2e-test.js +284 -0
- package/dist/tests/4_warp.e2e-test.js.map +1 -0
- package/dist/tests/5_warp_artifact.e2e-test.d.ts +2 -0
- package/dist/tests/5_warp_artifact.e2e-test.d.ts.map +1 -0
- package/dist/tests/5_warp_artifact.e2e-test.js +520 -0
- package/dist/tests/5_warp_artifact.e2e-test.js.map +1 -0
- package/dist/tests/e2e-test.setup.d.ts +2 -0
- package/dist/tests/e2e-test.setup.d.ts.map +1 -0
- package/dist/tests/e2e-test.setup.js +13 -0
- package/dist/tests/e2e-test.setup.js.map +1 -0
- package/dist/tests/hooks.e2e-test.d.ts +2 -0
- package/dist/tests/hooks.e2e-test.d.ts.map +1 -0
- package/dist/tests/hooks.e2e-test.js +314 -0
- package/dist/tests/hooks.e2e-test.js.map +1 -0
- package/dist/tests/mailbox.e2e-test.d.ts +2 -0
- package/dist/tests/mailbox.e2e-test.d.ts.map +1 -0
- package/dist/tests/mailbox.e2e-test.js +355 -0
- package/dist/tests/mailbox.e2e-test.js.map +1 -0
- package/dist/utils/base.d.ts +22 -0
- package/dist/utils/base.d.ts.map +1 -0
- package/dist/utils/base.js +35 -0
- package/dist/utils/base.js.map +1 -0
- package/dist/utils/types.d.ts +44 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +2 -0
- package/dist/utils/types.js.map +1 -0
- package/dist/warp/collateral-token.d.ts +21 -0
- package/dist/warp/collateral-token.d.ts.map +1 -0
- package/dist/warp/collateral-token.js +119 -0
- package/dist/warp/collateral-token.js.map +1 -0
- package/dist/warp/synthetic-token.d.ts +21 -0
- package/dist/warp/synthetic-token.d.ts.map +1 -0
- package/dist/warp/synthetic-token.js +98 -0
- package/dist/warp/synthetic-token.js.map +1 -0
- package/dist/warp/warp-artifact-manager.d.ts +17 -0
- package/dist/warp/warp-artifact-manager.d.ts.map +1 -0
- package/dist/warp/warp-artifact-manager.js +101 -0
- package/dist/warp/warp-artifact-manager.js.map +1 -0
- package/dist/warp/warp-query.d.ts +9 -0
- package/dist/warp/warp-query.d.ts.map +1 -0
- package/dist/warp/warp-query.js +105 -0
- package/dist/warp/warp-query.js.map +1 -0
- package/dist/warp/warp-tx.d.ts +31 -0
- package/dist/warp/warp-tx.d.ts.map +1 -0
- package/dist/warp/warp-tx.js +127 -0
- package/dist/warp/warp-tx.js.map +1 -0
- 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":"AAAA,OAAO,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD,OAAO,EAEL,aAAa,GACd,MAAM,2CAA2C,CAAC;AAanD,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAGpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAE7E,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAEzB,QAAQ,CAAC,6BAA6B,EAAE;IACtC,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAEvC,IAAI,YAAgC,CAAC;IACrC,IAAI,iBAAkD,CAAC;IACvD,IAAI,sBAAuD,CAAC;IAC5D,IAAI,eAA0C,CAAC;IAC/C,IAAI,cAAsB,CAAC;IAC3B,IAAI,eAAuB,CAAC;IAC5B,IAAI,eAAuB,CAAC;IAC5B,IAAI,cAAsB,CAAC;IAC3B,IAAI,gBAAwB,CAAC;IAE7B,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,QAAQ,GAAG,EAAE,CAAC;IAEpB,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,YAAY,GAAG,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAuB,CAAC;QACnE,iBAAiB,GAAG,YAAY,CAAC;QACjC,eAAe,GAAG,YAAY,CAAC,gBAAgB,EAAE,CAAC;QAElD,8CAA8C;QAC9C,sBAAsB,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;QACnD,eAAe,GAAG,sBAAsB,CAAC,gBAAgB,EAAE,CAAC;QAE5D,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,2CAA2C,CAAC,CAAC;QAExE,eAAe,GAAG,IAAI,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAEzD,iCAAiC;QACjC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAClD,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;QAEjC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAClD,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC;QAEnC,2BAA2B;QAC3B,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC;YACvD,QAAQ,EAAE,IAAI;YACd,iBAAiB,EAAE,cAAc;SAClC,CAAC,CAAC;QACH,cAAc,GAAG,eAAe,CAAC,cAAc,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,0CAA0C;IAC1C,MAAM,cAAc,GAOf;QACH;YACE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU;YAChC,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;gBAChB,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU;gBAChC,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,cAAc;gBACvB,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,EAAE;gBACR,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,CAAC;gBACX,aAAa,EAAE,EAAE;gBACjB,cAAc,EAAE,EAAE;aACnB,CAAC;YACF,cAAc,EAAE;gBACd,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,EAAE;gBACR,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,CAAC;aACZ;SACF;QACD;YACE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS;YAC/B,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;gBAChB,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS;gBAC/B,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,cAAc;gBACvB,IAAI,EAAE,EAAE;gBACR,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,CAAC;gBACX,aAAa,EAAE,EAAE;gBACjB,cAAc,EAAE,EAAE;aACnB,CAAC;YACF,cAAc,EAAE;gBACd,IAAI,EAAE,EAAE;gBACR,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,CAAC;aACZ;SACF;KACF,CAAC;IAEF,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,EAAE;QACnE,QAAQ,CAAC,GAAG,IAAI,QAAQ,EAAE,GAAG,EAAE;YAC7B,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;gBAC5C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;gBAE3B,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAChE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;gBAE3D,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC9D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;gBACnE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAE9D,yBAAyB;gBACzB,IAAI,cAAc,EAAE,CAAC;oBACnB,KAAK,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;wBACpE,MAAM,CAAE,MAAM,CAAC,MAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oBAChE,CAAC;gBACH,CAAC;gBAED,sBAAsB;gBACtB,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAClD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAE7D,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACjE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7C,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;gBAC5C,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC;gBAElC,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAChE,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;oBAC1C,MAAM,EAAE,aAAa;iBACtB,CAAC,CAAC;gBAEH,6BAA6B;gBAC7B,MAAM,aAAa,GAA+C;oBAChE,GAAG,aAAa;oBAChB,MAAM,EAAE;wBACN,GAAG,aAAa,CAAC,MAAM;wBACvB,aAAa,EAAE;4BACb,CAAC,QAAQ,CAAC,EAAE;gCACV,OAAO,EACL,oEAAoE;6BACvE;4BACD,CAAC,QAAQ,CAAC,EAAE;gCACV,OAAO,EACL,oEAAoE;6BACvE;yBACF;wBACD,cAAc,EAAE;4BACd,CAAC,QAAQ,CAAC,EAAE,QAAQ;4BACpB,CAAC,QAAQ,CAAC,EAAE,QAAQ;yBACrB;qBACF;iBACF,CAAC;gBAEF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAEzD,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;oBACrB,MAAM,iBAAiB,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;gBACxD,CAAC;gBAED,SAAS;gBACT,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAClD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAEpE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAC/D,oEAAoE,CACrE,CAAC;gBACF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAC/D,oEAAoE,CACrE,CAAC;gBACF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACrE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;gBAC/C,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC;gBAClC,aAAa,CAAC,aAAa,GAAG;oBAC5B,CAAC,QAAQ,CAAC,EAAE;wBACV,OAAO,EACL,oEAAoE;qBACvE;oBACD,CAAC,QAAQ,CAAC,EAAE;wBACV,OAAO,EACL,oEAAoE;qBACvE;iBACF,CAAC;gBACF,aAAa,CAAC,cAAc,GAAG;oBAC7B,CAAC,QAAQ,CAAC,EAAE,QAAQ;oBACpB,CAAC,QAAQ,CAAC,EAAE,QAAQ;iBACrB,CAAC;gBAEF,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAChE,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;oBAC1C,MAAM,EAAE,aAAa;iBACtB,CAAC,CAAC;gBAEH,kBAAkB;gBAClB,MAAM,aAAa,GAA+C;oBAChE,GAAG,aAAa;oBAChB,MAAM,EAAE;wBACN,GAAG,aAAa,CAAC,MAAM;wBACvB,aAAa,EAAE;4BACb,CAAC,QAAQ,CAAC,EAAE;gCACV,OAAO,EACL,oEAAoE;6BACvE;yBACF;wBACD,cAAc,EAAE;4BACd,CAAC,QAAQ,CAAC,EAAE,QAAQ;yBACrB;qBACF;iBACF,CAAC;gBAEF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAEzD,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;oBACrB,MAAM,iBAAiB,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;gBACxD,CAAC;gBAED,iCAAiC;gBACjC,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAClD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAEpE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;gBAC1D,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YACnE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;gBAC/D,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC;gBAClC,MAAM,aAAa,GACjB,oEAAoE,CAAC;gBAEvE,gCAAgC;gBAChC,aAAa,CAAC,aAAa,GAAG;oBAC5B,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;iBACvC,CAAC;gBACF,aAAa,CAAC,cAAc,GAAG;oBAC7B,CAAC,QAAQ,CAAC,EAAE,QAAQ;iBACrB,CAAC;gBAEF,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAChE,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;oBAC1C,MAAM,EAAE,aAAa;iBACtB,CAAC,CAAC;gBAEH,2BAA2B;gBAC3B,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAClD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACrE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAEtE,6CAA6C;gBAC7C,MAAM,aAAa,GAA+C;oBAChE,GAAG,aAAa;oBAChB,MAAM,EAAE;wBACN,GAAG,aAAa,CAAC,MAAM;wBACvB,aAAa,EAAE;4BACb,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,eAAe;yBACxD;wBACD,cAAc,EAAE;4BACd,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,cAAc;yBACrC;qBACF;iBACF,CAAC;gBAEF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAEzD,iBAAiB;gBACjB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;oBACrB,MAAM,iBAAiB,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;gBACxD,CAAC;gBAED,qBAAqB;gBACrB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACrE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACtE,MAAM,CACJ,eAAe,CACb,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,EACjD,aAAa,CACd,CACF,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACf,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;gBACrE,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC;gBAElC,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAChE,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;oBAC1C,MAAM,EAAE,aAAa;iBACtB,CAAC,CAAC;gBAEH,MAAM,gBAAgB,GAAG,cAAc,CAAC;gBAExC,qCAAqC;gBACrC,MAAM,aAAa,GAGf;oBACF,GAAG,aAAa;oBAChB,MAAM,EAAE;wBACN,GAAG,aAAa,CAAC,MAAM;wBACvB,KAAK,EAAE,eAAe;wBACtB,wBAAwB,EAAE;4BACxB,aAAa,EAAE,aAAa,CAAC,SAAS;4BACtC,QAAQ,EAAE;gCACR,OAAO,EAAE,gBAAgB;6BAC1B;yBACF;wBACD,aAAa,EAAE;4BACb,CAAC,QAAQ,CAAC,EAAE;gCACV,OAAO,EACL,oEAAoE;6BACvE;yBACF;wBACD,cAAc,EAAE;4BACd,CAAC,QAAQ,CAAC,EAAE,QAAQ;yBACrB;qBACF;iBACF,CAAC;gBAEF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAoB,CAAC,CAAC;gBACtD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAEzD,oDAAoD;gBACpD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACnC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAE9C,2BAA2B;gBAC3B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;oBACrB,MAAM,iBAAiB,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;gBACxD,CAAC;gBAED,kEAAkE;gBAClE,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAClD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAEpE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAC/D,oEAAoE,CACrE,CAAC;gBACF,MAAM,CACJ,SAAS,CAAC,MAAM,CAAC,wBAAwB,EAAE,QAAQ,CAAC,OAAO,EAC3D,2BAA2B,CAC5B,CAAC;gBACF,MAAM,CACJ,eAAe,CACb,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,QAAQ,CAAC,OAAO,EAC1D,gBAAgB,CACjB,CACF,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBACb,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;qBACnE,IAAI,CAAC;YACV,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;gBAC7E,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;gBAE3B,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAChE,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;gBAExD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,aAAa,EAAE;gBACtB,mFAAmF;gBACnF,2DAA2D;gBAE3D,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;oBACrE,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC;oBAClC,oBAAoB;oBACpB,aAAa,CAAC,wBAAwB,GAAG,SAAS,CAAC;oBAEnD,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;oBAChE,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;wBAC1C,MAAM,EAAE,aAAa;qBACtB,CAAC,CAAC;oBAEH,sBAAsB;oBACtB,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBAClD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACrE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;oBAEnE,oBAAoB;oBACpB,MAAM,gBAAgB,GAAG,cAAc,CAAC;oBACxC,MAAM,aAAa,GAA+C;wBAChE,GAAG,aAAa;wBAChB,MAAM,EAAE;4BACN,GAAG,aAAa,CAAC,MAAM;4BACvB,wBAAwB,EAAE;gCACxB,aAAa,EAAE,aAAa,CAAC,SAAS;gCACtC,QAAQ,EAAE;oCACR,OAAO,EAAE,gBAAgB;iCAC1B;6BACF;yBACF;qBACF,CAAC;oBAEF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBAEzD,iBAAiB;oBACjB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;wBACrB,MAAM,iBAAiB,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;oBACxD,CAAC;oBAED,wBAAwB;oBACxB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACrE,MAAM,CACJ,UAAU,CAAC,MAAM,CAAC,wBAAwB,EAAE,QAAQ,CAAC,OAAO,EAC5D,2BAA2B,CAC5B,CAAC;oBACF,MAAM,CACJ,eAAe,CACb,UAAU,CAAC,MAAM,CAAC,wBAAwB,CAAC,QAAQ,CAAC,OAAO,EAC3D,gBAAgB,CACjB,CACF,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBACf,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;oBACnE,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC;oBAClC,MAAM,eAAe,GAAG,cAAc,CAAC;oBAEvC,wBAAwB;oBACxB,aAAa,CAAC,wBAAwB,GAAG;wBACvC,aAAa,EAAE,aAAa,CAAC,SAAS;wBACtC,QAAQ,EAAE;4BACR,OAAO,EAAE,eAAe;yBACzB;qBACF,CAAC;oBAEF,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;oBAChE,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;wBAC1C,MAAM,EAAE,aAAa;qBACtB,CAAC,CAAC;oBAEH,0BAA0B;oBAC1B,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBAClD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACrE,MAAM,CACJ,UAAU,CAAC,MAAM,CAAC,wBAAwB,EAAE,QAAQ,CAAC,OAAO,EAC5D,2BAA2B,CAC5B,CAAC;oBACF,MAAM,CACJ,eAAe,CACb,UAAU,CAAC,MAAM,CAAC,wBAAwB,CAAC,QAAQ,CAAC,OAAO,EAC3D,eAAe,CAChB,CACF,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;oBAEb,uBAAuB;oBACvB,MAAM,aAAa,GAA+C;wBAChE,GAAG,aAAa;wBAChB,MAAM,EAAE;4BACN,GAAG,aAAa,CAAC,MAAM;4BACvB,wBAAwB,EAAE;gCACxB,aAAa,EAAE,aAAa,CAAC,SAAS;gCACtC,QAAQ,EAAE;oCACR,OAAO,EAAE,gBAAgB;iCAC1B;6BACF;yBACF;qBACF,CAAC;oBAEF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBAEzD,iBAAiB;oBACjB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;wBACrB,MAAM,iBAAiB,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;oBACxD,CAAC;oBAED,uCAAuC;oBACvC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACrE,MAAM,CACJ,UAAU,CAAC,MAAM,CAAC,wBAAwB,EAAE,QAAQ,CAAC,OAAO,EAC5D,2BAA2B,CAC5B,CAAC;oBACF,MAAM,CACJ,eAAe,CACb,UAAU,CAAC,MAAM,CAAC,wBAAwB,CAAC,QAAQ,CAAC,OAAO,EAC3D,gBAAgB,CACjB,CACF,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBACf,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;oBACpE,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC;oBAClC,MAAM,gBAAgB,GAAG,cAAc,CAAC;oBAExC,kBAAkB;oBAClB,aAAa,CAAC,wBAAwB,GAAG;wBACvC,aAAa,EAAE,aAAa,CAAC,SAAS;wBACtC,QAAQ,EAAE;4BACR,OAAO,EAAE,gBAAgB;yBAC1B;qBACF,CAAC;oBAEF,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;oBAChE,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;wBAC1C,MAAM,EAAE,aAAa;qBACtB,CAAC,CAAC;oBAEH,mCAAmC;oBACnC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBAE/C,8CAA8C;oBAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC/C,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;oBACrE,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC;oBAClC,qBAAqB;oBACrB,aAAa,CAAC,wBAAwB,GAAG,SAAS,CAAC;oBAEnD,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;oBAChE,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;wBAC1C,MAAM,EAAE,aAAa;qBACtB,CAAC,CAAC;oBAEH,8CAA8C;oBAC9C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBAE/C,oDAAoD;oBACpD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC/C,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,6GAA6G,EAAE,KAAK,IAAI,EAAE;oBAC3H,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC;oBAElC,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;oBAChE,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;wBAC1C,MAAM,EAAE,aAAa;qBACtB,CAAC,CAAC;oBAEH,MAAM,aAAa,GAGf;wBACF,GAAG,aAAa;wBAChB,MAAM,EAAE;4BACN,GAAG,aAAa,CAAC,MAAM;4BACvB,wBAAwB,EAAE;gCACxB,aAAa,EAAE,aAAa,CAAC,SAAS;gCACtC,QAAQ,EAAE;oCACR,OAAO,EAAE,4CAA4C;iCACtD;6BACF;yBACF;qBACF,CAAC;oBAEF,kEAAkE;oBAClE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBAE/C,iDAAiD;oBACjD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC/C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;gBAC3G,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC;gBAElC,4BAA4B;gBAC5B,aAAa,CAAC,aAAa,GAAG;oBAC5B,CAAC,QAAQ,CAAC,EAAE;wBACV,OAAO,EACL,oEAAoE;qBACvE;iBACF,CAAC;gBACF,aAAa,CAAC,cAAc,GAAG;oBAC7B,CAAC,QAAQ,CAAC,EAAE,QAAQ;iBACrB,CAAC;gBAEF,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAChE,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;oBAC1C,MAAM,EAAE,aAAa;iBACtB,CAAC,CAAC;gBAEH,MAAM,aAAa,GAAG,YAAY,CAAC,gBAAgB,EAAE,CAAC;gBAEtD,8CAA8C;gBAC9C,MAAM,uBAAuB,GAGzB;oBACF,GAAG,aAAa;oBAChB,MAAM,EAAE;wBACN,GAAG,aAAa,CAAC,MAAM;wBACvB,KAAK,EAAE,eAAe;qBACvB;iBACF,CAAC;gBAEF,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;gBAClE,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;oBAC9B,MAAM,iBAAiB,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;gBACxD,CAAC;gBAED,0CAA0C;gBAC1C,MAAM,2BAA2B,GAAG,MAAM,MAAM,CAAC,IAAI,CACnD,aAAa,CAAC,QAAQ,CAAC,OAAO,CAC/B,CAAC;gBACF,MAAM,CACJ,eAAe,CACb,2BAA2B,CAAC,MAAM,CAAC,KAAK,EACxC,eAAe,CAChB,CACF,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBAEb,4EAA4E;gBAC5E,MAAM,aAAa,GAA+C;oBAChE,GAAG,2BAA2B;oBAC9B,QAAQ,EAAE,aAAa,CAAC,QAAQ;oBAChC,MAAM,EAAE;wBACN,GAAG,2BAA2B,CAAC,MAAM;wBACrC,wBAAwB,EAAE;4BACxB,aAAa,EAAE,aAAa,CAAC,SAAS;4BACtC,QAAQ,EAAE;gCACR,OAAO,EAAE,gBAAgB;6BAC1B;yBACF;wBACD,aAAa,EAAE;4BACb,gCAAgC;4BAChC,CAAC,QAAQ,CAAC,EAAE;gCACV,OAAO,EACL,oEAAoE;6BACvE;yBACF;wBACD,cAAc,EAAE;4BACd,CAAC,QAAQ,CAAC,EAAE,QAAQ;yBACrB;qBACF;iBACF,CAAC;gBAEF,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBACrD,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAE/D,kFAAkF;gBAClF,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;oBAC3B,wDAAwD;oBACxD,MAAM,OAAO,GAAI,EAAU,CAAC,KAAK,CAAC;oBAClC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBAE1C,8EAA8E;oBAC9E,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;oBACnE,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;oBAElE,sBAAsB;oBACtB,MAAM,sBAAsB,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;gBAC7D,CAAC;gBAED,+BAA+B;gBAC/B,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAErE,MAAM,CACJ,UAAU,CAAC,MAAM,CAAC,wBAAwB,EAAE,QAAQ,CAAC,OAAO,EAC5D,oCAAoC,CACrC,CAAC;gBACF,MAAM,CACJ,eAAe,CACb,UAAU,CAAC,MAAM,CAAC,wBAAwB,EAAE,QAAQ,CAAC,OAAO,EAC5D,gBAAgB,CACjB,CACF,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBACb,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBAClE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;gBAC3D,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;QAC5D,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;YACnD,EAAE,CAAC,0BAA0B,IAAI,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;gBAE3B,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAChE,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;gBAExD,4DAA4D;gBAC5D,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,aAAa,CACnD,aAAa,CAAC,QAAQ,CAAC,OAAO,CAC/B,CAAC;gBAEF,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACjE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7C,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CACzC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAC/B,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.e2e-test.d.ts","sourceRoot":"","sources":["../../src/tests/hooks.e2e-test.ts"],"names":[],"mappings":""}
|