@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
@@ -10,22 +10,21 @@ impl ISendLib for Uln302 {
10
10
  ///
11
11
  /// Calculates fees from: executor (message execution), DVNs (verification), and treasury (protocol fee).
12
12
  fn quote(env: &Env, packet: &OutboundPacket, options: &Bytes, pay_in_zro: bool) -> MessagingFee {
13
- let (executor_options, dvn_options) = worker_options::split_worker_options(env, options);
13
+ let (executor_options, dvn_options, packet_header, payload_hash) =
14
+ prepare_packet_and_options(env, packet, options);
14
15
 
15
16
  // Executor fee
16
17
  let executor_fee =
17
18
  Self::quote_executor(env, &packet.sender, packet.dst_eid, packet.message.len(), &executor_options);
18
19
 
19
20
  // DVNs fees
20
- let packet_header = packet_codec_v1::encode_packet_header(env, packet);
21
- let payload_hash = packet_codec_v1::payload_hash(env, packet);
22
21
  let dvns_fee =
23
22
  Self::quote_dvns(env, &packet.sender, packet.dst_eid, &packet_header, &payload_hash, &dvn_options);
24
23
 
25
24
  // Treasury fee
26
25
  let workers_fee = executor_fee + dvns_fee;
27
- let treasury_fee =
28
- Self::get_treasury_client(env).get_fee(&packet.sender, &packet.dst_eid, &workers_fee, &pay_in_zro);
26
+ let treasury_client = LayerZeroTreasuryClient::new(env, &Self::treasury(env));
27
+ let treasury_fee = treasury_client.get_fee(&packet.sender, &packet.dst_eid, &workers_fee, &pay_in_zro);
29
28
 
30
29
  if pay_in_zro {
31
30
  MessagingFee { native_fee: workers_fee, zro_fee: treasury_fee }
@@ -40,28 +39,41 @@ impl ISendLib for Uln302 {
40
39
  fn send(env: &Env, packet: &OutboundPacket, options: &Bytes, pay_in_zro: bool) -> FeesAndPacket {
41
40
  Self::endpoint(env).require_auth();
42
41
 
43
- let mut native_fee_recipients = vec![env];
44
- let mut zro_fee_recipients = vec![env];
45
- let (executor_options, dvn_options) = worker_options::split_worker_options(env, options);
42
+ let (executor_options, dvn_options, packet_header, payload_hash) =
43
+ prepare_packet_and_options(env, packet, options);
46
44
 
47
45
  // Executor fee
48
46
  let executor_fee_recipient =
49
47
  Self::assign_executor(env, &packet.sender, packet.dst_eid, packet.message.len(), &executor_options);
50
- native_fee_recipients.push_back(executor_fee_recipient);
51
48
 
52
49
  // DVNs fees
53
- let packet_header = packet_codec_v1::encode_packet_header(env, packet);
54
- let payload_hash = packet_codec_v1::payload_hash(env, packet);
55
50
  let dvns_fee_recipients =
56
51
  Self::assign_dvns(env, &packet.sender, packet.dst_eid, &packet_header, &payload_hash, &dvn_options);
52
+
53
+ // Collect all worker fees
54
+ let mut native_fee_recipients = vec![env, executor_fee_recipient];
57
55
  native_fee_recipients.extend(dvns_fee_recipients.iter());
58
56
 
59
57
  // Treasury fee
60
- let workers_fee = native_fee_recipients.iter().map(|fee| fee.amount).sum();
61
- let treasury_fee =
62
- Self::get_treasury_client(env).get_fee(&packet.sender, &packet.dst_eid, &workers_fee, &pay_in_zro);
58
+ let total_worker_fee = native_fee_recipients.iter().map(|fee| fee.amount).sum();
59
+ let treasury_addr = Self::treasury(env);
60
+ let treasury_fee = LayerZeroTreasuryClient::new(env, &treasury_addr).get_fee(
61
+ &packet.sender,
62
+ &packet.dst_eid,
63
+ &total_worker_fee,
64
+ &pay_in_zro,
65
+ );
66
+
67
+ // Handle ZRO fee recipients
68
+ let mut zro_fee_recipients = vec![env];
63
69
  if treasury_fee > 0 {
64
- let treasury_fee_recipient = FeeRecipient { to: Self::treasury(env), amount: treasury_fee };
70
+ // The treasury contract address is used as the fixed fee recipient (rather than allowing
71
+ // the treasury admin to configure a custom receiver). This is because ZRO may be issued
72
+ // as a Stellar Classic Asset, which requires the recipient to have an established trustline.
73
+ // If an arbitrary receiver could be configured, a malicious treasury admin could set it to
74
+ // an address without a trustline, causing all token transfers to fail and effectively
75
+ // DOSing the OApp. Using the contract address ensures the recipient is always valid.
76
+ let treasury_fee_recipient = FeeRecipient { to: treasury_addr, amount: treasury_fee };
65
77
  if pay_in_zro {
66
78
  zro_fee_recipients.push_back(treasury_fee_recipient);
67
79
  } else {
@@ -90,7 +102,7 @@ impl ISendUln302 for Uln302 {
90
102
  param.config.validate_default_config(env);
91
103
  UlnStorage::set_default_executor_configs(env, param.dst_eid, &param.config);
92
104
  }
93
- DefaultExecutorConfigSet { params: params.clone() }.publish(env);
105
+ DefaultExecutorConfigsSet { params: params.clone() }.publish(env);
94
106
  }
95
107
 
96
108
  /// Sets default send ULN configurations for multiple destination endpoints.
@@ -100,7 +112,7 @@ impl ISendUln302 for Uln302 {
100
112
  param.config.validate_default_config(env);
101
113
  UlnStorage::set_default_send_uln_configs(env, param.eid, &param.config);
102
114
  }
103
- DefaultUlnSendConfigSet { params: params.clone() }.publish(env);
115
+ DefaultSendUlnConfigsSet { params: params.clone() }.publish(env);
104
116
  }
105
117
 
106
118
  // ============================================================================================
@@ -109,6 +121,7 @@ impl ISendUln302 for Uln302 {
109
121
 
110
122
  /// Returns the treasury address for fee collection.
111
123
  fn treasury(env: &Env) -> Address {
124
+ // This is safe because the treasury is set in the constructor.
112
125
  UlnStorage::treasury(env).unwrap()
113
126
  }
114
127
 
@@ -124,7 +137,8 @@ impl ISendUln302 for Uln302 {
124
137
 
125
138
  /// Returns the effective executor configuration by merging OApp config with default.
126
139
  fn effective_executor_config(env: &Env, sender: &Address, dst_eid: u32) -> ExecutorConfig {
127
- let default_config = Self::expect_default_executor_config(env, dst_eid);
140
+ let default_config = Self::default_executor_config(env, dst_eid)
141
+ .unwrap_or_panic(env, Uln302Error::DefaultExecutorConfigNotFound);
128
142
  let oapp_config = Self::oapp_executor_config(env, sender, dst_eid).unwrap_or_default();
129
143
 
130
144
  oapp_config.apply_default_config(&default_config)
@@ -142,13 +156,14 @@ impl ISendUln302 for Uln302 {
142
156
 
143
157
  /// Returns the effective send ULN configuration by merging OApp config with default.
144
158
  fn effective_send_uln_config(env: &Env, sender: &Address, dst_eid: u32) -> UlnConfig {
145
- let default_config = Self::expect_default_send_uln_config(env, dst_eid);
159
+ let default_config =
160
+ Self::default_send_uln_config(env, dst_eid).unwrap_or_panic(env, Uln302Error::DefaultSendUlnConfigNotFound);
146
161
  let oapp_config = Self::oapp_send_uln_config(env, sender, dst_eid).unwrap_or(OAppUlnConfig::default(env));
147
162
 
148
- let config = oapp_config.apply_default_config(&default_config);
149
- config.validate_at_least_one_dvn(env); // validate the final config
163
+ let effective_config = oapp_config.apply_default_config(&default_config);
164
+ effective_config.validate_at_least_one_dvn(env); // validate the final config
150
165
 
151
- config
166
+ effective_config
152
167
  }
153
168
  }
154
169
 
@@ -158,11 +173,6 @@ impl ISendUln302 for Uln302 {
158
173
 
159
174
  impl Uln302 {
160
175
  /// Sets OApp-specific executor configuration for a destination endpoint.
161
- ///
162
- /// # Arguments
163
- /// * `sender` - The sender OApp address
164
- /// * `dst_eid` - The destination endpoint ID
165
- /// * `config` - The OApp-specific executor configuration
166
176
  pub(super) fn set_executor_config(env: &Env, sender: &Address, dst_eid: u32, config: &OAppExecutorConfig) {
167
177
  UlnStorage::set_oapp_executor_configs(env, sender, dst_eid, config);
168
178
  ExecutorConfigSet { sender: sender.clone(), dst_eid, config: config.clone() }.publish(env);
@@ -170,12 +180,6 @@ impl Uln302 {
170
180
 
171
181
  /// Sets OApp-specific send ULN configuration for a destination endpoint.
172
182
  ///
173
- /// # Arguments
174
- /// * `sender` - The sender OApp address
175
- /// * `dst_eid` - The destination endpoint ID
176
- /// * `config` - The OApp-specific send ULN configuration
177
- ///
178
- /// # Panics
179
183
  /// Panics if the final effective config is invalid.
180
184
  pub(super) fn set_send_uln_config(env: &Env, sender: &Address, dst_eid: u32, config: &OAppUlnConfig) {
181
185
  config.validate_oapp_config(env);
@@ -184,7 +188,7 @@ impl Uln302 {
184
188
  // validate the config by getting the effective config
185
189
  let _ = Self::effective_send_uln_config(env, sender, dst_eid);
186
190
 
187
- UlnSendConfigSet { sender: sender.clone(), dst_eid, config: config.clone() }.publish(env);
191
+ SendUlnConfigSet { sender: sender.clone(), dst_eid, config: config.clone() }.publish(env);
188
192
  }
189
193
 
190
194
  // ============================================================================================
@@ -192,31 +196,16 @@ impl Uln302 {
192
196
  // ============================================================================================
193
197
 
194
198
  /// Quotes the executor fee for message execution.
195
- ///
196
- /// # Arguments
197
- /// * `sender` - The sender OApp address
198
- /// * `dst_eid` - The destination endpoint ID
199
- /// * `message_length` - The length of the message
200
- /// * `options` - The worker options
201
- ///
202
- /// # Returns
203
- /// The executor fee
204
199
  fn quote_executor(env: &Env, sender: &Address, dst_eid: u32, message_length: u32, options: &Bytes) -> i128 {
205
- let executor = Self::get_validated_executor_client(env, sender, dst_eid, message_length);
206
- executor.get_fee(&env.current_contract_address(), sender, &dst_eid, &message_length, options)
200
+ // Get the effective executor config and validate message size
201
+ let executor_config = Self::effective_executor_config(env, sender, dst_eid);
202
+ assert_with_error!(env, message_length <= executor_config.max_message_size, Uln302Error::InvalidMessageSize);
203
+
204
+ let executor_client = LayerZeroExecutorClient::new(env, &executor_config.executor);
205
+ executor_client.get_fee(&env.current_contract_address(), sender, &dst_eid, &message_length, options)
207
206
  }
208
207
 
209
208
  /// Quotes the total DVN fees for message verification.
210
- ///
211
- /// # Arguments
212
- /// * `sender` - The sender OApp address
213
- /// * `dst_eid` - The destination endpoint ID
214
- /// * `packet_header` - The raw packet header bytes
215
- /// * `payload_hash` - The hash of the message payload
216
- /// * `dvn_options` - The worker options for each DVN
217
- ///
218
- /// # Returns
219
- /// The total DVN fees
220
209
  fn quote_dvns(
221
210
  env: &Env,
222
211
  sender: &Address,
@@ -228,19 +217,17 @@ impl Uln302 {
228
217
  let uln_config = Self::effective_send_uln_config(env, sender, dst_eid);
229
218
  let send_lib = env.current_contract_address();
230
219
  let confirmations = uln_config.confirmations;
231
-
232
- let get_dvn_fee = |idx: usize, dvn_addr: Address| {
233
- let dvn_client = LayerZeroDVNClient::new(env, &dvn_addr);
234
- let dvn_opts = dvn_options.get(idx as u32).unwrap_or(bytes!(env));
235
- dvn_client.get_fee(&send_lib, sender, &dst_eid, packet_header, payload_hash, &confirmations, &dvn_opts)
236
- };
237
-
238
220
  uln_config
239
221
  .required_dvns
240
222
  .iter()
241
223
  .chain(uln_config.optional_dvns.iter())
242
224
  .enumerate()
243
- .fold(0_i128, |total_fee, (idx, dvn_addr)| total_fee + get_dvn_fee(idx, dvn_addr))
225
+ .map(|(idx, dvn_addr)| {
226
+ let dvn_client = LayerZeroDVNClient::new(env, &dvn_addr);
227
+ let dvn_opts = dvn_options.get(idx as u32).unwrap_or(bytes!(env));
228
+ dvn_client.get_fee(&send_lib, sender, &dst_eid, packet_header, payload_hash, &confirmations, &dvn_opts)
229
+ })
230
+ .sum()
244
231
  }
245
232
 
246
233
  // ============================================================================================
@@ -248,15 +235,6 @@ impl Uln302 {
248
235
  // ============================================================================================
249
236
 
250
237
  /// Assigns an executor job and returns the fee recipient.
251
- ///
252
- /// # Arguments
253
- /// * `sender` - The sender OApp address
254
- /// * `dst_eid` - The destination endpoint ID
255
- /// * `message_length` - The length of the message
256
- /// * `options` - The worker options
257
- ///
258
- /// # Returns
259
- /// The fee recipient
260
238
  fn assign_executor(
261
239
  env: &Env,
262
240
  sender: &Address,
@@ -264,25 +242,19 @@ impl Uln302 {
264
242
  message_length: u32,
265
243
  options: &Bytes,
266
244
  ) -> FeeRecipient {
267
- let executor = Self::get_validated_executor_client(env, sender, dst_eid, message_length);
245
+ // Get the effective executor config and validate message size
246
+ let executor_config = Self::effective_executor_config(env, sender, dst_eid);
247
+ assert_with_error!(env, message_length <= executor_config.max_message_size, Uln302Error::InvalidMessageSize);
248
+
249
+ let executor_client = LayerZeroExecutorClient::new(env, &executor_config.executor);
268
250
  let recipient =
269
- executor.assign_job(&env.current_contract_address(), sender, &dst_eid, &message_length, options);
251
+ executor_client.assign_job(&env.current_contract_address(), sender, &dst_eid, &message_length, options);
270
252
 
271
- ExecutorFeePaid { executor: executor.address.clone(), fee: recipient.clone() }.publish(env);
253
+ ExecutorFeePaid { executor: executor_client.address.clone(), fee: recipient.clone() }.publish(env);
272
254
  recipient
273
255
  }
274
256
 
275
257
  /// Assigns DVN jobs and returns fee recipients for all DVNs.
276
- ///
277
- /// # Arguments
278
- /// * `sender` - The sender OApp address
279
- /// * `dst_eid` - The destination endpoint ID
280
- /// * `packet_header` - The raw packet header bytes
281
- /// * `payload_hash` - The hash of the message payload
282
- /// * `dvn_options` - The worker options for each DVN
283
- ///
284
- /// # Returns
285
- /// The fee recipients for all DVNs
286
258
  fn assign_dvns(
287
259
  env: &Env,
288
260
  sender: &Address,
@@ -295,61 +267,43 @@ impl Uln302 {
295
267
  let send_lib = env.current_contract_address();
296
268
  let confirmations = uln_config.confirmations;
297
269
 
298
- let assign_dvn_job = |idx: usize, dvn_addr: &Address| -> FeeRecipient {
299
- let dvn_client = LayerZeroDVNClient::new(env, dvn_addr);
270
+ let mut dvns = vec![env];
271
+ let mut fees = vec![env];
272
+ for (idx, dvn_addr) in uln_config.required_dvns.iter().chain(uln_config.optional_dvns.iter()).enumerate() {
273
+ let dvn_client = LayerZeroDVNClient::new(env, &dvn_addr);
300
274
  let dvn_opts = dvn_options.get(idx as u32).unwrap_or(bytes!(env));
301
- dvn_client.assign_job(&send_lib, sender, &dst_eid, packet_header, payload_hash, &confirmations, &dvn_opts)
302
- };
303
-
304
- let (dvns, fees) = uln_config.required_dvns.iter().chain(uln_config.optional_dvns.iter()).enumerate().fold(
305
- (vec![env], vec![env]),
306
- |(mut dvns, mut fees), (idx, dvn_addr)| {
307
- fees.push_back(assign_dvn_job(idx, &dvn_addr));
308
- dvns.push_back(dvn_addr);
309
- (dvns, fees)
310
- },
311
- );
275
+ let dvn_fee_recipient = dvn_client.assign_job(
276
+ &send_lib,
277
+ sender,
278
+ &dst_eid,
279
+ packet_header,
280
+ payload_hash,
281
+ &confirmations,
282
+ &dvn_opts,
283
+ );
284
+ fees.push_back(dvn_fee_recipient);
285
+ dvns.push_back(dvn_addr);
286
+ }
312
287
 
313
288
  DVNFeePaid { dvns, fees: fees.clone() }.publish(env);
314
289
  fees
315
290
  }
291
+ }
316
292
 
317
- // ============================================================================================
318
- // Helper Functions
319
- // ============================================================================================
320
-
321
- /// Gets a validated executor client, ensuring message size is within limits.
322
- ///
323
- /// # Arguments
324
- /// * `sender` - The sender OApp address
325
- /// * `dst_eid` - The destination endpoint ID
326
- /// * `message_length` - The length of the message
327
- ///
328
- /// # Returns
329
- /// The executor client
330
- fn get_validated_executor_client(
331
- env: &Env,
332
- sender: &Address,
333
- dst_eid: u32,
334
- message_length: u32,
335
- ) -> LayerZeroExecutorClient<'static> {
336
- let executor_config = Self::effective_executor_config(env, sender, dst_eid);
337
- assert_with_error!(env, message_length <= executor_config.max_message_size, Uln302Error::InvalidMessageSize);
338
- LayerZeroExecutorClient::new(env, &executor_config.executor)
339
- }
340
-
341
- /// Returns the treasury client.
342
- fn get_treasury_client(env: &Env) -> LayerZeroTreasuryClient<'static> {
343
- LayerZeroTreasuryClient::new(env, &Self::treasury(env))
344
- }
345
-
346
- /// Returns the default executor config or panics if not found.
347
- fn expect_default_executor_config(env: &Env, dst_eid: u32) -> ExecutorConfig {
348
- Self::default_executor_config(env, dst_eid).unwrap_or_panic(env, Uln302Error::DefaultExecutorConfigNotFound)
349
- }
293
+ // ==============================================================================
294
+ // Helper Functions
295
+ // ==============================================================================
350
296
 
351
- /// Returns the default send ULN config or panics if not found.
352
- fn expect_default_send_uln_config(env: &Env, dst_eid: u32) -> UlnConfig {
353
- Self::default_send_uln_config(env, dst_eid).unwrap_or_panic(env, Uln302Error::DefaultSendUlnConfigNotFound)
354
- }
297
+ /// Prepares common packet and options needed for both quote and send flows.
298
+ ///
299
+ /// Returns a tuple of (executor_options, dvn_options, packet_header, payload_hash)
300
+ fn prepare_packet_and_options(
301
+ env: &Env,
302
+ packet: &OutboundPacket,
303
+ options: &Bytes,
304
+ ) -> (Bytes, Map<u32, Bytes>, Bytes, BytesN<32>) {
305
+ let (executor_options, dvn_options) = worker_options::split_worker_options(env, options);
306
+ let packet_header = packet_codec_v1::encode_packet_header(env, packet);
307
+ let payload_hash = packet_codec_v1::payload_hash(env, packet);
308
+ (executor_options, dvn_options, packet_header, payload_hash)
355
309
  }
@@ -25,6 +25,11 @@ pub enum UlnStorage {
25
25
  #[persistent(UlnConfig)]
26
26
  DefaultReceiveUlnConfigs { src_eid: u32 },
27
27
 
28
+ /// The OApp-specific executor configurations for a sender and destination endpoint
29
+ #[persistent(OAppExecutorConfig)]
30
+ #[name("oapp_executor_configs")]
31
+ OAppExecutorConfigs { sender: Address, dst_eid: u32 },
32
+
28
33
  /// The OApp-specific send ULN configurations for a sender and destination endpoint
29
34
  #[persistent(OAppUlnConfig)]
30
35
  #[name("oapp_send_uln_configs")]
@@ -35,11 +40,6 @@ pub enum UlnStorage {
35
40
  #[name("oapp_receive_uln_configs")]
36
41
  OAppReceiveUlnConfigs { receiver: Address, src_eid: u32 },
37
42
 
38
- /// The OApp-specific executor configurations for a sender and destination endpoint
39
- #[persistent(OAppExecutorConfig)]
40
- #[name("oapp_executor_configs")]
41
- OAppExecutorConfigs { sender: Address, dst_eid: u32 },
42
-
43
43
  /// The confirmations for a DVN for a given header hash and payload hash
44
44
  #[persistent(u64)]
45
45
  Confirmations { dvn: Address, header_hash: BytesN<32>, payload_hash: BytesN<32> },
@@ -1,7 +1,7 @@
1
1
  extern crate std;
2
2
  use crate::{
3
3
  errors::Uln302Error,
4
- events::UlnReceiveConfigSet,
4
+ events::ReceiveUlnConfigSet,
5
5
  interfaces::{OAppUlnConfig, UlnConfig},
6
6
  tests::setup::{setup, TestSetup},
7
7
  uln302::CONFIG_TYPE_RECEIVE_ULN,
@@ -35,8 +35,7 @@ fn test_effective_receive_uln_config_with_custom_config() {
35
35
  let default_config = UlnConfig::generate(&setup.env, 15, 1, 2, 1);
36
36
  let eid = 101;
37
37
 
38
- setup.set_default_send_uln_config(eid, default_config.clone());
39
- setup.set_default_receive_uln_config(eid, default_config.clone());
38
+ setup.set_default_configs(eid, default_config.clone());
40
39
 
41
40
  let TestSetup { env, uln302, endpoint, .. } = setup;
42
41
 
@@ -57,11 +56,11 @@ fn test_effective_receive_uln_config_with_custom_config() {
57
56
  let params = vec![&env, SetConfigParam { eid, config_type: CONFIG_TYPE_RECEIVE_ULN, config: config_bytes }];
58
57
  endpoint.set_config(&Address::generate(&env), &oapp, &uln302.address, &params);
59
58
 
60
- // Assert UlnReceiveConfigSet event was published immediately after the setter
59
+ // Assert ReceiveUlnConfigSet event was published immediately after the setter
61
60
  assert_event(
62
61
  &env,
63
62
  &uln302.address,
64
- UlnReceiveConfigSet { config: custom_config.clone(), receiver: oapp.clone(), src_eid: eid },
63
+ ReceiveUlnConfigSet { config: custom_config.clone(), receiver: oapp.clone(), src_eid: eid },
65
64
  );
66
65
 
67
66
  let config = uln302.effective_receive_uln_config(&oapp, &eid);
@@ -77,8 +76,7 @@ fn test_effective_receive_uln_config_must_have_at_least_one_dvn() {
77
76
  let default_config = UlnConfig::generate(&setup.env, 10, 1, 0, 0);
78
77
  let eid = 101;
79
78
 
80
- setup.set_default_receive_uln_config(eid, default_config.clone());
81
- setup.set_default_send_uln_config(eid, default_config);
79
+ setup.set_default_configs(eid, default_config.clone());
82
80
 
83
81
  let TestSetup { env, uln302, endpoint, .. } = setup;
84
82
 
@@ -1,7 +1,7 @@
1
1
  extern crate std;
2
2
  use crate::{
3
3
  errors::Uln302Error,
4
- events::DefaultUlnReceiveConfigSet,
4
+ events::DefaultReceiveUlnConfigsSet,
5
5
  interfaces::{ReceiveUln302Client, SetDefaultUlnConfigParam, UlnConfig},
6
6
  tests::setup::{setup, TestSetup},
7
7
  };
@@ -32,8 +32,8 @@ fn test_set_default_receive_uln_configs() {
32
32
  }]);
33
33
  uln302.set_default_receive_uln_configs(&oapp_receive_uln_configs);
34
34
 
35
- // Assert DefaultUlnReceiveConfigSet event was published with all params
36
- assert_event(&env, &uln302.address, DefaultUlnReceiveConfigSet { params: oapp_receive_uln_configs.clone() });
35
+ // Assert DefaultReceiveUlnConfigSet event was published with all params
36
+ assert_event(&env, &uln302.address, DefaultReceiveUlnConfigsSet { params: oapp_receive_uln_configs.clone() });
37
37
 
38
38
  let uln302_receive_client = ReceiveUln302Client::new(&env, &uln302.address);
39
39
  for config in oapp_receive_uln_configs.clone() {
@@ -2,7 +2,7 @@ extern crate std;
2
2
 
3
3
  use crate::{
4
4
  errors::Uln302Error,
5
- events::UlnSendConfigSet,
5
+ events::SendUlnConfigSet,
6
6
  interfaces::{OAppUlnConfig, UlnConfig},
7
7
  tests::setup::{setup, TestSetup},
8
8
  uln302::CONFIG_TYPE_SEND_ULN,
@@ -20,8 +20,7 @@ fn test_effective_send_uln_config_with_default_only() {
20
20
  let default_config = UlnConfig::generate(&setup.env, 10, 2, 3, 2);
21
21
  let eid = 100;
22
22
 
23
- setup.set_default_send_uln_config(eid, default_config.clone());
24
- setup.set_default_receive_uln_config(eid, default_config.clone());
23
+ setup.set_default_configs(eid, default_config.clone());
25
24
 
26
25
  let TestSetup { env, uln302, .. } = setup;
27
26
 
@@ -40,8 +39,7 @@ fn test_effective_send_uln_config_with_custom_config() {
40
39
  let default_config = UlnConfig::generate(&setup.env, 10, 2, 3, 2);
41
40
  let eid = 100;
42
41
 
43
- setup.set_default_send_uln_config(eid, default_config.clone());
44
- setup.set_default_receive_uln_config(eid, default_config.clone());
42
+ setup.set_default_configs(eid, default_config.clone());
45
43
 
46
44
  let TestSetup { env, uln302, endpoint, .. } = setup;
47
45
 
@@ -66,11 +64,11 @@ fn test_effective_send_uln_config_with_custom_config() {
66
64
  let params = vec![&env, SetConfigParam { eid, config_type: CONFIG_TYPE_SEND_ULN, config: config_bytes }];
67
65
  endpoint.set_config(&Address::generate(&env), &oapp, &uln302.address, &params);
68
66
 
69
- // Assert UlnSendConfigSet event was published immediately after the setter
67
+ // Assert SendUlnConfigSet event was published immediately after the setter
70
68
  assert_event(
71
69
  &env,
72
70
  &uln302.address,
73
- UlnSendConfigSet { config: custom_config.clone(), dst_eid: eid, sender: oapp.clone() },
71
+ SendUlnConfigSet { config: custom_config.clone(), dst_eid: eid, sender: oapp.clone() },
74
72
  );
75
73
 
76
74
  // Get aggregated config - should have custom confirmations but default DVNs
@@ -89,8 +87,7 @@ fn test_effective_send_uln_config_must_have_at_least_one_dvn() {
89
87
  let default_config = UlnConfig::generate(&setup.env, 10, 2, 0, 0);
90
88
  let eid = 100;
91
89
 
92
- setup.set_default_send_uln_config(eid, default_config.clone());
93
- setup.set_default_receive_uln_config(eid, default_config);
90
+ setup.set_default_configs(eid, default_config.clone());
94
91
 
95
92
  let TestSetup { env, uln302, endpoint, .. } = setup;
96
93
 
@@ -7,7 +7,7 @@ use utils::testing_utils::assert_event;
7
7
 
8
8
  use crate::{
9
9
  errors::Uln302Error,
10
- events::DefaultExecutorConfigSet,
10
+ events::DefaultExecutorConfigsSet,
11
11
  interfaces::{ExecutorConfig, SendUln302Client, SetDefaultExecutorConfigParam},
12
12
  tests::setup::{setup, TestSetup},
13
13
  };
@@ -44,7 +44,7 @@ fn test_set_default_executor_configs() {
44
44
  uln302.set_default_executor_configs(&executor_configs);
45
45
 
46
46
  // Assert DefaultExecutorConfigSet event was published with all params
47
- assert_event(&env, &uln302.address, DefaultExecutorConfigSet { params: executor_configs.clone() });
47
+ assert_event(&env, &uln302.address, DefaultExecutorConfigsSet { params: executor_configs.clone() });
48
48
 
49
49
  let uln302_send_client = SendUln302Client::new(&env, &uln302.address);
50
50
  for config_param in executor_configs.clone() {
@@ -7,7 +7,7 @@ use utils::testing_utils::assert_event;
7
7
 
8
8
  use crate::{
9
9
  errors::Uln302Error,
10
- events::DefaultUlnSendConfigSet,
10
+ events::DefaultSendUlnConfigsSet,
11
11
  interfaces::{SendUln302Client, SetDefaultUlnConfigParam, UlnConfig},
12
12
  tests::setup::{setup, TestSetup},
13
13
  };
@@ -33,8 +33,8 @@ fn test_set_default_send_uln_configs() {
33
33
  }]);
34
34
  uln302.set_default_send_uln_configs(&oapp_send_uln_configs);
35
35
 
36
- // Assert DefaultUlnSendConfigSet event was published with all params
37
- assert_event(&env, &uln302.address, DefaultUlnSendConfigSet { params: oapp_send_uln_configs.clone() });
36
+ // Assert DefaultSendUlnConfigSet event was published with all params
37
+ assert_event(&env, &uln302.address, DefaultSendUlnConfigsSet { params: oapp_send_uln_configs.clone() });
38
38
 
39
39
  let uln302_send_client = SendUln302Client::new(&env, &uln302.address);
40
40
  for config in oapp_send_uln_configs.clone() {
@@ -253,6 +253,15 @@ impl<'a> TestSetup<'a> {
253
253
  self.uln302.set_default_executor_configs(&params);
254
254
  }
255
255
 
256
+ /// Sets all three default configs (executor, send ULN, receive ULN) for an EID.
257
+ /// This is required for `is_supported_eid` to return true.
258
+ pub fn set_default_configs(&self, eid: u32, uln_config: UlnConfig) {
259
+ let executor_config = ExecutorConfig::generate(&self.env, 10000);
260
+ self.set_default_executor_config(eid, executor_config);
261
+ self.set_default_send_uln_config(eid, uln_config.clone());
262
+ self.set_default_receive_uln_config(eid, uln_config);
263
+ }
264
+
256
265
  pub fn register_executor(&mut self, fee: i128) -> Address {
257
266
  let executor = self.env.register(DummyExecutor, (fee,));
258
267
  self.executors.push_back(executor.clone());
@@ -44,4 +44,9 @@ impl ExecutorConfig {
44
44
  pub fn new(max_message_size: u32, executor: &Address) -> Self {
45
45
  ExecutorConfig { max_message_size, executor: executor.clone() }
46
46
  }
47
+
48
+ pub fn generate(env: &Env, max_message_size: u32) -> Self {
49
+ use soroban_sdk::testutils::Address as _;
50
+ ExecutorConfig { max_message_size, executor: Address::generate(env) }
51
+ }
47
52
  }
@@ -15,8 +15,7 @@ fn test_get_oapp_receive_uln_config() {
15
15
  let default_config = UlnConfig::generate(&setup.env, 15, 1, 2, 1);
16
16
  let eid = 101;
17
17
 
18
- setup.set_default_send_uln_config(eid, default_config.clone());
19
- setup.set_default_receive_uln_config(eid, default_config);
18
+ setup.set_default_configs(eid, default_config);
20
19
 
21
20
  let TestSetup { env, uln302, endpoint, .. } = setup;
22
21
 
@@ -15,8 +15,7 @@ fn test_get_oapp_send_uln_config() {
15
15
  let default_config = UlnConfig::generate(&setup.env, 10, 2, 3, 2);
16
16
  let eid = 100;
17
17
 
18
- setup.set_default_send_uln_config(eid, default_config.clone());
19
- setup.set_default_receive_uln_config(eid, default_config);
18
+ setup.set_default_configs(eid, default_config);
20
19
 
21
20
  let TestSetup { env, uln302, endpoint, .. } = setup;
22
21