@layerzerolabs/protocol-stellar-v2 0.2.15 → 0.2.19

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 (262) hide show
  1. package/.turbo/turbo-build.log +365 -297
  2. package/.turbo/turbo-lint.log +142 -110
  3. package/.turbo/turbo-test.log +1273 -1222
  4. package/Cargo.lock +20 -5
  5. package/Cargo.toml +4 -1
  6. package/contracts/ERROR_SPEC.md +44 -0
  7. package/contracts/common-macros/src/auth.rs +113 -0
  8. package/contracts/common-macros/src/contract_ttl.rs +84 -0
  9. package/contracts/common-macros/src/lib.rs +181 -30
  10. package/contracts/common-macros/src/lz_contract.rs +83 -0
  11. package/contracts/common-macros/src/tests/{ownable.rs → auth.rs} +48 -15
  12. package/contracts/common-macros/src/tests/contract_ttl.rs +662 -0
  13. package/contracts/common-macros/src/tests/mod.rs +2 -2
  14. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +20 -0
  15. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +24 -0
  16. package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__ownable__snapshot_only_owner_preserves_function_signature.snap → common_macros__tests__auth__snapshot_only_auth_preserves_function_signature.snap} +4 -4
  17. package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap → common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap} +3 -3
  18. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contracttrait_code.snap +69 -0
  19. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +7 -21
  20. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +2 -2
  21. package/contracts/common-macros/src/ttl_configurable.rs +19 -34
  22. package/contracts/common-macros/src/ttl_extendable.rs +36 -0
  23. package/contracts/common-macros/src/upgradeable.rs +5 -5
  24. package/contracts/common-macros/src/utils.rs +9 -0
  25. package/contracts/endpoint-v2/src/constants.rs +4 -4
  26. package/contracts/endpoint-v2/src/endpoint_v2.rs +38 -40
  27. package/contracts/endpoint-v2/src/errors.rs +4 -3
  28. package/contracts/endpoint-v2/src/events.rs +1 -1
  29. package/contracts/endpoint-v2/src/message_lib_manager.rs +18 -5
  30. package/contracts/endpoint-v2/src/messaging_channel.rs +11 -1
  31. package/contracts/endpoint-v2/src/messaging_composer.rs +11 -1
  32. package/contracts/endpoint-v2/src/storage.rs +1 -1
  33. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +3 -3
  34. package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +1 -1
  35. package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +2 -2
  36. package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +3 -3
  37. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +4 -4
  38. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +3 -3
  39. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +1 -1
  40. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +3 -3
  41. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +1 -1
  42. package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +4 -4
  43. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +1 -1
  44. package/contracts/layerzero-views/src/layerzero_view.rs +3 -6
  45. package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +2 -2
  46. package/contracts/macro-integration-tests/tests/runtime/ownable/{only_owner_guard.rs → only_auth_guard.rs} +1 -1
  47. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +1 -1
  48. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +1 -1
  49. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +0 -1
  50. package/contracts/macro-integration-tests/tests/ui/ownable/fail/{only_owner_missing_env.rs → only_auth_missing_env.rs} +3 -3
  51. package/contracts/macro-integration-tests/tests/ui/ownable/fail/{only_owner_missing_env.stderr → only_auth_missing_env.stderr} +4 -4
  52. package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +2 -3
  53. package/contracts/macro-integration-tests/tests/ui/ownable/pass/{only_owner_env_param_variants.rs → only_auth_env_param_variants.rs} +9 -9
  54. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +6 -6
  55. package/contracts/message-libs/message-lib-common/src/errors.rs +7 -2
  56. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +3 -3
  57. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +1 -2
  58. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +1 -2
  59. package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +9 -9
  60. package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +1 -1
  61. package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +1 -1
  62. package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +2 -2
  63. package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +7 -9
  64. package/contracts/message-libs/treasury/src/errors.rs +2 -2
  65. package/contracts/message-libs/treasury/src/events.rs +1 -1
  66. package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +2 -2
  67. package/contracts/message-libs/treasury/src/storage.rs +1 -1
  68. package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +1 -1
  69. package/contracts/message-libs/treasury/src/treasury.rs +14 -16
  70. package/contracts/message-libs/uln-302/src/receive_uln.rs +13 -2
  71. package/contracts/message-libs/uln-302/src/send_uln.rs +24 -4
  72. package/contracts/message-libs/uln-302/src/uln302.rs +6 -24
  73. package/contracts/oapps/counter/Cargo.toml +14 -1
  74. package/contracts/oapps/counter/integration_tests/mod.rs +4 -1
  75. package/contracts/oapps/counter/integration_tests/{setup.rs → setup_sml.rs} +48 -80
  76. package/contracts/oapps/counter/integration_tests/setup_uln.rs +997 -0
  77. package/contracts/oapps/counter/integration_tests/signing.rs +62 -0
  78. package/contracts/oapps/counter/integration_tests/test_with_sml.rs +24 -55
  79. package/contracts/oapps/counter/integration_tests/test_with_uln.rs +314 -0
  80. package/contracts/oapps/counter/integration_tests/utils.rs +196 -53
  81. package/contracts/oapps/counter/src/counter.rs +67 -43
  82. package/contracts/oapps/counter/src/tests/mod.rs +0 -13
  83. package/contracts/oapps/counter/src/tests/test_counter.rs +5 -7
  84. package/contracts/oapps/oapp/src/errors.rs +5 -1
  85. package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +93 -78
  86. package/contracts/oapps/oapp/src/oapp_core.rs +36 -21
  87. package/contracts/oapps/oapp/src/oapp_options_type3.rs +48 -12
  88. package/contracts/oapps/oapp/src/oapp_receiver.rs +106 -41
  89. package/contracts/oapps/oapp/src/oapp_sender.rs +26 -34
  90. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +9 -8
  91. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +25 -17
  92. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +7 -7
  93. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +14 -15
  94. package/contracts/oapps/oapp-macros/src/generators.rs +128 -0
  95. package/contracts/oapps/oapp-macros/src/lib.rs +113 -56
  96. package/contracts/oapps/oft/Cargo.toml +10 -7
  97. package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_oft_fee.rs +3 -4
  98. package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_pausable.rs +2 -3
  99. package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_rate_limiter.rs +1 -1
  100. package/contracts/oapps/oft/integration-tests/mod.rs +1 -1
  101. package/contracts/oapps/oft/integration-tests/setup.rs +29 -110
  102. package/contracts/oapps/oft/integration-tests/utils.rs +254 -21
  103. package/contracts/oapps/oft/src/extensions/oft_fee.rs +13 -14
  104. package/contracts/oapps/oft/src/extensions/pausable.rs +4 -4
  105. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +5 -5
  106. package/contracts/oapps/oft/src/lib.rs +11 -13
  107. package/contracts/oapps/oft/src/oft.rs +147 -225
  108. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +9 -13
  109. package/contracts/oapps/oft/src/oft_types/mint_burn.rs +31 -14
  110. package/contracts/oapps/oft/src/oft_types/mod.rs +13 -0
  111. package/contracts/oapps/{oft-std → oft-core}/Cargo.toml +6 -4
  112. package/contracts/oapps/{oft-std → oft-core}/integration-tests/mod.rs +1 -1
  113. package/contracts/oapps/{oft-std → oft-core}/integration-tests/setup.rs +129 -30
  114. package/contracts/oapps/{oft → oft-core}/integration-tests/test_with_sml.rs +3 -3
  115. package/contracts/oapps/oft-core/integration-tests/utils.rs +201 -0
  116. package/contracts/oapps/oft-core/src/errors.rs +13 -0
  117. package/contracts/oapps/oft-core/src/lib.rs +18 -0
  118. package/contracts/oapps/oft-core/src/oft_core.rs +439 -0
  119. package/contracts/oapps/{oft → oft-core}/src/storage.rs +2 -0
  120. package/contracts/oapps/{oft → oft-core}/src/tests/mod.rs +0 -2
  121. package/contracts/oapps/{oft → oft-core}/src/tests/test_decimals.rs +2 -2
  122. package/contracts/oapps/{oft → oft-core}/src/tests/test_lz_receive.rs +7 -7
  123. package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_msg_codec.rs +4 -5
  124. package/contracts/oapps/{oft → oft-core}/src/tests/test_resolve_address.rs +3 -3
  125. package/contracts/oapps/{oft → oft-core}/src/tests/test_utils.rs +78 -37
  126. package/contracts/oapps/oft-core/src/types.rs +58 -0
  127. package/contracts/oapps/{oft → oft-core}/src/utils.rs +1 -1
  128. package/contracts/upgrader/src/lib.rs +4 -4
  129. package/contracts/utils/src/auth.rs +44 -0
  130. package/contracts/utils/src/errors.rs +31 -5
  131. package/contracts/utils/src/lib.rs +3 -0
  132. package/contracts/utils/src/multisig.rs +211 -0
  133. package/contracts/utils/src/ownable.rs +137 -13
  134. package/contracts/utils/src/tests/buffer_reader.rs +6 -6
  135. package/contracts/utils/src/tests/buffer_writer.rs +6 -6
  136. package/contracts/utils/src/tests/bytes_ext.rs +2 -4
  137. package/contracts/utils/src/tests/mod.rs +1 -0
  138. package/contracts/utils/src/tests/multisig.rs +731 -0
  139. package/contracts/utils/src/tests/option_ext.rs +2 -5
  140. package/contracts/utils/src/tests/ownable.rs +456 -7
  141. package/contracts/utils/src/tests/ttl_configurable.rs +27 -16
  142. package/contracts/utils/src/tests/upgradeable.rs +4 -2
  143. package/contracts/utils/src/ttl_configurable.rs +23 -8
  144. package/contracts/utils/src/ttl_extendable.rs +27 -0
  145. package/contracts/utils/src/upgradeable.rs +2 -0
  146. package/contracts/workers/dvn/Cargo.toml +1 -1
  147. package/contracts/workers/dvn/src/auth.rs +7 -7
  148. package/contracts/workers/dvn/src/dvn.rs +10 -38
  149. package/contracts/workers/dvn/src/errors.rs +0 -7
  150. package/contracts/workers/dvn/src/events.rs +1 -14
  151. package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
  152. package/contracts/workers/dvn/src/interfaces/mod.rs +0 -2
  153. package/contracts/workers/dvn/src/storage.rs +3 -13
  154. package/contracts/workers/dvn/src/tests/auth.rs +4 -4
  155. package/contracts/workers/dvn/src/tests/dvn.rs +1 -2
  156. package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +7 -8
  157. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +11 -8
  158. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +11 -12
  159. package/contracts/workers/dvn/src/tests/setup.rs +5 -5
  160. package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -1
  161. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +3 -6
  162. package/contracts/workers/executor/src/auth.rs +80 -16
  163. package/contracts/workers/executor/src/executor.rs +5 -31
  164. package/contracts/workers/executor/src/storage.rs +2 -9
  165. package/contracts/workers/executor-fee-lib/Cargo.toml +1 -1
  166. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +3 -6
  167. package/contracts/workers/executor-helper/Cargo.toml +1 -1
  168. package/contracts/workers/executor-helper/src/executor_helper.rs +53 -73
  169. package/contracts/workers/price-feed/Cargo.toml +1 -1
  170. package/contracts/workers/price-feed/src/price_feed.rs +7 -10
  171. package/contracts/workers/worker/src/errors.rs +4 -0
  172. package/contracts/workers/worker/src/tests/worker.rs +7 -6
  173. package/contracts/workers/worker/src/worker.rs +20 -16
  174. package/package.json +7 -5
  175. package/sdk/.turbo/turbo-build.log +1 -0
  176. package/sdk/.turbo/turbo-test.log +1019 -0
  177. package/sdk/dist/generated/bml.d.ts +95 -8
  178. package/sdk/dist/generated/bml.js +95 -36
  179. package/sdk/dist/generated/counter.d.ts +289 -44
  180. package/sdk/dist/generated/counter.js +119 -49
  181. package/sdk/dist/generated/dvn.d.ts +312 -229
  182. package/sdk/dist/generated/dvn.js +144 -83
  183. package/sdk/dist/generated/dvn_fee_lib.d.ts +258 -63
  184. package/sdk/dist/generated/dvn_fee_lib.js +95 -26
  185. package/sdk/dist/generated/endpoint.d.ts +219 -24
  186. package/sdk/dist/generated/endpoint.js +108 -41
  187. package/sdk/dist/generated/executor.d.ts +239 -87
  188. package/sdk/dist/generated/executor.js +135 -63
  189. package/sdk/dist/generated/executor_fee_lib.d.ts +278 -74
  190. package/sdk/dist/generated/executor_fee_lib.js +135 -59
  191. package/sdk/dist/generated/executor_helper.d.ts +163 -21
  192. package/sdk/dist/generated/executor_helper.js +124 -52
  193. package/sdk/dist/generated/oft.d.ts +1842 -0
  194. package/sdk/dist/generated/oft.js +345 -0
  195. package/sdk/dist/generated/price_feed.d.ts +258 -63
  196. package/sdk/dist/generated/price_feed.js +95 -26
  197. package/sdk/dist/generated/sml.d.ts +235 -34
  198. package/sdk/dist/generated/sml.js +126 -53
  199. package/sdk/dist/generated/treasury.d.ts +1016 -0
  200. package/sdk/dist/generated/treasury.js +248 -0
  201. package/sdk/dist/generated/uln302.d.ts +235 -34
  202. package/sdk/dist/generated/uln302.js +126 -53
  203. package/sdk/dist/generated/upgrader.d.ts +17 -2
  204. package/sdk/dist/generated/upgrader.js +19 -1
  205. package/sdk/dist/index.d.ts +2 -1
  206. package/sdk/dist/index.js +2 -1
  207. package/sdk/package.json +6 -3
  208. package/sdk/src/index.ts +2 -1
  209. package/sdk/test/counter-sml.test.ts +376 -0
  210. package/sdk/test/counter-uln.test.ts +493 -0
  211. package/sdk/test/{oft.test.ts → oft-sml.test.ts} +196 -321
  212. package/sdk/test/suites/constants.ts +22 -2
  213. package/sdk/test/suites/globalSetup.ts +450 -0
  214. package/sdk/test/suites/localnet.ts +23 -6
  215. package/sdk/test/upgrader.test.ts +7 -16
  216. package/sdk/test/utils.ts +558 -85
  217. package/sdk/turbo.json +8 -0
  218. package/sdk/vitest.config.ts +21 -0
  219. package/tools/ts-bindings-gen/Cargo.toml +2 -0
  220. package/tools/ts-bindings-gen/src/main.rs +52 -4
  221. package/contracts/common-macros/src/contract_impl.rs +0 -52
  222. package/contracts/common-macros/src/ownable.rs +0 -41
  223. package/contracts/common-macros/src/tests/contract_impl.rs +0 -386
  224. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +0 -12
  225. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/extend_instance_ttl.rs +0 -50
  226. package/contracts/oapps/oapp-macros/src/oapp_core.rs +0 -41
  227. package/contracts/oapps/oapp-macros/src/oapp_full.rs +0 -21
  228. package/contracts/oapps/oapp-macros/src/oapp_options_type3.rs +0 -31
  229. package/contracts/oapps/oapp-macros/src/oapp_receiver.rs +0 -48
  230. package/contracts/oapps/oapp-macros/src/oapp_sender.rs +0 -21
  231. package/contracts/oapps/oapp-macros/src/util.rs +0 -107
  232. package/contracts/oapps/oft/src/constants.rs +0 -5
  233. package/contracts/oapps/oft/src/default_oft_impl.rs +0 -152
  234. package/contracts/oapps/oft/src/errors.rs +0 -8
  235. package/contracts/oapps/oft/src/interfaces/mint_burn_token.rs +0 -23
  236. package/contracts/oapps/oft/src/interfaces/mod.rs +0 -3
  237. package/contracts/oapps/oft/src/tests/extensions/mod.rs +0 -11
  238. package/contracts/oapps/oft/src/tests/extensions/setup.rs +0 -903
  239. package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +0 -749
  240. package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +0 -432
  241. package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +0 -1078
  242. package/contracts/oapps/oft/src/types.rs +0 -38
  243. package/contracts/oapps/oft-std/integration-tests/utils.rs +0 -427
  244. package/contracts/oapps/oft-std/src/lib.rs +0 -16
  245. package/contracts/oapps/oft-std/src/oft.rs +0 -156
  246. package/contracts/workers/dvn/src/interfaces/multisig.rs +0 -56
  247. package/contracts/workers/dvn/src/multisig.rs +0 -157
  248. package/sdk/dist/generated/oft_std.d.ts +0 -1544
  249. package/sdk/dist/generated/oft_std.js +0 -271
  250. package/sdk/test/index.test.ts +0 -375
  251. /package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/mod.rs +0 -0
  252. /package/contracts/oapps/{oft → oft-core}/src/codec/mod.rs +0 -0
  253. /package/contracts/oapps/{oft → oft-core}/src/codec/oft_compose_msg_codec.rs +0 -0
  254. /package/contracts/oapps/{oft → oft-core}/src/codec/oft_msg_codec.rs +0 -0
  255. /package/contracts/oapps/{oft → oft-core}/src/events.rs +0 -0
  256. /package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_compose_msg_codec.rs +0 -0
  257. /package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_version.rs +0 -0
  258. /package/contracts/oapps/{oft → oft-core}/src/tests/test_quote_oft.rs +0 -0
  259. /package/contracts/oapps/{oft → oft-core}/src/tests/test_quote_send.rs +0 -0
  260. /package/contracts/oapps/{oft → oft-core}/src/tests/test_send.rs +0 -0
  261. /package/contracts/oapps/{oft → oft-core}/src/tests/test_token.rs +0 -0
  262. /package/sdk/test/suites/{testUpgradeable.ts → dummyContractClient.ts} +0 -0
@@ -0,0 +1,376 @@
1
+ import { StrKey } from '@stellar/stellar-sdk';
2
+ import path from 'path';
3
+ import { beforeAll, describe, expect, inject, it } from 'vitest';
4
+
5
+ import { getFullyQualifiedRepoRootPath } from '@layerzerolabs/common-node-utils';
6
+ import { Options, PacketSerializer, PacketV1Codec } from '@layerzerolabs/lz-v2-utilities';
7
+
8
+ import { Client as CounterClient } from '../src/generated/counter';
9
+ import { Client as EndpointClient } from '../src/generated/endpoint';
10
+ import { Client as ExecutorHelperClient } from '../src/generated/executor_helper';
11
+ import { Client as SMLClient } from '../src/generated/sml';
12
+ import {
13
+ DEFAULT_DEPLOYER,
14
+ EID,
15
+ EXECUTOR_ADMIN,
16
+ MSG_TYPE_ABA,
17
+ MSG_TYPE_VANILLA,
18
+ NETWORK_PASSPHRASE,
19
+ } from './suites/constants';
20
+ import { deployContract } from './suites/deploy';
21
+ import { PacketSentEvent, scanPacketSentEvents } from './suites/scan';
22
+ import { assertTransactionSucceeded, createClient, signAndSendWithExecutorAuth } from './utils';
23
+
24
+ // Protocol addresses (will be injected from globalSetup in beforeAll)
25
+ let protocolAddresses: ReturnType<typeof inject<'protocolAddresses'>>;
26
+
27
+ // Counter-specific address
28
+ let counterAddress = '';
29
+
30
+ // Clients
31
+ let endpointClient: EndpointClient;
32
+ let smlClient: SMLClient;
33
+ let counterClient: CounterClient;
34
+ let executorHelperClient: ExecutorHelperClient;
35
+
36
+ // NOTE: run `stellar contract build --features sandbox` before running the test
37
+
38
+ describe('Counter with SML testing', async () => {
39
+ const repoRoot = await getFullyQualifiedRepoRootPath();
40
+ const wasmDir = path.join(
41
+ repoRoot,
42
+ 'contracts',
43
+ 'protocol',
44
+ 'stellar',
45
+ 'target',
46
+ 'wasm32v1-none',
47
+ 'release',
48
+ );
49
+
50
+ const COUNTER_WASM_PATH = path.join(wasmDir, 'counter.wasm');
51
+
52
+ beforeAll(async () => {
53
+ // Inject protocol addresses from globalSetup
54
+ protocolAddresses = inject('protocolAddresses');
55
+
56
+ console.log('\n📋 Protocol addresses injected from globalSetup');
57
+ console.log(' Endpoint:', protocolAddresses.endpointV2);
58
+ console.log(' SML:', protocolAddresses.sml);
59
+ console.log(' Executor:', protocolAddresses.executor);
60
+ console.log(' Executor Helper:', protocolAddresses.executorHelper);
61
+
62
+ // Create clients for protocol contracts
63
+ endpointClient = createClient(EndpointClient, protocolAddresses.endpointV2);
64
+ smlClient = createClient(SMLClient, protocolAddresses.sml);
65
+ executorHelperClient = createClient(ExecutorHelperClient, protocolAddresses.executorHelper);
66
+ });
67
+
68
+ describe('Deploy Counter', () => {
69
+ it('Deploy Counter', async () => {
70
+ counterClient = await deployContract<CounterClient>(
71
+ CounterClient,
72
+ COUNTER_WASM_PATH,
73
+ {
74
+ owner: DEFAULT_DEPLOYER.publicKey(),
75
+ endpoint: protocolAddresses.endpointV2,
76
+ delegate: DEFAULT_DEPLOYER.publicKey(),
77
+ },
78
+ DEFAULT_DEPLOYER,
79
+ );
80
+
81
+ counterAddress = counterClient.options.contractId;
82
+ console.log('✅ Counter deployed:', counterAddress);
83
+ });
84
+ });
85
+
86
+ describe('Wire Counter to use SML', () => {
87
+ it('Set Counter Send Library to SML', async () => {
88
+ // Override default library (ULN302) with SML for this Counter
89
+ const assembledTx = await endpointClient.set_send_library({
90
+ caller: DEFAULT_DEPLOYER.publicKey(),
91
+ sender: counterAddress,
92
+ dst_eid: EID,
93
+ new_lib: protocolAddresses.sml,
94
+ });
95
+ await assembledTx.signAndSend();
96
+
97
+ const { result: sendLib } = await endpointClient.get_send_library({
98
+ sender: counterAddress,
99
+ dst_eid: EID,
100
+ });
101
+ expect(sendLib.lib).toBe(protocolAddresses.sml);
102
+ expect(sendLib.is_default).toBe(false); // It's OApp-specific, not default
103
+ console.log('✅ Counter send library set to SML');
104
+ });
105
+
106
+ it('Set Counter Receive Library to SML', async () => {
107
+ const assembledTx = await endpointClient.set_receive_library({
108
+ caller: DEFAULT_DEPLOYER.publicKey(),
109
+ receiver: counterAddress,
110
+ src_eid: EID,
111
+ new_lib: protocolAddresses.sml,
112
+ grace_period: 0n,
113
+ });
114
+ await assembledTx.signAndSend();
115
+
116
+ const { result: receiveLib } = await endpointClient.get_receive_library({
117
+ receiver: counterAddress,
118
+ src_eid: EID,
119
+ });
120
+ expect(receiveLib.lib).toBe(protocolAddresses.sml);
121
+ expect(receiveLib.is_default).toBe(false); // It's OApp-specific, not default
122
+ console.log('✅ Counter receive library set to SML');
123
+ });
124
+
125
+ it('Set Counter Peer', async () => {
126
+ const peerBytes = StrKey.decodeContract(counterAddress);
127
+
128
+ const assembledTx = await counterClient.set_peer({
129
+ eid: EID,
130
+ peer: Buffer.from(peerBytes),
131
+ });
132
+ await assembledTx.signAndSend();
133
+
134
+ const { result: peer } = await counterClient.peer({
135
+ eid: EID,
136
+ });
137
+ expect(peer?.toString()).toBe(Buffer.from(peerBytes).toString());
138
+ console.log('✅ Counter peer set for EID', EID);
139
+ });
140
+ });
141
+
142
+ describe('Counter ABA Messaging', async () => {
143
+ let incrementLedger = 0;
144
+ let responseLedger = 0;
145
+ let packetSentEvent: PacketSentEvent;
146
+ let responsePacketSentEvent: PacketSentEvent;
147
+ let guid: Buffer;
148
+ let message: Buffer;
149
+ let responseGuid: Buffer;
150
+ let responseMessage: Buffer;
151
+ let abaReturnFee: bigint;
152
+
153
+ it('Counter Increment (ABA)', async () => {
154
+ // First quote the return fee (for the ABA to send back a response message)
155
+ const returnOptions = Options.newOptions().addExecutorLzReceiveOption(200000n, 0n);
156
+
157
+ const { result: returnFee } = await counterClient.quote({
158
+ dst_eid: EID,
159
+ msg_type: MSG_TYPE_VANILLA,
160
+ options: Buffer.from(returnOptions.toBytes()),
161
+ pay_in_zro: false,
162
+ });
163
+ console.log('✅ Return fee for ABA:', returnFee);
164
+
165
+ // Add 1% buffer to the return fee
166
+ abaReturnFee = (returnFee.native_fee * 101n) / 100n;
167
+
168
+ // Build ABA options with lzReceive gas + value for return message fee
169
+ const abaOptions = Options.newOptions().addExecutorLzReceiveOption(
170
+ 200000n,
171
+ abaReturnFee,
172
+ );
173
+ const optionsBuffer = Buffer.from(abaOptions.toBytes());
174
+
175
+ const { result: fee } = await counterClient.quote({
176
+ dst_eid: EID,
177
+ msg_type: MSG_TYPE_ABA,
178
+ options: optionsBuffer,
179
+ pay_in_zro: true,
180
+ });
181
+ console.log('✅ ABA Fee:', fee);
182
+
183
+ const assembledTx = await counterClient.increment({
184
+ caller: DEFAULT_DEPLOYER.publicKey(),
185
+ dst_eid: EID,
186
+ msg_type: MSG_TYPE_ABA,
187
+ options: optionsBuffer,
188
+ fee: fee,
189
+ });
190
+ const sentTx = await assembledTx.signAndSend();
191
+
192
+ // Extract ledger number from transaction response
193
+ const txResponse = sentTx.getTransactionResponse;
194
+ if (txResponse && 'ledger' in txResponse) {
195
+ incrementLedger = txResponse.ledger;
196
+ }
197
+
198
+ const { result: outboundCount } = await counterClient.outbound_count({
199
+ eid: EID,
200
+ });
201
+ expect(outboundCount).toBe(1n);
202
+ console.log('✅ Counter incremented (ABA), outbound count:', outboundCount);
203
+ });
204
+
205
+ it('Scan PacketSent Events', async () => {
206
+ const packetSentEvents = await scanPacketSentEvents(
207
+ protocolAddresses.endpointV2,
208
+ incrementLedger,
209
+ );
210
+ expect(packetSentEvents.length).toBeGreaterThan(0);
211
+ packetSentEvent = packetSentEvents[0];
212
+ console.log(
213
+ `✅ PacketSent events scanned successfully. Found ${packetSentEvents.length} events`,
214
+ );
215
+ });
216
+
217
+ it('Verify Counter Message', async () => {
218
+ const packet = PacketSerializer.deserialize(packetSentEvent.encoded_packet);
219
+ guid = Buffer.from(packet.guid.replace('0x', ''), 'hex');
220
+ message = Buffer.from(packet.message.replace('0x', ''), 'hex');
221
+ const codec = PacketV1Codec.from(packet);
222
+ const packetHeader = codec.header();
223
+ const payloadHash = codec.payloadHash();
224
+ const assembledTx = await smlClient.validate_packet({
225
+ header_bytes: Buffer.from(packetHeader.replace('0x', ''), 'hex'),
226
+ payload_hash: Buffer.from(payloadHash.replace('0x', ''), 'hex'),
227
+ });
228
+ await assembledTx.signAndSend();
229
+ console.log('✅ ABA request packet validated');
230
+ });
231
+
232
+ it('Receive Counter Message (ABA - triggers response)', async () => {
233
+ // ABA message: receives message and automatically sends response
234
+ const origin = {
235
+ nonce: 1n,
236
+ sender: Buffer.from(StrKey.decodeContract(counterAddress)),
237
+ src_eid: EID,
238
+ };
239
+
240
+ const assembledTx = await executorHelperClient.native_drop_and_execute(
241
+ {
242
+ executor: protocolAddresses.executor,
243
+ admin: EXECUTOR_ADMIN.publicKey(),
244
+ origin,
245
+ dst_eid: EID,
246
+ oapp: counterAddress,
247
+ // Native drop: send 100 stroops to counter contract
248
+ native_drop_params: [
249
+ {
250
+ receiver: counterAddress,
251
+ amount: 100n,
252
+ },
253
+ ],
254
+ execute_params: {
255
+ extra_data: Buffer.from([]),
256
+ gas_limit: 0n,
257
+ guid,
258
+ message,
259
+ origin,
260
+ receiver: counterAddress,
261
+ value: abaReturnFee, // Value that will be used as fee for the ABA response
262
+ },
263
+ },
264
+ {
265
+ simulate: false, // Don't auto-simulate, we'll do it with record_allow_nonroot
266
+ },
267
+ );
268
+
269
+ // Sign and send using non-root auth flow
270
+ const txResult = await signAndSendWithExecutorAuth(
271
+ protocolAddresses.executor,
272
+ EXECUTOR_ADMIN,
273
+ assembledTx,
274
+ NETWORK_PASSPHRASE,
275
+ );
276
+
277
+ assertTransactionSucceeded(txResult, 'LzReceive (ABA)');
278
+
279
+ if ('ledger' in txResult) {
280
+ responseLedger = txResult.ledger;
281
+ }
282
+
283
+ // Verify the ABA message was received and inbound count increased
284
+ const { result: inboundCount } = await counterClient.inbound_count({
285
+ eid: EID,
286
+ });
287
+ expect(inboundCount).toBe(1n);
288
+
289
+ // Verify the outbound count increased (ABA response was sent)
290
+ const { result: outboundCount } = await counterClient.outbound_count({
291
+ eid: EID,
292
+ });
293
+ expect(outboundCount).toBe(2n); // 1 from initial increment + 1 from ABA response
294
+ console.log(
295
+ '✅ ABA message received and response sent, outbound count:',
296
+ outboundCount,
297
+ );
298
+ });
299
+
300
+ it('Scan ABA Response PacketSent Events', async () => {
301
+ const packetSentEvents = await scanPacketSentEvents(
302
+ protocolAddresses.endpointV2,
303
+ responseLedger,
304
+ );
305
+ expect(packetSentEvents.length).toBeGreaterThan(0);
306
+ responsePacketSentEvent = packetSentEvents[0];
307
+ console.log(
308
+ `✅ ABA response PacketSent events scanned. Found ${packetSentEvents.length} events`,
309
+ );
310
+ });
311
+
312
+ it('Verify ABA Response Message', async () => {
313
+ const packet = PacketSerializer.deserialize(responsePacketSentEvent.encoded_packet);
314
+ responseGuid = Buffer.from(packet.guid.replace('0x', ''), 'hex');
315
+ responseMessage = Buffer.from(packet.message.replace('0x', ''), 'hex');
316
+ const codec = PacketV1Codec.from(packet);
317
+ const packetHeader = codec.header();
318
+ const payloadHash = codec.payloadHash();
319
+ const assembledTx = await smlClient.validate_packet({
320
+ header_bytes: Buffer.from(packetHeader.replace('0x', ''), 'hex'),
321
+ payload_hash: Buffer.from(payloadHash.replace('0x', ''), 'hex'),
322
+ });
323
+ await assembledTx.signAndSend();
324
+ console.log('✅ ABA response packet validated');
325
+ });
326
+
327
+ it('Receive ABA Response Message', async () => {
328
+ // Receive the response message (vanilla type)
329
+ const origin = {
330
+ nonce: 2n,
331
+ sender: Buffer.from(StrKey.decodeContract(counterAddress)),
332
+ src_eid: EID,
333
+ };
334
+
335
+ const assembledTx = await executorHelperClient.execute(
336
+ {
337
+ executor: protocolAddresses.executor,
338
+ params: {
339
+ extra_data: Buffer.from([]),
340
+ gas_limit: 0n,
341
+ guid: responseGuid,
342
+ message: responseMessage,
343
+ origin,
344
+ receiver: counterAddress,
345
+ value: 10n, // Response message includes value: 10
346
+ },
347
+ value_payer: EXECUTOR_ADMIN.publicKey(),
348
+ },
349
+ {
350
+ simulate: false, // Don't auto-simulate, we'll do it with record_allow_nonroot
351
+ },
352
+ );
353
+
354
+ // Sign and send using non-root auth flow
355
+ const txResult = await signAndSendWithExecutorAuth(
356
+ protocolAddresses.executor,
357
+ EXECUTOR_ADMIN,
358
+ assembledTx,
359
+ NETWORK_PASSPHRASE,
360
+ );
361
+
362
+ assertTransactionSucceeded(txResult, 'LzReceive (ABA Response)');
363
+
364
+ // Verify the response was received and inbound count increased again
365
+ const { result: inboundCount } = await counterClient.inbound_count({
366
+ eid: EID,
367
+ });
368
+ expect(inboundCount).toBe(2n); // 1 from ABA request + 1 from ABA response
369
+ console.log('✅ ABA response received, total inbound count:', inboundCount);
370
+
371
+ console.log('\n🎉 ABA round-trip completed successfully!');
372
+ console.log(' Request: Counter → Counter (ABA)');
373
+ console.log(' Response: Counter → Counter (Vanilla)');
374
+ });
375
+ });
376
+ });