@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,12 +1,206 @@
1
1
  use soroban_sdk::{
2
- testutils::{Address as _, Ledger, MockAuth, MockAuthInvoke},
3
- vec, Address, IntoVal,
2
+ testutils::{Address as _, Ledger},
3
+ vec, Address,
4
4
  };
5
-
6
- use crate::{events::ReceiveLibraryTimeoutSet, storage, tests::endpoint_setup::setup, MessageLibType, Timeout};
7
5
  use utils::testing_utils::assert_event;
8
6
 
9
- // Tests for set_receive_library_timeout (OApp-level control)
7
+ use crate::{
8
+ errors::EndpointError, events::ReceiveLibraryTimeoutSet, tests::endpoint_setup::setup,
9
+ tests::endpoint_setup::TestSetup, MessageLibType, Timeout,
10
+ };
11
+
12
+ // Helpers
13
+ fn set_receive_library_timeout_with_auth(
14
+ context: &TestSetup,
15
+ caller: &Address,
16
+ receiver: &Address,
17
+ src_eid: u32,
18
+ timeout: &Option<Timeout>,
19
+ ) {
20
+ context.mock_auth(caller, "set_receive_library_timeout", (caller, receiver, src_eid, timeout));
21
+ context.endpoint_client.set_receive_library_timeout(caller, receiver, &src_eid, timeout);
22
+ }
23
+
24
+ // Authorization (OApp auth required)
25
+ #[test]
26
+ fn test_set_receive_library_timeout_requires_oapp_auth() {
27
+ let context = setup();
28
+ let env = &context.env;
29
+ let endpoint_client = &context.endpoint_client;
30
+
31
+ let oapp = Address::generate(env);
32
+ let unauthorized = Address::generate(env);
33
+
34
+ // Unauthorized should fail (caller is neither the OApp nor its delegate).
35
+ let timeout = None::<Timeout>;
36
+ let result = endpoint_client.try_set_receive_library_timeout(&unauthorized, &oapp, &context.eid, &timeout);
37
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::Unauthorized.into());
38
+ }
39
+
40
+ // Rejection when the resolved receive library is default (OApp must be non-default)
41
+ #[test]
42
+ fn test_set_receive_library_timeout_fails_for_default_receive_library() {
43
+ let context = setup();
44
+ let env = &context.env;
45
+ let endpoint_client = &context.endpoint_client;
46
+
47
+ let oapp = Address::generate(env);
48
+ let src_eid = context.eid;
49
+
50
+ // Configure a default receive library, but do not set a custom one for the OApp.
51
+ let default_receive_lib = context.setup_default_receive_lib(src_eid, 0);
52
+
53
+ let timeout = Some(Timeout { lib: default_receive_lib, expiry: env.ledger().timestamp() + 1000 });
54
+ context.mock_auth(&oapp, "set_receive_library_timeout", (&oapp, &oapp, &src_eid, &timeout));
55
+
56
+ let result = endpoint_client.try_set_receive_library_timeout(&oapp, &oapp, &src_eid, &timeout);
57
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyNonDefaultLib.into());
58
+ }
59
+
60
+ // Invalid expiry rejection (must be strictly greater than current timestamp)
61
+ #[test]
62
+ fn test_set_receive_library_timeout_invalid_expiry_equal_timestamp() {
63
+ let context = setup();
64
+ let env = &context.env;
65
+ let endpoint_client = &context.endpoint_client;
66
+
67
+ let oapp = Address::generate(env);
68
+ let src_eid = context.eid;
69
+
70
+ let current_timestamp = 1_700_000_000u64;
71
+ env.ledger().with_mut(|li| li.timestamp = current_timestamp);
72
+
73
+ // Create and register a valid receive lib.
74
+ let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
75
+ context.register_library_with_auth(&receive_lib);
76
+
77
+ // Set a custom receive library so the OApp is non-default.
78
+ context.set_receive_library_with_auth(&oapp, &oapp, src_eid, &Some(receive_lib.clone()), 0);
79
+
80
+ // expiry <= now is invalid.
81
+ let timeout = Some(Timeout { lib: receive_lib.clone(), expiry: current_timestamp });
82
+ context.mock_auth(&oapp, "set_receive_library_timeout", (&oapp, &oapp, &src_eid, &timeout));
83
+
84
+ let result = endpoint_client.try_set_receive_library_timeout(&oapp, &oapp, &src_eid, &timeout);
85
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::InvalidExpiry.into());
86
+ }
87
+
88
+ #[test]
89
+ fn test_set_receive_library_timeout_invalid_expiry_past_timestamp() {
90
+ let context = setup();
91
+ let env = &context.env;
92
+ let endpoint_client = &context.endpoint_client;
93
+
94
+ let oapp = Address::generate(env);
95
+ let src_eid = context.eid;
96
+
97
+ let current_timestamp = 1_700_000_000u64;
98
+ env.ledger().with_mut(|li| li.timestamp = current_timestamp);
99
+
100
+ // Create and register a valid receive lib.
101
+ let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
102
+ context.register_library_with_auth(&receive_lib);
103
+
104
+ // Set a custom receive library so the OApp is non-default.
105
+ context.set_receive_library_with_auth(&oapp, &oapp, src_eid, &Some(receive_lib.clone()), 0);
106
+
107
+ // expiry < now is invalid.
108
+ let timeout = Some(Timeout { lib: receive_lib.clone(), expiry: current_timestamp - 1 });
109
+ context.mock_auth(&oapp, "set_receive_library_timeout", (&oapp, &oapp, &src_eid, &timeout));
110
+
111
+ let result = endpoint_client.try_set_receive_library_timeout(&oapp, &oapp, &src_eid, &timeout);
112
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::InvalidExpiry.into());
113
+ }
114
+
115
+ // Unregistered library rejection (timeout.lib must be registered)
116
+ #[test]
117
+ fn test_set_receive_library_timeout_unregistered_timeout_lib() {
118
+ let context = setup();
119
+ let env = &context.env;
120
+ let endpoint_client = &context.endpoint_client;
121
+
122
+ let oapp = Address::generate(env);
123
+ let src_eid = context.eid;
124
+
125
+ // Create and register a valid receive lib for the custom receive_library.
126
+ let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
127
+ context.register_library_with_auth(&receive_lib);
128
+
129
+ // Set a custom receive library so the OApp is non-default.
130
+ context.set_receive_library_with_auth(&oapp, &oapp, src_eid, &Some(receive_lib.clone()), 0);
131
+
132
+ // Deployed contract, but not registered in endpoint storage.
133
+ let unregistered_timeout_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
134
+
135
+ let timeout = Some(Timeout { lib: unregistered_timeout_lib, expiry: env.ledger().timestamp() + 1000 });
136
+ context.mock_auth(&oapp, "set_receive_library_timeout", (&oapp, &oapp, &src_eid, &timeout));
137
+
138
+ let result = endpoint_client.try_set_receive_library_timeout(&oapp, &oapp, &src_eid, &timeout);
139
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyRegisteredLib.into());
140
+ }
141
+
142
+ // Wrong library type rejection (must be Receive)
143
+ #[test]
144
+ fn test_set_receive_library_timeout_wrong_lib_type() {
145
+ let context = setup();
146
+ let env = &context.env;
147
+ let endpoint_client = &context.endpoint_client;
148
+
149
+ let oapp = Address::generate(env);
150
+ let src_eid = context.eid;
151
+
152
+ // Create and register a valid receive lib for the custom receive_library.
153
+ let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
154
+ context.register_library_with_auth(&receive_lib);
155
+
156
+ // Create and register a send-only lib.
157
+ let send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, src_eid]);
158
+ context.register_library_with_auth(&send_lib);
159
+
160
+ // Set a custom receive library so the OApp is non-default.
161
+ context.set_receive_library_with_auth(&oapp, &oapp, src_eid, &Some(receive_lib.clone()), 0);
162
+
163
+ let timeout = Some(Timeout { lib: send_lib, expiry: env.ledger().timestamp() + 1000 });
164
+ context.mock_auth(&oapp, "set_receive_library_timeout", (&oapp, &oapp, &src_eid, &timeout));
165
+
166
+ let result = endpoint_client.try_set_receive_library_timeout(&oapp, &oapp, &src_eid, &timeout);
167
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyReceiveLib.into());
168
+ }
169
+
170
+ // Unsupported EID rejection (timeout.lib must support src_eid)
171
+ #[test]
172
+ fn test_set_receive_library_timeout_unsupported_eid() {
173
+ let context = setup();
174
+ let env = &context.env;
175
+ let endpoint_client = &context.endpoint_client;
176
+
177
+ let oapp = Address::generate(env);
178
+ let unsupported_eid = context.eid + 1;
179
+
180
+ // Custom receive library for `unsupported_eid` (so get_receive_library() is non-default and does not panic).
181
+ let receive_lib_for_unsupported_eid =
182
+ context.setup_mock_message_lib(MessageLibType::Receive, vec![env, unsupported_eid]);
183
+ context.register_library_with_auth(&receive_lib_for_unsupported_eid);
184
+ context.set_receive_library_with_auth(
185
+ &oapp,
186
+ &oapp,
187
+ unsupported_eid,
188
+ &Some(receive_lib_for_unsupported_eid.clone()),
189
+ 0,
190
+ );
191
+
192
+ // Timeout lib that does NOT support `unsupported_eid` (only supports `context.eid`).
193
+ let receive_lib_for_context_eid = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
194
+ context.register_library_with_auth(&receive_lib_for_context_eid);
195
+
196
+ let timeout = Some(Timeout { lib: receive_lib_for_context_eid, expiry: env.ledger().timestamp() + 1000 });
197
+ context.mock_auth(&oapp, "set_receive_library_timeout", (&oapp, &oapp, &unsupported_eid, &timeout));
198
+
199
+ let result = endpoint_client.try_set_receive_library_timeout(&oapp, &oapp, &unsupported_eid, &timeout);
200
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::UnsupportedEid.into());
201
+ }
202
+
203
+ // Successful update (state update + event emission)
10
204
  #[test]
11
205
  fn test_set_receive_library_timeout_success() {
12
206
  let context = setup();
@@ -14,67 +208,219 @@ fn test_set_receive_library_timeout_success() {
14
208
  let endpoint_client = &context.endpoint_client;
15
209
 
16
210
  let oapp = Address::generate(env);
17
- let current_timestamp = 1_700_000_000;
18
- let grace_period = 1000;
19
-
20
- // Set the ledger timestamp
21
- env.ledger().with_mut(|li| {
22
- li.timestamp = current_timestamp;
23
- });
24
-
25
- // Create and register a valid receive lib
26
- let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
27
-
28
- // Register the library with owner auth
29
- context.mock_owner_auth("register_library", (&receive_lib,));
30
- endpoint_client.register_library(&receive_lib);
31
-
32
- // First set a receive library (non-default) to satisfy the requirement
33
- env.mock_auths(&[MockAuth {
34
- address: &oapp,
35
- invoke: &MockAuthInvoke {
36
- contract: &endpoint_client.address,
37
- fn_name: "set_receive_library",
38
- args: (&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64).into_val(env),
39
- sub_invokes: &[],
40
- },
41
- }]);
42
- endpoint_client.set_receive_library(&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64);
43
-
44
- // Create a timeout
211
+ let src_eid = context.eid;
212
+
213
+ let current_timestamp = 1_700_000_000u64;
214
+ let grace_period = 1000u64;
215
+ env.ledger().with_mut(|li| li.timestamp = current_timestamp);
216
+
217
+ // Create and register a valid receive lib.
218
+ let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
219
+ context.register_library_with_auth(&receive_lib);
220
+
221
+ // Set a custom receive library so the OApp is non-default.
222
+ context.set_receive_library_with_auth(&oapp, &oapp, src_eid, &Some(receive_lib.clone()), 0);
223
+
45
224
  let timeout = Some(Timeout { lib: receive_lib.clone(), expiry: current_timestamp + grace_period });
46
225
 
47
- // Verify initial state - timeout should not be set
48
- let initial_timeout = env.as_contract(&endpoint_client.address, || {
49
- storage::EndpointStorage::receive_library_timeout(env, &oapp, context.eid)
50
- });
51
- assert_eq!(initial_timeout, None, "Initial receive library timeout should be None");
52
-
53
- // Set the timeout with oapp auth
54
- env.mock_auths(&[MockAuth {
55
- address: &oapp,
56
- invoke: &MockAuthInvoke {
57
- contract: &endpoint_client.address,
58
- fn_name: "set_receive_library_timeout",
59
- args: (&oapp, &oapp, &context.eid, &timeout).into_val(env),
60
- sub_invokes: &[],
61
- },
62
- }]);
63
- endpoint_client.set_receive_library_timeout(&oapp, &oapp, &context.eid, &timeout);
64
-
65
- // Verify the event was published
226
+ // Verify initial state via public interface.
227
+ assert_eq!(endpoint_client.receive_library_timeout(&oapp, &src_eid), None);
228
+
229
+ // Should succeed.
230
+ set_receive_library_timeout_with_auth(&context, &oapp, &oapp, src_eid, &timeout);
231
+
232
+ // Verify event emission.
233
+ assert_event(
234
+ env,
235
+ &endpoint_client.address,
236
+ ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: src_eid, timeout: timeout.clone() },
237
+ );
238
+
239
+ // Verify state update via public interface.
240
+ assert_eq!(endpoint_client.receive_library_timeout(&oapp, &src_eid), timeout);
241
+ }
242
+
243
+ // Successful update with SendAndReceive library type (valid for receive)
244
+ #[test]
245
+ fn test_set_receive_library_timeout_success_with_send_and_receive_type() {
246
+ let context = setup();
247
+ let env = &context.env;
248
+ let endpoint_client = &context.endpoint_client;
249
+
250
+ let oapp = Address::generate(env);
251
+ let src_eid = context.eid;
252
+
253
+ let current_timestamp = 1_700_000_000u64;
254
+ env.ledger().with_mut(|li| li.timestamp = current_timestamp);
255
+
256
+ // Create and register a valid receive lib, and set it as the custom receive library.
257
+ let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
258
+ context.register_library_with_auth(&receive_lib);
259
+ context.set_receive_library_with_auth(&oapp, &oapp, src_eid, &Some(receive_lib.clone()), 0);
260
+
261
+ // Create and register a SendAndReceive lib for the timeout.
262
+ let send_and_receive_lib = context.setup_mock_message_lib(MessageLibType::SendAndReceive, vec![env, src_eid]);
263
+ context.register_library_with_auth(&send_and_receive_lib);
264
+
265
+ let timeout = Some(Timeout { lib: send_and_receive_lib.clone(), expiry: current_timestamp + 1000 });
266
+
267
+ // Should succeed.
268
+ set_receive_library_timeout_with_auth(&context, &oapp, &oapp, src_eid, &timeout);
269
+
270
+ // Verify event emission.
66
271
  assert_event(
67
272
  env,
68
273
  &endpoint_client.address,
69
- ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: context.eid, timeout: timeout.clone() },
274
+ ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: src_eid, timeout: timeout.clone() },
70
275
  );
71
276
 
72
- // Verify storage was updated via public interface
73
- assert_eq!(endpoint_client.receive_library_timeout(&oapp, &context.eid), timeout.clone());
277
+ // Verify state update via public interface.
278
+ assert_eq!(endpoint_client.receive_library_timeout(&oapp, &src_eid), timeout);
279
+ }
280
+
281
+ // Delegate authorization (delegate(oapp) is allowed)
282
+ #[test]
283
+ fn test_set_receive_library_timeout_allows_delegate() {
284
+ let context = setup();
285
+ let env = &context.env;
286
+ let endpoint_client = &context.endpoint_client;
287
+
288
+ let oapp = Address::generate(env);
289
+ let delegate = Address::generate(env);
290
+ let src_eid = context.eid;
291
+
292
+ // Set delegate for the OApp.
293
+ let delegate_opt = Some(delegate.clone());
294
+ context.mock_auth(&oapp, "set_delegate", (&oapp, &delegate_opt));
295
+ endpoint_client.set_delegate(&oapp, &delegate_opt);
296
+
297
+ // Create and register a valid receive lib, then set it as the custom receive library.
298
+ let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
299
+ context.register_library_with_auth(&receive_lib);
300
+ context.set_receive_library_with_auth(&oapp, &oapp, src_eid, &Some(receive_lib.clone()), 0);
301
+
302
+ let timeout = Some(Timeout { lib: receive_lib.clone(), expiry: env.ledger().timestamp() + 1000 });
303
+
304
+ // Delegate should succeed.
305
+ set_receive_library_timeout_with_auth(&context, &delegate, &oapp, src_eid, &timeout);
74
306
 
75
- // Assert storage change directly
76
- let stored_timeout = env.as_contract(&endpoint_client.address, || {
77
- storage::EndpointStorage::receive_library_timeout(env, &oapp, context.eid)
78
- });
79
- assert_eq!(stored_timeout, timeout, "Storage should contain the receive library timeout");
307
+ // Verify event emission.
308
+ assert_event(
309
+ env,
310
+ &endpoint_client.address,
311
+ ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: src_eid, timeout: timeout.clone() },
312
+ );
313
+
314
+ // Verify state update via public interface.
315
+ assert_eq!(endpoint_client.receive_library_timeout(&oapp, &src_eid), timeout);
316
+ }
317
+
318
+ // Manual timeout extension keeps the previous custom library valid
319
+ #[test]
320
+ fn test_set_receive_library_timeout_keeps_old_custom_library_valid_until_expiry() {
321
+ let context = setup();
322
+ let env = &context.env;
323
+ let endpoint_client = &context.endpoint_client;
324
+
325
+ let current_timestamp = 1_700_000_000u64;
326
+ env.ledger().with_mut(|li| li.timestamp = current_timestamp);
327
+
328
+ let oapp = Address::generate(env);
329
+ let src_eid = context.eid;
330
+
331
+ // Create and register two receive libs.
332
+ let old_custom = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
333
+ let new_custom = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
334
+ context.register_library_with_auth(&old_custom);
335
+ context.register_library_with_auth(&new_custom);
336
+
337
+ // Set old custom (no grace).
338
+ context.set_receive_library_with_auth(&oapp, &oapp, src_eid, &Some(old_custom.clone()), 0);
339
+ // Switch to new custom (no grace); old should not be valid via "current lib".
340
+ context.set_receive_library_with_auth(&oapp, &oapp, src_eid, &Some(new_custom.clone()), 0);
341
+
342
+ // Without any timeout set, old should be invalid now.
343
+ assert!(!endpoint_client.is_valid_receive_library(&oapp, &src_eid, &old_custom));
344
+ assert!(endpoint_client.is_valid_receive_library(&oapp, &src_eid, &new_custom));
345
+
346
+ // Extend old custom validity via receive_library_timeout.
347
+ let expiry = current_timestamp + 1000;
348
+ let timeout = Some(Timeout { lib: old_custom.clone(), expiry });
349
+ set_receive_library_timeout_with_auth(&context, &oapp, &oapp, src_eid, &timeout);
350
+
351
+ // Old should now be valid until expiry, new remains valid.
352
+ assert!(endpoint_client.is_valid_receive_library(&oapp, &src_eid, &old_custom));
353
+ assert!(endpoint_client.is_valid_receive_library(&oapp, &src_eid, &new_custom));
354
+
355
+ // After expiry, old becomes invalid again.
356
+ env.ledger().with_mut(|li| li.timestamp = expiry);
357
+ assert!(!endpoint_client.is_valid_receive_library(&oapp, &src_eid, &old_custom));
358
+ assert!(endpoint_client.is_valid_receive_library(&oapp, &src_eid, &new_custom));
359
+ }
360
+
361
+ // Clearing timeout (None removes the timeout)
362
+ #[test]
363
+ fn test_set_receive_library_timeout_success_with_none() {
364
+ let context = setup();
365
+ let env = &context.env;
366
+ let endpoint_client = &context.endpoint_client;
367
+
368
+ let oapp = Address::generate(env);
369
+ let src_eid = context.eid;
370
+
371
+ // Create and register a valid receive lib, then set it as the custom receive library.
372
+ let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
373
+ context.register_library_with_auth(&receive_lib);
374
+ context.set_receive_library_with_auth(&oapp, &oapp, src_eid, &Some(receive_lib.clone()), 0);
375
+
376
+ // Should succeed with None (clears the timeout).
377
+ set_receive_library_timeout_with_auth(&context, &oapp, &oapp, src_eid, &None);
378
+
379
+ // Verify event emission.
380
+ assert_event(
381
+ env,
382
+ &endpoint_client.address,
383
+ ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: src_eid, timeout: None },
384
+ );
385
+
386
+ // Verify state update via public interface.
387
+ assert_eq!(endpoint_client.receive_library_timeout(&oapp, &src_eid), None);
388
+ }
389
+
390
+ // Clearing an existing timeout (Some -> None)
391
+ #[test]
392
+ fn test_set_receive_library_timeout_clears_existing_timeout() {
393
+ let context = setup();
394
+ let env = &context.env;
395
+ let endpoint_client = &context.endpoint_client;
396
+
397
+ let oapp = Address::generate(env);
398
+ let src_eid = context.eid;
399
+
400
+ let current_timestamp = 1_700_000_000u64;
401
+ env.ledger().with_mut(|li| li.timestamp = current_timestamp);
402
+
403
+ // Create and register a valid receive lib, then set it as the custom receive library.
404
+ let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
405
+ context.register_library_with_auth(&receive_lib);
406
+ context.set_receive_library_with_auth(&oapp, &oapp, src_eid, &Some(receive_lib.clone()), 0);
407
+
408
+ // First set a timeout.
409
+ let timeout = Some(Timeout { lib: receive_lib.clone(), expiry: current_timestamp + 1000 });
410
+ set_receive_library_timeout_with_auth(&context, &oapp, &oapp, src_eid, &timeout);
411
+ assert_event(
412
+ env,
413
+ &endpoint_client.address,
414
+ ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: src_eid, timeout: timeout.clone() },
415
+ );
416
+ assert_eq!(endpoint_client.receive_library_timeout(&oapp, &src_eid), timeout);
417
+
418
+ // Then clear it.
419
+ set_receive_library_timeout_with_auth(&context, &oapp, &oapp, src_eid, &None);
420
+ assert_event(
421
+ env,
422
+ &endpoint_client.address,
423
+ ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: src_eid, timeout: None },
424
+ );
425
+ assert_eq!(endpoint_client.receive_library_timeout(&oapp, &src_eid), None);
80
426
  }