@layerzerolabs/protocol-stellar-v2 0.2.12 → 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
@@ -1,17 +1,27 @@
1
- use crate::util::build_payload;
1
+ use soroban_sdk::{vec, Bytes, BytesN, Env};
2
+ use utils::testing_utils::assert_event;
3
+
2
4
  use crate::{
5
+ errors::EndpointError,
3
6
  events::PacketVerified,
4
- storage,
5
- tests::{endpoint_setup::setup, mock::MockReceiver},
7
+ tests::{
8
+ endpoint_setup::setup,
9
+ mock::{MockReceiver, MockReceiverReject},
10
+ },
11
+ util::build_payload,
6
12
  util::keccak256,
7
13
  Origin,
8
14
  };
9
- use soroban_sdk::{
10
- testutils::{MockAuth, MockAuthInvoke},
11
- vec, Bytes, BytesN, IntoVal,
12
- };
13
- use utils::testing_utils::assert_event;
14
15
 
16
+ // Helpers
17
+ fn default_payload_hash(env: &Env) -> BytesN<32> {
18
+ let message = Bytes::from_array(env, &[1, 2, 3, 4]);
19
+ let guid = BytesN::from_array(env, &[5u8; 32]);
20
+ let payload = build_payload(env, &guid, &message);
21
+ keccak256(env, &payload)
22
+ }
23
+
24
+ // Happy Path
15
25
  #[test]
16
26
  fn test_verify_success() {
17
27
  let context = setup();
@@ -24,36 +34,19 @@ fn test_verify_success() {
24
34
  let nonce = 1u64;
25
35
 
26
36
  // Setup receive library
27
- let receive_lib = context.setup_mock_receive_lib(vec![env, src_eid]);
28
- context.mock_owner_auth("register_library", (&receive_lib,));
29
- endpoint_client.register_library(&receive_lib);
30
- context.mock_owner_auth("set_default_receive_library", (&src_eid, &receive_lib, &0u64));
31
- endpoint_client.set_default_receive_library(&src_eid, &receive_lib, &0);
37
+ let receive_lib = context.setup_default_receive_lib(src_eid, 0);
32
38
 
33
39
  // Create payload hash
34
- let message = Bytes::from_array(env, &[1, 2, 3, 4]);
35
- let guid = BytesN::from_array(env, &[5u8; 32]);
36
- let payload = build_payload(env, &guid, &message);
37
- let payload_hash = keccak256(env, &payload);
40
+ let payload_hash = default_payload_hash(env);
38
41
 
39
42
  let origin = Origin { src_eid, sender: sender.clone(), nonce };
40
43
 
41
44
  // Verify initial state - inbound payload hash should not exist
42
- let initial_hash = env.as_contract(&endpoint_client.address, || {
43
- storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce)
44
- });
45
+ let initial_hash = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce);
45
46
  assert_eq!(initial_hash, None, "Initial inbound payload hash should be None");
46
47
 
47
48
  // Mock auth for receive_lib
48
- env.mock_auths(&[MockAuth {
49
- address: &receive_lib,
50
- invoke: &MockAuthInvoke {
51
- contract: &endpoint_client.address,
52
- fn_name: "verify",
53
- args: (&receive_lib, &origin, &receiver, &payload_hash).into_val(env),
54
- sub_invokes: &[],
55
- },
56
- }]);
49
+ context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin, &receiver, &payload_hash));
57
50
 
58
51
  endpoint_client.verify(&receive_lib, &origin, &receiver, &payload_hash);
59
52
 
@@ -67,14 +60,9 @@ fn test_verify_success() {
67
60
  // Verify inbound payload hash was stored via public interface
68
61
  let stored_hash = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce);
69
62
  assert_eq!(stored_hash, Some(payload_hash.clone()));
70
-
71
- // Assert storage change directly
72
- let stored_hash_direct = env.as_contract(&endpoint_client.address, || {
73
- storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce)
74
- });
75
- assert_eq!(stored_hash_direct, Some(payload_hash), "Storage should contain the inbound payload hash");
76
63
  }
77
64
 
65
+ // Storage & Nonce Behavior
78
66
  #[test]
79
67
  fn test_verify_stores_payload_hash() {
80
68
  let context = setup();
@@ -87,30 +75,15 @@ fn test_verify_stores_payload_hash() {
87
75
  let nonce = 1u64;
88
76
 
89
77
  // Setup receive library
90
- let receive_lib = context.setup_mock_receive_lib(vec![env, src_eid]);
91
- context.mock_owner_auth("register_library", (&receive_lib,));
92
- endpoint_client.register_library(&receive_lib);
93
- context.mock_owner_auth("set_default_receive_library", (&src_eid, &receive_lib, &0u64));
94
- endpoint_client.set_default_receive_library(&src_eid, &receive_lib, &0);
78
+ let receive_lib = context.setup_default_receive_lib(src_eid, 0);
95
79
 
96
80
  // Create payload hash
97
- let message = Bytes::from_array(env, &[1, 2, 3, 4]);
98
- let guid = BytesN::from_array(env, &[5u8; 32]);
99
- let payload = build_payload(env, &guid, &message);
100
- let payload_hash = keccak256(env, &payload);
81
+ let payload_hash = default_payload_hash(env);
101
82
 
102
83
  let origin = Origin { src_eid, sender: sender.clone(), nonce };
103
84
 
104
85
  // Mock auth for receive_lib
105
- env.mock_auths(&[MockAuth {
106
- address: &receive_lib,
107
- invoke: &MockAuthInvoke {
108
- contract: &endpoint_client.address,
109
- fn_name: "verify",
110
- args: (&receive_lib, &origin, &receiver, &payload_hash).into_val(env),
111
- sub_invokes: &[],
112
- },
113
- }]);
86
+ context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin, &receiver, &payload_hash));
114
87
 
115
88
  endpoint_client.verify(&receive_lib, &origin, &receiver, &payload_hash);
116
89
 
@@ -119,6 +92,35 @@ fn test_verify_stores_payload_hash() {
119
92
  assert_eq!(stored_hash, Some(payload_hash));
120
93
  }
121
94
 
95
+ #[test]
96
+ fn test_verify_overwrites_payload_hash_for_same_nonce() {
97
+ let context = setup();
98
+ let env = &context.env;
99
+ let endpoint_client = &context.endpoint_client;
100
+
101
+ let src_eid = 2u32;
102
+ let sender = BytesN::from_array(env, &[1u8; 32]);
103
+ let receiver = env.register(MockReceiver, ());
104
+ let nonce = 1u64;
105
+
106
+ // Setup receive library
107
+ let receive_lib = context.setup_default_receive_lib(src_eid, 0);
108
+
109
+ let origin = Origin { src_eid, sender: sender.clone(), nonce };
110
+
111
+ // Verify once
112
+ let payload_hash1 = BytesN::from_array(env, &[0x11u8; 32]);
113
+ context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin, &receiver, &payload_hash1));
114
+ endpoint_client.verify(&receive_lib, &origin, &receiver, &payload_hash1);
115
+ assert_eq!(endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce), Some(payload_hash1.clone()));
116
+
117
+ // Verify again with a different payload hash (current logic allows overwriting)
118
+ let payload_hash2 = BytesN::from_array(env, &[0x22u8; 32]);
119
+ context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin, &receiver, &payload_hash2));
120
+ endpoint_client.verify(&receive_lib, &origin, &receiver, &payload_hash2);
121
+ assert_eq!(endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce), Some(payload_hash2));
122
+ }
123
+
122
124
  #[test]
123
125
  fn test_verify_multiple_nonces() {
124
126
  let context = setup();
@@ -130,38 +132,18 @@ fn test_verify_multiple_nonces() {
130
132
  let receiver = env.register(MockReceiver, ());
131
133
 
132
134
  // Setup receive library
133
- let receive_lib = context.setup_mock_receive_lib(vec![env, src_eid]);
134
- context.mock_owner_auth("register_library", (&receive_lib,));
135
- endpoint_client.register_library(&receive_lib);
136
- context.mock_owner_auth("set_default_receive_library", (&src_eid, &receive_lib, &0u64));
137
- endpoint_client.set_default_receive_library(&src_eid, &receive_lib, &0);
135
+ let receive_lib = context.setup_default_receive_lib(src_eid, 0);
138
136
 
139
137
  // Verify nonce 1
140
138
  let payload_hash1 = BytesN::from_array(env, &[1u8; 32]);
141
139
  let origin1 = Origin { src_eid, sender: sender.clone(), nonce: 1 };
142
- env.mock_auths(&[MockAuth {
143
- address: &receive_lib,
144
- invoke: &MockAuthInvoke {
145
- contract: &endpoint_client.address,
146
- fn_name: "verify",
147
- args: (&receive_lib, &origin1, &receiver, &payload_hash1).into_val(env),
148
- sub_invokes: &[],
149
- },
150
- }]);
140
+ context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin1, &receiver, &payload_hash1));
151
141
  endpoint_client.verify(&receive_lib, &origin1, &receiver, &payload_hash1);
152
142
 
153
143
  // Verify nonce 2
154
144
  let payload_hash2 = BytesN::from_array(env, &[2u8; 32]);
155
145
  let origin2 = Origin { src_eid, sender: sender.clone(), nonce: 2 };
156
- env.mock_auths(&[MockAuth {
157
- address: &receive_lib,
158
- invoke: &MockAuthInvoke {
159
- contract: &endpoint_client.address,
160
- fn_name: "verify",
161
- args: (&receive_lib, &origin2, &receiver, &payload_hash2).into_val(env),
162
- sub_invokes: &[],
163
- },
164
- }]);
146
+ context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin2, &receiver, &payload_hash2));
165
147
  endpoint_client.verify(&receive_lib, &origin2, &receiver, &payload_hash2);
166
148
 
167
149
  // Verify both payload hashes were stored
@@ -170,3 +152,154 @@ fn test_verify_multiple_nonces() {
170
152
  assert_eq!(stored_hash1, Some(payload_hash1));
171
153
  assert_eq!(stored_hash2, Some(payload_hash2));
172
154
  }
155
+
156
+ // Authorization
157
+ #[test]
158
+ #[should_panic(expected = "Error(Auth, InvalidAction)")]
159
+ fn test_verify_unauthorized() {
160
+ let context = setup();
161
+ let env = &context.env;
162
+ let endpoint_client = &context.endpoint_client;
163
+
164
+ let src_eid = 2u32;
165
+ let sender = BytesN::from_array(env, &[1u8; 32]);
166
+ let receiver = env.register(MockReceiver, ());
167
+ let nonce = 1u64;
168
+
169
+ // Setup receive library
170
+ let receive_lib = context.setup_default_receive_lib(src_eid, 0);
171
+
172
+ // Create payload hash
173
+ let payload_hash = default_payload_hash(env);
174
+
175
+ let origin = Origin { src_eid, sender, nonce };
176
+
177
+ // Don't mock auth for receive_lib - should panic with Auth error
178
+ endpoint_client.verify(&receive_lib, &origin, &receiver, &payload_hash);
179
+ }
180
+
181
+ // Receive Library Validation
182
+ #[test]
183
+ fn test_verify_invalid_receive_library() {
184
+ let context = setup();
185
+ let env = &context.env;
186
+ let endpoint_client = &context.endpoint_client;
187
+
188
+ let src_eid = 2u32;
189
+ let sender = BytesN::from_array(env, &[1u8; 32]);
190
+ let receiver = env.register(MockReceiver, ());
191
+ let nonce = 1u64;
192
+
193
+ // Setup valid receive library and set as default (so get_receive_library succeeds)
194
+ let _valid_receive_lib = context.setup_default_receive_lib(src_eid, 0);
195
+
196
+ // Create invalid receive library (different from configured one, not registered, no timeout)
197
+ // is_valid_receive_library will call get_receive_library (succeeds with default),
198
+ // then check actual_lib != expected_lib (true), then check timeout (None), so returns false
199
+ let invalid_receive_lib = context.setup_mock_receive_lib(vec![env, src_eid]);
200
+ // Don't register or set as default - this makes it invalid
201
+
202
+ // Create payload hash
203
+ let payload_hash = default_payload_hash(env);
204
+
205
+ let origin = Origin { src_eid, sender, nonce };
206
+
207
+ // Mock auth for invalid receive library
208
+ context.mock_auth(&invalid_receive_lib, "verify", (&invalid_receive_lib, &origin, &receiver, &payload_hash));
209
+
210
+ let result = endpoint_client.try_verify(&invalid_receive_lib, &origin, &receiver, &payload_hash);
211
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::InvalidReceiveLibrary.into());
212
+ }
213
+
214
+ // Payload Hash Validation
215
+ #[test]
216
+ fn test_verify_invalid_payload_hash_empty() {
217
+ let context = setup();
218
+ let env = &context.env;
219
+ let endpoint_client = &context.endpoint_client;
220
+
221
+ let src_eid = 2u32;
222
+ let sender = BytesN::from_array(env, &[1u8; 32]);
223
+ let receiver = env.register(MockReceiver, ());
224
+ let nonce = 1u64;
225
+
226
+ // Setup receive library
227
+ let receive_lib = context.setup_default_receive_lib(src_eid, 0);
228
+
229
+ // Empty payload hash is not allowed
230
+ let empty_hash = BytesN::from_array(env, &[0u8; 32]);
231
+ let origin = Origin { src_eid, sender, nonce };
232
+
233
+ // Mock auth for receive_lib
234
+ context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin, &receiver, &empty_hash));
235
+
236
+ let result = endpoint_client.try_verify(&receive_lib, &origin, &receiver, &empty_hash);
237
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::InvalidPayloadHash.into());
238
+ }
239
+
240
+ // Path Validation
241
+ #[test]
242
+ fn test_verify_path_not_initializable() {
243
+ let context = setup();
244
+ let env = &context.env;
245
+ let endpoint_client = &context.endpoint_client;
246
+
247
+ let src_eid = 2u32;
248
+ let sender = BytesN::from_array(env, &[1u8; 32]);
249
+ // Use MockReceiverReject which rejects initialization (returns false from allow_initialize_path)
250
+ let receiver = env.register(MockReceiverReject, ());
251
+ let nonce = 1u64;
252
+
253
+ // Setup receive library and set as default (so library validation passes)
254
+ let receive_lib = context.setup_default_receive_lib(src_eid, 0);
255
+
256
+ // Create payload hash
257
+ let payload_hash = default_payload_hash(env);
258
+
259
+ let origin = Origin { src_eid, sender, nonce };
260
+
261
+ // Mock auth for receive_lib
262
+ context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin, &receiver, &payload_hash));
263
+
264
+ // Library validation passes (receive_lib matches default)
265
+ // initializable checks: lazy_inbound_nonce == 0, and receiver.allow_initialize_path(origin) == false
266
+ // So initializable returns false, should panic with PathNotInitializable error
267
+ let result = endpoint_client.try_verify(&receive_lib, &origin, &receiver, &payload_hash);
268
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::PathNotInitializable.into());
269
+ }
270
+
271
+ #[test]
272
+ fn test_verify_path_not_verifiable() {
273
+ let context = setup();
274
+ let env = &context.env;
275
+ let endpoint_client = &context.endpoint_client;
276
+
277
+ let src_eid = 2u32;
278
+ let sender = BytesN::from_array(env, &[1u8; 32]);
279
+ let receiver = env.register(MockReceiver, ());
280
+
281
+ // Setup receive library and set as default (so library validation passes)
282
+ let receive_lib = context.setup_default_receive_lib(src_eid, 0);
283
+
284
+ // Skip nonce 1 to set lazy_inbound_nonce to 1 (so initializable passes: lazy_nonce > 0)
285
+ context.mock_auth(&receiver, "skip", (&receiver, &receiver, &src_eid, &sender, &1u64));
286
+ endpoint_client.skip(&receiver, &receiver, &src_eid, &sender, &1);
287
+
288
+ // Create payload hash
289
+ let message = Bytes::from_array(env, &[1, 2, 3, 4]);
290
+ let guid = BytesN::from_array(env, &[5u8; 32]);
291
+ let payload = build_payload(env, &guid, &message);
292
+ let payload_hash = keccak256(env, &payload);
293
+
294
+ // Try to verify nonce 1, but lazy_nonce is already 1, so nonce 1 is not verifiable
295
+ // verifiable checks: nonce > lazy_inbound_nonce (1 > 1 is false) OR has payload hash (false)
296
+ let origin = Origin { src_eid, sender, nonce: 1 };
297
+
298
+ // Mock auth for receive_lib
299
+ context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin, &receiver, &payload_hash));
300
+
301
+ // Library validation passes, initializable passes (lazy_nonce > 0)
302
+ // verifiable fails (nonce <= lazy_nonce and no payload hash), should panic with PathNotVerifiable error
303
+ let result = endpoint_client.try_verify(&receive_lib, &origin, &receiver, &payload_hash);
304
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::PathNotVerifiable.into());
305
+ }
@@ -1,5 +1,4 @@
1
1
  use crate::tests::endpoint_setup::setup;
2
-
3
2
  #[test]
4
3
  fn test_zro_when_not_set() {
5
4
  let context = setup();
@@ -0,0 +1,24 @@
1
+ use crate::tests::endpoint_setup::setup;
2
+ // The default_receive_library is per-EID (None for unset EIDs, distinct libs per EID)
3
+ #[test]
4
+ fn test_default_receive_library_none_and_distinct_per_eid() {
5
+ let context = setup();
6
+ let endpoint_client = &context.endpoint_client;
7
+
8
+ let eid_a = context.eid;
9
+ let eid_b = eid_a + 1;
10
+ let eid_none = eid_a + 2;
11
+
12
+ // Set defaults for two EIDs.
13
+ let receive_lib_a = context.setup_default_receive_lib(eid_a, 0);
14
+ let receive_lib_b = context.setup_default_receive_lib(eid_b, 0);
15
+
16
+ assert_eq!(endpoint_client.default_receive_library(&eid_a), Some(receive_lib_a.clone()));
17
+ assert_eq!(endpoint_client.default_receive_library(&eid_b), Some(receive_lib_b.clone()));
18
+
19
+ // Different EIDs should be allowed to point to different libs.
20
+ assert_ne!(receive_lib_a, receive_lib_b);
21
+
22
+ // Setting other EIDs should not affect an unset EID.
23
+ assert_eq!(endpoint_client.default_receive_library(&eid_none), None);
24
+ }
@@ -0,0 +1,40 @@
1
+ use soroban_sdk::{testutils::Ledger, vec};
2
+
3
+ use crate::{tests::endpoint_setup::setup, MessageLibType, Timeout};
4
+
5
+ // The default_receive_library_timeout is per-EID (None for unset EIDs, distinct values per EID)
6
+ #[test]
7
+ fn test_default_receive_library_timeout_none_and_distinct_per_eid() {
8
+ let context = setup();
9
+ let env = &context.env;
10
+ let endpoint_client = &context.endpoint_client;
11
+
12
+ let eid_a = context.eid;
13
+ let eid_b = eid_a + 1;
14
+ let eid_none = eid_a + 2;
15
+
16
+ let now = 1_700_000_000u64;
17
+ env.ledger().with_mut(|li| li.timestamp = now);
18
+
19
+ // Create and register receive libs for each EID.
20
+ let lib_a = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, eid_a]);
21
+ let lib_b = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, eid_b]);
22
+ context.register_library_with_auth(&lib_a);
23
+ context.register_library_with_auth(&lib_b);
24
+
25
+ let timeout_a = Some(Timeout { lib: lib_a.clone(), expiry: now + 1000 });
26
+ let timeout_b = Some(Timeout { lib: lib_b.clone(), expiry: now + 2000 });
27
+
28
+ // Set timeouts as owner.
29
+ context.mock_owner_auth("set_default_receive_lib_timeout", (&eid_a, &timeout_a));
30
+ endpoint_client.set_default_receive_lib_timeout(&eid_a, &timeout_a);
31
+
32
+ context.mock_owner_auth("set_default_receive_lib_timeout", (&eid_b, &timeout_b));
33
+ endpoint_client.set_default_receive_lib_timeout(&eid_b, &timeout_b);
34
+
35
+ assert_eq!(endpoint_client.default_receive_library_timeout(&eid_a), timeout_a);
36
+ assert_eq!(endpoint_client.default_receive_library_timeout(&eid_b), timeout_b);
37
+
38
+ // Setting other EIDs should not affect an unset EID.
39
+ assert_eq!(endpoint_client.default_receive_library_timeout(&eid_none), None);
40
+ }
@@ -0,0 +1,24 @@
1
+ use crate::tests::endpoint_setup::setup;
2
+ // The default_send_library is per-EID (None for unset EIDs, distinct libs per EID)
3
+ #[test]
4
+ fn test_default_send_library_none_and_distinct_per_eid() {
5
+ let context = setup();
6
+ let endpoint_client = &context.endpoint_client;
7
+
8
+ let eid_a = context.eid;
9
+ let eid_b = eid_a + 1;
10
+ let eid_none = eid_a + 2;
11
+
12
+ // Set defaults for two EIDs.
13
+ let (send_lib_a, _fee_recipient_a) = context.setup_default_send_lib(eid_a, 100, 0);
14
+ let (send_lib_b, _fee_recipient_b) = context.setup_default_send_lib(eid_b, 100, 0);
15
+
16
+ assert_eq!(endpoint_client.default_send_library(&eid_a), Some(send_lib_a.clone()));
17
+ assert_eq!(endpoint_client.default_send_library(&eid_b), Some(send_lib_b.clone()));
18
+
19
+ // Different EIDs should be allowed to point to different libs.
20
+ assert_ne!(send_lib_a, send_lib_b);
21
+
22
+ // Setting other EIDs should not affect an unset EID.
23
+ assert_eq!(endpoint_client.default_send_library(&eid_none), None);
24
+ }
@@ -0,0 +1,108 @@
1
+ use soroban_sdk::{testutils::Address as _, vec, Address, Bytes, Vec};
2
+
3
+ use crate::{
4
+ errors::EndpointError, tests::endpoint_setup::setup, tests::mock::MockMessageLibClient, MessageLibType,
5
+ SetConfigParam,
6
+ };
7
+
8
+ // The get_config requires library to be registered (internal require_registered)
9
+ #[test]
10
+ fn test_get_config_requires_registered_library() {
11
+ let context = setup();
12
+ let env = &context.env;
13
+ let endpoint_client = &context.endpoint_client;
14
+
15
+ let oapp = Address::generate(env);
16
+ let unregistered_lib = Address::generate(env);
17
+
18
+ let result = endpoint_client.try_get_config(&oapp, &unregistered_lib, &context.eid, &0u32);
19
+ assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyRegisteredLib.into());
20
+ }
21
+
22
+ // The get_config returns empty bytes for unset keys
23
+ #[test]
24
+ fn test_get_config_returns_empty_for_unset_key() {
25
+ let context = setup();
26
+ let env = &context.env;
27
+ let endpoint_client = &context.endpoint_client;
28
+
29
+ let oapp = Address::generate(env);
30
+ let eid = context.eid;
31
+ let config_type = 7u32;
32
+
33
+ let message_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, eid]);
34
+ context.register_library_with_auth(&message_lib);
35
+
36
+ let stored = endpoint_client.get_config(&oapp, &message_lib, &eid, &config_type);
37
+ assert_eq!(stored, Bytes::new(env));
38
+ }
39
+
40
+ // The get_config forwards (eid, oapp, config_type) correctly into the message lib
41
+ #[test]
42
+ fn test_get_config_returns_persisted_and_isolated_by_oapp_and_config_type() {
43
+ let context = setup();
44
+ let env = &context.env;
45
+ let endpoint_client = &context.endpoint_client;
46
+
47
+ let oapp_a = Address::generate(env);
48
+ let oapp_b = Address::generate(env);
49
+
50
+ let eid = context.eid;
51
+ let config_type_a = 1u32;
52
+ let config_type_b = 2u32;
53
+
54
+ let message_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, eid]);
55
+ context.register_library_with_auth(&message_lib);
56
+
57
+ // Seed config directly into the mock library to keep this test focused on get_config passthrough.
58
+ let lib_client = MockMessageLibClient::new(env, &message_lib);
59
+ let cfg_a = Bytes::from_slice(env, &[0x01, 0x02, 0x03]);
60
+ let params_a: Vec<SetConfigParam> =
61
+ vec![env, SetConfigParam { eid, config_type: config_type_a, config: cfg_a.clone() }];
62
+ lib_client.set_config(&oapp_a, &params_a);
63
+
64
+ // Happy path: exact key returns the stored bytes.
65
+ assert_eq!(endpoint_client.get_config(&oapp_a, &message_lib, &eid, &config_type_a), cfg_a);
66
+
67
+ // Different config_type returns empty.
68
+ assert_eq!(endpoint_client.get_config(&oapp_a, &message_lib, &eid, &config_type_b), Bytes::new(env));
69
+
70
+ // Different OApp returns empty.
71
+ assert_eq!(endpoint_client.get_config(&oapp_b, &message_lib, &eid, &config_type_a), Bytes::new(env));
72
+ }
73
+
74
+ // The get_config is isolated by EID and by library address
75
+ #[test]
76
+ fn test_get_config_isolated_by_eid_and_lib() {
77
+ let context = setup();
78
+ let env = &context.env;
79
+ let endpoint_client = &context.endpoint_client;
80
+
81
+ let oapp = Address::generate(env);
82
+ let eid_a = context.eid;
83
+ let eid_b = eid_a + 1;
84
+ let config_type = 1u32;
85
+
86
+ let lib_a = context.setup_mock_message_lib(MessageLibType::Send, vec![env, eid_a, eid_b]);
87
+ let lib_b = context.setup_mock_message_lib(MessageLibType::Send, vec![env, eid_a, eid_b]);
88
+ context.register_library_with_auth(&lib_a);
89
+ context.register_library_with_auth(&lib_b);
90
+
91
+ // Seed different values into different libs under the same key.
92
+ let cfg_a = Bytes::from_slice(env, &[0xA1]);
93
+ let cfg_b = Bytes::from_slice(env, &[0xB2]);
94
+
95
+ let lib_a_client = MockMessageLibClient::new(env, &lib_a);
96
+ let lib_b_client = MockMessageLibClient::new(env, &lib_b);
97
+
98
+ let params_a: Vec<SetConfigParam> = vec![env, SetConfigParam { eid: eid_a, config_type, config: cfg_a.clone() }];
99
+ let params_b: Vec<SetConfigParam> = vec![env, SetConfigParam { eid: eid_a, config_type, config: cfg_b.clone() }];
100
+ lib_a_client.set_config(&oapp, &params_a);
101
+ lib_b_client.set_config(&oapp, &params_b);
102
+
103
+ assert_eq!(endpoint_client.get_config(&oapp, &lib_a, &eid_a, &config_type), cfg_a);
104
+ assert_eq!(endpoint_client.get_config(&oapp, &lib_b, &eid_a, &config_type), cfg_b);
105
+
106
+ // Different EID (unset) returns empty.
107
+ assert_eq!(endpoint_client.get_config(&oapp, &lib_a, &eid_b, &config_type), Bytes::new(env));
108
+ }
@@ -0,0 +1,52 @@
1
+ use soroban_sdk::{testutils::Address as _, Address};
2
+
3
+ use crate::tests::{endpoint_setup::setup, mock::MockValidMessageLib};
4
+
5
+ // The get_library_index is None for arbitrary (unregistered) addresses
6
+ #[test]
7
+ fn test_get_library_index_for_unregistered_library_is_none() {
8
+ let context = setup();
9
+ let env = &context.env;
10
+ let endpoint_client = &context.endpoint_client;
11
+
12
+ let unregistered = Address::generate(env);
13
+ assert!(!endpoint_client.is_registered_library(&unregistered));
14
+ assert_eq!(endpoint_client.get_library_index(&unregistered), None);
15
+ }
16
+
17
+ // The get_library_index returns Some(index) after successful registration
18
+ #[test]
19
+ fn test_get_library_index_for_registered_library_is_some() {
20
+ let context = setup();
21
+ let env = &context.env;
22
+ let endpoint_client = &context.endpoint_client;
23
+
24
+ let lib = env.register(MockValidMessageLib, ());
25
+
26
+ context.register_library_with_auth(&lib);
27
+
28
+ assert!(endpoint_client.is_registered_library(&lib));
29
+ assert_eq!(endpoint_client.get_library_index(&lib), Some(0));
30
+ assert_eq!(endpoint_client.registered_libraries_count(), 1);
31
+ }
32
+
33
+ // Indices are sequential and stable across multiple registrations
34
+ #[test]
35
+ fn test_get_library_index_multiple_libraries_are_sequential() {
36
+ let context = setup();
37
+ let env = &context.env;
38
+ let endpoint_client = &context.endpoint_client;
39
+
40
+ let lib0 = env.register(MockValidMessageLib, ());
41
+ let lib1 = env.register(MockValidMessageLib, ());
42
+ let lib2 = env.register(MockValidMessageLib, ());
43
+
44
+ context.register_library_with_auth(&lib0);
45
+ context.register_library_with_auth(&lib1);
46
+ context.register_library_with_auth(&lib2);
47
+
48
+ assert_eq!(endpoint_client.get_library_index(&lib0), Some(0));
49
+ assert_eq!(endpoint_client.get_library_index(&lib1), Some(1));
50
+ assert_eq!(endpoint_client.get_library_index(&lib2), Some(2));
51
+ assert_eq!(endpoint_client.registered_libraries_count(), 3);
52
+ }