@layerzerolabs/protocol-stellar-v2 0.2.21 → 0.2.23

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 (328) hide show
  1. package/.turbo/turbo-build.log +347 -271
  2. package/.turbo/turbo-lint.log +277 -208
  3. package/.turbo/turbo-test.log +1700 -1370
  4. package/Cargo.lock +22 -51
  5. package/Cargo.toml +6 -1
  6. package/contracts/common-macros/src/auth.rs +10 -9
  7. package/contracts/common-macros/src/contract_ttl.rs +1 -4
  8. package/contracts/common-macros/src/error.rs +1 -3
  9. package/contracts/common-macros/src/lib.rs +65 -61
  10. package/contracts/common-macros/src/storage.rs +212 -65
  11. package/contracts/common-macros/src/tests/auth.rs +75 -6
  12. package/contracts/common-macros/src/tests/contract_ttl.rs +383 -350
  13. package/contracts/common-macros/src/tests/error.rs +9 -21
  14. package/contracts/common-macros/src/tests/lz_contract.rs +80 -0
  15. package/contracts/common-macros/src/tests/mod.rs +2 -0
  16. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +20 -3
  17. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +28 -1
  18. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap +8 -43
  19. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contracttrait_code.snap +6 -29
  20. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__lz_contract__snapshot_generated_lz_contract_code.snap +31 -0
  21. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_extendable__snapshot_generated_ttl_extendable_code.snap +8 -0
  22. package/contracts/common-macros/src/tests/storage/extract_fields.rs +87 -0
  23. package/contracts/common-macros/src/tests/storage/gen_accessor_methods.rs +223 -0
  24. package/contracts/common-macros/src/tests/storage/gen_args.rs +65 -0
  25. package/contracts/common-macros/src/tests/storage/gen_enum_variant.rs +78 -0
  26. package/contracts/common-macros/src/tests/storage/gen_key.rs +108 -0
  27. package/contracts/common-macros/src/tests/storage/gen_params.rs +105 -0
  28. package/contracts/common-macros/src/tests/{storage.rs → storage/generate_storage.rs} +54 -129
  29. package/contracts/common-macros/src/tests/storage/is_primitive_type.rs +48 -0
  30. package/contracts/common-macros/src/tests/storage/mod.rs +16 -0
  31. package/contracts/common-macros/src/tests/storage/parse_default.rs +164 -0
  32. package/contracts/common-macros/src/tests/storage/parse_name.rs +159 -0
  33. package/contracts/common-macros/src/tests/storage/parse_no_ttl_extension.rs +124 -0
  34. package/contracts/common-macros/src/tests/storage/parse_storage_type.rs +174 -0
  35. package/contracts/common-macros/src/tests/storage/snapshots/common_macros__tests__storage__generate_storage__snapshot_generated_storage_code.snap +412 -0
  36. package/contracts/common-macros/src/tests/storage/storage_kind.rs +39 -0
  37. package/contracts/common-macros/src/tests/storage/test_setup.rs +25 -0
  38. package/contracts/common-macros/src/tests/storage/validate_attrs.rs +138 -0
  39. package/contracts/common-macros/src/tests/storage/variant_config.rs +226 -0
  40. package/contracts/common-macros/src/tests/test_helpers.rs +4 -10
  41. package/contracts/common-macros/src/tests/ttl_configurable.rs +2 -2
  42. package/contracts/common-macros/src/tests/ttl_extendable.rs +32 -0
  43. package/contracts/common-macros/src/tests/upgradeable.rs +118 -2
  44. package/contracts/common-macros/src/ttl_configurable.rs +1 -4
  45. package/contracts/common-macros/src/upgradeable.rs +21 -3
  46. package/contracts/endpoint-v2/Cargo.toml +0 -4
  47. package/contracts/endpoint-v2/src/endpoint_v2.rs +37 -17
  48. package/contracts/endpoint-v2/src/errors.rs +26 -1
  49. package/contracts/endpoint-v2/src/interfaces/layerzero_endpoint_v2.rs +1 -1
  50. package/contracts/endpoint-v2/src/interfaces/message_lib_manager.rs +4 -4
  51. package/contracts/endpoint-v2/src/interfaces/messaging_composer.rs +2 -2
  52. package/contracts/endpoint-v2/src/lib.rs +0 -1
  53. package/contracts/endpoint-v2/src/message_lib_manager.rs +39 -8
  54. package/contracts/endpoint-v2/src/messaging_channel.rs +36 -4
  55. package/contracts/endpoint-v2/src/messaging_composer.rs +18 -4
  56. package/contracts/endpoint-v2/src/storage.rs +9 -1
  57. package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +2 -2
  58. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +1 -1
  59. package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +2 -2
  60. package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +3 -3
  61. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +5 -5
  62. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +2 -2
  63. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +5 -5
  64. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +3 -3
  65. package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +1 -1
  66. package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +4 -3
  67. package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +7 -2
  68. package/contracts/endpoint-v2/src/tests/messaging_composer/mod.rs +4 -0
  69. package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +7 -2
  70. package/contracts/layerzero-views/src/layerzero_view.rs +0 -1
  71. package/contracts/layerzero-views/src/tests/mod.rs +1 -0
  72. package/contracts/layerzero-views/src/tests/types_tests.rs +31 -0
  73. package/contracts/layerzero-views/src/types.rs +2 -3
  74. package/contracts/macro-integration-tests/tests/runtime/contract_ttl/constructor.rs +61 -0
  75. package/contracts/macro-integration-tests/tests/runtime/contract_ttl/contract_impl_ttl_extension.rs +97 -0
  76. package/contracts/macro-integration-tests/tests/runtime/contract_ttl/contract_trait_ttl_extension.rs +99 -0
  77. package/contracts/macro-integration-tests/tests/runtime/contract_ttl/mod.rs +3 -0
  78. package/contracts/macro-integration-tests/tests/runtime/lz_contract/mod.rs +5 -0
  79. package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_default.rs +86 -0
  80. package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_multisig.rs +47 -0
  81. package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_multisig_upgradeable.rs +77 -0
  82. package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_upgradeable.rs +114 -0
  83. package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_upgradeable_no_migration.rs +105 -0
  84. package/contracts/macro-integration-tests/tests/runtime/multisig/admin_entrypoints.rs +242 -0
  85. package/contracts/macro-integration-tests/tests/runtime/multisig/mod.rs +9 -0
  86. package/contracts/macro-integration-tests/tests/runtime/multisig/self_auth.rs +54 -0
  87. package/contracts/macro-integration-tests/tests/runtime/ownable/initialization.rs +13 -0
  88. package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +1 -0
  89. package/contracts/macro-integration-tests/tests/runtime/ownable/ownership_transfer.rs +70 -1
  90. package/contracts/macro-integration-tests/tests/runtime/ownable/two_step_transfer.rs +219 -0
  91. package/contracts/macro-integration-tests/tests/runtime/storage/keyed_roundtrip.rs +41 -0
  92. package/contracts/macro-integration-tests/tests/runtime/storage/ttl_extension.rs +48 -16
  93. package/contracts/macro-integration-tests/tests/runtime/storage/unkeyed_roundtrip.rs +10 -0
  94. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +96 -3
  95. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +4 -0
  96. package/contracts/macro-integration-tests/tests/runtime/ttl_extendable/extend_instance_ttl.rs +64 -0
  97. package/contracts/macro-integration-tests/tests/runtime/ttl_extendable/mod.rs +16 -0
  98. package/contracts/macro-integration-tests/tests/runtime/upgradeable/migrate_guard_and_state.rs +305 -0
  99. package/contracts/macro-integration-tests/tests/runtime/upgradeable/mod.rs +3 -0
  100. package/contracts/macro-integration-tests/tests/runtime/upgradeable/no_migration.rs +59 -0
  101. package/contracts/macro-integration-tests/tests/runtime/upgradeable/upgrade_then_migrate.rs +88 -0
  102. package/contracts/macro-integration-tests/tests/runtime.rs +5 -0
  103. package/contracts/macro-integration-tests/tests/ui/contract_impl/fail/not_impl_item.rs +6 -0
  104. package/contracts/macro-integration-tests/tests/ui/contract_impl/fail/not_impl_item.stderr +7 -0
  105. package/contracts/macro-integration-tests/tests/ui/contract_impl/pass/basic.rs +102 -0
  106. package/contracts/macro-integration-tests/tests/ui/contract_trait/fail/not_a_trait.rs +6 -0
  107. package/contracts/macro-integration-tests/tests/ui/contract_trait/fail/not_a_trait.stderr +7 -0
  108. package/contracts/macro-integration-tests/tests/ui/contract_trait/pass/basic.rs +83 -0
  109. package/contracts/macro-integration-tests/tests/ui/error/fail/discriminant_too_large.rs +11 -0
  110. package/contracts/macro-integration-tests/tests/ui/error/fail/discriminant_too_large.stderr +7 -0
  111. package/contracts/macro-integration-tests/tests/ui/error/fail/non_enum_input.rs +11 -0
  112. package/contracts/macro-integration-tests/tests/ui/error/fail/non_enum_input.stderr +7 -0
  113. package/contracts/macro-integration-tests/tests/ui/error/pass/basic.rs +22 -0
  114. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/invalid_option.rs +6 -0
  115. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/invalid_option.stderr +7 -0
  116. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/multisig_rejects_ownable_api.rs +20 -0
  117. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/multisig_rejects_ownable_api.stderr +20 -0
  118. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/not_a_struct.rs +8 -0
  119. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/not_a_struct.stderr +7 -0
  120. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_invalid_inner_option.rs +10 -0
  121. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_invalid_inner_option.stderr +7 -0
  122. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_missing_internal.rs +20 -0
  123. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_missing_internal.stderr +86 -0
  124. package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/basic.rs +45 -0
  125. package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/multisig.rs +34 -0
  126. package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/multisig_upgradeable.rs +30 -0
  127. package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/upgradeable.rs +39 -0
  128. package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/upgradeable_no_migration.rs +28 -0
  129. package/contracts/macro-integration-tests/tests/ui/multisig/fail/non_struct_input.rs +8 -0
  130. package/contracts/macro-integration-tests/tests/ui/multisig/fail/non_struct_input.stderr +7 -0
  131. package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_api.rs +20 -0
  132. package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_api.stderr +12 -0
  133. package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_trait.rs +20 -0
  134. package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_trait.stderr +5 -0
  135. package/contracts/macro-integration-tests/tests/ui/multisig/pass/basic.rs +49 -0
  136. package/contracts/macro-integration-tests/tests/ui/ownable/fail/non_struct_input.rs +8 -0
  137. package/contracts/macro-integration-tests/tests/ui/ownable/fail/non_struct_input.stderr +7 -0
  138. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_auth.rs +19 -0
  139. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_auth.stderr +12 -0
  140. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.rs +1 -1
  141. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.stderr +0 -8
  142. package/contracts/macro-integration-tests/tests/ui/ownable/pass/basic.rs +39 -0
  143. package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_auth_env_param_variants.rs +7 -1
  144. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.stderr +1 -1
  145. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.stderr +1 -1
  146. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_default_values.rs +11 -0
  147. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_default_values.stderr +7 -0
  148. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_name_attrs.rs +11 -0
  149. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_name_attrs.stderr +7 -0
  150. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_no_ttl_extension.rs +11 -0
  151. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_no_ttl_extension.stderr +7 -0
  152. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.stderr +1 -1
  153. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_rejects_args.rs +13 -0
  154. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_rejects_args.stderr +7 -0
  155. package/contracts/macro-integration-tests/tests/ui/storage/pass/api_surface.rs +102 -0
  156. package/contracts/macro-integration-tests/tests/ui/storage/pass/basic.rs +43 -0
  157. package/contracts/macro-integration-tests/tests/ui/storage/pass/multi_key.rs +38 -0
  158. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/missing_auth_trait.rs +14 -0
  159. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/missing_auth_trait.stderr +71 -0
  160. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/non_struct_input.rs +8 -0
  161. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/non_struct_input.stderr +7 -0
  162. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/{minimal_contract.rs → basic.rs} +2 -0
  163. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/multisig_contract.rs +28 -0
  164. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/ownable_contract.rs +32 -0
  165. package/contracts/macro-integration-tests/tests/ui/ttl_extendable/fail/non_struct_input.rs +8 -0
  166. package/contracts/macro-integration-tests/tests/ui/ttl_extendable/fail/non_struct_input.stderr +7 -0
  167. package/contracts/macro-integration-tests/tests/ui/ttl_extendable/pass/basic.rs +23 -0
  168. package/contracts/macro-integration-tests/tests/ui/ttl_extendable/pass/no_user_contractimpl.rs +21 -0
  169. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/attr_args.rs +11 -0
  170. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/attr_args.stderr +29 -0
  171. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_auth_trait.rs +20 -0
  172. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_auth_trait.stderr +71 -0
  173. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_upgradeable_internal.rs +10 -0
  174. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_upgradeable_internal.stderr +79 -0
  175. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/non_struct_input.rs +8 -0
  176. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/non_struct_input.stderr +7 -0
  177. package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/basic.rs +43 -0
  178. package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/multisig_contract.rs +35 -0
  179. package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/no_migration.rs +30 -0
  180. package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/no_user_contractimpl.rs +29 -0
  181. package/contracts/macro-integration-tests/tests/ui_contract_impl.rs +12 -0
  182. package/contracts/macro-integration-tests/tests/ui_contract_trait.rs +12 -0
  183. package/contracts/macro-integration-tests/tests/ui_lz_contract.rs +11 -0
  184. package/contracts/macro-integration-tests/tests/ui_multisig.rs +11 -0
  185. package/contracts/macro-integration-tests/tests/ui_ttl_extendable.rs +12 -0
  186. package/contracts/macro-integration-tests/tests/ui_upgradeable.rs +11 -0
  187. package/contracts/message-libs/blocked-message-lib/Cargo.toml +1 -1
  188. package/contracts/message-libs/blocked-message-lib/src/lib.rs +4 -1
  189. package/contracts/message-libs/blocked-message-lib/src/tests/blocked_message_lib_tests.rs +108 -0
  190. package/contracts/message-libs/blocked-message-lib/src/tests/mod.rs +4 -0
  191. package/contracts/message-libs/blocked-message-lib/src/tests/setup.rs +40 -0
  192. package/contracts/message-libs/simple-message-lib/src/lib.rs +1 -1
  193. package/contracts/message-libs/simple-message-lib/src/tests/mod.rs +2 -0
  194. package/contracts/message-libs/simple-message-lib/src/tests/setup.rs +124 -0
  195. package/contracts/message-libs/simple-message-lib/src/tests/simple_message_lib_tests.rs +309 -0
  196. package/contracts/message-libs/uln-302/src/errors.rs +21 -0
  197. package/contracts/message-libs/uln-302/src/interfaces/receive_uln.rs +1 -1
  198. package/contracts/message-libs/uln-302/src/receive_uln.rs +6 -4
  199. package/contracts/message-libs/uln-302/src/send_uln.rs +15 -6
  200. package/contracts/message-libs/uln-302/src/storage.rs +5 -5
  201. package/contracts/message-libs/uln-302/src/tests/uln302/get_config.rs +71 -0
  202. package/contracts/message-libs/uln-302/src/tests/uln302/mod.rs +1 -0
  203. package/contracts/message-libs/uln-302/src/uln302.rs +3 -0
  204. package/contracts/oapps/counter/Cargo.toml +2 -0
  205. package/contracts/oapps/counter/integration_tests/mod.rs +1 -0
  206. package/contracts/oapps/counter/integration_tests/setup_sml.rs +6 -4
  207. package/contracts/oapps/counter/integration_tests/setup_uln.rs +12 -5
  208. package/contracts/oapps/counter/integration_tests/test_with_blocked.rs +67 -0
  209. package/contracts/oapps/counter/src/tests/mod.rs +1 -0
  210. package/contracts/oapps/counter/src/tests/test_u256_ext.rs +48 -0
  211. package/contracts/oapps/oapp/src/lib.rs +0 -3
  212. package/contracts/oapps/oapp/src/tests/mod.rs +1 -0
  213. package/contracts/oapps/oft/integration-tests/setup.rs +2 -3
  214. package/contracts/oapps/oft/src/lib.rs +3 -0
  215. package/contracts/oapps/oft/src/tests/extensions/mod.rs +3 -0
  216. package/contracts/oapps/oft/src/tests/extensions/oft_fee.rs +240 -0
  217. package/contracts/oapps/oft/src/tests/extensions/pausable.rs +141 -0
  218. package/contracts/oapps/oft/src/tests/extensions/rate_limiter.rs +447 -0
  219. package/contracts/oapps/oft/src/tests/mod.rs +2 -0
  220. package/contracts/oapps/oft/src/tests/oft_types/lock_unlock.rs +180 -0
  221. package/contracts/oapps/oft/src/tests/oft_types/mod.rs +1 -0
  222. package/contracts/oapps/oft-core/integration-tests/setup.rs +2 -3
  223. package/contracts/oapps/oft-core/src/lib.rs +2 -2
  224. package/contracts/oapps/oft-core/src/tests/mod.rs +1 -1
  225. package/contracts/oapps/oft-core/src/tests/{test_oft_version.rs → test_oft_version_and_approval.rs} +9 -0
  226. package/contracts/oapps/oft-core/src/tests/test_utils.rs +0 -43
  227. package/contracts/upgrader/src/tests/test_upgrader.rs +18 -0
  228. package/contracts/utils/src/auth.rs +2 -2
  229. package/contracts/utils/src/buffer_reader.rs +61 -10
  230. package/contracts/utils/src/buffer_writer.rs +35 -20
  231. package/contracts/utils/src/bytes_ext.rs +1 -2
  232. package/contracts/utils/src/errors.rs +5 -3
  233. package/contracts/utils/src/multisig.rs +59 -36
  234. package/contracts/utils/src/option_ext.rs +3 -3
  235. package/contracts/utils/src/ownable.rs +12 -6
  236. package/contracts/utils/src/tests/auth.rs +179 -0
  237. package/contracts/utils/src/tests/buffer_reader.rs +203 -1
  238. package/contracts/utils/src/tests/buffer_writer.rs +176 -5
  239. package/contracts/utils/src/tests/mod.rs +2 -0
  240. package/contracts/utils/src/tests/multisig.rs +170 -141
  241. package/contracts/utils/src/tests/option_ext.rs +1 -1
  242. package/contracts/utils/src/tests/ownable.rs +156 -161
  243. package/contracts/utils/src/tests/test_helper.rs +21 -1
  244. package/contracts/utils/src/tests/testing_utils.rs +84 -2
  245. package/contracts/utils/src/tests/ttl_configurable.rs +66 -86
  246. package/contracts/utils/src/tests/ttl_extendable.rs +64 -0
  247. package/contracts/utils/src/tests/upgradeable.rs +115 -6
  248. package/contracts/utils/src/ttl_configurable.rs +22 -12
  249. package/contracts/utils/src/ttl_extendable.rs +1 -3
  250. package/contracts/utils/src/upgradeable.rs +21 -24
  251. package/contracts/workers/dvn/src/auth.rs +1 -1
  252. package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
  253. package/contracts/workers/dvn/src/storage.rs +1 -1
  254. package/contracts/workers/dvn/src/tests/auth.rs +136 -3
  255. package/contracts/workers/dvn/src/tests/mod.rs +0 -1
  256. package/contracts/workers/dvn/src/tests/setup.rs +4 -10
  257. package/contracts/workers/executor-helper/src/tests/executor_helper.rs +279 -0
  258. package/contracts/workers/executor-helper/src/tests/setup.rs +106 -1
  259. package/contracts/workers/worker/src/worker.rs +1 -1
  260. package/docs/oft-guide.md +5 -5
  261. package/package.json +5 -7
  262. package/sdk/.turbo/turbo-test.log +662 -466
  263. package/sdk/LICENSE +23 -0
  264. package/sdk/dist/generated/bml.d.ts +101 -106
  265. package/sdk/dist/generated/bml.js +108 -26
  266. package/sdk/dist/generated/counter.d.ts +123 -484
  267. package/sdk/dist/generated/counter.js +103 -25
  268. package/sdk/dist/generated/dvn.d.ts +141 -699
  269. package/sdk/dist/generated/dvn.js +106 -28
  270. package/sdk/dist/generated/dvn_fee_lib.d.ts +31 -248
  271. package/sdk/dist/generated/dvn_fee_lib.js +27 -24
  272. package/sdk/dist/generated/endpoint.d.ts +158 -836
  273. package/sdk/dist/generated/endpoint.js +107 -29
  274. package/sdk/dist/generated/executor.d.ts +139 -671
  275. package/sdk/dist/generated/executor.js +106 -28
  276. package/sdk/dist/generated/executor_fee_lib.d.ts +109 -264
  277. package/sdk/dist/generated/executor_fee_lib.js +106 -28
  278. package/sdk/dist/generated/executor_helper.d.ts +95 -92
  279. package/sdk/dist/generated/executor_helper.js +103 -25
  280. package/sdk/dist/generated/layerzero_view.d.ts +178 -335
  281. package/sdk/dist/generated/layerzero_view.js +172 -33
  282. package/sdk/dist/generated/oft.d.ts +137 -680
  283. package/sdk/dist/generated/oft.js +103 -25
  284. package/sdk/dist/generated/price_feed.d.ts +45 -444
  285. package/sdk/dist/generated/price_feed.js +27 -24
  286. package/sdk/dist/generated/sml.d.ts +119 -428
  287. package/sdk/dist/generated/sml.js +103 -25
  288. package/sdk/dist/generated/treasury.d.ts +109 -288
  289. package/sdk/dist/generated/treasury.js +103 -25
  290. package/sdk/dist/generated/uln302.d.ts +190 -527
  291. package/sdk/dist/generated/uln302.js +170 -31
  292. package/sdk/dist/generated/upgrader.d.ts +14 -34
  293. package/sdk/dist/generated/upgrader.js +24 -21
  294. package/sdk/package.json +3 -4
  295. package/sdk/test/counter-sml.test.ts +218 -142
  296. package/sdk/test/counter-uln.test.ts +189 -145
  297. package/sdk/test/oft-sml.test.ts +173 -156
  298. package/sdk/test/suites/constants.ts +7 -1
  299. package/sdk/test/suites/globalSetup.ts +140 -74
  300. package/sdk/turbo.json +1 -1
  301. package/tools/ts-bindings-gen/Cargo.toml +4 -4
  302. package/tools/ts-bindings-gen/src/main.rs +4 -0
  303. package/turbo.json +3 -0
  304. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +0 -1072
  305. package/contracts/endpoint-v2/src/constants.rs +0 -52
  306. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.rs +0 -12
  307. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.stderr +0 -7
  308. package/contracts/macro-integration-tests/tests/ui/error/pass/attr_on_variant_allowed.rs +0 -20
  309. package/contracts/macro-integration-tests/tests/ui/error/pass/basic_auto_discriminants.rs +0 -15
  310. package/contracts/macro-integration-tests/tests/ui/error/pass/mixed_discriminants.rs +0 -16
  311. package/contracts/macro-integration-tests/tests/ui/ownable/pass/minimal_contract.rs +0 -26
  312. package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +0 -21
  313. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.rs +0 -12
  314. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.stderr +0 -7
  315. package/contracts/macro-integration-tests/tests/ui/storage/pass/default_value_on_variant.rs +0 -14
  316. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_instance_unit_basic.rs +0 -14
  317. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_persistent_named_fields_keyed.rs +0 -16
  318. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_temporary_unit_option.rs +0 -15
  319. package/contracts/macro-integration-tests/tests/ui/storage/pass/name_override.rs +0 -14
  320. package/contracts/macro-integration-tests/tests/ui/storage/pass/no_auto_ttl_extension.rs +0 -19
  321. package/contracts/macro-integration-tests/tests/ui/storage/pass/ttl_provider_basic.rs +0 -15
  322. package/contracts/message-libs/simple-message-lib/src/test.rs +0 -280
  323. package/contracts/oapps/oapp/src/macro_tests/mod.rs +0 -1
  324. package/contracts/workers/dvn/src/tests/multisig/mod.rs +0 -3
  325. package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +0 -132
  326. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +0 -109
  327. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +0 -106
  328. /package/contracts/oapps/oapp/src/{macro_tests → tests}/test_macros.rs +0 -0
@@ -11,31 +11,39 @@ import { Client as ExecutorHelperClient } from '../src/generated/executor_helper
11
11
  import { Client as SMLClient } from '../src/generated/sml';
12
12
  import {
13
13
  DEFAULT_DEPLOYER,
14
- EID,
14
+ EID_A,
15
+ EID_B,
15
16
  EXECUTOR_ADMIN,
16
17
  MSG_TYPE_ABA,
17
18
  MSG_TYPE_VANILLA,
18
19
  NETWORK_PASSPHRASE,
19
20
  } from './suites/constants';
20
21
  import { deployContract } from './suites/deploy';
22
+ import type { ChainAddresses } from './suites/globalSetup';
21
23
  import { PacketSentEvent, scanPacketSentEvents } from './suites/scan';
22
24
  import { assertTransactionSucceeded, createClient, signAndSendWithExecutorAuth } from './utils';
23
25
 
24
- // Protocol addresses (will be injected from globalSetup in beforeAll)
25
- let protocolAddresses: ReturnType<typeof inject<'protocolAddresses'>>;
26
+ // Chain addresses (injected from globalSetup)
27
+ let chainA: ChainAddresses;
28
+ let chainB: ChainAddresses;
26
29
 
27
- // Counter-specific address
28
- let counterAddress = '';
30
+ // Counter addresses (deployed per-chain)
31
+ let counterAAddress = '';
32
+ let counterBAddress = '';
29
33
 
30
- // Clients
31
- let endpointClient: EndpointClient;
32
- let smlClient: SMLClient;
33
- let counterClient: CounterClient;
34
- let executorHelperClient: ExecutorHelperClient;
34
+ // Chain A Clients
35
+ let endpointClientA: EndpointClient;
36
+ let smlClientA: SMLClient;
37
+ let counterClientA: CounterClient;
38
+ let executorHelperClientA: ExecutorHelperClient;
35
39
 
36
- // NOTE: run `stellar contract build --features sandbox` before running the test
40
+ // Chain B Clients
41
+ let endpointClientB: EndpointClient;
42
+ let smlClientB: SMLClient;
43
+ let counterClientB: CounterClient;
44
+ let executorHelperClientB: ExecutorHelperClient;
37
45
 
38
- describe('Counter with SML testing', async () => {
46
+ describe('Counter Cross-Chain Testing (SML)', async () => {
39
47
  const repoRoot = await getFullyQualifiedRepoRootPath();
40
48
  const wasmDir = path.join(
41
49
  repoRoot,
@@ -50,96 +58,170 @@ describe('Counter with SML testing', async () => {
50
58
  const COUNTER_WASM_PATH = path.join(wasmDir, 'counter.wasm');
51
59
 
52
60
  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);
61
+ // Inject chain addresses from globalSetup
62
+ chainA = inject('chainA');
63
+ chainB = inject('chainB');
64
+
65
+ console.log('\n📋 Chain A addresses (EID: ' + EID_A + ')');
66
+ console.log(' Endpoint:', chainA.endpointV2);
67
+ console.log(' SML:', chainA.sml);
68
+ console.log(' Executor:', chainA.executor);
69
+
70
+ console.log('\n📋 Chain B addresses (EID: ' + EID_B + ')');
71
+ console.log(' Endpoint:', chainB.endpointV2);
72
+ console.log(' SML:', chainB.sml);
73
+ console.log(' Executor:', chainB.executor);
74
+
75
+ // Create clients for Chain A protocol contracts
76
+ endpointClientA = createClient(EndpointClient, chainA.endpointV2);
77
+ smlClientA = createClient(SMLClient, chainA.sml);
78
+ executorHelperClientA = createClient(ExecutorHelperClient, chainA.executorHelper);
79
+
80
+ // Create clients for Chain B protocol contracts
81
+ endpointClientB = createClient(EndpointClient, chainB.endpointV2);
82
+ smlClientB = createClient(SMLClient, chainB.sml);
83
+ executorHelperClientB = createClient(ExecutorHelperClient, chainB.executorHelper);
66
84
  });
67
85
 
68
- describe('Deploy Counter', () => {
69
- it('Deploy Counter', async () => {
70
- counterClient = await deployContract<CounterClient>(
86
+ describe('Deploy Counters on Both Chains', () => {
87
+ it('Deploy Counter A on Chain A', async () => {
88
+ counterClientA = await deployContract<CounterClient>(
71
89
  CounterClient,
72
90
  COUNTER_WASM_PATH,
73
91
  {
74
92
  owner: DEFAULT_DEPLOYER.publicKey(),
75
- endpoint: protocolAddresses.endpointV2,
93
+ endpoint: chainA.endpointV2,
76
94
  delegate: DEFAULT_DEPLOYER.publicKey(),
77
95
  },
78
96
  DEFAULT_DEPLOYER,
79
97
  );
80
98
 
81
- counterAddress = counterClient.options.contractId;
82
- console.log('✅ Counter deployed:', counterAddress);
99
+ counterAAddress = counterClientA.options.contractId;
100
+ console.log('✅ Counter A deployed on Chain A:', counterAAddress);
101
+ });
102
+
103
+ it('Deploy Counter B on Chain B', async () => {
104
+ counterClientB = await deployContract<CounterClient>(
105
+ CounterClient,
106
+ COUNTER_WASM_PATH,
107
+ {
108
+ owner: DEFAULT_DEPLOYER.publicKey(),
109
+ endpoint: chainB.endpointV2,
110
+ delegate: DEFAULT_DEPLOYER.publicKey(),
111
+ },
112
+ DEFAULT_DEPLOYER,
113
+ );
114
+
115
+ counterBAddress = counterClientB.options.contractId;
116
+ console.log('✅ Counter B deployed on Chain B:', counterBAddress);
83
117
  });
84
118
  });
85
119
 
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({
120
+ describe('Wire Counters to use SML (Cross-Chain)', () => {
121
+ it('Set Counter A Send Library to SML (for sending to Chain B)', async () => {
122
+ const assembledTx = await endpointClientA.set_send_library({
123
+ caller: DEFAULT_DEPLOYER.publicKey(),
124
+ sender: counterAAddress,
125
+ dst_eid: EID_B,
126
+ new_lib: chainA.sml,
127
+ });
128
+ await assembledTx.signAndSend();
129
+
130
+ const { result: sendLib } = await endpointClientA.get_send_library({
131
+ sender: counterAAddress,
132
+ dst_eid: EID_B,
133
+ });
134
+ expect(sendLib.lib).toBe(chainA.sml);
135
+ console.log('✅ Counter A send library set to SML for EID_B');
136
+ });
137
+
138
+ it('Set Counter A Receive Library to SML (for receiving from Chain B)', async () => {
139
+ const assembledTx = await endpointClientA.set_receive_library({
140
+ caller: DEFAULT_DEPLOYER.publicKey(),
141
+ receiver: counterAAddress,
142
+ src_eid: EID_B,
143
+ new_lib: chainA.sml,
144
+ grace_period: 0n,
145
+ });
146
+ await assembledTx.signAndSend();
147
+
148
+ const { result: receiveLib } = await endpointClientA.get_receive_library({
149
+ receiver: counterAAddress,
150
+ src_eid: EID_B,
151
+ });
152
+ expect(receiveLib.lib).toBe(chainA.sml);
153
+ console.log('✅ Counter A receive library set to SML for EID_B');
154
+ });
155
+
156
+ it('Set Counter B Send Library to SML (for sending to Chain A)', async () => {
157
+ const assembledTx = await endpointClientB.set_send_library({
90
158
  caller: DEFAULT_DEPLOYER.publicKey(),
91
- sender: counterAddress,
92
- dst_eid: EID,
93
- new_lib: protocolAddresses.sml,
159
+ sender: counterBAddress,
160
+ dst_eid: EID_A,
161
+ new_lib: chainB.sml,
94
162
  });
95
163
  await assembledTx.signAndSend();
96
164
 
97
- const { result: sendLib } = await endpointClient.get_send_library({
98
- sender: counterAddress,
99
- dst_eid: EID,
165
+ const { result: sendLib } = await endpointClientB.get_send_library({
166
+ sender: counterBAddress,
167
+ dst_eid: EID_A,
100
168
  });
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');
169
+ expect(sendLib.lib).toBe(chainB.sml);
170
+ console.log('✅ Counter B send library set to SML for EID_A');
104
171
  });
105
172
 
106
- it('Set Counter Receive Library to SML', async () => {
107
- const assembledTx = await endpointClient.set_receive_library({
173
+ it('Set Counter B Receive Library to SML (for receiving from Chain A)', async () => {
174
+ const assembledTx = await endpointClientB.set_receive_library({
108
175
  caller: DEFAULT_DEPLOYER.publicKey(),
109
- receiver: counterAddress,
110
- src_eid: EID,
111
- new_lib: protocolAddresses.sml,
176
+ receiver: counterBAddress,
177
+ src_eid: EID_A,
178
+ new_lib: chainB.sml,
112
179
  grace_period: 0n,
113
180
  });
114
181
  await assembledTx.signAndSend();
115
182
 
116
- const { result: receiveLib } = await endpointClient.get_receive_library({
117
- receiver: counterAddress,
118
- src_eid: EID,
183
+ const { result: receiveLib } = await endpointClientB.get_receive_library({
184
+ receiver: counterBAddress,
185
+ src_eid: EID_A,
186
+ });
187
+ expect(receiveLib.lib).toBe(chainB.sml);
188
+ console.log('✅ Counter B receive library set to SML for EID_A');
189
+ });
190
+
191
+ it('Set Counter A Peer to Counter B', async () => {
192
+ const peerBBytes = StrKey.decodeContract(counterBAddress);
193
+
194
+ const assembledTx = await counterClientA.set_peer({
195
+ eid: EID_B,
196
+ peer: Buffer.from(peerBBytes),
197
+ });
198
+ await assembledTx.signAndSend();
199
+
200
+ const { result: peer } = await counterClientA.peer({
201
+ eid: EID_B,
119
202
  });
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');
203
+ expect(peer?.toString()).toBe(Buffer.from(peerBBytes).toString());
204
+ console.log('✅ Counter A peer set to Counter B for EID_B');
123
205
  });
124
206
 
125
- it('Set Counter Peer', async () => {
126
- const peerBytes = StrKey.decodeContract(counterAddress);
207
+ it('Set Counter B Peer to Counter A', async () => {
208
+ const peerABytes = StrKey.decodeContract(counterAAddress);
127
209
 
128
- const assembledTx = await counterClient.set_peer({
129
- eid: EID,
130
- peer: Buffer.from(peerBytes),
210
+ const assembledTx = await counterClientB.set_peer({
211
+ eid: EID_A,
212
+ peer: Buffer.from(peerABytes),
131
213
  });
132
214
  await assembledTx.signAndSend();
133
215
 
134
- const { result: peer } = await counterClient.peer({
135
- eid: EID,
216
+ const { result: peer } = await counterClientB.peer({
217
+ eid: EID_A,
136
218
  });
137
- expect(peer?.toString()).toBe(Buffer.from(peerBytes).toString());
138
- console.log('✅ Counter peer set for EID', EID);
219
+ expect(peer?.toString()).toBe(Buffer.from(peerABytes).toString());
220
+ console.log('✅ Counter B peer set to Counter A for EID_A');
139
221
  });
140
222
  });
141
223
 
142
- describe('Counter ABA Messaging', async () => {
224
+ describe('Cross-Chain ABA Messaging (A → B → A)', async () => {
143
225
  let incrementLedger = 0;
144
226
  let responseLedger = 0;
145
227
  let packetSentEvent: PacketSentEvent;
@@ -150,17 +232,17 @@ describe('Counter with SML testing', async () => {
150
232
  let responseMessage: Buffer;
151
233
  let abaReturnFee: bigint;
152
234
 
153
- it('Counter Increment (ABA)', async () => {
154
- // First quote the return fee (for the ABA to send back a response message)
235
+ it('Counter A Increment (ABA) - sends to Chain B', async () => {
236
+ // Quote the return fee (for Counter B to send response back to Chain A)
155
237
  const returnOptions = Options.newOptions().addExecutorLzReceiveOption(200000n, 0n);
156
238
 
157
- const { result: returnFee } = await counterClient.quote({
158
- dst_eid: EID,
239
+ const { result: returnFee } = await counterClientB.quote({
240
+ dst_eid: EID_A,
159
241
  msg_type: MSG_TYPE_VANILLA,
160
242
  options: Buffer.from(returnOptions.toBytes()),
161
243
  pay_in_zro: false,
162
244
  });
163
- console.log('✅ Return fee for ABA:', returnFee);
245
+ console.log('✅ Return fee for ABA (B→A):', returnFee);
164
246
 
165
247
  // Add 1% buffer to the return fee
166
248
  abaReturnFee = (returnFee.native_fee * 101n) / 100n;
@@ -172,82 +254,79 @@ describe('Counter with SML testing', async () => {
172
254
  );
173
255
  const optionsBuffer = Buffer.from(abaOptions.toBytes());
174
256
 
175
- const { result: fee } = await counterClient.quote({
176
- dst_eid: EID,
257
+ const { result: fee } = await counterClientA.quote({
258
+ dst_eid: EID_B,
177
259
  msg_type: MSG_TYPE_ABA,
178
260
  options: optionsBuffer,
179
261
  pay_in_zro: true,
180
262
  });
181
- console.log('✅ ABA Fee:', fee);
263
+ console.log('✅ ABA Fee (A→B):', fee);
182
264
 
183
- const assembledTx = await counterClient.increment({
265
+ const assembledTx = await counterClientA.increment({
184
266
  caller: DEFAULT_DEPLOYER.publicKey(),
185
- dst_eid: EID,
267
+ dst_eid: EID_B,
186
268
  msg_type: MSG_TYPE_ABA,
187
269
  options: optionsBuffer,
188
270
  fee: fee,
189
271
  });
190
272
  const sentTx = await assembledTx.signAndSend();
191
273
 
192
- // Extract ledger number from transaction response
193
274
  const txResponse = sentTx.getTransactionResponse;
194
275
  if (txResponse && 'ledger' in txResponse) {
195
276
  incrementLedger = txResponse.ledger;
196
277
  }
197
278
 
198
- const { result: outboundCount } = await counterClient.outbound_count({
199
- eid: EID,
279
+ const { result: outboundCount } = await counterClientA.outbound_count({
280
+ eid: EID_B,
200
281
  });
201
282
  expect(outboundCount).toBe(1n);
202
- console.log('✅ Counter incremented (ABA), outbound count:', outboundCount);
283
+ console.log('✅ Counter A incremented (ABA to B), outbound count:', outboundCount);
203
284
  });
204
285
 
205
- it('Scan PacketSent Events', async () => {
206
- const packetSentEvents = await scanPacketSentEvents(
207
- protocolAddresses.endpointV2,
208
- incrementLedger,
209
- );
286
+ it('Scan PacketSent Events (A → B)', async () => {
287
+ const packetSentEvents = await scanPacketSentEvents(chainA.endpointV2, incrementLedger);
210
288
  expect(packetSentEvents.length).toBeGreaterThan(0);
211
289
  packetSentEvent = packetSentEvents[0];
212
290
  console.log(
213
- `✅ PacketSent events scanned successfully. Found ${packetSentEvents.length} events`,
291
+ `✅ PacketSent events scanned from Chain A. Found ${packetSentEvents.length} events`,
214
292
  );
215
293
  });
216
294
 
217
- it('Verify Counter Message', async () => {
295
+ it('Verify Counter Message on Chain B (via SML)', async () => {
218
296
  const packet = PacketSerializer.deserialize(packetSentEvent.encoded_packet);
219
297
  guid = Buffer.from(packet.guid.replace('0x', ''), 'hex');
220
298
  message = Buffer.from(packet.message.replace('0x', ''), 'hex');
221
299
  const codec = PacketV1Codec.from(packet);
222
300
  const packetHeader = codec.header();
223
301
  const payloadHash = codec.payloadHash();
224
- const assembledTx = await smlClient.validate_packet({
302
+
303
+ // Validate on Chain B's SML
304
+ const assembledTx = await smlClientB.validate_packet({
225
305
  header_bytes: Buffer.from(packetHeader.replace('0x', ''), 'hex'),
226
306
  payload_hash: Buffer.from(payloadHash.replace('0x', ''), 'hex'),
227
307
  });
228
308
  await assembledTx.signAndSend();
229
- console.log('✅ ABA request packet validated');
309
+ console.log('✅ ABA request packet validated on Chain B');
230
310
  });
231
311
 
232
- it('Receive Counter Message (ABA - triggers response)', async () => {
233
- // ABA message: receives message and automatically sends response
312
+ it('Receive Counter Message on Chain B (ABA - triggers response to A)', async () => {
234
313
  const origin = {
235
314
  nonce: 1n,
236
- sender: Buffer.from(StrKey.decodeContract(counterAddress)),
237
- src_eid: EID,
315
+ sender: Buffer.from(StrKey.decodeContract(counterAAddress)),
316
+ src_eid: EID_A,
238
317
  };
239
318
 
240
- const assembledTx = await executorHelperClient.native_drop_and_execute(
319
+ // Execute on Chain B using Chain B's executor
320
+ const assembledTx = await executorHelperClientB.native_drop_and_execute(
241
321
  {
242
- executor: protocolAddresses.executor,
322
+ executor: chainB.executor,
243
323
  admin: EXECUTOR_ADMIN.publicKey(),
244
324
  origin,
245
- dst_eid: EID,
246
- oapp: counterAddress,
247
- // Native drop: send 100 stroops to counter contract
325
+ dst_eid: EID_B,
326
+ oapp: counterBAddress,
248
327
  native_drop_params: [
249
328
  {
250
- receiver: counterAddress,
329
+ receiver: counterBAddress,
251
330
  amount: 100n,
252
331
  },
253
332
  ],
@@ -257,120 +336,117 @@ describe('Counter with SML testing', async () => {
257
336
  guid,
258
337
  message,
259
338
  origin,
260
- receiver: counterAddress,
261
- value: abaReturnFee, // Value that will be used as fee for the ABA response
339
+ receiver: counterBAddress,
340
+ value: abaReturnFee,
262
341
  },
263
342
  },
264
343
  {
265
- simulate: false, // Don't auto-simulate, we'll do it with record_allow_nonroot
344
+ simulate: false,
266
345
  },
267
346
  );
268
347
 
269
- // Sign and send using non-root auth flow
270
348
  const txResult = await signAndSendWithExecutorAuth(
271
- protocolAddresses.executor,
349
+ chainB.executor,
272
350
  EXECUTOR_ADMIN,
273
351
  assembledTx,
274
352
  NETWORK_PASSPHRASE,
275
353
  );
276
354
 
277
- assertTransactionSucceeded(txResult, 'LzReceive (ABA)');
355
+ assertTransactionSucceeded(txResult, 'LzReceive on Chain B (ABA)');
278
356
 
279
357
  if ('ledger' in txResult) {
280
358
  responseLedger = txResult.ledger;
281
359
  }
282
360
 
283
- // Verify the ABA message was received and inbound count increased
284
- const { result: inboundCount } = await counterClient.inbound_count({
285
- eid: EID,
361
+ // Verify Counter B received the message
362
+ const { result: inboundCount } = await counterClientB.inbound_count({
363
+ eid: EID_A,
286
364
  });
287
365
  expect(inboundCount).toBe(1n);
288
366
 
289
- // Verify the outbound count increased (ABA response was sent)
290
- const { result: outboundCount } = await counterClient.outbound_count({
291
- eid: EID,
367
+ // Verify Counter B sent the response back to Chain A
368
+ const { result: outboundCount } = await counterClientB.outbound_count({
369
+ eid: EID_A,
292
370
  });
293
- expect(outboundCount).toBe(2n); // 1 from initial increment + 1 from ABA response
371
+ expect(outboundCount).toBe(1n);
294
372
  console.log(
295
- '✅ ABA message received and response sent, outbound count:',
373
+ '✅ Counter B received ABA message and sent response, outbound count:',
296
374
  outboundCount,
297
375
  );
298
376
  });
299
377
 
300
- it('Scan ABA Response PacketSent Events', async () => {
301
- const packetSentEvents = await scanPacketSentEvents(
302
- protocolAddresses.endpointV2,
303
- responseLedger,
304
- );
378
+ it('Scan ABA Response PacketSent Events (B → A)', async () => {
379
+ const packetSentEvents = await scanPacketSentEvents(chainB.endpointV2, responseLedger);
305
380
  expect(packetSentEvents.length).toBeGreaterThan(0);
306
381
  responsePacketSentEvent = packetSentEvents[0];
307
382
  console.log(
308
- `✅ ABA response PacketSent events scanned. Found ${packetSentEvents.length} events`,
383
+ `✅ ABA response PacketSent events scanned from Chain B. Found ${packetSentEvents.length} events`,
309
384
  );
310
385
  });
311
386
 
312
- it('Verify ABA Response Message', async () => {
387
+ it('Verify ABA Response Message on Chain A (via SML)', async () => {
313
388
  const packet = PacketSerializer.deserialize(responsePacketSentEvent.encoded_packet);
314
389
  responseGuid = Buffer.from(packet.guid.replace('0x', ''), 'hex');
315
390
  responseMessage = Buffer.from(packet.message.replace('0x', ''), 'hex');
316
391
  const codec = PacketV1Codec.from(packet);
317
392
  const packetHeader = codec.header();
318
393
  const payloadHash = codec.payloadHash();
319
- const assembledTx = await smlClient.validate_packet({
394
+
395
+ // Validate on Chain A's SML
396
+ const assembledTx = await smlClientA.validate_packet({
320
397
  header_bytes: Buffer.from(packetHeader.replace('0x', ''), 'hex'),
321
398
  payload_hash: Buffer.from(payloadHash.replace('0x', ''), 'hex'),
322
399
  });
323
400
  await assembledTx.signAndSend();
324
- console.log('✅ ABA response packet validated');
401
+ console.log('✅ ABA response packet validated on Chain A');
325
402
  });
326
403
 
327
- it('Receive ABA Response Message', async () => {
328
- // Receive the response message (vanilla type)
404
+ it('Receive ABA Response Message on Chain A', async () => {
329
405
  const origin = {
330
- nonce: 2n,
331
- sender: Buffer.from(StrKey.decodeContract(counterAddress)),
332
- src_eid: EID,
406
+ nonce: 1n,
407
+ sender: Buffer.from(StrKey.decodeContract(counterBAddress)),
408
+ src_eid: EID_B,
333
409
  };
334
410
 
335
- const assembledTx = await executorHelperClient.execute(
411
+ // Execute on Chain A using Chain A's executor
412
+ const assembledTx = await executorHelperClientA.execute(
336
413
  {
337
- executor: protocolAddresses.executor,
414
+ executor: chainA.executor,
338
415
  params: {
339
416
  extra_data: Buffer.from([]),
340
417
  gas_limit: 0n,
341
418
  guid: responseGuid,
342
419
  message: responseMessage,
343
420
  origin,
344
- receiver: counterAddress,
345
- value: 10n, // Response message includes value: 10
421
+ receiver: counterAAddress,
422
+ value: 10n,
346
423
  },
347
424
  value_payer: EXECUTOR_ADMIN.publicKey(),
348
425
  },
349
426
  {
350
- simulate: false, // Don't auto-simulate, we'll do it with record_allow_nonroot
427
+ simulate: false,
351
428
  },
352
429
  );
353
430
 
354
- // Sign and send using non-root auth flow
355
431
  const txResult = await signAndSendWithExecutorAuth(
356
- protocolAddresses.executor,
432
+ chainA.executor,
357
433
  EXECUTOR_ADMIN,
358
434
  assembledTx,
359
435
  NETWORK_PASSPHRASE,
360
436
  );
361
437
 
362
- assertTransactionSucceeded(txResult, 'LzReceive (ABA Response)');
438
+ assertTransactionSucceeded(txResult, 'LzReceive on Chain A (ABA Response)');
363
439
 
364
- // Verify the response was received and inbound count increased again
365
- const { result: inboundCount } = await counterClient.inbound_count({
366
- eid: EID,
440
+ // Verify Counter A received the response
441
+ const { result: inboundCount } = await counterClientA.inbound_count({
442
+ eid: EID_B,
367
443
  });
368
- expect(inboundCount).toBe(2n); // 1 from ABA request + 1 from ABA response
369
- console.log('✅ ABA response received, total inbound count:', inboundCount);
444
+ expect(inboundCount).toBe(1n);
445
+ console.log('✅ Counter A received ABA response, inbound count:', inboundCount);
370
446
 
371
- console.log('\n🎉 ABA round-trip completed successfully!');
372
- console.log(' Request: Counter → Counter (ABA)');
373
- console.log(' Response: Counter → Counter (Vanilla)');
447
+ console.log('\n🎉 Cross-chain ABA round-trip completed successfully!');
448
+ console.log(' Request: Counter A (Chain A) → Counter B (Chain B) [ABA]');
449
+ console.log(' Response: Counter B (Chain B) → Counter A (Chain A) [Vanilla]');
374
450
  });
375
451
  });
376
452
  });