@layerzerolabs/protocol-stellar-v2 0.2.13 → 0.2.18

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 (435) hide show
  1. package/.turbo/turbo-build.log +484 -337
  2. package/.turbo/turbo-lint.log +126 -56
  3. package/.turbo/turbo-test.log +1403 -984
  4. package/Cargo.lock +142 -3
  5. package/Cargo.toml +5 -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 +219 -29
  10. package/contracts/common-macros/src/lz_contract.rs +83 -0
  11. package/contracts/common-macros/src/storage.rs +1 -1
  12. package/contracts/common-macros/src/tests/{ownable.rs → auth.rs} +48 -15
  13. package/contracts/common-macros/src/tests/contract_ttl.rs +662 -0
  14. package/contracts/common-macros/src/tests/mod.rs +3 -2
  15. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +20 -0
  16. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +24 -0
  17. 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
  18. 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} +26 -10
  19. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contracttrait_code.snap +69 -0
  20. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +48 -48
  21. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +7 -41
  22. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +21 -0
  23. package/contracts/common-macros/src/tests/upgradeable.rs +31 -0
  24. package/contracts/common-macros/src/ttl_configurable.rs +21 -66
  25. package/contracts/common-macros/src/ttl_extendable.rs +36 -0
  26. package/contracts/common-macros/src/upgradeable.rs +76 -0
  27. package/contracts/common-macros/src/utils.rs +9 -0
  28. package/contracts/endpoint-v2/src/constants.rs +4 -4
  29. package/contracts/endpoint-v2/src/endpoint_v2.rs +58 -36
  30. package/contracts/endpoint-v2/src/errors.rs +4 -3
  31. package/contracts/endpoint-v2/src/events.rs +1 -1
  32. package/contracts/endpoint-v2/src/message_lib_manager.rs +18 -5
  33. package/contracts/endpoint-v2/src/messaging_channel.rs +11 -1
  34. package/contracts/endpoint-v2/src/messaging_composer.rs +11 -1
  35. package/contracts/endpoint-v2/src/storage.rs +1 -1
  36. package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +175 -8
  37. package/contracts/endpoint-v2/src/tests/endpoint_v2/build_outbound_packet.rs +76 -0
  38. package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +342 -159
  39. package/contracts/endpoint-v2/src/tests/endpoint_v2/delegate.rs +3 -15
  40. package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +20 -31
  41. package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +126 -164
  42. package/contracts/endpoint-v2/src/tests/endpoint_v2/mod.rs +1 -0
  43. package/contracts/endpoint-v2/src/tests/endpoint_v2/native_token.rs +0 -1
  44. package/contracts/endpoint-v2/src/tests/endpoint_v2/owner.rs +0 -1
  45. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +311 -304
  46. package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +423 -96
  47. package/contracts/endpoint-v2/src/tests/endpoint_v2/recover_token.rs +1 -1
  48. package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +47 -20
  49. package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +373 -403
  50. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +96 -22
  51. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +62 -10
  52. package/contracts/endpoint-v2/src/tests/endpoint_v2/transfer_ownership.rs +4 -4
  53. package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +8 -11
  54. package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +81 -30
  55. package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +209 -76
  56. package/contracts/endpoint-v2/src/tests/endpoint_v2/zro.rs +0 -1
  57. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library.rs +24 -0
  58. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library_timeout.rs +40 -0
  59. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_send_library.rs +24 -0
  60. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_config.rs +108 -0
  61. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_library_index.rs +52 -0
  62. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_receive_library.rs +92 -0
  63. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_registered_libraries.rs +74 -0
  64. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_send_library.rs +83 -0
  65. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_registered_library.rs +32 -0
  66. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_supported_eid.rs +28 -0
  67. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_valid_receive_library.rs +261 -0
  68. package/contracts/endpoint-v2/src/tests/message_lib_manager/mod.rs +16 -0
  69. package/contracts/endpoint-v2/src/tests/message_lib_manager/receive_library_timeout.rs +62 -0
  70. package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +65 -43
  71. package/contracts/endpoint-v2/src/tests/message_lib_manager/registered_libraries_count.rs +42 -0
  72. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +61 -0
  73. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +4 -6
  74. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +59 -0
  75. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +16 -2
  76. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_config.rs +155 -51
  77. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +114 -92
  78. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +235 -132
  79. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +93 -87
  80. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +346 -245
  81. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +406 -60
  82. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +252 -78
  83. package/contracts/endpoint-v2/src/tests/message_lib_manager/timeout.rs +102 -0
  84. package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +212 -273
  85. package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +203 -0
  86. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +94 -0
  87. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_nonce.rs +78 -248
  88. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +7 -282
  89. package/contracts/endpoint-v2/src/tests/messaging_channel/lazy_inbound_nonce.rs +6 -274
  90. package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +3 -2
  91. package/contracts/endpoint-v2/src/tests/messaging_channel/next_guid.rs +86 -178
  92. package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +328 -212
  93. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound.rs +68 -0
  94. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound_nonce.rs +6 -209
  95. package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +207 -159
  96. package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +142 -153
  97. package/contracts/endpoint-v2/src/tests/messaging_composer/compose_queue.rs +6 -179
  98. package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +163 -221
  99. package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +90 -121
  100. package/contracts/endpoint-v2/src/tests/mock.rs +18 -4
  101. package/contracts/endpoint-v2/src/tests/util/build_payload.rs +4 -70
  102. package/contracts/endpoint-v2/src/tests/util/compute_guid.rs +2 -1
  103. package/contracts/endpoint-v2/src/tests/util/keccak256.rs +17 -106
  104. package/contracts/layerzero-views/Cargo.toml +35 -0
  105. package/contracts/layerzero-views/src/errors.rs +10 -0
  106. package/contracts/layerzero-views/src/layerzero_view.rs +226 -0
  107. package/contracts/layerzero-views/src/lib.rs +38 -0
  108. package/contracts/layerzero-views/src/storage.rs +18 -0
  109. package/contracts/layerzero-views/src/tests/layerzero_view_tests.rs +423 -0
  110. package/contracts/layerzero-views/src/tests/mod.rs +4 -0
  111. package/contracts/layerzero-views/src/tests/setup.rs +377 -0
  112. package/contracts/layerzero-views/src/types.rs +50 -0
  113. package/contracts/macro-integration-tests/Cargo.toml +30 -0
  114. package/contracts/macro-integration-tests/src/lib.rs +1 -0
  115. package/contracts/macro-integration-tests/tests/runtime/ownable/initialization.rs +62 -0
  116. package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +22 -0
  117. package/contracts/macro-integration-tests/tests/runtime/ownable/only_auth_guard.rs +97 -0
  118. package/contracts/macro-integration-tests/tests/runtime/ownable/ownership_transfer.rs +101 -0
  119. package/contracts/macro-integration-tests/tests/runtime/storage/keyed_roundtrip.rs +225 -0
  120. package/contracts/macro-integration-tests/tests/runtime/storage/mod.rs +4 -0
  121. package/contracts/macro-integration-tests/tests/runtime/storage/name_override_runtime.rs +52 -0
  122. package/contracts/macro-integration-tests/tests/runtime/storage/ttl_extension.rs +261 -0
  123. package/contracts/macro-integration-tests/tests/runtime/storage/unkeyed_roundtrip.rs +137 -0
  124. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +113 -0
  125. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +139 -0
  126. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +2 -0
  127. package/contracts/macro-integration-tests/tests/runtime.rs +5 -0
  128. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.rs +12 -0
  129. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.stderr +7 -0
  130. package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.rs +12 -0
  131. package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.stderr +7 -0
  132. package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.rs +21 -0
  133. package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.stderr +7 -0
  134. package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.rs +13 -0
  135. package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.stderr +7 -0
  136. package/contracts/macro-integration-tests/tests/ui/error/pass/attr_on_variant_allowed.rs +20 -0
  137. package/contracts/macro-integration-tests/tests/ui/error/pass/basic_auto_discriminants.rs +15 -0
  138. package/contracts/macro-integration-tests/tests/ui/error/pass/mixed_discriminants.rs +16 -0
  139. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.rs +22 -0
  140. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.stderr +16 -0
  141. package/contracts/macro-integration-tests/tests/ui/ownable/pass/minimal_contract.rs +26 -0
  142. package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +21 -0
  143. package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_auth_env_param_variants.rs +46 -0
  144. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.rs +13 -0
  145. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.stderr +7 -0
  146. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.rs +13 -0
  147. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.stderr +7 -0
  148. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.rs +10 -0
  149. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.stderr +7 -0
  150. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.rs +12 -0
  151. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.stderr +7 -0
  152. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.rs +10 -0
  153. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.stderr +7 -0
  154. package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.rs +10 -0
  155. package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.stderr +7 -0
  156. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.rs +12 -0
  157. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.stderr +7 -0
  158. package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.rs +13 -0
  159. package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.stderr +7 -0
  160. package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.rs +13 -0
  161. package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.stderr +7 -0
  162. package/contracts/macro-integration-tests/tests/ui/storage/pass/default_value_on_variant.rs +14 -0
  163. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_instance_unit_basic.rs +14 -0
  164. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_persistent_named_fields_keyed.rs +16 -0
  165. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_temporary_unit_option.rs +15 -0
  166. package/contracts/macro-integration-tests/tests/ui/storage/pass/name_override.rs +14 -0
  167. package/contracts/macro-integration-tests/tests/ui/storage/pass/no_auto_ttl_extension.rs +19 -0
  168. package/contracts/macro-integration-tests/tests/ui/storage/pass/ttl_provider_basic.rs +15 -0
  169. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +44 -0
  170. package/contracts/macro-integration-tests/tests/ui_error.rs +11 -0
  171. package/contracts/macro-integration-tests/tests/ui_ownable.rs +11 -0
  172. package/contracts/macro-integration-tests/tests/ui_storage.rs +11 -0
  173. package/contracts/macro-integration-tests/tests/ui_ttl_configurable.rs +12 -0
  174. package/contracts/message-libs/blocked-message-lib/src/lib.rs +17 -17
  175. package/contracts/message-libs/message-lib-common/src/errors.rs +7 -2
  176. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +64 -0
  177. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet.rs +58 -0
  178. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet_header.rs +138 -0
  179. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/mod.rs +6 -0
  180. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload.rs +30 -0
  181. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload_hash.rs +15 -0
  182. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/test_helper.rs +39 -0
  183. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_dvn_option.rs +57 -0
  184. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +49 -0
  185. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +73 -0
  186. package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +280 -0
  187. package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +126 -0
  188. package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +48 -0
  189. package/contracts/message-libs/message-lib-common/src/tests/worker_options/mod.rs +7 -0
  190. package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +139 -0
  191. package/contracts/message-libs/message-lib-common/src/worker_options.rs +31 -1
  192. package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +7 -9
  193. package/contracts/message-libs/treasury/src/errors.rs +2 -3
  194. package/contracts/message-libs/treasury/src/events.rs +1 -1
  195. package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +2 -2
  196. package/contracts/message-libs/treasury/src/lib.rs +3 -3
  197. package/contracts/message-libs/treasury/src/storage.rs +3 -1
  198. package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +1 -1
  199. package/contracts/message-libs/treasury/src/treasury.rs +23 -26
  200. package/contracts/message-libs/uln-302/Cargo.toml +1 -1
  201. package/contracts/message-libs/uln-302/src/errors.rs +0 -5
  202. package/contracts/message-libs/uln-302/src/events.rs +5 -6
  203. package/contracts/message-libs/uln-302/src/receive_uln.rs +37 -56
  204. package/contracts/message-libs/uln-302/src/send_uln.rs +112 -138
  205. package/contracts/message-libs/uln-302/src/storage.rs +5 -5
  206. package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +5 -7
  207. package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +3 -3
  208. package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +6 -9
  209. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +2 -2
  210. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +3 -3
  211. package/contracts/message-libs/uln-302/src/tests/setup.rs +9 -0
  212. package/contracts/message-libs/uln-302/src/tests/testing_utils.rs +5 -0
  213. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_receive_uln_config.rs +1 -2
  214. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_send_uln_config.rs +1 -2
  215. package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +37 -55
  216. package/contracts/message-libs/uln-302/src/uln302.rs +10 -25
  217. package/contracts/oapps/counter/Cargo.toml +14 -1
  218. package/contracts/oapps/counter/integration_tests/mod.rs +4 -1
  219. package/contracts/oapps/counter/integration_tests/setup_sml.rs +169 -0
  220. package/contracts/oapps/counter/integration_tests/setup_uln.rs +997 -0
  221. package/contracts/oapps/counter/integration_tests/signing.rs +62 -0
  222. package/contracts/oapps/counter/integration_tests/test_with_sml.rs +24 -55
  223. package/contracts/oapps/counter/integration_tests/test_with_uln.rs +314 -0
  224. package/contracts/oapps/counter/integration_tests/utils.rs +196 -53
  225. package/contracts/oapps/counter/src/counter.rs +67 -44
  226. package/contracts/oapps/counter/src/tests/mod.rs +0 -13
  227. package/contracts/oapps/counter/src/tests/test_counter.rs +5 -7
  228. package/contracts/oapps/oapp/src/errors.rs +5 -1
  229. package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +318 -221
  230. package/contracts/oapps/oapp/src/oapp_core.rs +36 -21
  231. package/contracts/oapps/oapp/src/oapp_options_type3.rs +48 -12
  232. package/contracts/oapps/oapp/src/oapp_receiver.rs +106 -41
  233. package/contracts/oapps/oapp/src/oapp_sender.rs +26 -34
  234. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +9 -9
  235. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +25 -18
  236. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +7 -8
  237. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +14 -16
  238. package/contracts/oapps/oapp-macros/src/generators.rs +128 -0
  239. package/contracts/oapps/oapp-macros/src/lib.rs +211 -0
  240. package/contracts/oapps/oft/integration-tests/setup.rs +34 -9
  241. package/contracts/oapps/oft/integration-tests/utils.rs +1 -1
  242. package/contracts/oapps/oft/src/errors.rs +6 -1
  243. package/contracts/oapps/oft/src/extensions/oft_fee.rs +13 -13
  244. package/contracts/oapps/oft/src/extensions/pausable.rs +5 -5
  245. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +23 -23
  246. package/contracts/oapps/oft/src/lib.rs +4 -2
  247. package/contracts/oapps/oft/src/oft.rs +31 -71
  248. package/contracts/oapps/oft/src/oft_impl.rs +201 -0
  249. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +2 -4
  250. package/contracts/oapps/oft/src/oft_types/mint_burn.rs +1 -4
  251. package/contracts/oapps/oft/src/storage.rs +2 -0
  252. package/contracts/oapps/oft/src/tests/extensions/setup.rs +60 -31
  253. package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +5 -3
  254. package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +5 -3
  255. package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +6 -4
  256. package/contracts/oapps/oft/src/tests/test_decimals.rs +2 -2
  257. package/contracts/oapps/oft/src/tests/test_oft_msg_codec.rs +1 -2
  258. package/contracts/oapps/oft/src/tests/test_send.rs +4 -4
  259. package/contracts/oapps/oft/src/tests/test_utils.rs +122 -81
  260. package/contracts/oapps/oft/src/types.rs +20 -0
  261. package/contracts/oapps/oft-std/Cargo.toml +6 -0
  262. package/contracts/oapps/oft-std/integration-tests/extensions/mod.rs +3 -0
  263. package/contracts/oapps/oft-std/integration-tests/extensions/test_oft_fee.rs +157 -0
  264. package/contracts/oapps/oft-std/integration-tests/extensions/test_pausable.rs +162 -0
  265. package/contracts/oapps/oft-std/integration-tests/extensions/test_rate_limiter.rs +186 -0
  266. package/contracts/oapps/oft-std/integration-tests/mod.rs +3 -0
  267. package/contracts/oapps/{counter/integration_tests → oft-std/integration-tests}/setup.rs +76 -30
  268. package/contracts/oapps/oft-std/integration-tests/utils.rs +427 -0
  269. package/contracts/oapps/oft-std/src/lib.rs +12 -1
  270. package/contracts/oapps/oft-std/src/oft.rs +141 -26
  271. package/contracts/upgrader/Cargo.toml +19 -0
  272. package/contracts/upgrader/src/lib.rs +96 -0
  273. package/contracts/upgrader/src/tests/mod.rs +1 -0
  274. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract1.wasm +0 -0
  275. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract2.wasm +0 -0
  276. package/contracts/upgrader/src/tests/test_upgrader.rs +120 -0
  277. package/contracts/utils/src/auth.rs +44 -0
  278. package/contracts/utils/src/errors.rs +32 -5
  279. package/contracts/utils/src/lib.rs +5 -1
  280. package/contracts/utils/src/multisig.rs +211 -0
  281. package/contracts/utils/src/ownable.rs +50 -60
  282. package/contracts/utils/src/tests/buffer_reader.rs +6 -6
  283. package/contracts/utils/src/tests/buffer_writer.rs +6 -6
  284. package/contracts/utils/src/tests/bytes_ext.rs +2 -4
  285. package/contracts/utils/src/tests/mod.rs +4 -1
  286. package/contracts/utils/src/tests/multisig.rs +731 -0
  287. package/contracts/utils/src/tests/option_ext.rs +18 -0
  288. package/contracts/utils/src/tests/ownable.rs +22 -70
  289. package/contracts/utils/src/tests/ttl_configurable.rs +607 -0
  290. package/contracts/utils/src/tests/upgradeable.rs +290 -0
  291. package/contracts/utils/src/ttl_configurable.rs +153 -0
  292. package/contracts/utils/src/ttl_extendable.rs +27 -0
  293. package/contracts/utils/src/upgradeable.rs +56 -0
  294. package/contracts/workers/dvn/Cargo.toml +2 -2
  295. package/contracts/workers/dvn/src/auth.rs +24 -35
  296. package/contracts/workers/dvn/src/dvn.rs +23 -14
  297. package/contracts/workers/dvn/src/errors.rs +1 -7
  298. package/contracts/workers/dvn/src/events.rs +1 -14
  299. package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
  300. package/contracts/workers/dvn/src/interfaces/mod.rs +0 -2
  301. package/contracts/workers/dvn/src/storage.rs +3 -13
  302. package/contracts/workers/dvn/src/tests/auth.rs +4 -4
  303. package/contracts/workers/dvn/src/tests/dvn.rs +1 -2
  304. package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +7 -8
  305. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +11 -8
  306. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +11 -12
  307. package/contracts/workers/dvn/src/tests/setup.rs +5 -5
  308. package/contracts/workers/dvn-fee-lib/Cargo.toml +0 -1
  309. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +45 -16
  310. package/contracts/workers/dvn-fee-lib/src/errors.rs +3 -2
  311. package/contracts/workers/dvn-fee-lib/src/lib.rs +5 -11
  312. package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +30 -16
  313. package/contracts/workers/executor/src/auth.rs +80 -16
  314. package/contracts/workers/executor/src/executor.rs +17 -29
  315. package/contracts/workers/executor/src/storage.rs +2 -9
  316. package/contracts/workers/executor-fee-lib/Cargo.toml +1 -1
  317. package/contracts/workers/executor-fee-lib/src/errors.rs +9 -7
  318. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +153 -121
  319. package/contracts/workers/executor-helper/Cargo.toml +1 -6
  320. package/contracts/workers/executor-helper/src/executor_helper.rs +53 -73
  321. package/contracts/workers/executor-helper/src/lib.rs +1 -7
  322. package/contracts/workers/price-feed/Cargo.toml +1 -2
  323. package/contracts/workers/price-feed/src/errors.rs +3 -2
  324. package/contracts/workers/price-feed/src/lib.rs +5 -6
  325. package/contracts/workers/price-feed/src/price_feed.rs +42 -23
  326. package/contracts/workers/worker/Cargo.toml +4 -0
  327. package/contracts/workers/worker/src/errors.rs +4 -0
  328. package/contracts/workers/worker/src/interfaces/price_feed.rs +3 -3
  329. package/contracts/workers/worker/src/lib.rs +2 -2
  330. package/contracts/workers/worker/src/tests/mod.rs +4 -0
  331. package/contracts/workers/worker/src/tests/setup.rs +147 -0
  332. package/contracts/workers/worker/src/tests/worker.rs +502 -0
  333. package/contracts/workers/worker/src/worker.rs +28 -30
  334. package/package.json +8 -5
  335. package/sdk/.turbo/turbo-build.log +1 -0
  336. package/sdk/.turbo/turbo-test.log +1009 -0
  337. package/sdk/dist/generated/bml.d.ts +104 -37
  338. package/sdk/dist/generated/bml.js +83 -42
  339. package/sdk/dist/generated/counter.d.ts +334 -175
  340. package/sdk/dist/generated/counter.js +109 -63
  341. package/sdk/dist/generated/dvn.d.ts +1985 -0
  342. package/sdk/dist/generated/dvn.js +326 -0
  343. package/sdk/dist/generated/dvn_fee_lib.d.ts +690 -0
  344. package/sdk/dist/generated/dvn_fee_lib.js +163 -0
  345. package/sdk/dist/generated/endpoint.d.ts +155 -46
  346. package/sdk/dist/generated/endpoint.js +93 -50
  347. package/sdk/dist/generated/executor.d.ts +1841 -0
  348. package/sdk/dist/generated/executor.js +312 -0
  349. package/sdk/dist/generated/executor_fee_lib.d.ts +1083 -0
  350. package/sdk/dist/generated/executor_fee_lib.js +255 -0
  351. package/sdk/dist/generated/executor_helper.d.ts +981 -0
  352. package/sdk/dist/generated/executor_helper.js +236 -0
  353. package/sdk/dist/generated/oft_std.d.ts +1722 -0
  354. package/sdk/dist/generated/oft_std.js +316 -0
  355. package/sdk/dist/generated/price_feed.d.ts +1077 -0
  356. package/sdk/dist/generated/price_feed.js +210 -0
  357. package/sdk/dist/generated/sml.d.ts +171 -56
  358. package/sdk/dist/generated/sml.js +111 -62
  359. package/sdk/dist/generated/treasury.d.ts +896 -0
  360. package/sdk/dist/generated/treasury.js +219 -0
  361. package/sdk/dist/generated/uln302.d.ts +175 -75
  362. package/sdk/dist/generated/uln302.js +126 -82
  363. package/sdk/dist/generated/upgrader.d.ts +70 -0
  364. package/sdk/dist/generated/upgrader.js +19 -0
  365. package/sdk/dist/index.d.ts +10 -0
  366. package/sdk/dist/index.js +14 -0
  367. package/sdk/dist/wasm/blocked-message-lib.d.ts +1 -0
  368. package/sdk/dist/wasm/blocked-message-lib.js +2 -0
  369. package/sdk/dist/wasm/counter.d.ts +1 -0
  370. package/sdk/dist/wasm/counter.js +2 -0
  371. package/sdk/dist/wasm/dvn-fee-lib.d.ts +1 -0
  372. package/sdk/dist/wasm/dvn-fee-lib.js +2 -0
  373. package/sdk/dist/wasm/dvn.d.ts +1 -0
  374. package/sdk/dist/wasm/dvn.js +2 -0
  375. package/sdk/dist/wasm/endpoint-v2.d.ts +1 -0
  376. package/sdk/dist/wasm/endpoint-v2.js +2 -0
  377. package/sdk/dist/wasm/executor-fee-lib.d.ts +1 -0
  378. package/sdk/dist/wasm/executor-fee-lib.js +2 -0
  379. package/sdk/dist/wasm/executor-helper.d.ts +1 -0
  380. package/sdk/dist/wasm/executor-helper.js +2 -0
  381. package/sdk/dist/wasm/executor.d.ts +1 -0
  382. package/sdk/dist/wasm/executor.js +2 -0
  383. package/sdk/dist/wasm/layerzero-views.d.ts +1 -0
  384. package/sdk/dist/wasm/layerzero-views.js +2 -0
  385. package/sdk/dist/wasm/oft-std.d.ts +1 -0
  386. package/sdk/dist/wasm/oft-std.js +2 -0
  387. package/sdk/dist/wasm/price-feed.d.ts +1 -0
  388. package/sdk/dist/wasm/price-feed.js +2 -0
  389. package/sdk/dist/wasm/simple-message-lib.d.ts +1 -0
  390. package/sdk/dist/wasm/simple-message-lib.js +2 -0
  391. package/sdk/dist/wasm/treasury.d.ts +1 -0
  392. package/sdk/dist/wasm/treasury.js +2 -0
  393. package/sdk/dist/wasm/uln302.d.ts +1 -0
  394. package/sdk/dist/wasm/uln302.js +2 -0
  395. package/sdk/dist/wasm/upgrader.d.ts +1 -0
  396. package/sdk/dist/wasm/upgrader.js +2 -0
  397. package/sdk/dist/wasm.d.ts +15 -0
  398. package/sdk/dist/wasm.js +15 -0
  399. package/sdk/package.json +7 -4
  400. package/sdk/src/index.ts +17 -0
  401. package/sdk/test/counter-sml.test.ts +376 -0
  402. package/sdk/test/counter-uln.test.ts +493 -0
  403. package/sdk/test/{oft.test.ts → oft-sml.test.ts} +187 -323
  404. package/sdk/test/suites/constants.ts +22 -2
  405. package/sdk/test/suites/dummyContractClient.ts +169 -0
  406. package/sdk/test/suites/globalSetup.ts +450 -0
  407. package/sdk/test/suites/localnet.ts +23 -6
  408. package/sdk/test/upgrader.test.ts +300 -0
  409. package/sdk/test/utils.ts +558 -85
  410. package/sdk/vitest.config.ts +21 -0
  411. package/tools/ts-bindings-gen/src/main.rs +12 -1
  412. package/turbo.json +2 -0
  413. package/contracts/common-macros/src/contract_impl.rs +0 -47
  414. package/contracts/common-macros/src/ownable.rs +0 -59
  415. package/contracts/common-macros/src/tests/contract_impl.rs +0 -381
  416. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +0 -32
  417. package/contracts/endpoint-v2/src/tests/messaging_channel/clear.rs +0 -316
  418. package/contracts/endpoint-v2/src/tests/messaging_channel/internal.rs +0 -388
  419. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +0 -162
  420. package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +0 -319
  421. package/contracts/oapp-macros/src/lib.rs +0 -154
  422. package/contracts/oapp-macros/src/oapp_core.rs +0 -40
  423. package/contracts/oapp-macros/src/oapp_full.rs +0 -21
  424. package/contracts/oapp-macros/src/oapp_options_type3.rs +0 -31
  425. package/contracts/oapp-macros/src/oapp_receiver.rs +0 -48
  426. package/contracts/oapp-macros/src/oapp_sender.rs +0 -21
  427. package/contracts/oapp-macros/src/util.rs +0 -107
  428. package/contracts/oapps/oft/src/constants.rs +0 -5
  429. package/contracts/oapps/oft/src/default_oft_impl.rs +0 -146
  430. package/contracts/utils/src/tests/ttl.rs +0 -421
  431. package/contracts/utils/src/ttl.rs +0 -123
  432. package/contracts/workers/dvn/src/interfaces/multisig.rs +0 -56
  433. package/contracts/workers/dvn/src/multisig.rs +0 -153
  434. package/sdk/test/index.test.ts +0 -376
  435. /package/contracts/{oapp-macros → oapps/oapp-macros}/Cargo.toml +0 -0
@@ -1,117 +1,114 @@
1
+ use soroban_sdk::{testutils::Address as _, vec, Address};
2
+ use utils::testing_utils::assert_event;
3
+
1
4
  use crate::{
5
+ errors::EndpointError,
2
6
  events::LibraryRegistered,
3
7
  storage,
4
8
  tests::{
5
9
  endpoint_setup::setup,
6
- mock::{MockMessageLib, MockValidMessageLib},
10
+ mock::{MockMessageLib, MockReceiver, MockValidMessageLib},
7
11
  },
8
12
  };
9
- use soroban_sdk::{testutils::Address as _, vec, Address};
10
- use utils::testing_utils::assert_event;
11
-
12
- use crate::errors::EndpointError;
13
13
 
14
+ // Successful registration (state update + event emission)
14
15
  #[test]
15
16
  fn test_register_library() {
16
17
  let context = setup();
17
18
  let env = &context.env;
18
19
  let endpoint_client = &context.endpoint_client;
19
20
 
20
- // mock a valid message lib
21
21
  let lib = env.register(MockValidMessageLib, ());
22
22
 
23
- // Verify initial state - library count should be 0
24
- let initial_count =
25
- env.as_contract(&endpoint_client.address, || storage::EndpointStorage::registered_library_count(env));
26
- assert_eq!(initial_count, 0, "Initial library count should be 0");
27
-
28
- // Mock owner auth for register_library
29
- context.mock_owner_auth("register_library", (&lib,));
23
+ // Verify initial state via public interface.
24
+ assert_eq!(endpoint_client.registered_libraries_count(), 0);
25
+ assert!(!endpoint_client.is_registered_library(&lib));
30
26
 
31
- endpoint_client.register_library(&lib);
27
+ context.register_library_with_auth(&lib);
32
28
 
33
- // Assert event was published
29
+ // Verify event emission.
34
30
  assert_event(env, &endpoint_client.address, LibraryRegistered { new_lib: lib.clone() });
35
31
 
36
- // Assert public interface methods work
32
+ // Verify state update via public interface.
37
33
  assert!(endpoint_client.is_registered_library(&lib));
34
+ assert_eq!(endpoint_client.registered_libraries_count(), 1);
38
35
 
39
36
  let libraries = endpoint_client.get_registered_libraries(&0, &1);
40
37
  assert_eq!(libraries, vec![&env, lib.clone()]);
41
38
 
42
- // Assert storage changes directly
39
+ // Verify storage invariants (bidirectional index mapping).
43
40
  let lib_clone = lib.clone();
44
41
  env.as_contract(&endpoint_client.address, || {
45
- // Verify library was assigned ID 0 (first library)
46
42
  let library_id = storage::EndpointStorage::library_to_index(env, &lib_clone);
47
- assert_eq!(library_id, Some(0), "Library should be assigned ID 0");
43
+ assert_eq!(library_id, Some(0));
48
44
 
49
- // Verify ID 0 maps back to the library
50
45
  let stored_lib = storage::EndpointStorage::index_to_library(env, 0);
51
- assert_eq!(stored_lib, Some(lib_clone.clone()), "ID 0 should map to the registered library");
46
+ assert_eq!(stored_lib, Some(lib_clone.clone()));
52
47
 
53
- // Verify library count was incremented
54
48
  let new_count = storage::EndpointStorage::registered_library_count(env);
55
- assert_eq!(new_count, 1, "Library count should be incremented to 1");
49
+ assert_eq!(new_count, 1);
56
50
 
57
- // Verify has_library_to_id returns true
58
51
  let has_library = storage::EndpointStorage::has_library_to_index(env, &lib_clone);
59
- assert!(has_library, "has_library_to_id should return true for registered library");
52
+ assert!(has_library);
60
53
  });
61
54
  }
62
55
 
56
+ // Duplicate registration rejection
63
57
  #[test]
64
58
  fn test_register_library_is_already_registered() {
65
59
  let context = setup();
66
60
  let env = &context.env;
67
61
  let endpoint_client = &context.endpoint_client;
68
62
 
69
- // mock a valid message lib
70
63
  let lib = env.register(MockValidMessageLib, ());
71
64
 
72
- // First registration with owner auth
73
- context.mock_owner_auth("register_library", (&lib,));
74
- endpoint_client.register_library(&lib);
65
+ context.register_library_with_auth(&lib);
75
66
 
76
- // Try to register the same library again with owner auth
77
67
  context.mock_owner_auth("register_library", (&lib,));
78
68
  let result = endpoint_client.try_register_library(&lib);
79
-
80
69
  assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::AlreadyRegistered.into());
81
70
  }
82
71
 
72
+ // Invalid library interface rejection (must implement message_lib_type)
83
73
  #[test]
84
74
  fn test_register_library_is_unsupported_interface() {
85
75
  let context = setup();
86
76
  let env = &context.env;
87
77
  let endpoint_client = &context.endpoint_client;
88
78
 
89
- let random_lib_address = Address::generate(env);
79
+ // A contract that does NOT implement `message_lib_type()`.
80
+ let invalid_lib = env.register(MockReceiver, ());
90
81
 
91
- // Mock owner auth for register_library
92
- context.mock_owner_auth("register_library", (&random_lib_address,));
93
-
94
- let result = endpoint_client.try_register_library(&random_lib_address);
82
+ // Must pass owner auth so this test actually exercises interface validation.
83
+ context.mock_owner_auth("register_library", (&invalid_lib,));
84
+ let result = endpoint_client.try_register_library(&invalid_lib);
95
85
  assert!(result.is_err());
86
+
87
+ // Verify no partial state updates.
88
+ assert_eq!(endpoint_client.registered_libraries_count(), 0);
89
+ assert!(!endpoint_client.is_registered_library(&invalid_lib));
90
+
91
+ // Verify no partial storage updates.
92
+ env.as_contract(&endpoint_client.address, || {
93
+ assert_eq!(storage::EndpointStorage::registered_library_count(env), 0);
94
+ assert_eq!(storage::EndpointStorage::library_to_index(env, &invalid_lib), None);
95
+ assert!(!storage::EndpointStorage::has_library_to_index(env, &invalid_lib));
96
+ });
96
97
  }
97
98
 
99
+ // Authorization (only owner)
98
100
  #[test]
99
101
  fn test_register_library_owner_auth() {
100
102
  let context = setup();
101
103
  let env = &context.env;
102
104
  let endpoint_client = &context.endpoint_client;
103
105
 
104
- // Deploy a mock message library contract
105
106
  let lib = env.register(MockMessageLib, ());
106
107
 
107
- // Mock owner auth for register_library
108
- context.mock_owner_auth("register_library", (&lib,));
109
-
110
- // should succeed
111
- endpoint_client.register_library(&lib);
108
+ context.register_library_with_auth(&lib);
112
109
 
113
110
  let library = endpoint_client.get_registered_libraries(&0, &1);
114
- assert_eq!(library, vec![env, lib]);
111
+ assert_eq!(library, vec![&env, lib]);
115
112
  }
116
113
 
117
114
  #[test]
@@ -129,3 +126,28 @@ fn test_register_library_without_owner_auth() {
129
126
 
130
127
  endpoint_client.register_library(&lib);
131
128
  }
129
+
130
+ // Sequential index assignment (storage invariants)
131
+ #[test]
132
+ fn test_register_multiple_libraries_assigns_sequential_indices_and_orders_results() {
133
+ let context = setup();
134
+ let env = &context.env;
135
+ let endpoint_client = &context.endpoint_client;
136
+
137
+ let lib0 = env.register(MockValidMessageLib, ());
138
+ let lib1 = env.register(MockValidMessageLib, ());
139
+
140
+ context.register_library_with_auth(&lib0);
141
+ context.register_library_with_auth(&lib1);
142
+
143
+ // storage invariants
144
+ let lib0c = lib0.clone();
145
+ let lib1c = lib1.clone();
146
+ env.as_contract(&endpoint_client.address, || {
147
+ assert_eq!(storage::EndpointStorage::registered_library_count(env), 2);
148
+ assert_eq!(storage::EndpointStorage::library_to_index(env, &lib0c), Some(0));
149
+ assert_eq!(storage::EndpointStorage::library_to_index(env, &lib1c), Some(1));
150
+ assert_eq!(storage::EndpointStorage::index_to_library(env, 0), Some(lib0c));
151
+ assert_eq!(storage::EndpointStorage::index_to_library(env, 1), Some(lib1c));
152
+ });
153
+ }
@@ -0,0 +1,42 @@
1
+ use crate::tests::{endpoint_setup::setup, mock::MockValidMessageLib};
2
+
3
+ // The registered_libraries_count increments after successful registrations
4
+ #[test]
5
+ fn test_registered_libraries_count_increments_with_registrations() {
6
+ let context = setup();
7
+ let env = &context.env;
8
+ let endpoint_client = &context.endpoint_client;
9
+
10
+ let lib0 = env.register(MockValidMessageLib, ());
11
+ let lib1 = env.register(MockValidMessageLib, ());
12
+ let lib2 = env.register(MockValidMessageLib, ());
13
+
14
+ assert_eq!(endpoint_client.registered_libraries_count(), 0);
15
+
16
+ context.register_library_with_auth(&lib0);
17
+ assert_eq!(endpoint_client.registered_libraries_count(), 1);
18
+
19
+ context.register_library_with_auth(&lib1);
20
+ assert_eq!(endpoint_client.registered_libraries_count(), 2);
21
+
22
+ context.register_library_with_auth(&lib2);
23
+ assert_eq!(endpoint_client.registered_libraries_count(), 3);
24
+ }
25
+
26
+ // Failed registration does not change registered_libraries_count
27
+ #[test]
28
+ fn test_registered_libraries_count_unchanged_on_duplicate_registration() {
29
+ let context = setup();
30
+ let env = &context.env;
31
+ let endpoint_client = &context.endpoint_client;
32
+
33
+ let lib = env.register(MockValidMessageLib, ());
34
+ context.register_library_with_auth(&lib);
35
+ assert_eq!(endpoint_client.registered_libraries_count(), 1);
36
+
37
+ // Duplicate registration should fail and not change count.
38
+ context.mock_owner_auth("register_library", (&lib,));
39
+ let result = endpoint_client.try_register_library(&lib);
40
+ assert!(result.is_err());
41
+ assert_eq!(endpoint_client.registered_libraries_count(), 1);
42
+ }
@@ -0,0 +1,61 @@
1
+ use soroban_sdk::vec;
2
+
3
+ use crate::{tests::endpoint_setup::setup, EndpointV2, MessageLibType};
4
+
5
+ // The require_receive_lib_for_eid internal validation (registered + type + supported_eid)
6
+ #[test]
7
+ #[should_panic(expected = "Error(Contract, #16)")] // EndpointError::OnlyRegisteredLib
8
+ fn test_require_receive_lib_for_eid_unregistered_lib() {
9
+ let context = setup();
10
+ let env = &context.env;
11
+ let endpoint_client = &context.endpoint_client;
12
+
13
+ let lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
14
+ env.as_contract(&endpoint_client.address, || EndpointV2::require_receive_lib_for_eid(env, &lib, context.eid));
15
+ }
16
+
17
+ #[test]
18
+ #[should_panic(expected = "Error(Contract, #15)")] // EndpointError::OnlyReceiveLib
19
+ fn test_require_receive_lib_for_eid_wrong_lib_type() {
20
+ let context = setup();
21
+ let env = &context.env;
22
+ let endpoint_client = &context.endpoint_client;
23
+
24
+ let lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
25
+ context.register_library_with_auth(&lib);
26
+
27
+ env.as_contract(&endpoint_client.address, || EndpointV2::require_receive_lib_for_eid(env, &lib, context.eid));
28
+ }
29
+
30
+ #[test]
31
+ #[should_panic(expected = "Error(Contract, #23)")] // EndpointError::UnsupportedEid
32
+ fn test_require_receive_lib_for_eid_unsupported_eid() {
33
+ let context = setup();
34
+ let env = &context.env;
35
+ let endpoint_client = &context.endpoint_client;
36
+
37
+ let unsupported_eid = context.eid + 1;
38
+ let lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
39
+ context.register_library_with_auth(&lib);
40
+
41
+ env.as_contract(&endpoint_client.address, || EndpointV2::require_receive_lib_for_eid(env, &lib, unsupported_eid));
42
+ }
43
+
44
+ #[test]
45
+ fn test_require_receive_lib_for_eid_success_for_receive_and_send_and_receive() {
46
+ let context = setup();
47
+ let env = &context.env;
48
+ let endpoint_client = &context.endpoint_client;
49
+
50
+ let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
51
+ context.register_library_with_auth(&receive_lib);
52
+ env.as_contract(&endpoint_client.address, || {
53
+ EndpointV2::require_receive_lib_for_eid(env, &receive_lib, context.eid)
54
+ });
55
+
56
+ let send_and_receive = context.setup_mock_message_lib(MessageLibType::SendAndReceive, vec![env, context.eid]);
57
+ context.register_library_with_auth(&send_and_receive);
58
+ env.as_contract(&endpoint_client.address, || {
59
+ EndpointV2::require_receive_lib_for_eid(env, &send_and_receive, context.eid)
60
+ });
61
+ }
@@ -1,13 +1,14 @@
1
+ use soroban_sdk::{testutils::Address as _, Address};
2
+
1
3
  use crate::{
2
4
  tests::{endpoint_setup::setup, mock::MockValidMessageLib},
3
5
  EndpointV2,
4
6
  };
5
- use soroban_sdk::{testutils::Address as _, Address};
6
7
 
7
8
  // Unit tests for require functions
8
9
 
9
10
  #[test]
10
- #[should_panic(expected = "Error(Contract, #15)")] // EndpointError::OnlyRegisteredLib
11
+ #[should_panic(expected = "Error(Contract, #16)")] // EndpointError::OnlyRegisteredLib
11
12
  fn test_require_registered_with_unregistered_lib() {
12
13
  let context = setup();
13
14
  let env = &context.env;
@@ -25,10 +26,7 @@ fn test_require_registered_with_registered_lib() {
25
26
 
26
27
  // Register a valid message lib
27
28
  let lib = env.register(MockValidMessageLib, ());
28
-
29
- // Mock owner auth for register_library
30
- context.mock_owner_auth("register_library", (&lib,));
31
- endpoint_client.register_library(&lib);
29
+ context.register_library_with_auth(&lib);
32
30
 
33
31
  // Should not panic
34
32
  env.as_contract(&endpoint_client.address, || EndpointV2::require_registered(env, &lib));
@@ -0,0 +1,59 @@
1
+ use soroban_sdk::vec;
2
+
3
+ use crate::{tests::endpoint_setup::setup, EndpointV2, MessageLibType};
4
+
5
+ // The require_send_lib_for_eid internal validation (registered + type + supported_eid)
6
+ #[test]
7
+ #[should_panic(expected = "Error(Contract, #16)")] // EndpointError::OnlyRegisteredLib
8
+ fn test_require_send_lib_for_eid_unregistered_lib() {
9
+ let context = setup();
10
+ let env = &context.env;
11
+ let endpoint_client = &context.endpoint_client;
12
+
13
+ let lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
14
+ env.as_contract(&endpoint_client.address, || EndpointV2::require_send_lib_for_eid(env, &lib, context.eid));
15
+ }
16
+
17
+ #[test]
18
+ #[should_panic(expected = "Error(Contract, #17)")] // EndpointError::OnlySendLib
19
+ fn test_require_send_lib_for_eid_wrong_lib_type() {
20
+ let context = setup();
21
+ let env = &context.env;
22
+ let endpoint_client = &context.endpoint_client;
23
+
24
+ let lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
25
+ context.register_library_with_auth(&lib);
26
+
27
+ env.as_contract(&endpoint_client.address, || EndpointV2::require_send_lib_for_eid(env, &lib, context.eid));
28
+ }
29
+
30
+ #[test]
31
+ #[should_panic(expected = "Error(Contract, #23)")] // EndpointError::UnsupportedEid
32
+ fn test_require_send_lib_for_eid_unsupported_eid() {
33
+ let context = setup();
34
+ let env = &context.env;
35
+ let endpoint_client = &context.endpoint_client;
36
+
37
+ let unsupported_eid = context.eid + 1;
38
+ let lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
39
+ context.register_library_with_auth(&lib);
40
+
41
+ env.as_contract(&endpoint_client.address, || EndpointV2::require_send_lib_for_eid(env, &lib, unsupported_eid));
42
+ }
43
+
44
+ #[test]
45
+ fn test_require_send_lib_for_eid_success_for_send_and_send_and_receive() {
46
+ let context = setup();
47
+ let env = &context.env;
48
+ let endpoint_client = &context.endpoint_client;
49
+
50
+ let send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
51
+ context.register_library_with_auth(&send_lib);
52
+ env.as_contract(&endpoint_client.address, || EndpointV2::require_send_lib_for_eid(env, &send_lib, context.eid));
53
+
54
+ let send_and_receive = context.setup_mock_message_lib(MessageLibType::SendAndReceive, vec![env, context.eid]);
55
+ context.register_library_with_auth(&send_and_receive);
56
+ env.as_contract(&endpoint_client.address, || {
57
+ EndpointV2::require_send_lib_for_eid(env, &send_and_receive, context.eid)
58
+ });
59
+ }
@@ -1,8 +1,21 @@
1
- use crate::{tests::endpoint_setup::setup, EndpointV2, MessageLibType};
2
1
  use soroban_sdk::{testutils::Address as _, vec, Address};
3
2
 
3
+ use crate::{tests::endpoint_setup::setup, EndpointV2, MessageLibType};
4
+
5
+ // The require_supported_eid passes when the library supports the EID
6
+ #[test]
7
+ fn test_require_supported_eid_with_supported() {
8
+ let context = setup();
9
+ let env = &context.env;
10
+ let endpoint_client = &context.endpoint_client;
11
+
12
+ let send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
13
+ env.as_contract(&endpoint_client.address, || EndpointV2::require_supported_eid(env, &send_lib, context.eid));
14
+ }
15
+
16
+ // The require_supported_eid rejects when the library does not support the EID
4
17
  #[test]
5
- #[should_panic(expected = "Error(Contract, #22)")] // EndpointError::UnsupportedEid
18
+ #[should_panic(expected = "Error(Contract, #23)")] // EndpointError::UnsupportedEid
6
19
  fn test_require_supported_eid_with_unsupported() {
7
20
  let context = setup();
8
21
  let env = &context.env;
@@ -13,6 +26,7 @@ fn test_require_supported_eid_with_unsupported() {
13
26
  env.as_contract(&endpoint_client.address, || EndpointV2::require_supported_eid(env, &send_lib, unsupported_eid));
14
27
  }
15
28
 
29
+ // The require_supported_eid panics if the library address has no deployed contract
16
30
  #[test]
17
31
  #[should_panic(expected = "trying to get non-existing value for contract instance")]
18
32
  fn test_require_supported_eid_with_non_deployed_lib() {
@@ -1,45 +1,44 @@
1
- use soroban_sdk::{
2
- testutils::{Address as _, MockAuth, MockAuthInvoke},
3
- vec, Address, IntoVal, Vec,
4
- };
1
+ use soroban_sdk::{testutils::Address as _, vec, Address, Bytes, Vec};
5
2
 
6
- use crate::{tests::endpoint_setup::setup, SetConfigParam};
3
+ use crate::{errors::EndpointError, tests::endpoint_setup::setup, tests::endpoint_setup::TestSetup, SetConfigParam};
7
4
 
8
- // Tests for set_config
9
- // Note: set_config is a pass-through method that delegates to MessageLibClient.
10
- // Since mock message libs don't implement set_config, we focus on testing authorization.
11
- // The actual config setting is tested in the message library contract tests.
5
+ // Helpers
6
+ fn set_config_with_auth(
7
+ context: &TestSetup,
8
+ caller: &Address,
9
+ oapp: &Address,
10
+ message_lib: &Address,
11
+ params: &Vec<SetConfigParam>,
12
+ ) {
13
+ context.mock_auth(caller, "set_config", (caller, oapp, message_lib, params));
14
+ context.endpoint_client.set_config(caller, oapp, message_lib, params);
15
+ }
12
16
 
17
+ // Authorization (caller == oapp)
13
18
  #[test]
14
- fn test_set_config_oapp_auth() {
19
+ fn test_set_config_allows_oapp() {
15
20
  let context = setup();
16
21
  let env = &context.env;
17
22
  let endpoint_client = &context.endpoint_client;
18
23
 
19
24
  let oapp = Address::generate(env);
20
- let message_lib = Address::generate(env); // Just use an address, won't actually call it
25
+ let message_lib = context.setup_mock_message_lib(crate::MessageLibType::Send, vec![env, context.eid]);
26
+ context.register_library_with_auth(&message_lib);
21
27
 
22
- let params: Vec<SetConfigParam> = vec![env];
28
+ let cfg = Bytes::from_slice(env, &[0x01, 0x02, 0x03]);
29
+ let params: Vec<SetConfigParam> =
30
+ vec![env, SetConfigParam { eid: context.eid, config_type: 1, config: cfg.clone() }];
23
31
 
24
- // Try with oapp auth - should pass authorization check
25
- // (will fail on lib call since it's not a real lib, but that's after auth)
26
- env.mock_auths(&[MockAuth {
27
- address: &oapp,
28
- invoke: &MockAuthInvoke {
29
- contract: &endpoint_client.address,
30
- fn_name: "set_config",
31
- args: (&oapp, &oapp, &message_lib, &params).into_val(env),
32
- sub_invokes: &[],
33
- },
34
- }]);
35
-
36
- // Call will fail at library invocation, but we verify auth works
37
- let _ = endpoint_client.try_set_config(&oapp, &oapp, &message_lib, &params);
38
- // We're just verifying the auth part - the library call failure is expected
32
+ set_config_with_auth(&context, &oapp, &oapp, &message_lib, &params);
33
+
34
+ // Assert config persisted in the message lib via endpoint's get_config passthrough.
35
+ let stored = endpoint_client.get_config(&oapp, &message_lib, &context.eid, &1u32);
36
+ assert_eq!(stored, cfg);
39
37
  }
40
38
 
39
+ // Authorization (caller == delegate(oapp))
41
40
  #[test]
42
- fn test_set_config_delegate_auth() {
41
+ fn test_set_config_allows_delegate() {
43
42
  let context = setup();
44
43
  let env = &context.env;
45
44
  let endpoint_client = &context.endpoint_client;
@@ -47,33 +46,138 @@ fn test_set_config_delegate_auth() {
47
46
  let oapp = Address::generate(env);
48
47
  let delegate = Address::generate(env);
49
48
 
50
- // Set delegate for oapp
49
+ // Set delegate for the OApp.
51
50
  let delegate_option = Some(delegate.clone());
52
- env.mock_auths(&[MockAuth {
53
- address: &oapp,
54
- invoke: &MockAuthInvoke {
55
- contract: &endpoint_client.address,
56
- fn_name: "set_delegate",
57
- args: (&oapp, &delegate_option).into_val(env),
58
- sub_invokes: &[],
59
- },
60
- }]);
51
+ context.mock_auth(&oapp, "set_delegate", (&oapp, &delegate_option));
61
52
  endpoint_client.set_delegate(&oapp, &delegate_option);
62
53
 
54
+ let message_lib = context.setup_mock_message_lib(crate::MessageLibType::Send, vec![env, context.eid]);
55
+ context.register_library_with_auth(&message_lib);
56
+ let cfg = Bytes::from_slice(env, &[0xAA, 0xBB, 0xCC, 0xDD]);
57
+ let params: Vec<SetConfigParam> =
58
+ vec![env, SetConfigParam { eid: context.eid, config_type: 2, config: cfg.clone() }];
59
+
60
+ set_config_with_auth(&context, &delegate, &oapp, &message_lib, &params);
61
+
62
+ // Assert config persisted in the message lib via endpoint's get_config passthrough.
63
+ let stored = endpoint_client.get_config(&oapp, &message_lib, &context.eid, &2u32);
64
+ assert_eq!(stored, cfg);
65
+ }
66
+
67
+ // Unauthorized caller is rejected
68
+ #[test]
69
+ fn test_set_config_unauthorized() {
70
+ let context = setup();
71
+ let env = &context.env;
72
+ let endpoint_client = &context.endpoint_client;
73
+
74
+ let oapp = Address::generate(env);
75
+ let unauthorized = Address::generate(env);
63
76
  let message_lib = Address::generate(env);
64
77
  let params: Vec<SetConfigParam> = vec![env];
65
78
 
66
- // Try with delegate auth - should pass authorization check
67
- env.mock_auths(&[MockAuth {
68
- address: &delegate,
69
- invoke: &MockAuthInvoke {
70
- contract: &endpoint_client.address,
71
- fn_name: "set_config",
72
- args: (&delegate, &oapp, &message_lib, &params).into_val(env),
73
- sub_invokes: &[],
74
- },
75
- }]);
76
-
77
- // Call will fail at library invocation, but we verify delegate auth works
78
- let _ = endpoint_client.try_set_config(&delegate, &oapp, &message_lib, &params);
79
+ // Unauthorized should fail before `require_auth()`, so no mock_auth needed.
80
+ let result = endpoint_client.try_set_config(&unauthorized, &oapp, &message_lib, &params);
81
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::Unauthorized.into());
82
+ }
83
+
84
+ // Library must be registered
85
+ #[test]
86
+ fn test_set_config_requires_registered_library() {
87
+ let context = setup();
88
+ let env = &context.env;
89
+ let endpoint_client = &context.endpoint_client;
90
+
91
+ let oapp = Address::generate(env);
92
+ let unregistered_lib = Address::generate(env);
93
+ let params: Vec<SetConfigParam> = vec![env];
94
+
95
+ // caller == oapp so it passes oapp auth, but should fail `require_registered`.
96
+ context.mock_auth(&oapp, "set_config", (&oapp, &oapp, &unregistered_lib, &params));
97
+ let result = endpoint_client.try_set_config(&oapp, &oapp, &unregistered_lib, &params);
98
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyRegisteredLib.into());
99
+ }
100
+
101
+ // Multiple params are persisted independently (keyed by eid + config_type)
102
+ #[test]
103
+ fn test_set_config_multiple_params_persists_each() {
104
+ let context = setup();
105
+ let env = &context.env;
106
+ let endpoint_client = &context.endpoint_client;
107
+
108
+ let oapp = Address::generate(env);
109
+ let message_lib = context.setup_mock_message_lib(crate::MessageLibType::Send, vec![env, context.eid]);
110
+ context.register_library_with_auth(&message_lib);
111
+
112
+ let cfg_a = Bytes::from_slice(env, &[0x10, 0x11]);
113
+ let cfg_b = Bytes::from_slice(env, &[0x20, 0x21, 0x22]);
114
+ let cfg_c = Bytes::from_slice(env, &[0x30]);
115
+
116
+ let params: Vec<SetConfigParam> = vec![
117
+ env,
118
+ SetConfigParam { eid: context.eid, config_type: 7, config: cfg_a.clone() },
119
+ // Same eid, different config_type (should be independent).
120
+ SetConfigParam { eid: context.eid, config_type: 8, config: cfg_c.clone() },
121
+ // Different eid (should be independent).
122
+ SetConfigParam { eid: context.eid + 1, config_type: 8, config: cfg_b.clone() },
123
+ ];
124
+
125
+ set_config_with_auth(&context, &oapp, &oapp, &message_lib, &params);
126
+
127
+ let stored_a = endpoint_client.get_config(&oapp, &message_lib, &context.eid, &7u32);
128
+ let stored_c = endpoint_client.get_config(&oapp, &message_lib, &context.eid, &8u32);
129
+ let stored_b = endpoint_client.get_config(&oapp, &message_lib, &(context.eid + 1), &8u32);
130
+ assert_eq!(stored_a, cfg_a);
131
+ assert_eq!(stored_c, cfg_c);
132
+ assert_eq!(stored_b, cfg_b);
133
+ }
134
+
135
+ // The set_config overwrites existing config for the same key
136
+ #[test]
137
+ fn test_set_config_overwrites_existing_config() {
138
+ let context = setup();
139
+ let env = &context.env;
140
+ let endpoint_client = &context.endpoint_client;
141
+
142
+ let oapp = Address::generate(env);
143
+ let message_lib = context.setup_mock_message_lib(crate::MessageLibType::Send, vec![env, context.eid]);
144
+ context.register_library_with_auth(&message_lib);
145
+
146
+ let cfg_v1 = Bytes::from_slice(env, &[0x01]);
147
+ let cfg_v2 = Bytes::from_slice(env, &[0x02, 0x03]);
148
+
149
+ let params_v1: Vec<SetConfigParam> =
150
+ vec![env, SetConfigParam { eid: context.eid, config_type: 9, config: cfg_v1.clone() }];
151
+ set_config_with_auth(&context, &oapp, &oapp, &message_lib, &params_v1);
152
+ assert_eq!(endpoint_client.get_config(&oapp, &message_lib, &context.eid, &9u32), cfg_v1);
153
+
154
+ let params_v2: Vec<SetConfigParam> =
155
+ vec![env, SetConfigParam { eid: context.eid, config_type: 9, config: cfg_v2.clone() }];
156
+ set_config_with_auth(&context, &oapp, &oapp, &message_lib, &params_v2);
157
+ assert_eq!(endpoint_client.get_config(&oapp, &message_lib, &context.eid, &9u32), cfg_v2);
158
+ }
159
+
160
+ // Config is isolated per OApp
161
+ #[test]
162
+ fn test_set_config_isolated_per_oapp() {
163
+ let context = setup();
164
+ let env = &context.env;
165
+ let endpoint_client = &context.endpoint_client;
166
+
167
+ let oapp_a = Address::generate(env);
168
+ let oapp_b = Address::generate(env);
169
+
170
+ let message_lib = context.setup_mock_message_lib(crate::MessageLibType::Send, vec![env, context.eid]);
171
+ context.register_library_with_auth(&message_lib);
172
+
173
+ let cfg_a = Bytes::from_slice(env, &[0xAA]);
174
+ let params: Vec<SetConfigParam> =
175
+ vec![env, SetConfigParam { eid: context.eid, config_type: 42, config: cfg_a.clone() }];
176
+
177
+ set_config_with_auth(&context, &oapp_a, &oapp_a, &message_lib, &params);
178
+
179
+ // OApp A sees its config.
180
+ assert_eq!(endpoint_client.get_config(&oapp_a, &message_lib, &context.eid, &42u32), cfg_a);
181
+ // OApp B should not see OApp A's config.
182
+ assert_eq!(endpoint_client.get_config(&oapp_b, &message_lib, &context.eid, &42u32), Bytes::new(env));
79
183
  }