@hyperbridge/sdk 1.0.0 → 1.2.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 (78) hide show
  1. package/README.md +45 -3
  2. package/dist/browser/index.d.ts +2190 -0
  3. package/dist/browser/index.js +11662 -0
  4. package/dist/browser/index.js.map +1 -0
  5. package/dist/browser/web_bg.wasm +0 -0
  6. package/dist/node/index.d.ts +2190 -0
  7. package/dist/node/index.js +11613 -0
  8. package/dist/node/index.js.map +1 -0
  9. package/dist/node/node_bg.wasm +0 -0
  10. package/package.json +46 -16
  11. package/plugins/vite.d.ts +11 -0
  12. package/plugins/vite.js +55 -0
  13. package/dist/abis/erc6160.d.ts +0 -370
  14. package/dist/abis/erc6160.js +0 -238
  15. package/dist/abis/erc6160.js.map +0 -1
  16. package/dist/abis/evmHost.d.ts +0 -1752
  17. package/dist/abis/evmHost.js +0 -2250
  18. package/dist/abis/evmHost.js.map +0 -1
  19. package/dist/abis/handler.d.ts +0 -580
  20. package/dist/abis/handler.js +0 -750
  21. package/dist/abis/handler.js.map +0 -1
  22. package/dist/abis/pingModule.d.ts +0 -594
  23. package/dist/abis/pingModule.js +0 -765
  24. package/dist/abis/pingModule.js.map +0 -1
  25. package/dist/abis/tokenGateway.d.ts +0 -839
  26. package/dist/abis/tokenGateway.js +0 -471
  27. package/dist/abis/tokenGateway.js.map +0 -1
  28. package/dist/chain.d.ts +0 -83
  29. package/dist/chain.js +0 -34
  30. package/dist/chain.js.map +0 -1
  31. package/dist/chains/evm.d.ts +0 -86
  32. package/dist/chains/evm.js +0 -249
  33. package/dist/chains/evm.js.map +0 -1
  34. package/dist/chains/substrate.d.ts +0 -88
  35. package/dist/chains/substrate.js +0 -287
  36. package/dist/chains/substrate.js.map +0 -1
  37. package/dist/client.d.ts +0 -216
  38. package/dist/client.js +0 -774
  39. package/dist/client.js.map +0 -1
  40. package/dist/index.d.ts +0 -6
  41. package/dist/index.js +0 -7
  42. package/dist/index.js.map +0 -1
  43. package/dist/queries.d.ts +0 -3
  44. package/dist/queries.js +0 -78
  45. package/dist/queries.js.map +0 -1
  46. package/dist/tests/hyperbridgeRequests.test.d.ts +0 -1
  47. package/dist/tests/hyperbridgeRequests.test.js +0 -415
  48. package/dist/tests/hyperbridgeRequests.test.js.map +0 -1
  49. package/dist/tests/postRequest.test.d.ts +0 -1
  50. package/dist/tests/postRequest.test.js +0 -293
  51. package/dist/tests/postRequest.test.js.map +0 -1
  52. package/dist/tests/setup.d.ts +0 -1
  53. package/dist/tests/setup.js +0 -6
  54. package/dist/tests/setup.js.map +0 -1
  55. package/dist/tests/tokenGateway.test.d.ts +0 -1
  56. package/dist/tests/tokenGateway.test.js +0 -85
  57. package/dist/tests/tokenGateway.test.js.map +0 -1
  58. package/dist/tests/xcmGateway.test.d.ts +0 -1
  59. package/dist/tests/xcmGateway.test.js +0 -71
  60. package/dist/tests/xcmGateway.test.js.map +0 -1
  61. package/dist/types/index.d.ts +0 -238
  62. package/dist/types/index.js +0 -30
  63. package/dist/types/index.js.map +0 -1
  64. package/dist/utils/mmr.d.ts +0 -13
  65. package/dist/utils/mmr.js +0 -153
  66. package/dist/utils/mmr.js.map +0 -1
  67. package/dist/utils/substrate.d.ts +0 -1913
  68. package/dist/utils/substrate.js +0 -361
  69. package/dist/utils/substrate.js.map +0 -1
  70. package/dist/utils/tokenGateway.d.ts +0 -68
  71. package/dist/utils/tokenGateway.js +0 -151
  72. package/dist/utils/tokenGateway.js.map +0 -1
  73. package/dist/utils/xcmGateway.d.ts +0 -81
  74. package/dist/utils/xcmGateway.js +0 -218
  75. package/dist/utils/xcmGateway.js.map +0 -1
  76. package/dist/utils.d.ts +0 -57
  77. package/dist/utils.js +0 -96
  78. package/dist/utils.js.map +0 -1
@@ -1,293 +0,0 @@
1
- import "log-timestamp";
2
- import { createPublicClient, createWalletClient, decodeFunctionData, getContract, hexToBytes, http, parseAbi, parseEventLogs, } from "viem";
3
- import { privateKeyToAccount } from "viem/accounts";
4
- import { bscTestnet, gnosisChiado } from "viem/chains";
5
- import { IndexerClient } from "../client.js";
6
- import { RequestStatus, TimeoutStatus } from "../types/index.js";
7
- import { postRequestCommitment } from "../utils.js";
8
- import ERC6160 from "../abis/erc6160.js";
9
- import PING_MODULE from "../abis/pingModule.js";
10
- import EVM_HOST from "../abis/evmHost.js";
11
- import HANDLER from "../abis/handler.js";
12
- import { EvmChain, SubstrateChain } from "../chain.js";
13
- describe("PostRequest", () => {
14
- let indexer;
15
- beforeAll(async () => {
16
- const { gnosisChiadoHost, bscIsmpHost } = await setUp();
17
- indexer = new IndexerClient({
18
- source: {
19
- consensusStateId: "BSC0",
20
- rpcUrl: process.env.BSC_CHAPEL,
21
- stateMachineId: "EVM-97",
22
- host: bscIsmpHost.address,
23
- },
24
- dest: {
25
- consensusStateId: "GNO0",
26
- rpcUrl: process.env.GNOSIS_CHIADO,
27
- stateMachineId: "EVM-10200",
28
- host: gnosisChiadoHost.address,
29
- },
30
- hyperbridge: {
31
- consensusStateId: "PARA",
32
- stateMachineId: "KUSAMA-4009",
33
- wsUrl: process.env.HYPERBRIDGE_GARGANTUA,
34
- },
35
- pollInterval: 1000, // every second
36
- });
37
- });
38
- it("Should scale encode the ISMP message correctly", async () => {
39
- const hyperbridge = new SubstrateChain({
40
- // stateMachineId: "KUSAMA-4009",
41
- ws: process.env.HYPERBRIDGE_GARGANTUA,
42
- hasher: "Keccak",
43
- });
44
- await hyperbridge.connect();
45
- const tx = hyperbridge.encode({
46
- kind: "TimeoutPostRequest",
47
- proof: {
48
- consensusStateId: "GNO0",
49
- height: 14521611n,
50
- proof: "0x1c5108f90211a0948c6c60ecc8a4c5b52abc1dd10f443ebb8260026b0d612bca6b9a109212b3b9a0dca88b1cb7af156a5ab839733fba6f5e453f79ae6e9b562d842e79b306f8ecb3a04ad21a053a57b8e4809e4784a1ff1a8c88c8df8aa390a6e564d95c5453b7c77ea05a35d3990b8c0aba736489c26a60d92e05af997ba7650e1634c5c2be8072154aa08341930c3f806f141a6f466a943081d21075cc11bb8d8581ff713fd6a83e0295a00f4c53e27af241636913b27be4e1ab580e581da0ea9d7d0a11c3ba8b73a4df81a08305b1e68ad37a0a002c581a22226a750ea111309034eecf3be7877256cbe10aa098e0f88044865234a7b764acbe97dfdcc346c64f2d63fbea3af8b896d37b865fa083050f2c1090ac0019a31dd6e84003021efc47f5a3c4dedbd169d91be7919a83a0c1faf279cc5357f52d599c445ba348878526d800608cedc27dd895c089c6a057a026c8da47d503c7fec2d87a3f85566fadf6c63df1dd6ec1dda2afa26ea577decda086815dd8cf3128abc904157125d8267f8a4e9ee1e861c56948fa6b6168f3ae91a0a81e2e30cd6cde88f964bcc7c899fd32d407af2a8468edcae84a54bb8fc9d0a3a007bf1d0f0353768af0e089b573ec639ef4249501f7a1039eb450db10cf28f028a0f7531550fcec0ad4b7a0d5f96fa6365d168de66a728c184eeb5ebbe8d191bcf7a00dd5b164fa5d099edcbe7e0162d12641be90c72bb7a8c37e1febc8d1bd5c7b3b805108f90211a09a1d017a8974b524b67f0a921e89e325a8ed0ffe7b8892af8fe4bd2b99c66558a0ddf5c3ffb5c578b4ca041827aef19b4c9ead253d78c67de74c0b253f2f56a77ea0c6b54e42752c28482f9e58ebd22d2d7426f6d5cc338f095ea7671779a9c7f8dca076b618c9095f44fbba89dc5fe73aebf5c45dac20c03c8daccd8f73ceb24cba2aa0f1017b5734304a4ced1661857526efb7855d377242108d31c11643284126ef9ba0f4d111be728321b23cea690a7b9686ea51cbfc823c46f9eb5b6f0b96468feb28a0ee238f35db6c736a95d09fa9008ba8e25db3a43fbb30e7c51d7411ee624e415ba0e0b1ab410b78755484780705e3055846eba49200b103c8a4644cc37550c1d021a03c8cdc01c96ef1e540a6926a3eec37f6b2613238c94cbd42c13cd216c08d9b12a025a093975e7ed5c51bec4532d0c28edf786e1371c461f1481b6bb062ab288608a00ed06e2a0a12022da0413b0df5041454e13f4dfdfa6b83e319bd384c0dc512b3a028e008fbcdba5786df9b8b99f62e9e73371b3495bba3b59a5006c606d5ab0ea7a0692b1bae78364df1315367a88c0c47109517baae362693dd79e5a85fed857d74a0f263961c7a17e6472641655af05daed3b3b70658180b4d0de3d95803c913c407a0f870b1a0ae3b7e6d8f607a338411d65b4b7767eb7fd7ddcf6b9b8d1410277e68a04be83aa290d05e9af78d11ac3143f0b08d7b87521688c753d728ca6b803f6244805108f90211a095fb2f625de7c891c05162826929b968b4e59e64b826afdc9a59fd2541d0e44da0dfc72e5ac52c0ec372d7c3de2a77ea59763c125e47d5205c853b0a9f35f64eafa0df761e6267819e5532ff85de0ef2560aef8f36795ed98229522472c65280cea7a09f7bc872fceb7837b7a0f474e0a6deafbe45874bbab03afbf501e4ac480a9d47a06fb5586dbe8dfc142f0be2a879cc28a864d47166d11c9aa57acf1ba14ef7eef0a00a8b655c514f7b93307f022108ec5a183be1e9096ac9612cd8a17f114bfc3c75a0655d4d9e180ce561d946ce4f1315afda7c1eccf740a2fe95e86091a008deb21aa04c4d1e5d4002204d98071a2665fb129998711eaf18b707d527a9bda172c461c1a0a682c3d910f43d54b4a6ce04cf0a920bf547033a0bdee23c7302c10fdf41c63ca09487089830300a19bd4d687476aa9adb28b9cf5f65cdf61a3518395dd0eff401a03d13224efbb3ff1b18a7c40aaebd674f4a7c691811eb669e6cadf1e043aa0750a0251e21bfe77234fa3bfb9928805af1277f1ee6a926f41093002f9acf1b6d9768a0fe0c5a99d645bd10b0e16cc5be8119c093f0db286e2ae80aeace6228ec23b6eea06ab1924c038d4cacee65538304695f8de7ff1c031376696e0be49b527ea84b3ca0a9c56a940a38b3a66ce5a011305960728cf38199286044e279ff698e9ce0ede6a00c06521e6742b3b7a8aa281a104698f27b0cd8d5390407daa3dea17f090fe569805108f90211a0cf37e8b4ed3bb3639c29e8fc5aeeb5b1206ce04901b9d51da34630ab40f34315a06be004fb4675f716a473c56177b79495b82c591813f8e7117f6b7a48202fdf5ba0d10ed0457ed1f3412db8d7537965ceb6fd564f07665d92cd69f57c60bc397025a058ec4a802528243b2a2119f123c19f035bfafc12ec96a2c0f6b4560ad44ae8d3a013b26d7707e7d0325317ace8de38989c690d04f2108c53be0942fae5cb0138e3a0d560187232aa66cc14705e9a1516c0d0184321df87ef5d47a63793f6b474ba6da089f077ee6eef8bc74ef6abe1684e47a6aada71a642ef9fb196d1b324a1de3c43a084a2bd45a56c85f7ba779b29c6380528d3d41333f153a24f53ff74d5af545235a016fe9254442db909b6a26b20a7c53901258f951c45044e6f9c938c8f589c0a9ba09e60c9e117435ece82c77963133c45ccf747c62496a46096e97d8628b8b13f26a04e3cffb04935d9915ffe51c323617de30dfca9403107ec194e1b85d2b458d7d0a0424ab8ab54a83774bd1eebcedc673cc01003717d17d8020fe85ae0393cc0e192a096da2524c757030a1079aa5d72a7de7be2537bdb41724c3999ef974e601f28cea041dbfd72ec2b4483056c260163bd7992f0cad4aa9ea1431472489c8e72bbe0aaa0e1944e4f8d1e8dffd9c118e209f0da886472ed8f82c4528aa8326ebab2098580a0d30eb7982d94297340a0aa5d612d16faae89df31ab20c2ca9da0378b1c54681a804d03f8d180a008e0eefa0183e091c2d605fce96e72446df6727e3a9573a12d51ca1463e66646a0c97bb301153ef741b60ceade236f492ac9dfd8c2a258caa165d21f987bbddc83a0ccfc8d240c5fb876969cd673617a860c35cffd969e0f6f8bdbc723307a0f841880808080a05daf87c236d3cec54be9abd4152e41f24a3099fec3c963c403469b77399c6d638080a0747e7e7315c251e1e44bcc6b8175e998320352061d7e6221746c3643b40c50508080a063c7bb9c5c53f351713f35177ae7bd54b57d0c62381c7484c1283a8dec6625e980804d01f851808080808080808080a06ec39144a27d9b64efe6db9b9283ceaa0381fd97d4c72f988e08357ef8ed8d9180808080a0bac8d471d92f1032eebdee3ac2a3bddd5804a5d324f1e4b8089540a9705d59ed8080a501f8679e2058ffd1710ecb31f89ba278f724badf9ad59584e4f90244ec528a3308feb846f8440180a0e0a4a5d6327d44a504037776854a3c423f51f21d6261387c4f835eb54299ee04a05f6dcb4dbb25da4ccadbb6f4660038481bdee8d3d6ac92910c7a6afe4b128cd0045058a41b89f4871725e5d898d98ef4bf917601c5eb145108f90211a0bd912e9bb0d615c781c25848951288013fc57ea9f1f0c9c7c26c463c3486a041a0de4f88c2a54f752a9a0753b92d0688f628f3d9bbefc846775787194f69d611e3a08872d061c1cc82e833cdec0343d7459d3d0e783465eb26092984f927fa294a95a06322f53441a8fa9f8de9a7d0f947a78e976060bec2982e37dc83b3b472360d7aa04427c604d9bb04df996a76be768e92e473876790d44ace9276b9889f4f44e411a087fbb0ce680b9454d94e10d38a1ad888de629b837afca4f3606e559dac8f4196a0c1cc52248ff71edccc25edd78e6d45c5d456858812090419d310c9f5da1d1b75a0013eefc9b3abd91a7108312a4139ef7dd76800884a3cbd1ccddf5c480e056934a034a167eb036651a9e0b3ff8478fbf284f6d03487aee0dd92b1ef25926a144779a0c78c14222e216fe49e633194808b14adb90d1495b7f9a85ee9fd9f5244426270a05c7ce9359fb7008546d2198f35599d99c9a8f15856a829310d00a252378bb8fca080c34b805b7f080edfd0f4626dfe375177a2dee0d877c9289dee77c27926515ea061f9a47e3ee5e4267d3d06059b1ead3e0cb6b09648dac712bf1081b2ba96e4efa0ab9264ffab8ad5a39bd49d0145741faee9c48456d886456a3dee823832dbd8b5a07306361d1ec2f53320108262300ad840247c50856ffe4f15288ad938ae5d7311a0e3a754b96c767dbabf0bab5fcdfa89bcd5090069453e9c93cdaeca8f0364175b805108f90211a07709767459e851bfb2afee62a891596801a19a5e312f38804769a6ec1b08503ea016ee2a870298b3820f09eabba17d398bdcb2854dab24913bfe3c42db8aa3076ea01d6e60144cb2af7d5b736d01a67092d000292ea1b579477ecdd7e3e7cea4c8f9a0998e0bb03ddec391b980fd44f4c1d53edce04beb416028c5bebe182740084e88a07c932c5fef311a348194d5c92626476d618abda6cbb85c8ebccd7379d28715d7a00675f4d77b0dbbd293ea6ebe30ac4ecd25783c0fe0b2b5b6ca104a45f7dafc4da041facc5bcb26f8c9782abbc4a9d758807877d2bcb334490f9b30328f6cd6f5cca0e49fdfc75c8c17899310f1dcd5fd39006a1e4b5c7b7348e113498d0c5f8d33cba0d94a1af5fd0fc0612af04d1b34e65cffc55c26b48ccf8304201b36aed8610c13a0e99921dcdad0ee6a59ac3c18e3f8f230d94960e0d9f1f8ee42e66a2800d8ea85a096d74d756c0614605400f2cfed4288b5c749aa83fc8c621df84620ea0805f58ba01a7a062edd3555372c176c3ee44ece0cff099f49c3d31ba623dda195c3ab9a3da07c7363c3181257dda6726da1df43e60fd3466f90780b2788513a4a259a01b69aa0cbd2fd49e10525d9f705ee670e5e4a03a9cd83806ed3673a1ff026cba942b15ca0f18f0a5587d18fc1bccb67f7574f8246b0d49eaaabd6d2d9f108d4802d13452da0b48138276dbe009c9221084821521f01986c2bbb7da9862349ba672c77d9f2d5805107f901d1a0c70c0047a62253b52fc39226a7eaa55356f1f0b75b1e2a0138b6bc61b84355c9a0a9652fd2e605f2f6705de369f9c6abf1b5b0891fb1be73f8bca492003005cc9ca0198b8955576bdbfcb957f6721302a5f4c3748fe8eb9910620a53bba25c70056aa03870f2c723b2c099169030a6edafd911b48ae9ec76e37a6c836b67f891e805faa05b7c3a7edac8be95cd8bf5092c620b9672ccd4e0642c148ece9dd62a7d4d45b7a095f5c32e09269c1476f0098120eeafb998c280092583f915a7338006713a8136a08bd6298bfc98f6f25c8adc4a28005af529478ddd70a48111e9c807032c002393a04704ab8c161e123e6b8c2a2fdc0aba207f37f8269154587ee5c1902e95a8ddd3a0eb96c063c0048ab4ffa32bd3fd0cfd70ebc96222b3ff35c345ce30a0666ea8c280a014e30d258afcc23ea4e16493fd04aa95e87325480e583cda6713dbc3b42766baa0631597a49f516827dd2abda01b46dd1da17ee14ffb5c0e148eb36ba66e915f42a0323a1937eb7d238e2a7f5bd2537d250622e68344d5cc60987c147773dddeb6d680a0956b6cdffa6b1496ae1dfb2284161c98d57503cb91cfc83b6e5aaa79790cec68a0b23d3c71647522b78f5bf35ea01e3fbe2809d6a86305140d970e9734720aa13d804d01f85180a000b4bcbd5d7ff682d53a0e6b503eb602caa980433067877fac4ab5146b88abad80808080a0222ba5547832038028bad582b04df45de3149a42c99514f67cfd89ea9f97a9e78080808080808080808000",
51
- stateMachine: "EVM-10200",
52
- },
53
- requests: [
54
- {
55
- body: "0x68656c6c6f2066726f6d2045564d2d3937",
56
- dest: "EVM-10200",
57
- from: "0xFE9f23F0F2fE83b8B9576d3FC94e9a7458DdDD35",
58
- nonce: 2247n,
59
- source: "EVM-97",
60
- timeoutTimestamp: 1740610545n,
61
- to: "0xfe9f23f0f2fe83b8b9576d3fc94e9a7458dddd35",
62
- },
63
- ],
64
- });
65
- const evmChain = new EvmChain({
66
- url: process.env.GNOSIS_CHIADO,
67
- chainId: 10200,
68
- host: "0x58A41B89F4871725E5D898d98eF4BF917601c5eB",
69
- });
70
- const receipt = await evmChain.queryRequestReceipt("0x659f5bc8bb0073d4f1a25c1d420770d6aa08177bdf8d6bd6bd8476184d77de7d");
71
- expect(receipt).toBeUndefined();
72
- // should not throw
73
- hyperbridge.api.tx.ismp.handleUnsigned(hexToBytes(tx).slice(2));
74
- });
75
- it("should successfully stream and query the request status", async () => {
76
- const { bscTestnetClient, gnosisChiadoHandler, bscPing, gnosisChiadoClient, gnosisChiadoHost } = await setUp();
77
- console.log("\n\nSending Post Request\n\n");
78
- const hash = await bscPing.write.ping([
79
- {
80
- dest: await gnosisChiadoHost.read.host(),
81
- count: BigInt(1),
82
- fee: BigInt(0),
83
- module: process.env.PING_MODULE_ADDRESS,
84
- timeout: BigInt(60 * 60),
85
- },
86
- ]);
87
- const receipt = await bscTestnetClient.waitForTransactionReceipt({
88
- hash,
89
- confirmations: 1,
90
- });
91
- console.log(`Transaction reciept: ${bscTestnet.blockExplorers.default.url}/tx/${hash}`);
92
- console.log("Block: ", receipt.blockNumber);
93
- // parse EvmHost PostRequestEvent emitted in the transcation logs
94
- const event = parseEventLogs({ abi: EVM_HOST.ABI, logs: receipt.logs })[0];
95
- if (event.eventName !== "PostRequestEvent") {
96
- throw new Error("Unexpected Event type");
97
- }
98
- const request = event.args;
99
- console.log("PostRequestEvent", { request });
100
- const commitment = postRequestCommitment(request);
101
- for await (const status of indexer.postRequestStatusStream(commitment)) {
102
- switch (status.status) {
103
- case RequestStatus.SOURCE_FINALIZED: {
104
- console.log(`Status ${status.status}, Transaction: https://gargantua.statescan.io/#/extrinsics/${status.metadata.transactionHash}`);
105
- break;
106
- }
107
- case RequestStatus.HYPERBRIDGE_DELIVERED: {
108
- console.log(`Status ${status.status}, Transaction: https://gargantua.statescan.io/#/extrinsics/${status.metadata.transactionHash}`);
109
- break;
110
- }
111
- case RequestStatus.HYPERBRIDGE_FINALIZED: {
112
- console.log(`Status ${status.status}, Transaction: https://gnosis-chiado.blockscout.com/tx/${status.metadata.transactionHash}`);
113
- const { args, functionName } = decodeFunctionData({
114
- abi: HANDLER.ABI,
115
- data: status.metadata.calldata,
116
- });
117
- expect(functionName).toBe("handlePostRequests");
118
- try {
119
- const hash = await gnosisChiadoHandler.write.handlePostRequests(args);
120
- await gnosisChiadoClient.waitForTransactionReceipt({
121
- hash,
122
- confirmations: 1,
123
- });
124
- console.log(`Transaction submitted: https://gnosis-chiado.blockscout.com/tx/${hash}`);
125
- }
126
- catch (e) {
127
- console.error("Error self-relaying: ", e);
128
- }
129
- break;
130
- }
131
- case RequestStatus.DESTINATION: {
132
- console.log(`Status ${status.status}, Transaction: https://gnosis-chiado.blockscout.com/tx/${status.metadata.transactionHash}`);
133
- break;
134
- }
135
- }
136
- }
137
- const req = await indexer.queryRequestWithStatus(commitment);
138
- console.log(JSON.stringify(req, null, 4));
139
- expect(req?.statuses.length).toBe(5);
140
- }, 600000);
141
- test.fails("should stream and query the timeout status", async () => {
142
- const { bscTestnetClient, bscHandler, bscPing, gnosisChiadoHost } = await setUp();
143
- console.log("\n\nSending Post Request\n\n");
144
- const hash = await bscPing.write.ping([
145
- {
146
- dest: await gnosisChiadoHost.read.host(),
147
- count: BigInt(1),
148
- fee: BigInt(0),
149
- module: process.env.PING_MODULE_ADDRESS,
150
- timeout: BigInt(180), // so it can timeout
151
- },
152
- ]);
153
- const receipt = await bscTestnetClient.waitForTransactionReceipt({
154
- hash,
155
- confirmations: 1,
156
- });
157
- console.log(`Transaction reciept: ${bscTestnet.blockExplorers.default.url}/tx/${hash}`);
158
- console.log("Block: ", receipt.blockNumber);
159
- // parse EvmHost PostRequestEvent emitted in the transcation logs
160
- const event = parseEventLogs({ abi: EVM_HOST.ABI, logs: receipt.logs })[0];
161
- if (event.eventName !== "PostRequestEvent") {
162
- throw new Error("Unexpected Event type");
163
- }
164
- const request = event.args;
165
- console.log("PostRequestEvent", { request });
166
- const commitment = postRequestCommitment(request);
167
- const statusStream = indexer.postRequestStatusStream(commitment);
168
- for await (const status of statusStream) {
169
- console.log(JSON.stringify(status, null, 4));
170
- if (status.status === TimeoutStatus.PENDING_TIMEOUT) {
171
- console.log("Request is now timed out", request.timeoutTimestamp);
172
- }
173
- }
174
- console.log("Starting timeout stream");
175
- for await (const timeout of indexer.postRequestTimeoutStream(commitment)) {
176
- console.log(JSON.stringify(timeout, null, 4));
177
- switch (timeout.status) {
178
- case TimeoutStatus.DESTINATION_FINALIZED_TIMEOUT:
179
- console.log(`Status ${timeout.status}, Transaction: https://gargantua.statescan.io/#/extrinsics/${timeout.metadata?.transactionHash}`);
180
- break;
181
- case TimeoutStatus.HYPERBRIDGE_TIMED_OUT:
182
- console.log(`Status ${timeout.status}, Transaction: https://gargantua.statescan.io/#/extrinsics/${timeout.metadata?.transactionHash}`);
183
- break;
184
- case TimeoutStatus.HYPERBRIDGE_FINALIZED_TIMEOUT: {
185
- console.log(`Status ${timeout.status}, Transaction: https://testnet.bscscan.com/tx/${timeout.metadata?.transactionHash}`);
186
- const { args, functionName } = decodeFunctionData({
187
- abi: HANDLER.ABI,
188
- data: timeout.metadata.calldata,
189
- });
190
- expect(functionName).toBe("handlePostRequestTimeouts");
191
- try {
192
- const hash = await bscHandler.write.handlePostRequestTimeouts(args);
193
- await bscTestnetClient.waitForTransactionReceipt({
194
- hash,
195
- confirmations: 1,
196
- });
197
- console.log(`Transaction timeout submitted: https://testnet.bscscan.com/tx/${hash}`);
198
- }
199
- catch (e) {
200
- console.error("Error self-relaying: ", e);
201
- }
202
- break;
203
- }
204
- default:
205
- console.log("Unknown timeout status");
206
- break;
207
- }
208
- }
209
- const req = await indexer.queryRequestWithStatus(commitment);
210
- console.log("Full status", JSON.stringify(req, null, 4));
211
- const hyperbridgeFinalizedStatus = req?.statuses.find((status) => status.status === TimeoutStatus.HYPERBRIDGE_FINALIZED_TIMEOUT);
212
- expect(hyperbridgeFinalizedStatus).toBeDefined();
213
- expect(hyperbridgeFinalizedStatus?.metadata.calldata).toBeDefined();
214
- }, 1200000);
215
- });
216
- async function setUp() {
217
- const account = privateKeyToAccount(process.env.PRIVATE_KEY);
218
- const bscWalletClient = createWalletClient({
219
- chain: bscTestnet,
220
- account,
221
- transport: http(process.env.BSC_CHAPEL),
222
- });
223
- const gnosisChiadoWallet = createWalletClient({
224
- chain: gnosisChiado,
225
- account,
226
- transport: http(process.env.GNOSIS_CHIADO),
227
- });
228
- const bscTestnetClient = createPublicClient({
229
- chain: bscTestnet,
230
- transport: http(process.env.BSC_CHAPEL),
231
- });
232
- const gnosisChiadoClient = createPublicClient({
233
- chain: gnosisChiado,
234
- transport: http(process.env.GNOSIS_CHIADO),
235
- });
236
- const bscPing = getContract({
237
- address: process.env.PING_MODULE_ADDRESS,
238
- abi: PING_MODULE.ABI,
239
- client: { public: bscTestnetClient, wallet: bscWalletClient },
240
- });
241
- const bscIsmpHostAddress = await bscPing.read.host();
242
- const bscIsmpHost = getContract({
243
- address: bscIsmpHostAddress,
244
- abi: EVM_HOST.ABI,
245
- client: bscTestnetClient,
246
- });
247
- const bscHostParams = await bscIsmpHost.read.hostParams();
248
- const bscHandler = getContract({
249
- address: bscHostParams.handler,
250
- abi: HANDLER.ABI,
251
- client: { public: bscTestnetClient, wallet: bscWalletClient },
252
- });
253
- const bscFeeToken = getContract({
254
- address: bscHostParams.feeToken,
255
- abi: ERC6160.ABI,
256
- client: { public: bscTestnetClient, wallet: bscWalletClient },
257
- });
258
- const gnosisChiadoPing = getContract({
259
- address: process.env.PING_MODULE_ADDRESS,
260
- abi: PING_MODULE.ABI,
261
- client: gnosisChiadoClient,
262
- });
263
- const gnosisChiadoHostAddress = await gnosisChiadoPing.read.host();
264
- const gnosisChiadoHost = getContract({
265
- address: gnosisChiadoHostAddress,
266
- abi: EVM_HOST.ABI,
267
- client: gnosisChiadoClient,
268
- });
269
- const gnosisChiadoHostParams = await gnosisChiadoHost.read.hostParams();
270
- const gnosisChiadoHandler = getContract({
271
- address: gnosisChiadoHostParams.handler,
272
- abi: HANDLER.ABI,
273
- client: { public: gnosisChiadoClient, wallet: gnosisChiadoWallet },
274
- });
275
- const tokenFaucet = getContract({
276
- address: "0x17d8cc0859fbA942A7af243c3EBB69AbBfe0a320",
277
- abi: parseAbi(["function drip(address token) public"]),
278
- client: { public: bscTestnetClient, wallet: bscWalletClient },
279
- });
280
- return {
281
- bscTestnetClient,
282
- bscFeeToken,
283
- account,
284
- tokenFaucet,
285
- gnosisChiadoHandler,
286
- bscHandler,
287
- bscPing,
288
- gnosisChiadoClient,
289
- gnosisChiadoHost,
290
- bscIsmpHost,
291
- };
292
- }
293
- //# sourceMappingURL=postRequest.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postRequest.test.js","sourceRoot":"","sources":["../../src/tests/postRequest.test.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AAEtB,OAAO,EACN,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,cAAc,GACd,MAAM,MAAM,CAAA;AACb,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAa,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAE/C,OAAO,OAAO,MAAM,gBAAgB,CAAA;AACpC,OAAO,WAAW,MAAM,mBAAmB,CAAA;AAC3C,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,OAAO,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAmB,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAEnE,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC5B,IAAI,OAAsB,CAAA;IAE1B,SAAS,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,MAAM,KAAK,EAAE,CAAA;QACvD,OAAO,GAAG,IAAI,aAAa,CAAC;YAC3B,MAAM,EAAE;gBACP,gBAAgB,EAAE,MAAM;gBACxB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAW;gBAC/B,cAAc,EAAE,QAAQ;gBACxB,IAAI,EAAE,WAAW,CAAC,OAAO;aACzB;YACD,IAAI,EAAE;gBACL,gBAAgB,EAAE,MAAM;gBACxB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAc;gBAClC,cAAc,EAAE,WAAW;gBAC3B,IAAI,EAAE,gBAAgB,CAAC,OAAO;aAC9B;YACD,WAAW,EAAE;gBACZ,gBAAgB,EAAE,MAAM;gBACxB,cAAc,EAAE,aAAa;gBAC7B,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAsB;aACzC;YACD,YAAY,EAAE,IAAK,EAAE,eAAe;SACpC,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,WAAW,GAAG,IAAI,cAAc,CAAC;YACtC,iCAAiC;YACjC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAsB;YACtC,MAAM,EAAE,QAAQ;SAChB,CAAC,CAAA;QAEF,MAAM,WAAW,CAAC,OAAO,EAAE,CAAA;QAE3B,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC;YAC7B,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE;gBACN,gBAAgB,EAAE,MAAM;gBACxB,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,8rQAA8rQ;gBACrsQ,YAAY,EAAE,WAAW;aACzB;YACD,QAAQ,EAAE;gBACT;oBACC,IAAI,EAAE,sCAAsC;oBAC5C,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,4CAA4C;oBAClD,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,QAAQ;oBAChB,gBAAgB,EAAE,WAAW;oBAC7B,EAAE,EAAE,4CAA4C;iBAChD;aACD;SACD,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;YAC7B,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,aAAc;YAC/B,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,4CAA4C;SAClD,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CACjD,oEAAoE,CACpE,CAAA;QAED,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAA;QAE/B,mBAAmB;QACnB,WAAW,CAAC,GAAI,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,GAAG,MAAM,KAAK,EAAE,CAAA;QAC9G,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;QAE3C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YACrC;gBACC,IAAI,EAAE,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE;gBACxC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChB,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;gBACd,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAiC;gBACrD,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;aACxB;SACD,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,yBAAyB,CAAC;YAChE,IAAI;YACJ,aAAa,EAAE,CAAC;SAChB,CAAC,CAAA;QAEF,OAAO,CAAC,GAAG,CAAC,wBAAwB,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,OAAO,IAAI,EAAE,CAAC,CAAA;QACvF,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;QAE3C,iEAAiE;QACjE,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAE1E,IAAI,KAAK,CAAC,SAAS,KAAK,kBAAkB,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QACzC,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAA;QAC1B,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QAC5C,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;QAEjD,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,OAAO,CAAC,uBAAuB,CAAC,UAAU,CAAC,EAAE,CAAC;YACxE,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;gBACvB,KAAK,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBACrC,OAAO,CAAC,GAAG,CACV,UAAU,MAAM,CAAC,MAAM,8DAA8D,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CACtH,CAAA;oBACD,MAAK;gBACN,CAAC;gBACD,KAAK,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC;oBAC1C,OAAO,CAAC,GAAG,CACV,UAAU,MAAM,CAAC,MAAM,8DAA8D,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CACtH,CAAA;oBACD,MAAK;gBACN,CAAC;gBACD,KAAK,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC;oBAC1C,OAAO,CAAC,GAAG,CACV,UAAU,MAAM,CAAC,MAAM,0DAA0D,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CAClH,CAAA;oBACD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAAC;wBACjD,GAAG,EAAE,OAAO,CAAC,GAAG;wBAChB,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;qBAC9B,CAAC,CAAA;oBAEF,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;oBAE/C,IAAI,CAAC;wBACJ,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAW,CAAC,CAAA;wBAC5E,MAAM,kBAAkB,CAAC,yBAAyB,CAAC;4BAClD,IAAI;4BACJ,aAAa,EAAE,CAAC;yBAChB,CAAC,CAAA;wBAEF,OAAO,CAAC,GAAG,CAAC,kEAAkE,IAAI,EAAE,CAAC,CAAA;oBACtF,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACZ,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAA;oBAC1C,CAAC;oBAED,MAAK;gBACN,CAAC;gBACD,KAAK,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;oBAChC,OAAO,CAAC,GAAG,CACV,UAAU,MAAM,CAAC,MAAM,0DAA0D,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CAClH,CAAA;oBACD,MAAK;gBACN,CAAC;YACF,CAAC;QACF,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAA;QAC5D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACzC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC,EAAE,MAAO,CAAC,CAAA;IAEX,IAAI,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,KAAK,EAAE,CAAA;QACjF,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;QAE3C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YACrC;gBACC,IAAI,EAAE,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE;gBACxC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChB,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;gBACd,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAiC;gBACrD,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,oBAAoB;aAC1C;SACD,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,yBAAyB,CAAC;YAChE,IAAI;YACJ,aAAa,EAAE,CAAC;SAChB,CAAC,CAAA;QAEF,OAAO,CAAC,GAAG,CAAC,wBAAwB,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,OAAO,IAAI,EAAE,CAAC,CAAA;QACvF,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;QAE3C,iEAAiE;QACjE,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAE1E,IAAI,KAAK,CAAC,SAAS,KAAK,kBAAkB,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QACzC,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAA;QAE1B,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QAE5C,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;QACjD,MAAM,YAAY,GAAG,OAAO,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAA;QAEhE,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAE5C,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,CAAC,eAAe,EAAE,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;YAClE,CAAC;QACF,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;QAEtC,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,OAAO,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAC7C,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;gBACxB,KAAK,aAAa,CAAC,6BAA6B;oBAC/C,OAAO,CAAC,GAAG,CACV,UAAU,OAAO,CAAC,MAAM,8DAA8D,OAAO,CAAC,QAAQ,EAAE,eAAe,EAAE,CACzH,CAAA;oBACD,MAAK;gBACN,KAAK,aAAa,CAAC,qBAAqB;oBACvC,OAAO,CAAC,GAAG,CACV,UAAU,OAAO,CAAC,MAAM,8DAA8D,OAAO,CAAC,QAAQ,EAAE,eAAe,EAAE,CACzH,CAAA;oBACD,MAAK;gBACN,KAAK,aAAa,CAAC,6BAA6B,CAAC,CAAC,CAAC;oBAClD,OAAO,CAAC,GAAG,CACV,UAAU,OAAO,CAAC,MAAM,iDAAiD,OAAO,CAAC,QAAQ,EAAE,eAAe,EAAE,CAC5G,CAAA;oBACD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAAC;wBACjD,GAAG,EAAE,OAAO,CAAC,GAAG;wBAChB,IAAI,EAAE,OAAO,CAAC,QAAS,CAAC,QAAgB;qBACxC,CAAC,CAAA;oBAEF,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;oBAEtD,IAAI,CAAC;wBACJ,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAW,CAAC,CAAA;wBAC1E,MAAM,gBAAgB,CAAC,yBAAyB,CAAC;4BAChD,IAAI;4BACJ,aAAa,EAAE,CAAC;yBAChB,CAAC,CAAA;wBAEF,OAAO,CAAC,GAAG,CAAC,iEAAiE,IAAI,EAAE,CAAC,CAAA;oBACrF,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACZ,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAA;oBAC1C,CAAC;oBAED,MAAK;gBACN,CAAC;gBACD;oBACC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;oBACrC,MAAK;YACP,CAAC;QACF,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAA;QAC5D,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAExD,MAAM,0BAA0B,GAAG,GAAG,EAAE,QAAQ,CAAC,IAAI,CACpD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,aAAa,CAAC,6BAA6B,CACzE,CAAA;QACD,MAAM,CAAC,0BAA0B,CAAC,CAAC,WAAW,EAAE,CAAA;QAChD,MAAM,CAAC,0BAA0B,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;IACpE,CAAC,EAAE,OAAQ,CAAC,CAAA;AACb,CAAC,CAAC,CAAA;AAEF,KAAK,UAAU,KAAK;IACnB,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAkB,CAAC,CAAA;IAEnE,MAAM,eAAe,GAAG,kBAAkB,CAAC;QAC1C,KAAK,EAAE,UAAU;QACjB,OAAO;QACP,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;KACvC,CAAC,CAAA;IAEF,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,KAAK,EAAE,YAAY;QACnB,OAAO;QACP,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;KAC1C,CAAC,CAAA;IAEF,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;QAC3C,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;KACvC,CAAC,CAAA;IAEF,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,KAAK,EAAE,YAAY;QACnB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;KAC1C,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,WAAW,CAAC;QAC3B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAiC;QACtD,GAAG,EAAE,WAAW,CAAC,GAAG;QACpB,MAAM,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,eAAe,EAAE;KAC7D,CAAC,CAAA;IAEF,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IAEpD,MAAM,WAAW,GAAG,WAAW,CAAC;QAC/B,OAAO,EAAE,kBAAkB;QAC3B,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,MAAM,EAAE,gBAAgB;KACxB,CAAC,CAAA;IAEF,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAA;IAEzD,MAAM,UAAU,GAAG,WAAW,CAAC;QAC9B,OAAO,EAAE,aAAa,CAAC,OAAO;QAC9B,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,eAAe,EAAE;KAC7D,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,WAAW,CAAC;QAC/B,OAAO,EAAE,aAAa,CAAC,QAAQ;QAC/B,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,eAAe,EAAE;KAC7D,CAAC,CAAA;IAEF,MAAM,gBAAgB,GAAG,WAAW,CAAC;QACpC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAiC;QACtD,GAAG,EAAE,WAAW,CAAC,GAAG;QACpB,MAAM,EAAE,kBAAkB;KAC1B,CAAC,CAAA;IAEF,MAAM,uBAAuB,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IAElE,MAAM,gBAAgB,GAAG,WAAW,CAAC;QACpC,OAAO,EAAE,uBAAuB;QAChC,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,MAAM,EAAE,kBAAkB;KAC1B,CAAC,CAAA;IAEF,MAAM,sBAAsB,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAA;IAEvE,MAAM,mBAAmB,GAAG,WAAW,CAAC;QACvC,OAAO,EAAE,sBAAsB,CAAC,OAAO;QACvC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE;KAClE,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,WAAW,CAAC;QAC/B,OAAO,EAAE,4CAA4C;QACrD,GAAG,EAAE,QAAQ,CAAC,CAAC,qCAAqC,CAAC,CAAC;QACtD,MAAM,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,eAAe,EAAE;KAC7D,CAAC,CAAA;IAEF,OAAO;QACN,gBAAgB;QAChB,WAAW;QACX,OAAO;QACP,WAAW;QACX,mBAAmB;QACnB,UAAU;QACV,OAAO;QACP,kBAAkB;QAClB,gBAAgB;QAChB,WAAW;KACX,CAAA;AACF,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,6 +0,0 @@
1
- process.env.NODE_ENV = "test";
2
- import * as dotenv from "dotenv";
3
- import * as path from "node:path";
4
- const root = process.cwd();
5
- dotenv.config({ path: path.resolve(root, "../../.env.local") });
6
- //# sourceMappingURL=setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/tests/setup.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAA;AAE7B,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAChC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;AAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- import "log-timestamp";
@@ -1,85 +0,0 @@
1
- import "log-timestamp";
2
- import { ApiPromise, WsProvider } from "@polkadot/api";
3
- import { Keyring } from "@polkadot/keyring";
4
- import { hexToBytes } from "viem";
5
- import { teleport } from "../utils/tokenGateway.js";
6
- import { u8aToHex, hexToU8a } from "@polkadot/util";
7
- // private key for testnet transactions
8
- const secret_key = process.env.SECRET_PHRASE || "";
9
- /**
10
- * Jest test for the teleport function
11
- The goal of this test is to ensure the teleport extrinsic is correctly encoded
12
- The tx can be decoded by the rpc node
13
- */
14
- describe("teleport function", () => {
15
- it("should teleport assets correctly", async () => {
16
- // Set up the connection to a local node
17
- const wsProvider = new WsProvider(process.env.BIFROST_PASEO);
18
- const api = await ApiPromise.create({ provider: wsProvider });
19
- console.log("Api connected");
20
- // Set up BOB account from keyring
21
- const keyring = new Keyring({ type: "sr25519" });
22
- const bob = keyring.addFromUri(secret_key);
23
- // Implement the Signer interface
24
- const signer = createKeyringPairSigner(bob);
25
- // Prepare test parameters
26
- const params = {
27
- symbol: "BNC",
28
- destination: "EVM-84532",
29
- recipient: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
30
- amount: BigInt(200000000000),
31
- timeout: BigInt(3600),
32
- tokenGatewayAddress: hexToBytes("0xFcDa26cA021d5535C3059547390E6cCd8De7acA6"),
33
- relayerFee: BigInt(0),
34
- redeem: false,
35
- };
36
- try {
37
- // Call the teleport function
38
- console.log("Teleport started");
39
- let dispatched = null;
40
- let finalized = null;
41
- for await (const event of await teleport(api, bob.address, params, { signer })) {
42
- console.log(event.kind);
43
- if (event.kind === "Dispatched") {
44
- dispatched = event;
45
- }
46
- if (event.kind === "Finalized") {
47
- finalized = event;
48
- }
49
- }
50
- expect(dispatched).toMatchObject(expect.objectContaining({
51
- kind: "Dispatched",
52
- transaction_hash: expect.stringContaining("0x"),
53
- block_number: expect.any(BigInt),
54
- commitment: expect.stringContaining("0x"),
55
- events: expect.arrayContaining([]),
56
- }));
57
- expect(finalized).toMatchObject(expect.objectContaining({
58
- kind: "Finalized",
59
- transaction_hash: expect.stringContaining("0x"),
60
- events: expect.arrayContaining([]),
61
- }));
62
- }
63
- catch (error) {
64
- console.log(error);
65
- // The extrinsic should be decoded correctly but should fail at transaction fee payment since we are using the BOB account
66
- expect(error).toBeUndefined();
67
- }
68
- }, 300000);
69
- });
70
- function createKeyringPairSigner(pair) {
71
- return {
72
- /**
73
- * Signs a raw payload
74
- */
75
- async signRaw({ data }) {
76
- // Sign the data
77
- const signature = u8aToHex(pair.sign(hexToU8a(data), { withType: true }));
78
- return {
79
- id: 1,
80
- signature,
81
- };
82
- },
83
- };
84
- }
85
- //# sourceMappingURL=tokenGateway.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokenGateway.test.js","sourceRoot":"","sources":["../../src/tests/tokenGateway.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,71 +0,0 @@
1
- import { ApiPromise, WsProvider } from "@polkadot/api";
2
- import { Keyring } from "@polkadot/keyring";
3
- import { teleportDot } from "../utils/xcmGateway.js";
4
- import { u8aToHex, hexToU8a } from "@polkadot/util";
5
- // private key for testnet transactions
6
- const secret_key = process.env.SECRET_PHRASE || "";
7
- /**
8
- * Jest test for the teleport function
9
- The goal of this test is to ensure the teleport extrinsic is correctly encoded
10
- The tx can be decoded by the rpc node
11
- */
12
- describe("teleport DOT", () => {
13
- it("should teleport DOT correctly", async () => {
14
- // Set up the connection to a local node
15
- const relayProvider = new WsProvider(process.env.PASEO_RPC_URL);
16
- const relayApi = await ApiPromise.create({ provider: relayProvider });
17
- const wsProvider = new WsProvider(process.env.HYPERBRIDGE_GARGANTUA);
18
- const hyperbridge = await ApiPromise.create({ provider: wsProvider });
19
- console.log("Api connected");
20
- // Set up BOB account from keyring
21
- const keyring = new Keyring({ type: "sr25519" });
22
- const bob = keyring.addFromUri(secret_key);
23
- // Implement the Signer interface
24
- const signer = createKeyringPairSigner(bob);
25
- const params = {
26
- destination: 97,
27
- recipient: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
28
- amount: BigInt(1),
29
- timeout: BigInt(3600),
30
- paraId: 4009,
31
- };
32
- try {
33
- // Call the teleport function
34
- //
35
- console.log("Teleport Dot started");
36
- const result = await teleportDot(relayApi, hyperbridge, bob.address, { signer }, params);
37
- for await (const event of result) {
38
- console.log(event.kind);
39
- if (event.kind === "Error") {
40
- throw new Error(event.error);
41
- }
42
- if (event.kind === "Ready") {
43
- console.log(event);
44
- }
45
- if (event.kind === "Dispatched") {
46
- console.log(event);
47
- return;
48
- }
49
- }
50
- }
51
- catch (error) {
52
- expect(error).toBeUndefined();
53
- }
54
- }, 300000);
55
- });
56
- function createKeyringPairSigner(pair) {
57
- return {
58
- /**
59
- * Signs a raw payload
60
- */
61
- async signRaw({ data }) {
62
- // Sign the data
63
- const signature = u8aToHex(pair.sign(hexToU8a(data), { withType: true }));
64
- return {
65
- id: 1,
66
- signature,
67
- };
68
- },
69
- };
70
- }
71
- //# sourceMappingURL=xcmGateway.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xcmGateway.test.js","sourceRoot":"","sources":["../../src/tests/xcmGateway.test.ts"],"names":[],"mappings":"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"}