@layerzerolabs/protocol-stellar-v2 0.2.13 → 0.2.15

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 (319) hide show
  1. package/.turbo/turbo-build.log +384 -278
  2. package/.turbo/turbo-lint.log +110 -78
  3. package/.turbo/turbo-test.log +1248 -1014
  4. package/Cargo.lock +130 -3
  5. package/Cargo.toml +2 -1
  6. package/contracts/common-macros/src/contract_impl.rs +6 -1
  7. package/contracts/common-macros/src/lib.rs +47 -8
  8. package/contracts/common-macros/src/ownable.rs +7 -25
  9. package/contracts/common-macros/src/storage.rs +1 -1
  10. package/contracts/common-macros/src/tests/contract_impl.rs +5 -0
  11. package/contracts/common-macros/src/tests/mod.rs +1 -0
  12. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap +23 -7
  13. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +5 -25
  14. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +48 -48
  15. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +5 -25
  16. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +21 -0
  17. package/contracts/common-macros/src/tests/upgradeable.rs +31 -0
  18. package/contracts/common-macros/src/ttl_configurable.rs +14 -44
  19. package/contracts/common-macros/src/upgradeable.rs +76 -0
  20. package/contracts/endpoint-v2/src/endpoint_v2.rs +25 -1
  21. package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +175 -8
  22. package/contracts/endpoint-v2/src/tests/endpoint_v2/build_outbound_packet.rs +76 -0
  23. package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +342 -159
  24. package/contracts/endpoint-v2/src/tests/endpoint_v2/delegate.rs +3 -15
  25. package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +20 -31
  26. package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +126 -164
  27. package/contracts/endpoint-v2/src/tests/endpoint_v2/mod.rs +1 -0
  28. package/contracts/endpoint-v2/src/tests/endpoint_v2/native_token.rs +0 -1
  29. package/contracts/endpoint-v2/src/tests/endpoint_v2/owner.rs +0 -1
  30. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +311 -304
  31. package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +423 -96
  32. package/contracts/endpoint-v2/src/tests/endpoint_v2/recover_token.rs +1 -1
  33. package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +47 -20
  34. package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +373 -403
  35. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +96 -22
  36. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +61 -9
  37. package/contracts/endpoint-v2/src/tests/endpoint_v2/transfer_ownership.rs +4 -4
  38. package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +8 -11
  39. package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +81 -30
  40. package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +209 -76
  41. package/contracts/endpoint-v2/src/tests/endpoint_v2/zro.rs +0 -1
  42. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library.rs +24 -0
  43. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library_timeout.rs +40 -0
  44. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_send_library.rs +24 -0
  45. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_config.rs +108 -0
  46. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_library_index.rs +52 -0
  47. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_receive_library.rs +92 -0
  48. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_registered_libraries.rs +74 -0
  49. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_send_library.rs +83 -0
  50. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_registered_library.rs +32 -0
  51. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_supported_eid.rs +28 -0
  52. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_valid_receive_library.rs +261 -0
  53. package/contracts/endpoint-v2/src/tests/message_lib_manager/mod.rs +16 -0
  54. package/contracts/endpoint-v2/src/tests/message_lib_manager/receive_library_timeout.rs +62 -0
  55. package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +65 -43
  56. package/contracts/endpoint-v2/src/tests/message_lib_manager/registered_libraries_count.rs +42 -0
  57. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +61 -0
  58. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +3 -5
  59. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +59 -0
  60. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +15 -1
  61. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_config.rs +155 -51
  62. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +114 -92
  63. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +235 -132
  64. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +93 -87
  65. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +346 -245
  66. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +406 -60
  67. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +252 -78
  68. package/contracts/endpoint-v2/src/tests/message_lib_manager/timeout.rs +102 -0
  69. package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +212 -273
  70. package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +203 -0
  71. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +94 -0
  72. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_nonce.rs +78 -248
  73. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +7 -282
  74. package/contracts/endpoint-v2/src/tests/messaging_channel/lazy_inbound_nonce.rs +6 -274
  75. package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +3 -2
  76. package/contracts/endpoint-v2/src/tests/messaging_channel/next_guid.rs +86 -178
  77. package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +328 -212
  78. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound.rs +68 -0
  79. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound_nonce.rs +6 -209
  80. package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +207 -159
  81. package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +142 -153
  82. package/contracts/endpoint-v2/src/tests/messaging_composer/compose_queue.rs +6 -179
  83. package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +163 -221
  84. package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +90 -121
  85. package/contracts/endpoint-v2/src/tests/mock.rs +18 -4
  86. package/contracts/endpoint-v2/src/tests/util/build_payload.rs +4 -70
  87. package/contracts/endpoint-v2/src/tests/util/compute_guid.rs +2 -1
  88. package/contracts/endpoint-v2/src/tests/util/keccak256.rs +17 -106
  89. package/contracts/layerzero-views/Cargo.toml +35 -0
  90. package/contracts/layerzero-views/src/errors.rs +10 -0
  91. package/contracts/layerzero-views/src/layerzero_view.rs +229 -0
  92. package/contracts/layerzero-views/src/lib.rs +38 -0
  93. package/contracts/layerzero-views/src/storage.rs +18 -0
  94. package/contracts/layerzero-views/src/tests/layerzero_view_tests.rs +423 -0
  95. package/contracts/layerzero-views/src/tests/mod.rs +4 -0
  96. package/contracts/layerzero-views/src/tests/setup.rs +377 -0
  97. package/contracts/layerzero-views/src/types.rs +50 -0
  98. package/contracts/macro-integration-tests/Cargo.toml +30 -0
  99. package/contracts/macro-integration-tests/src/lib.rs +1 -0
  100. package/contracts/macro-integration-tests/tests/runtime/ownable/initialization.rs +62 -0
  101. package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +22 -0
  102. package/contracts/macro-integration-tests/tests/runtime/ownable/only_owner_guard.rs +97 -0
  103. package/contracts/macro-integration-tests/tests/runtime/ownable/ownership_transfer.rs +101 -0
  104. package/contracts/macro-integration-tests/tests/runtime/storage/keyed_roundtrip.rs +225 -0
  105. package/contracts/macro-integration-tests/tests/runtime/storage/mod.rs +4 -0
  106. package/contracts/macro-integration-tests/tests/runtime/storage/name_override_runtime.rs +52 -0
  107. package/contracts/macro-integration-tests/tests/runtime/storage/ttl_extension.rs +261 -0
  108. package/contracts/macro-integration-tests/tests/runtime/storage/unkeyed_roundtrip.rs +137 -0
  109. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +113 -0
  110. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/extend_instance_ttl.rs +50 -0
  111. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +139 -0
  112. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +3 -0
  113. package/contracts/macro-integration-tests/tests/runtime.rs +5 -0
  114. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.rs +12 -0
  115. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.stderr +7 -0
  116. package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.rs +12 -0
  117. package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.stderr +7 -0
  118. package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.rs +21 -0
  119. package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.stderr +7 -0
  120. package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.rs +13 -0
  121. package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.stderr +7 -0
  122. package/contracts/macro-integration-tests/tests/ui/error/pass/attr_on_variant_allowed.rs +20 -0
  123. package/contracts/macro-integration-tests/tests/ui/error/pass/basic_auto_discriminants.rs +15 -0
  124. package/contracts/macro-integration-tests/tests/ui/error/pass/mixed_discriminants.rs +16 -0
  125. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_owner_missing_env.rs +22 -0
  126. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_owner_missing_env.stderr +16 -0
  127. package/contracts/macro-integration-tests/tests/ui/ownable/pass/minimal_contract.rs +26 -0
  128. package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +22 -0
  129. package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_owner_env_param_variants.rs +46 -0
  130. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.rs +13 -0
  131. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.stderr +7 -0
  132. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.rs +13 -0
  133. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.stderr +7 -0
  134. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.rs +10 -0
  135. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.stderr +7 -0
  136. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.rs +12 -0
  137. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.stderr +7 -0
  138. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.rs +10 -0
  139. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.stderr +7 -0
  140. package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.rs +10 -0
  141. package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.stderr +7 -0
  142. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.rs +12 -0
  143. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.stderr +7 -0
  144. package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.rs +13 -0
  145. package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.stderr +7 -0
  146. package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.rs +13 -0
  147. package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.stderr +7 -0
  148. package/contracts/macro-integration-tests/tests/ui/storage/pass/default_value_on_variant.rs +14 -0
  149. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_instance_unit_basic.rs +14 -0
  150. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_persistent_named_fields_keyed.rs +16 -0
  151. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_temporary_unit_option.rs +15 -0
  152. package/contracts/macro-integration-tests/tests/ui/storage/pass/name_override.rs +14 -0
  153. package/contracts/macro-integration-tests/tests/ui/storage/pass/no_auto_ttl_extension.rs +19 -0
  154. package/contracts/macro-integration-tests/tests/ui/storage/pass/ttl_provider_basic.rs +15 -0
  155. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +44 -0
  156. package/contracts/macro-integration-tests/tests/ui_error.rs +11 -0
  157. package/contracts/macro-integration-tests/tests/ui_ownable.rs +11 -0
  158. package/contracts/macro-integration-tests/tests/ui_storage.rs +11 -0
  159. package/contracts/macro-integration-tests/tests/ui_ttl_configurable.rs +12 -0
  160. package/contracts/message-libs/blocked-message-lib/src/lib.rs +17 -17
  161. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +64 -0
  162. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet.rs +58 -0
  163. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet_header.rs +138 -0
  164. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/mod.rs +6 -0
  165. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload.rs +30 -0
  166. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload_hash.rs +15 -0
  167. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/test_helper.rs +39 -0
  168. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_dvn_option.rs +57 -0
  169. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +50 -0
  170. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +74 -0
  171. package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +280 -0
  172. package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +126 -0
  173. package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +48 -0
  174. package/contracts/message-libs/message-lib-common/src/tests/worker_options/mod.rs +7 -0
  175. package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +139 -0
  176. package/contracts/message-libs/message-lib-common/src/worker_options.rs +31 -1
  177. package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +2 -2
  178. package/contracts/message-libs/treasury/src/errors.rs +0 -1
  179. package/contracts/message-libs/treasury/src/lib.rs +3 -3
  180. package/contracts/message-libs/treasury/src/storage.rs +2 -0
  181. package/contracts/message-libs/treasury/src/treasury.rs +12 -13
  182. package/contracts/message-libs/uln-302/Cargo.toml +1 -1
  183. package/contracts/message-libs/uln-302/src/errors.rs +0 -5
  184. package/contracts/message-libs/uln-302/src/events.rs +5 -6
  185. package/contracts/message-libs/uln-302/src/receive_uln.rs +24 -54
  186. package/contracts/message-libs/uln-302/src/send_uln.rs +89 -135
  187. package/contracts/message-libs/uln-302/src/storage.rs +5 -5
  188. package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +5 -7
  189. package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +3 -3
  190. package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +6 -9
  191. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +2 -2
  192. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +3 -3
  193. package/contracts/message-libs/uln-302/src/tests/setup.rs +9 -0
  194. package/contracts/message-libs/uln-302/src/tests/testing_utils.rs +5 -0
  195. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_receive_uln_config.rs +1 -2
  196. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_send_uln_config.rs +1 -2
  197. package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +37 -55
  198. package/contracts/message-libs/uln-302/src/uln302.rs +8 -5
  199. package/contracts/oapps/counter/src/counter.rs +0 -1
  200. package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +306 -224
  201. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +0 -1
  202. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +0 -1
  203. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +0 -1
  204. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +0 -1
  205. package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_core.rs +1 -0
  206. package/contracts/oapps/oft/integration-tests/setup.rs +10 -3
  207. package/contracts/oapps/oft/integration-tests/utils.rs +1 -1
  208. package/contracts/oapps/oft/src/default_oft_impl.rs +9 -3
  209. package/contracts/oapps/oft/src/extensions/oft_fee.rs +5 -5
  210. package/contracts/oapps/oft/src/extensions/pausable.rs +1 -1
  211. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +18 -18
  212. package/contracts/oapps/oft/src/oft.rs +9 -9
  213. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +1 -1
  214. package/contracts/oapps/oft/src/tests/extensions/setup.rs +26 -11
  215. package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +1 -1
  216. package/contracts/oapps/oft/src/tests/test_send.rs +4 -4
  217. package/contracts/oapps/oft/src/tests/test_utils.rs +93 -74
  218. package/contracts/oapps/oft-std/Cargo.toml +6 -0
  219. package/contracts/oapps/oft-std/integration-tests/extensions/mod.rs +3 -0
  220. package/contracts/oapps/oft-std/integration-tests/extensions/test_oft_fee.rs +157 -0
  221. package/contracts/oapps/oft-std/integration-tests/extensions/test_pausable.rs +162 -0
  222. package/contracts/oapps/oft-std/integration-tests/extensions/test_rate_limiter.rs +186 -0
  223. package/contracts/oapps/oft-std/integration-tests/mod.rs +3 -0
  224. package/contracts/oapps/oft-std/integration-tests/setup.rs +245 -0
  225. package/contracts/oapps/oft-std/integration-tests/utils.rs +427 -0
  226. package/contracts/oapps/oft-std/src/lib.rs +12 -1
  227. package/contracts/oapps/oft-std/src/oft.rs +122 -25
  228. package/contracts/upgrader/Cargo.toml +19 -0
  229. package/contracts/upgrader/src/lib.rs +96 -0
  230. package/contracts/upgrader/src/tests/mod.rs +1 -0
  231. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract1.wasm +0 -0
  232. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract2.wasm +0 -0
  233. package/contracts/upgrader/src/tests/test_upgrader.rs +120 -0
  234. package/contracts/utils/src/errors.rs +6 -1
  235. package/contracts/utils/src/lib.rs +2 -1
  236. package/contracts/utils/src/ownable.rs +49 -61
  237. package/contracts/utils/src/tests/mod.rs +3 -1
  238. package/contracts/utils/src/tests/option_ext.rs +21 -0
  239. package/contracts/utils/src/tests/ownable.rs +10 -69
  240. package/contracts/utils/src/tests/ttl_configurable.rs +596 -0
  241. package/contracts/utils/src/tests/upgradeable.rs +288 -0
  242. package/contracts/utils/src/{ttl.rs → ttl_configurable.rs} +67 -52
  243. package/contracts/utils/src/upgradeable.rs +54 -0
  244. package/contracts/workers/dvn/Cargo.toml +1 -1
  245. package/contracts/workers/dvn/src/auth.rs +21 -32
  246. package/contracts/workers/dvn/src/dvn.rs +40 -3
  247. package/contracts/workers/dvn/src/errors.rs +1 -0
  248. package/contracts/workers/dvn/src/multisig.rs +10 -6
  249. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +2 -2
  250. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +4 -4
  251. package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -2
  252. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +46 -14
  253. package/contracts/workers/dvn-fee-lib/src/errors.rs +3 -2
  254. package/contracts/workers/dvn-fee-lib/src/lib.rs +5 -11
  255. package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +30 -16
  256. package/contracts/workers/executor/src/executor.rs +16 -2
  257. package/contracts/workers/executor-fee-lib/src/errors.rs +9 -7
  258. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +154 -119
  259. package/contracts/workers/executor-helper/Cargo.toml +0 -5
  260. package/contracts/workers/executor-helper/src/lib.rs +1 -7
  261. package/contracts/workers/price-feed/Cargo.toml +0 -1
  262. package/contracts/workers/price-feed/src/errors.rs +3 -2
  263. package/contracts/workers/price-feed/src/lib.rs +5 -6
  264. package/contracts/workers/price-feed/src/price_feed.rs +39 -17
  265. package/contracts/workers/worker/Cargo.toml +4 -0
  266. package/contracts/workers/worker/src/interfaces/price_feed.rs +3 -3
  267. package/contracts/workers/worker/src/lib.rs +2 -2
  268. package/contracts/workers/worker/src/tests/mod.rs +4 -0
  269. package/contracts/workers/worker/src/tests/setup.rs +147 -0
  270. package/contracts/workers/worker/src/tests/worker.rs +501 -0
  271. package/contracts/workers/worker/src/worker.rs +10 -16
  272. package/package.json +3 -3
  273. package/sdk/dist/generated/bml.d.ts +40 -30
  274. package/sdk/dist/generated/bml.js +16 -11
  275. package/sdk/dist/generated/counter.d.ts +168 -134
  276. package/sdk/dist/generated/counter.js +26 -21
  277. package/sdk/dist/generated/dvn.d.ts +1932 -0
  278. package/sdk/dist/generated/dvn.js +288 -0
  279. package/sdk/dist/generated/dvn_fee_lib.d.ts +615 -0
  280. package/sdk/dist/generated/dvn_fee_lib.js +123 -0
  281. package/sdk/dist/generated/endpoint.d.ts +75 -41
  282. package/sdk/dist/generated/endpoint.js +22 -17
  283. package/sdk/dist/generated/executor.d.ts +1809 -0
  284. package/sdk/dist/generated/executor.js +269 -0
  285. package/sdk/dist/generated/executor_fee_lib.d.ts +999 -0
  286. package/sdk/dist/generated/executor_fee_lib.js +208 -0
  287. package/sdk/dist/generated/executor_helper.d.ts +869 -0
  288. package/sdk/dist/generated/executor_helper.js +187 -0
  289. package/sdk/dist/generated/oft_std.d.ts +1544 -0
  290. package/sdk/dist/generated/oft_std.js +271 -0
  291. package/sdk/dist/generated/price_feed.d.ts +1002 -0
  292. package/sdk/dist/generated/price_feed.js +170 -0
  293. package/sdk/dist/generated/sml.d.ts +75 -41
  294. package/sdk/dist/generated/sml.js +22 -17
  295. package/sdk/dist/generated/uln302.d.ts +79 -60
  296. package/sdk/dist/generated/uln302.js +37 -37
  297. package/sdk/dist/generated/upgrader.d.ts +70 -0
  298. package/sdk/dist/generated/upgrader.js +19 -0
  299. package/sdk/dist/index.d.ts +8 -0
  300. package/sdk/dist/index.js +11 -0
  301. package/sdk/package.json +4 -3
  302. package/sdk/src/index.ts +13 -0
  303. package/sdk/test/index.test.ts +0 -1
  304. package/sdk/test/oft.test.ts +12 -23
  305. package/sdk/test/suites/testUpgradeable.ts +169 -0
  306. package/sdk/test/upgrader.test.ts +309 -0
  307. package/tools/ts-bindings-gen/src/main.rs +11 -1
  308. package/contracts/endpoint-v2/src/tests/messaging_channel/clear.rs +0 -316
  309. package/contracts/endpoint-v2/src/tests/messaging_channel/internal.rs +0 -388
  310. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +0 -162
  311. package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +0 -319
  312. package/contracts/utils/src/tests/ttl.rs +0 -421
  313. /package/contracts/{oapp-macros → oapps/oapp-macros}/Cargo.toml +0 -0
  314. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/lib.rs +0 -0
  315. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_full.rs +0 -0
  316. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_options_type3.rs +0 -0
  317. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_receiver.rs +0 -0
  318. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_sender.rs +0 -0
  319. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/util.rs +0 -0
@@ -2,130 +2,98 @@ use soroban_sdk::{
2
2
  testutils::{Address as _, Ledger},
3
3
  vec, Address,
4
4
  };
5
+ use utils::testing_utils::assert_event;
5
6
 
6
7
  use crate::{
7
8
  errors::EndpointError,
8
9
  events::{DefaultReceiveLibTimeoutSet, DefaultReceiveLibrarySet},
9
- storage,
10
- tests::endpoint_setup::setup,
10
+ tests::endpoint_setup::{setup, TestSetup},
11
11
  MessageLibType, Timeout,
12
12
  };
13
- use utils::testing_utils::assert_event;
14
13
 
15
- // Integration tests for set_default_receive_library
14
+ fn try_set_default_receive_library_with_auth(
15
+ context: &TestSetup,
16
+ src_eid: u32,
17
+ receive_lib: &Address,
18
+ grace_period: u64,
19
+ ) -> Result<(), Result<soroban_sdk::Error, soroban_sdk::InvokeError>> {
20
+ context.mock_owner_auth("set_default_receive_library", (&src_eid, receive_lib, &grace_period));
21
+ context
22
+ .endpoint_client
23
+ .try_set_default_receive_library(&src_eid, receive_lib, &grace_period)
24
+ .map(|r| r.expect("conversion error"))
25
+ }
26
+
27
+ // Unsupported EID rejection (library must support src_eid)
16
28
  #[test]
17
29
  fn test_set_default_receive_library_unsupported_eid() {
18
30
  let context = setup();
19
31
  let env = &context.env;
20
- let endpoint_client = &context.endpoint_client;
21
32
 
22
33
  let unsupported_eid = context.eid + 1;
23
34
 
24
- // Create and register a receive lib that only supports TEST_context.eid
35
+ // Create and register a receive lib that only supports `context.eid`.
25
36
  let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
26
37
 
27
- // Mock owner auth for register_library
28
- context.mock_owner_auth("register_library", (&receive_lib,));
29
- endpoint_client.register_library(&receive_lib);
30
-
31
- // Mock owner auth for set_default_receive_library
32
- context.mock_owner_auth("set_default_receive_library", (&unsupported_eid, &receive_lib, &0u64));
33
-
34
- // Try to set it as default for unsupported eid
35
- let result = endpoint_client.try_set_default_receive_library(&unsupported_eid, &receive_lib, &0u64);
38
+ context.register_library_with_auth(&receive_lib);
36
39
 
40
+ let result = try_set_default_receive_library_with_auth(&context, unsupported_eid, &receive_lib, 0);
37
41
  assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::UnsupportedEid.into());
38
42
  }
39
43
 
44
+ // Wrong library type rejection (must be Receive)
40
45
  #[test]
41
46
  fn test_set_default_receive_library_wrong_lib_type() {
42
47
  let context = setup();
43
48
  let env = &context.env;
44
- let endpoint_client = &context.endpoint_client;
45
49
 
46
- // Create and register a send-only lib that supports eid 1
50
+ // Create and register a send-only lib that supports `context.eid`.
47
51
  let send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
48
52
 
49
- // Mock owner auth for register_library
50
- context.mock_owner_auth("register_library", (&send_lib,));
51
- endpoint_client.register_library(&send_lib);
52
-
53
- // Mock owner auth for set_default_receive_library
54
- context.mock_owner_auth("set_default_receive_library", (&context.eid, &send_lib, &0u64));
55
-
56
- // Try to set it as default receive library
57
- let result = endpoint_client.try_set_default_receive_library(&context.eid, &send_lib, &0u64);
53
+ context.register_library_with_auth(&send_lib);
58
54
 
55
+ let result = try_set_default_receive_library_with_auth(&context, context.eid, &send_lib, 0);
59
56
  assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyReceiveLib.into());
60
57
  }
61
58
 
59
+ // Unregistered library rejection
62
60
  #[test]
63
61
  fn test_set_default_receive_library_unregistered_lib() {
64
62
  let context = setup();
65
63
  let env = &context.env;
66
- let endpoint_client = &context.endpoint_client;
67
64
 
68
- // Create but don't register a valid receive lib
65
+ // Create but do not register a valid receive lib.
69
66
  let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
70
67
 
71
- // Mock owner auth for set_default_receive_library
72
- context.mock_owner_auth("set_default_receive_library", (&context.eid, &receive_lib, &0u64));
73
-
74
- // Try to set it as default without registering
75
- let result = endpoint_client.try_set_default_receive_library(&context.eid, &receive_lib, &0u64);
76
-
68
+ // Try to set it as default without registering (should panic).
69
+ //
70
+ // Note: a non-deployed address is also "not registered" from the endpoint's perspective, so it
71
+ // will fail with the same error as well.
72
+ let result = try_set_default_receive_library_with_auth(&context, context.eid, &receive_lib, 0);
77
73
  assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyRegisteredLib.into());
78
74
  }
79
75
 
80
- #[test]
81
- fn test_set_default_receive_library_non_deployed_lib() {
82
- let context = setup();
83
- let env = &context.env;
84
- let endpoint_client = &context.endpoint_client;
85
-
86
- // Address without any contract deployed
87
- let non_existent_lib = Address::generate(env);
88
-
89
- // Mock owner auth for set_default_receive_library
90
- context.mock_owner_auth("set_default_receive_library", (&context.eid, &non_existent_lib, &0u64));
91
-
92
- // Try to set a non-existent contract as default
93
- let result = endpoint_client.try_set_default_receive_library(&context.eid, &non_existent_lib, &0u64);
94
-
95
- assert!(result.is_err());
96
- }
97
-
76
+ // Successful update (state update + event emission)
98
77
  #[test]
99
78
  fn test_set_default_receive_library_success() {
100
79
  let context = setup();
101
80
  let env = &context.env;
102
81
  let endpoint_client = &context.endpoint_client;
103
82
 
104
- // Create and register a valid receive lib that supports eid 1
83
+ // Create and register a valid receive lib that supports `context.eid`.
105
84
  let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
106
85
 
107
- // Mock owner auth for register_library
108
- context.mock_owner_auth("register_library", (&receive_lib,));
109
- endpoint_client.register_library(&receive_lib);
86
+ context.register_library_with_auth(&receive_lib);
110
87
 
111
- // Verify initial state - default receive library should not be set
88
+ // Verify initial state via public interface.
112
89
  assert_eq!(endpoint_client.default_receive_library(&context.eid), None);
113
- let initial_lib = env
114
- .as_contract(&endpoint_client.address, || storage::EndpointStorage::default_receive_library(env, context.eid));
115
- assert_eq!(initial_lib, None, "Initial default receive library should be None");
116
90
 
117
- let initial_timeout = env.as_contract(&endpoint_client.address, || {
118
- storage::EndpointStorage::default_receive_library_timeout(env, context.eid)
119
- });
120
- assert_eq!(initial_timeout, None, "Initial default receive library timeout should be None");
121
-
122
- // Mock owner auth for set_default_receive_library
123
- context.mock_owner_auth("set_default_receive_library", (&context.eid, &receive_lib, &0u64));
91
+ assert_eq!(endpoint_client.default_receive_library_timeout(&context.eid), None);
124
92
 
125
- // Should succeed
126
- endpoint_client.set_default_receive_library(&context.eid, &receive_lib, &0u64);
93
+ // Should succeed.
94
+ context.set_default_receive_library_with_auth(context.eid, &receive_lib, 0);
127
95
 
128
- // Verify the events were published
96
+ // Verify event emission.
129
97
  assert_event(
130
98
  env,
131
99
  &endpoint_client.address,
@@ -133,20 +101,13 @@ fn test_set_default_receive_library_success() {
133
101
  );
134
102
  assert_event(env, &endpoint_client.address, DefaultReceiveLibTimeoutSet { src_eid: context.eid, timeout: None });
135
103
 
136
- // Verify it was set correctly via public interface
104
+ // Verify state update via public interface.
137
105
  assert_eq!(endpoint_client.default_receive_library(&context.eid), Some(receive_lib.clone()));
138
106
 
139
- // Assert storage changes directly
140
- let stored_lib = env
141
- .as_contract(&endpoint_client.address, || storage::EndpointStorage::default_receive_library(env, context.eid));
142
- assert_eq!(stored_lib, Some(receive_lib), "Storage should contain the default receive library");
143
-
144
- let stored_timeout = env.as_contract(&endpoint_client.address, || {
145
- storage::EndpointStorage::default_receive_library_timeout(env, context.eid)
146
- });
147
- assert_eq!(stored_timeout, None, "Storage timeout should be None when grace_period is 0");
107
+ assert_eq!(endpoint_client.default_receive_library_timeout(&context.eid), None);
148
108
  }
149
109
 
110
+ // Successful update with grace period (timeout should be set)
150
111
  #[test]
151
112
  fn test_set_default_receive_library_success_with_grace_period() {
152
113
  let context = setup();
@@ -160,27 +121,22 @@ fn test_set_default_receive_library_success_with_grace_period() {
160
121
  li.timestamp = current_timestamp;
161
122
  });
162
123
 
163
- // Create and register a valid receive lib that supports eid 1
124
+ // Create and register valid receive libs that support `context.eid`.
164
125
  let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
165
126
  let new_receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
166
127
 
167
- // Mock owner auth for register_library
168
- context.mock_owner_auth("register_library", (&receive_lib,));
169
- endpoint_client.register_library(&receive_lib);
170
- context.mock_owner_auth("register_library", (&new_receive_lib,));
171
- endpoint_client.register_library(&new_receive_lib);
128
+ context.register_library_with_auth(&receive_lib);
129
+ context.register_library_with_auth(&new_receive_lib);
172
130
 
173
- // first set the default receive library
174
- context.mock_owner_auth("set_default_receive_library", (&context.eid, &receive_lib, &0u64));
175
- endpoint_client.set_default_receive_library(&context.eid, &receive_lib, &0u64);
131
+ // First set the default receive library.
132
+ context.set_default_receive_library_with_auth(context.eid, &receive_lib, 0);
176
133
 
177
- // then set the default receive library with the grace period
178
- context.mock_owner_auth("set_default_receive_library", (&context.eid, &new_receive_lib, &grace_period));
179
- endpoint_client.set_default_receive_library(&context.eid, &new_receive_lib, &grace_period);
134
+ // Then set the default receive library with the grace period.
135
+ context.set_default_receive_library_with_auth(context.eid, &new_receive_lib, grace_period);
180
136
 
181
137
  let expected_timeout = Some(Timeout { lib: receive_lib.clone(), expiry: current_timestamp + grace_period });
182
138
 
183
- // Verify the events were published
139
+ // Verify event emission (from the second call).
184
140
  assert_event(
185
141
  env,
186
142
  &endpoint_client.address,
@@ -192,21 +148,177 @@ fn test_set_default_receive_library_success_with_grace_period() {
192
148
  DefaultReceiveLibTimeoutSet { src_eid: context.eid, timeout: expected_timeout.clone() },
193
149
  );
194
150
 
195
- // Verify it was set correctly via public interface
151
+ // Verify state update via public interface.
196
152
  assert_eq!(endpoint_client.default_receive_library(&context.eid), Some(new_receive_lib.clone()));
197
153
  assert_eq!(endpoint_client.default_receive_library_timeout(&context.eid), expected_timeout.clone());
154
+ }
155
+
156
+ // Grace period > 0 with no previous default (timeout must remain None)
157
+ #[test]
158
+ fn test_set_default_receive_library_grace_period_with_no_previous_default_sets_no_timeout() {
159
+ let context = setup();
160
+ let env = &context.env;
161
+ let endpoint_client = &context.endpoint_client;
162
+
163
+ let grace_period = 1_000u64;
164
+
165
+ // Create and register a valid receive lib that supports `context.eid`.
166
+ let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
167
+ context.register_library_with_auth(&receive_lib);
168
+
169
+ // First-time set with grace period (no old default exists).
170
+ context.set_default_receive_library_with_auth(context.eid, &receive_lib, grace_period);
171
+
172
+ // Timeout must be None because there was no previous default to keep alive.
173
+ assert_event(
174
+ env,
175
+ &endpoint_client.address,
176
+ DefaultReceiveLibrarySet { src_eid: context.eid, new_lib: receive_lib.clone() },
177
+ );
178
+ assert_event(env, &endpoint_client.address, DefaultReceiveLibTimeoutSet { src_eid: context.eid, timeout: None });
179
+
180
+ assert_eq!(endpoint_client.default_receive_library(&context.eid), Some(receive_lib));
181
+ assert_eq!(endpoint_client.default_receive_library_timeout(&context.eid), None);
182
+ }
183
+
184
+ // Clearing an existing timeout by rotating with grace_period = 0
185
+ #[test]
186
+ fn test_set_default_receive_library_grace_period_zero_clears_timeout() {
187
+ let context = setup();
188
+ let env = &context.env;
189
+ let endpoint_client = &context.endpoint_client;
190
+
191
+ let current_timestamp = 1_700_000_000u64;
192
+ env.ledger().with_mut(|li| {
193
+ li.timestamp = current_timestamp;
194
+ });
195
+
196
+ let src_eid = context.eid;
197
+ let grace_period = 1_000u64;
198
+
199
+ let lib_a = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
200
+ let lib_b = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
201
+ let lib_c = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
198
202
 
199
- // Assert storage changes directly
200
- let stored_lib = env
201
- .as_contract(&endpoint_client.address, || storage::EndpointStorage::default_receive_library(env, context.eid));
202
- assert_eq!(stored_lib, Some(new_receive_lib), "Storage should contain the new default receive library");
203
+ context.register_library_with_auth(&lib_a);
204
+ context.register_library_with_auth(&lib_b);
205
+ context.register_library_with_auth(&lib_c);
203
206
 
204
- let stored_timeout = env.as_contract(&endpoint_client.address, || {
205
- storage::EndpointStorage::default_receive_library_timeout(env, context.eid)
207
+ // A: initial set (no timeout).
208
+ context.set_default_receive_library_with_auth(src_eid, &lib_a, 0);
209
+ assert_event(env, &endpoint_client.address, DefaultReceiveLibrarySet { src_eid, new_lib: lib_a.clone() });
210
+ assert_event(env, &endpoint_client.address, DefaultReceiveLibTimeoutSet { src_eid, timeout: None });
211
+
212
+ // B: rotate with grace -> timeout for A must be set.
213
+ context.set_default_receive_library_with_auth(src_eid, &lib_b, grace_period);
214
+ let expected_timeout_b = Some(Timeout { lib: lib_a.clone(), expiry: current_timestamp + grace_period });
215
+ assert_event(env, &endpoint_client.address, DefaultReceiveLibrarySet { src_eid, new_lib: lib_b.clone() });
216
+ assert_event(
217
+ env,
218
+ &endpoint_client.address,
219
+ DefaultReceiveLibTimeoutSet { src_eid, timeout: expected_timeout_b.clone() },
220
+ );
221
+
222
+ // C: rotate with grace=0 -> timeout must be cleared (None).
223
+ context.set_default_receive_library_with_auth(src_eid, &lib_c, 0);
224
+ assert_event(env, &endpoint_client.address, DefaultReceiveLibrarySet { src_eid, new_lib: lib_c.clone() });
225
+ assert_event(env, &endpoint_client.address, DefaultReceiveLibTimeoutSet { src_eid, timeout: None });
226
+
227
+ assert_eq!(endpoint_client.default_receive_library(&src_eid), Some(lib_c));
228
+ assert_eq!(endpoint_client.default_receive_library_timeout(&src_eid), None);
229
+ }
230
+
231
+ // Multi-rotation timeout references the immediate previous default (B -> C keeps B)
232
+ #[test]
233
+ fn test_set_default_receive_library_multi_rotation_timeout_uses_immediate_previous_default() {
234
+ let context = setup();
235
+ let env = &context.env;
236
+ let endpoint_client = &context.endpoint_client;
237
+
238
+ let src_eid = context.eid;
239
+
240
+ let t0 = 1_700_000_000u64;
241
+ env.ledger().with_mut(|li| {
242
+ li.timestamp = t0;
243
+ });
244
+
245
+ let lib_a = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
246
+ let lib_b = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
247
+ let lib_c = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
248
+
249
+ context.register_library_with_auth(&lib_a);
250
+ context.register_library_with_auth(&lib_b);
251
+ context.register_library_with_auth(&lib_c);
252
+
253
+ // A initial.
254
+ context.set_default_receive_library_with_auth(src_eid, &lib_a, 0);
255
+ assert_event(env, &endpoint_client.address, DefaultReceiveLibrarySet { src_eid, new_lib: lib_a.clone() });
256
+ assert_event(env, &endpoint_client.address, DefaultReceiveLibTimeoutSet { src_eid, timeout: None });
257
+
258
+ // Rotate A -> B with grace=1000 => keep A.
259
+ context.set_default_receive_library_with_auth(src_eid, &lib_b, 1_000);
260
+ let expected_timeout_b = Some(Timeout { lib: lib_a.clone(), expiry: t0 + 1_000 });
261
+ assert_event(env, &endpoint_client.address, DefaultReceiveLibrarySet { src_eid, new_lib: lib_b.clone() });
262
+ assert_event(env, &endpoint_client.address, DefaultReceiveLibTimeoutSet { src_eid, timeout: expected_timeout_b });
263
+
264
+ // Advance time, then rotate B -> C with grace=500 => must keep B (not A).
265
+ let t1 = t0 + 10;
266
+ env.ledger().with_mut(|li| {
267
+ li.timestamp = t1;
206
268
  });
207
- assert_eq!(stored_timeout, expected_timeout, "Storage should contain the timeout");
269
+ context.set_default_receive_library_with_auth(src_eid, &lib_c, 500);
270
+ let expected_timeout_c = Some(Timeout { lib: lib_b.clone(), expiry: t1 + 500 });
271
+ assert_event(env, &endpoint_client.address, DefaultReceiveLibrarySet { src_eid, new_lib: lib_c.clone() });
272
+ assert_event(
273
+ env,
274
+ &endpoint_client.address,
275
+ DefaultReceiveLibTimeoutSet { src_eid, timeout: expected_timeout_c.clone() },
276
+ );
277
+
278
+ assert_eq!(endpoint_client.default_receive_library(&src_eid), Some(lib_c));
279
+ assert_eq!(endpoint_client.default_receive_library_timeout(&src_eid), expected_timeout_c);
208
280
  }
209
281
 
282
+ // EID scoping (defaults/timeouts must be independent per src_eid)
283
+ #[test]
284
+ fn test_set_default_receive_library_is_scoped_by_src_eid() {
285
+ let context = setup();
286
+ let env = &context.env;
287
+ let endpoint_client = &context.endpoint_client;
288
+
289
+ let src_eid_1 = context.eid;
290
+ let src_eid_2 = context.eid + 1;
291
+
292
+ let lib_1 = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid_1]);
293
+ let lib_2 = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid_2]);
294
+
295
+ context.register_library_with_auth(&lib_1);
296
+ context.register_library_with_auth(&lib_2);
297
+
298
+ context.set_default_receive_library_with_auth(src_eid_1, &lib_1, 0);
299
+ assert_event(
300
+ env,
301
+ &endpoint_client.address,
302
+ DefaultReceiveLibrarySet { src_eid: src_eid_1, new_lib: lib_1.clone() },
303
+ );
304
+ assert_event(env, &endpoint_client.address, DefaultReceiveLibTimeoutSet { src_eid: src_eid_1, timeout: None });
305
+
306
+ context.set_default_receive_library_with_auth(src_eid_2, &lib_2, 0);
307
+ assert_event(
308
+ env,
309
+ &endpoint_client.address,
310
+ DefaultReceiveLibrarySet { src_eid: src_eid_2, new_lib: lib_2.clone() },
311
+ );
312
+ assert_event(env, &endpoint_client.address, DefaultReceiveLibTimeoutSet { src_eid: src_eid_2, timeout: None });
313
+
314
+ assert_eq!(endpoint_client.default_receive_library(&src_eid_1), Some(lib_1));
315
+ assert_eq!(endpoint_client.default_receive_library_timeout(&src_eid_1), None);
316
+
317
+ assert_eq!(endpoint_client.default_receive_library(&src_eid_2), Some(lib_2));
318
+ assert_eq!(endpoint_client.default_receive_library_timeout(&src_eid_2), None);
319
+ }
320
+
321
+ // Authorization (only owner)
210
322
  #[test]
211
323
  #[should_panic(expected = "Error(Auth, InvalidAction)")]
212
324
  fn test_set_default_receive_library_requires_owner_auth() {
@@ -216,66 +328,57 @@ fn test_set_default_receive_library_requires_owner_auth() {
216
328
 
217
329
  let non_owner = Address::generate(env);
218
330
 
219
- // Create and register a valid receive lib
331
+ // Create and register a valid receive lib.
220
332
  let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
221
333
 
222
- // Mock owner auth for register_library
223
- context.mock_owner_auth("register_library", (&receive_lib,));
224
- endpoint_client.register_library(&receive_lib);
334
+ context.register_library_with_auth(&receive_lib);
225
335
 
226
- // Mock auth for the non-owner (not the owner)
336
+ // Mock auth for the non-owner (not the owner).
227
337
  context.mock_auth(&non_owner, "set_default_receive_library", (&context.eid, &receive_lib, &0u64));
228
338
 
229
- // Should fail when non-owner tries to set
339
+ // Should fail when a non-owner tries to set.
230
340
  endpoint_client.set_default_receive_library(&context.eid, &receive_lib, &0u64);
231
341
  }
232
342
 
343
+ // Same value rejection (no-op is not allowed)
233
344
  #[test]
234
345
  fn test_set_default_receive_library_same_value() {
235
346
  let context = setup();
236
347
  let env = &context.env;
237
- let endpoint_client = &context.endpoint_client;
238
348
 
239
- // Create and register a valid receive lib that supports eid 1
349
+ // Create and register a valid receive lib that supports `context.eid`.
240
350
  let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
241
351
 
242
- // Mock owner auth for register_library
243
- context.mock_owner_auth("register_library", (&receive_lib,));
244
- endpoint_client.register_library(&receive_lib);
245
-
246
- // Mock owner auth for first set_default_receive_library
247
- context.mock_owner_auth("set_default_receive_library", (&context.eid, &receive_lib, &0u64));
248
- endpoint_client.set_default_receive_library(&context.eid, &receive_lib, &0u64);
249
-
250
- // Mock owner auth for second set_default_receive_library (same value)
251
- context.mock_owner_auth("set_default_receive_library", (&context.eid, &receive_lib, &0u64));
252
-
253
- // Try to set the same library again
254
- let result = endpoint_client.try_set_default_receive_library(&context.eid, &receive_lib, &0u64);
352
+ context.register_library_with_auth(&receive_lib);
353
+ context.set_default_receive_library_with_auth(context.eid, &receive_lib, 0);
255
354
 
355
+ let result = try_set_default_receive_library_with_auth(&context, context.eid, &receive_lib, 0);
256
356
  assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::SameValue.into());
257
357
  }
258
358
 
259
- // Test with SendAndReceive library type (valid for receive)
359
+ // Successful update with SendAndReceive library type (valid for receive)
260
360
  #[test]
261
361
  fn test_set_default_receive_library_with_send_and_receive_type() {
262
362
  let context = setup();
263
363
  let env = &context.env;
264
364
  let endpoint_client = &context.endpoint_client;
265
365
 
266
- // Create and register a SendAndReceive lib that supports eid 1
366
+ // Create and register a SendAndReceive lib that supports `context.eid`.
267
367
  let send_and_receive_lib = context.setup_mock_message_lib(MessageLibType::SendAndReceive, vec![env, context.eid]);
268
368
 
269
- // Mock owner auth for register_library
270
- context.mock_owner_auth("register_library", (&send_and_receive_lib,));
271
- endpoint_client.register_library(&send_and_receive_lib);
369
+ context.register_library_with_auth(&send_and_receive_lib);
272
370
 
273
- // Mock owner auth for set_default_receive_library
274
- context.mock_owner_auth("set_default_receive_library", (&context.eid, &send_and_receive_lib, &0u64));
371
+ // Should succeed.
372
+ context.set_default_receive_library_with_auth(context.eid, &send_and_receive_lib, 0);
275
373
 
276
- // Should succeed with SendAndReceive type
277
- endpoint_client.set_default_receive_library(&context.eid, &send_and_receive_lib, &0u64);
374
+ // Verify event emission.
375
+ assert_event(
376
+ env,
377
+ &endpoint_client.address,
378
+ DefaultReceiveLibrarySet { src_eid: context.eid, new_lib: send_and_receive_lib.clone() },
379
+ );
380
+ assert_event(env, &endpoint_client.address, DefaultReceiveLibTimeoutSet { src_eid: context.eid, timeout: None });
278
381
 
279
- // Verify it was set correctly
382
+ // Verify state update via public interface.
280
383
  assert_eq!(endpoint_client.default_receive_library(&context.eid), Some(send_and_receive_lib));
281
384
  }