@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,10 +1,9 @@
1
- use crate::{events::DelegateSet, storage, tests::endpoint_setup::setup};
2
- use soroban_sdk::{
3
- testutils::{Address as _, MockAuth, MockAuthInvoke},
4
- Address, IntoVal,
5
- };
1
+ use soroban_sdk::{testutils::Address as _, Address};
6
2
  use utils::testing_utils::assert_event;
7
3
 
4
+ use crate::{events::DelegateSet, tests::endpoint_setup::setup};
5
+
6
+ // Setting delegate (state update + event emission)
8
7
  #[test]
9
8
  fn test_set_delegate() {
10
9
  let context = setup();
@@ -14,30 +13,105 @@ fn test_set_delegate() {
14
13
  let oapp = Address::generate(env);
15
14
  let delegate = Address::generate(env);
16
15
 
17
- // Verify initial state - delegate should not be set
18
- let initial_delegate = env.as_contract(&endpoint_client.address, || storage::EndpointStorage::delegate(env, &oapp));
16
+ // Verify initial state - delegate should not be set.
17
+ let initial_delegate = endpoint_client.delegate(&oapp);
19
18
  assert_eq!(initial_delegate, None, "Initial delegate should be None");
20
19
 
21
20
  let delegate_option = Some(delegate.clone());
22
- env.mock_auths(&[MockAuth {
23
- address: &oapp,
24
- invoke: &MockAuthInvoke {
25
- contract: &endpoint_client.address,
26
- fn_name: "set_delegate",
27
- args: (&oapp, &delegate_option).into_val(env),
28
- sub_invokes: &[],
29
- },
30
- }]);
31
- endpoint_client.set_delegate(&oapp, &delegate_option);
21
+ context.set_delegate_with_auth(&oapp, &delegate_option);
32
22
 
33
- // Assert event was published
23
+ // Verify event emission.
34
24
  assert_event(env, &endpoint_client.address, DelegateSet { oapp: oapp.clone(), delegate: Some(delegate.clone()) });
35
25
 
36
- // Verify delegate via public interface
26
+ // Verify state update via public interface.
37
27
  let actual_delegate = endpoint_client.delegate(&oapp);
38
28
  assert_eq!(actual_delegate, Some(delegate.clone()), "Delegate should be set");
29
+ }
30
+
31
+ #[test]
32
+ fn test_set_delegate_overwrites_existing_delegate() {
33
+ let context = setup();
34
+ let env = &context.env;
35
+ let endpoint_client = &context.endpoint_client;
36
+
37
+ let oapp = Address::generate(env);
38
+ let delegate_a = Address::generate(env);
39
+ let delegate_b = Address::generate(env);
40
+
41
+ // Set delegate to A.
42
+ let delegate_a_opt = Some(delegate_a.clone());
43
+ context.set_delegate_with_auth(&oapp, &delegate_a_opt);
44
+ assert_event(env, &endpoint_client.address, DelegateSet { oapp: oapp.clone(), delegate: Some(delegate_a.clone()) });
45
+ assert_eq!(endpoint_client.delegate(&oapp), Some(delegate_a.clone()));
46
+
47
+ // Overwrite delegate with B.
48
+ let delegate_b_opt = Some(delegate_b.clone());
49
+ context.set_delegate_with_auth(&oapp, &delegate_b_opt);
50
+ assert_event(env, &endpoint_client.address, DelegateSet { oapp: oapp.clone(), delegate: Some(delegate_b.clone()) });
51
+ assert_eq!(endpoint_client.delegate(&oapp), Some(delegate_b.clone()));
52
+ }
53
+
54
+ #[test]
55
+ fn test_set_delegate_is_idempotent_for_same_value() {
56
+ let context = setup();
57
+ let env = &context.env;
58
+ let endpoint_client = &context.endpoint_client;
59
+
60
+ let oapp = Address::generate(env);
61
+ let delegate = Address::generate(env);
62
+ let delegate_opt = Some(delegate.clone());
63
+
64
+ // Setting the same delegate twice should succeed and keep state unchanged.
65
+ context.set_delegate_with_auth(&oapp, &delegate_opt);
66
+ context.set_delegate_with_auth(&oapp, &delegate_opt);
67
+
68
+ assert_eq!(endpoint_client.delegate(&oapp), Some(delegate.clone()));
69
+ }
39
70
 
40
- // Assert storage change directly
41
- let stored_delegate = env.as_contract(&endpoint_client.address, || storage::EndpointStorage::delegate(env, &oapp));
42
- assert_eq!(stored_delegate, Some(delegate.clone()), "Storage should contain the delegate address");
71
+ // Removing delegate (state update + event emission)
72
+ #[test]
73
+ fn test_set_delegate_remove() {
74
+ let context = setup();
75
+ let env = &context.env;
76
+ let endpoint_client = &context.endpoint_client;
77
+
78
+ let oapp = Address::generate(env);
79
+ let delegate = Address::generate(env);
80
+
81
+ // First set a delegate.
82
+ let delegate_option = Some(delegate.clone());
83
+ context.set_delegate_with_auth(&oapp, &delegate_option);
84
+
85
+ // Verify delegate was set.
86
+ let stored_delegate = endpoint_client.delegate(&oapp);
87
+ assert_eq!(stored_delegate, Some(delegate.clone()));
88
+
89
+ // Now remove the delegate.
90
+ let remove_option = None::<Address>;
91
+ context.set_delegate_with_auth(&oapp, &remove_option);
92
+
93
+ // Verify event emission.
94
+ assert_event(env, &endpoint_client.address, DelegateSet { oapp: oapp.clone(), delegate: None });
95
+
96
+ // Verify state update via public interface.
97
+ let stored_delegate_after = endpoint_client.delegate(&oapp);
98
+ assert_eq!(stored_delegate_after, None, "Delegate should be removed");
99
+ }
100
+
101
+ // Authorization (only oapp)
102
+ #[test]
103
+ #[should_panic(expected = "Error(Auth, InvalidAction)")]
104
+ fn test_set_delegate_unauthorized() {
105
+ let context = setup();
106
+ let env = &context.env;
107
+ let endpoint_client = &context.endpoint_client;
108
+
109
+ let oapp = Address::generate(env);
110
+ let unauthorized_caller = Address::generate(env);
111
+ let delegate = Address::generate(env);
112
+
113
+ let delegate_option = Some(delegate);
114
+ // Unauthorized caller must not be able to set delegate for an OApp.
115
+ context.mock_auth(&unauthorized_caller, "set_delegate", (&oapp, &delegate_option));
116
+ endpoint_client.set_delegate(&oapp, &delegate_option);
43
117
  }
@@ -1,6 +1,15 @@
1
- use crate::{events::ZROSet, storage, tests::endpoint_setup::setup};
1
+ use soroban_sdk::{testutils::Address as _, Address};
2
2
  use utils::testing_utils::assert_event;
3
3
 
4
+ use crate::{events::ZroSet, tests::endpoint_setup::setup, tests::endpoint_setup::TestSetup};
5
+
6
+ // Helpers
7
+ fn set_zro_with_auth(context: &TestSetup, zro: &Address) {
8
+ context.mock_owner_auth("set_zro", (zro,));
9
+ context.endpoint_client.set_zro(zro);
10
+ }
11
+
12
+ // Success path (state update + event emission)
4
13
  #[test]
5
14
  fn test_set_zro() {
6
15
  let context = setup();
@@ -8,20 +17,63 @@ fn test_set_zro() {
8
17
  let endpoint_client = &context.endpoint_client;
9
18
 
10
19
  // Verify initial state - ZRO should not be set
11
- let initial_zro = env.as_contract(&endpoint_client.address, || storage::EndpointStorage::zro(env));
20
+ let initial_zro = endpoint_client.zro();
12
21
  assert_eq!(initial_zro, None, "Initial ZRO should be None");
13
22
 
14
- context.mock_owner_auth("set_zro", (&context.zro_token_client.address,));
15
- endpoint_client.set_zro(&context.zro_token_client.address);
23
+ set_zro_with_auth(&context, &context.zro_token_client.address);
16
24
 
17
- // Assert event was published
18
- assert_event(env, &endpoint_client.address, ZROSet { zro: context.zro_token_client.address.clone() });
25
+ // Verify event emission.
26
+ assert_event(env, &endpoint_client.address, ZroSet { zro: context.zro_token_client.address.clone() });
19
27
 
20
- // Verify ZRO token is set via public interface
28
+ // Verify state update via public interface.
21
29
  let zro_token = endpoint_client.zro();
22
30
  assert_eq!(zro_token, Some(context.zro_token_client.address.clone()));
31
+ }
32
+
33
+ #[test]
34
+ fn test_set_zro_overwrites_existing_zro() {
35
+ let context = setup();
36
+ let env = &context.env;
37
+ let endpoint_client = &context.endpoint_client;
38
+
39
+ // Create a second token address to overwrite with.
40
+ let owner = context.owner.clone();
41
+ let zro_token_2 = env.register_stellar_asset_contract_v2(owner);
42
+ let zro_addr_2 = zro_token_2.address();
43
+
44
+ // Set ZRO to the first address.
45
+ set_zro_with_auth(&context, &context.zro_token_client.address);
46
+ assert_event(env, &endpoint_client.address, ZroSet { zro: context.zro_token_client.address.clone() });
47
+ assert_eq!(endpoint_client.zro(), Some(context.zro_token_client.address.clone()));
48
+
49
+ // Overwrite ZRO with the second address.
50
+ set_zro_with_auth(&context, &zro_addr_2);
51
+ assert_event(env, &endpoint_client.address, ZroSet { zro: zro_addr_2.clone() });
52
+ assert_eq!(endpoint_client.zro(), Some(zro_addr_2));
53
+ }
23
54
 
24
- // Assert storage change directly
25
- let stored_zro = env.as_contract(&endpoint_client.address, || storage::EndpointStorage::zro(env));
26
- assert_eq!(stored_zro, Some(context.zro_token_client.address.clone()), "Storage should contain the ZRO address");
55
+ #[test]
56
+ fn test_set_zro_is_idempotent_for_same_value() {
57
+ let context = setup();
58
+ let endpoint_client = &context.endpoint_client;
59
+
60
+ // Setting the same ZRO twice should succeed and keep state unchanged.
61
+ set_zro_with_auth(&context, &context.zro_token_client.address);
62
+ set_zro_with_auth(&context, &context.zro_token_client.address);
63
+
64
+ assert_eq!(endpoint_client.zro(), Some(context.zro_token_client.address.clone()));
65
+ }
66
+
67
+ // Authorization (only owner)
68
+ #[test]
69
+ #[should_panic(expected = "Error(Auth, InvalidAction)")]
70
+ fn test_set_zro_unauthorized() {
71
+ let context = setup();
72
+ let env = &context.env;
73
+ let endpoint_client = &context.endpoint_client;
74
+ let unauthorized = soroban_sdk::Address::generate(env);
75
+
76
+ // Unauthorized caller must not be able to set ZRO.
77
+ context.mock_auth(&unauthorized, "set_zro", (&context.zro_token_client.address,));
78
+ endpoint_client.set_zro(&context.zro_token_client.address);
27
79
  }
@@ -1,7 +1,7 @@
1
- use crate::tests::endpoint_setup::setup;
2
1
  use soroban_sdk::testutils::Address as _;
3
- use utils::ownable::DefaultOwnableStorage;
2
+ use utils::ownable::OwnableStorage;
4
3
 
4
+ use crate::tests::endpoint_setup::setup;
5
5
  #[test]
6
6
  fn test_transfer_ownership() {
7
7
  let context = setup();
@@ -14,7 +14,7 @@ fn test_transfer_ownership() {
14
14
  assert_eq!(initial_owner, Some(context.owner.clone()));
15
15
 
16
16
  // Verify initial owner in storage directly
17
- let initial_owner = env.as_contract(&endpoint_client.address, || DefaultOwnableStorage::owner(env));
17
+ let initial_owner = env.as_contract(&endpoint_client.address, || OwnableStorage::owner(env));
18
18
  assert_eq!(initial_owner, Some(context.owner.clone()), "Initial owner should be in storage");
19
19
 
20
20
  context.mock_owner_auth("transfer_ownership", (&new_owner,));
@@ -25,6 +25,6 @@ fn test_transfer_ownership() {
25
25
  assert_eq!(owner, Some(new_owner.clone()));
26
26
 
27
27
  // Assert storage change directly
28
- let stored_owner = env.as_contract(&endpoint_client.address, || DefaultOwnableStorage::owner(env));
28
+ let stored_owner = env.as_contract(&endpoint_client.address, || OwnableStorage::owner(env));
29
29
  assert_eq!(stored_owner, Some(new_owner), "Storage should contain the new owner");
30
30
  }
@@ -1,10 +1,10 @@
1
- use crate::tests::endpoint_setup::setup;
2
1
  use soroban_sdk::{testutils::Address as _, Address};
3
2
  use utils::{
4
- errors::TtlError,
5
- ttl::{TtlConfig, TtlConfigStorage},
3
+ errors::TtlConfigurableError,
4
+ ttl_configurable::{TtlConfig, TtlConfigStorage},
6
5
  };
7
6
 
7
+ use crate::tests::endpoint_setup::setup;
8
8
  fn ttl_defaults(env: &soroban_sdk::Env, contract: &Address) -> (TtlConfig, TtlConfig) {
9
9
  env.as_contract(contract, || {
10
10
  (
@@ -72,7 +72,7 @@ fn test_panic_set_ttl_configs_invalid_instance_range() {
72
72
 
73
73
  assert_eq!(
74
74
  endpoint.try_set_ttl_configs(&instance_config, &persistent_config).unwrap_err().unwrap(),
75
- TtlError::InvalidTtlConfig.into()
75
+ TtlConfigurableError::InvalidTtlConfig.into()
76
76
  );
77
77
  }
78
78
 
@@ -92,14 +92,11 @@ fn test_panic_set_ttl_configs_exceeds_max_ttl() {
92
92
 
93
93
  assert_eq!(
94
94
  endpoint.try_set_ttl_configs(&instance_config, &persistent_config).unwrap_err().unwrap(),
95
- TtlError::InvalidTtlConfig.into()
95
+ TtlConfigurableError::InvalidTtlConfig.into()
96
96
  );
97
97
  }
98
98
 
99
- // ============================================================================
100
99
  // Frozen TTL Config Tests
101
- // ============================================================================
102
-
103
100
  #[test]
104
101
  fn test_is_ttl_configs_frozen_default_false() {
105
102
  let context = setup();
@@ -144,7 +141,7 @@ fn test_freeze_ttl_configs_already_frozen() {
144
141
 
145
142
  // Try to freeze again
146
143
  context.mock_owner_auth("freeze_ttl_configs", ());
147
- assert_eq!(endpoint.try_freeze_ttl_configs().unwrap_err().unwrap(), TtlError::TtlConfigAlreadyFrozen.into());
144
+ assert_eq!(endpoint.try_freeze_ttl_configs().unwrap_err().unwrap(), TtlConfigurableError::TtlConfigAlreadyFrozen.into());
148
145
  }
149
146
 
150
147
  #[test]
@@ -163,7 +160,7 @@ fn test_set_ttl_configs_fails_when_frozen() {
163
160
  context.mock_owner_auth("set_ttl_configs", (&instance_config, &persistent_config));
164
161
  assert_eq!(
165
162
  endpoint.try_set_ttl_configs(&instance_config, &persistent_config).unwrap_err().unwrap(),
166
- TtlError::TtlConfigFrozen.into()
163
+ TtlConfigurableError::TtlConfigFrozen.into()
167
164
  );
168
165
  }
169
166
 
@@ -197,6 +194,6 @@ fn test_set_ttl_configs_then_freeze() {
197
194
  context.mock_owner_auth("set_ttl_configs", (&new_instance_config, &persistent_config));
198
195
  assert_eq!(
199
196
  endpoint.try_set_ttl_configs(&new_instance_config, &persistent_config).unwrap_err().unwrap(),
200
- TtlError::TtlConfigFrozen.into()
197
+ TtlConfigurableError::TtlConfigFrozen.into()
201
198
  );
202
199
  }
@@ -1,59 +1,110 @@
1
- use crate::{tests::endpoint_setup::setup, Origin};
2
1
  use soroban_sdk::{testutils::Address as _, BytesN};
3
2
 
3
+ use crate::{tests::endpoint_setup::setup, tests::endpoint_setup::TestSetup, Origin};
4
+
5
+ fn skip_with_auth(context: &TestSetup, receiver: &soroban_sdk::Address, src_eid: u32, sender: &BytesN<32>, nonce: u64) {
6
+ // `skip` requires authorization from `caller` (the receiver or its delegate).
7
+ context.mock_auth(receiver, "skip", (receiver, receiver, &src_eid, sender, &nonce));
8
+ context.endpoint_client.skip(receiver, receiver, &src_eid, sender, &nonce);
9
+ }
10
+
11
+ fn verify_with_auth(
12
+ context: &TestSetup,
13
+ receive_lib: &soroban_sdk::Address,
14
+ origin: &Origin,
15
+ receiver: &soroban_sdk::Address,
16
+ payload_hash: &BytesN<32>,
17
+ ) {
18
+ // `verify` requires authorization from `receive_lib`.
19
+ context.mock_auth(receive_lib, "verify", (receive_lib, origin, receiver, payload_hash));
20
+ context.endpoint_client.verify(receive_lib, origin, receiver, payload_hash);
21
+ }
22
+
23
+ // New path (lazy nonce == 0) => verifiable when origin.nonce > lazy nonce
4
24
  #[test]
5
- fn test_verifiable_with_new_path() {
25
+ fn test_verifiable_new_path_nonce_1_true() {
6
26
  let context = setup();
7
27
  let endpoint_client = &context.endpoint_client;
8
28
  let receiver = soroban_sdk::Address::generate(&context.env);
9
- let src_eid = 2;
29
+ let src_eid = 2u32;
10
30
  let sender = BytesN::from_array(&context.env, &[1u8; 32]);
11
31
  let origin = Origin { src_eid, sender, nonce: 1 };
12
32
 
13
- // For a new path (lazy nonce is 0), nonce 1 > 0 should be verifiable
33
+ // For a new path (lazy nonce is 0), nonce 1 > 0 should be verifiable.
14
34
  let result = endpoint_client.verifiable(&origin, &receiver);
15
35
  assert!(result);
16
36
  }
17
37
 
38
+ // Established path (lazy nonce > 0) => verifiable when origin.nonce > lazy nonce
18
39
  #[test]
19
- fn test_verifiable_with_higher_nonce() {
40
+ fn test_verifiable_after_skip_nonce_gt_lazy_true() {
20
41
  let context = setup();
42
+ let env = &context.env;
21
43
  let endpoint_client = &context.endpoint_client;
22
- let receiver = soroban_sdk::Address::generate(&context.env);
23
- let src_eid = 2;
24
- let sender = BytesN::from_array(&context.env, &[1u8; 32]);
25
- let origin = Origin { src_eid, sender, nonce: 10 };
44
+ let receiver = soroban_sdk::Address::generate(env);
45
+ let src_eid = 2u32;
46
+ let sender = BytesN::from_array(env, &[1u8; 32]);
47
+
48
+ // Establish the path by skipping nonce 1.
49
+ skip_with_auth(&context, &receiver, src_eid, &sender, 1);
26
50
 
27
- // For a new path (lazy nonce is 0), nonce 10 > 0 should be verifiable
51
+ // Now lazy_nonce = 1, nonce 2 > 1 should be verifiable.
52
+ let origin = Origin { src_eid, sender, nonce: 2 };
28
53
  let result = endpoint_client.verifiable(&origin, &receiver);
29
54
  assert!(result);
30
55
  }
31
56
 
57
+ // Nonce <= lazy is still verifiable when inbound payload hash exists
32
58
  #[test]
33
- fn test_verifiable_after_skip() {
59
+ fn test_verifiable_true_when_nonce_leq_lazy_but_payload_hash_exists() {
34
60
  let context = setup();
35
61
  let env = &context.env;
36
62
  let endpoint_client = &context.endpoint_client;
37
- let receiver = soroban_sdk::Address::generate(env);
38
- let src_eid = 2;
63
+
64
+ let src_eid = 2u32;
39
65
  let sender = BytesN::from_array(env, &[1u8; 32]);
66
+ let receiver = soroban_sdk::Address::generate(env);
40
67
 
41
- // Skip nonce 1
42
- use soroban_sdk::{testutils::MockAuth, testutils::MockAuthInvoke, IntoVal};
43
- env.mock_auths(&[MockAuth {
44
- address: &receiver,
45
- invoke: &MockAuthInvoke {
46
- contract: &endpoint_client.address,
47
- fn_name: "skip",
48
- args: (&receiver, &receiver, &src_eid, &sender, &1u64).into_val(env),
49
- sub_invokes: &[],
50
- },
51
- }]);
52
- endpoint_client.skip(&receiver, &receiver, &src_eid, &sender, &1);
53
-
54
- // Now lazy_nonce = 1, nonce 2 > 1 should be verifiable
55
- let origin = Origin { src_eid, sender, nonce: 2 };
56
- let result = endpoint_client.verifiable(&origin, &receiver);
57
- assert!(result);
68
+ // Setup receive library (needed to store a payload hash via verify).
69
+ let receive_lib = context.setup_default_receive_lib(src_eid, 0);
70
+
71
+ // Establish the path by skipping nonce 1 (lazy becomes 1).
72
+ skip_with_auth(&context, &receiver, src_eid, &sender, 1);
73
+
74
+ // Verify nonce 2 (allowed because 2 > lazy 1) which stores inbound payload hash for nonce 2.
75
+ let origin2 = Origin { src_eid, sender: sender.clone(), nonce: 2u64 };
76
+ let payload_hash2 = BytesN::from_array(env, &[0x33u8; 32]);
77
+ verify_with_auth(&context, &receive_lib, &origin2, &receiver, &payload_hash2);
78
+
79
+ // Advance lazy nonce to 3 while keeping payload hash for 2 (skip sets lazy nonce only).
80
+ skip_with_auth(&context, &receiver, src_eid, &sender, 3);
81
+
82
+ // Sanity: lazy nonce was advanced, and the payload hash for nonce 2 still exists.
83
+ assert_eq!(endpoint_client.lazy_inbound_nonce(&receiver, &src_eid, &sender), 3);
84
+ assert!(endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &2u64).is_some());
85
+
86
+ // Now nonce 2 <= lazy 3, but payload hash exists -> verifiable should be true.
87
+ assert!(endpoint_client.verifiable(&origin2, &receiver));
58
88
  }
59
89
 
90
+ // Boundary case (nonce == lazy)
91
+ #[test]
92
+ fn test_verifiable_nonce_eq_lazy_false_without_payload_hash() {
93
+ let context = setup();
94
+ let env = &context.env;
95
+ let endpoint_client = &context.endpoint_client;
96
+
97
+ let src_eid = 2u32;
98
+ let sender = BytesN::from_array(env, &[1u8; 32]);
99
+ let receiver = soroban_sdk::Address::generate(env);
100
+
101
+ // Set lazy nonce to 2 without storing any payload hashes.
102
+ skip_with_auth(&context, &receiver, src_eid, &sender, 1);
103
+ skip_with_auth(&context, &receiver, src_eid, &sender, 2);
104
+ assert_eq!(endpoint_client.lazy_inbound_nonce(&receiver, &src_eid, &sender), 2);
105
+
106
+ // nonce == lazy and payload hash missing -> verifiable should be false.
107
+ let origin2 = Origin { src_eid, sender: sender.clone(), nonce: 2u64 };
108
+ assert!(endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &2u64).is_none());
109
+ assert!(!endpoint_client.verifiable(&origin2, &receiver));
110
+ }