@layerzerolabs/protocol-stellar-v2 0.2.13 → 0.2.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +484 -337
- package/.turbo/turbo-lint.log +126 -56
- package/.turbo/turbo-test.log +1403 -984
- package/Cargo.lock +142 -3
- package/Cargo.toml +5 -1
- package/contracts/ERROR_SPEC.md +44 -0
- package/contracts/common-macros/src/auth.rs +113 -0
- package/contracts/common-macros/src/contract_ttl.rs +84 -0
- package/contracts/common-macros/src/lib.rs +219 -29
- package/contracts/common-macros/src/lz_contract.rs +83 -0
- package/contracts/common-macros/src/storage.rs +1 -1
- package/contracts/common-macros/src/tests/{ownable.rs → auth.rs} +48 -15
- package/contracts/common-macros/src/tests/contract_ttl.rs +662 -0
- package/contracts/common-macros/src/tests/mod.rs +3 -2
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +20 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +24 -0
- package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__ownable__snapshot_only_owner_preserves_function_signature.snap → common_macros__tests__auth__snapshot_only_auth_preserves_function_signature.snap} +4 -4
- package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap → common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap} +26 -10
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contracttrait_code.snap +69 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +48 -48
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +7 -41
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +21 -0
- package/contracts/common-macros/src/tests/upgradeable.rs +31 -0
- package/contracts/common-macros/src/ttl_configurable.rs +21 -66
- package/contracts/common-macros/src/ttl_extendable.rs +36 -0
- package/contracts/common-macros/src/upgradeable.rs +76 -0
- package/contracts/common-macros/src/utils.rs +9 -0
- package/contracts/endpoint-v2/src/constants.rs +4 -4
- package/contracts/endpoint-v2/src/endpoint_v2.rs +58 -36
- package/contracts/endpoint-v2/src/errors.rs +4 -3
- package/contracts/endpoint-v2/src/events.rs +1 -1
- package/contracts/endpoint-v2/src/message_lib_manager.rs +18 -5
- package/contracts/endpoint-v2/src/messaging_channel.rs +11 -1
- package/contracts/endpoint-v2/src/messaging_composer.rs +11 -1
- package/contracts/endpoint-v2/src/storage.rs +1 -1
- package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +175 -8
- package/contracts/endpoint-v2/src/tests/endpoint_v2/build_outbound_packet.rs +76 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +342 -159
- package/contracts/endpoint-v2/src/tests/endpoint_v2/delegate.rs +3 -15
- package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +20 -31
- package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +126 -164
- package/contracts/endpoint-v2/src/tests/endpoint_v2/mod.rs +1 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/native_token.rs +0 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/owner.rs +0 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +311 -304
- package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +423 -96
- package/contracts/endpoint-v2/src/tests/endpoint_v2/recover_token.rs +1 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +47 -20
- package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +373 -403
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +96 -22
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +62 -10
- package/contracts/endpoint-v2/src/tests/endpoint_v2/transfer_ownership.rs +4 -4
- package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +8 -11
- package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +81 -30
- package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +209 -76
- package/contracts/endpoint-v2/src/tests/endpoint_v2/zro.rs +0 -1
- package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library.rs +24 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library_timeout.rs +40 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/default_send_library.rs +24 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_config.rs +108 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_library_index.rs +52 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_receive_library.rs +92 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_registered_libraries.rs +74 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_send_library.rs +83 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/is_registered_library.rs +32 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/is_supported_eid.rs +28 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/is_valid_receive_library.rs +261 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/mod.rs +16 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/receive_library_timeout.rs +62 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +65 -43
- package/contracts/endpoint-v2/src/tests/message_lib_manager/registered_libraries_count.rs +42 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +61 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +4 -6
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +59 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +16 -2
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_config.rs +155 -51
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +114 -92
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +235 -132
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +93 -87
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +346 -245
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +406 -60
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +252 -78
- package/contracts/endpoint-v2/src/tests/message_lib_manager/timeout.rs +102 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +212 -273
- package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +203 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +94 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_nonce.rs +78 -248
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +7 -282
- package/contracts/endpoint-v2/src/tests/messaging_channel/lazy_inbound_nonce.rs +6 -274
- package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +3 -2
- package/contracts/endpoint-v2/src/tests/messaging_channel/next_guid.rs +86 -178
- package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +328 -212
- package/contracts/endpoint-v2/src/tests/messaging_channel/outbound.rs +68 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/outbound_nonce.rs +6 -209
- package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +207 -159
- package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +142 -153
- package/contracts/endpoint-v2/src/tests/messaging_composer/compose_queue.rs +6 -179
- package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +163 -221
- package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +90 -121
- package/contracts/endpoint-v2/src/tests/mock.rs +18 -4
- package/contracts/endpoint-v2/src/tests/util/build_payload.rs +4 -70
- package/contracts/endpoint-v2/src/tests/util/compute_guid.rs +2 -1
- package/contracts/endpoint-v2/src/tests/util/keccak256.rs +17 -106
- package/contracts/layerzero-views/Cargo.toml +35 -0
- package/contracts/layerzero-views/src/errors.rs +10 -0
- package/contracts/layerzero-views/src/layerzero_view.rs +226 -0
- package/contracts/layerzero-views/src/lib.rs +38 -0
- package/contracts/layerzero-views/src/storage.rs +18 -0
- package/contracts/layerzero-views/src/tests/layerzero_view_tests.rs +423 -0
- package/contracts/layerzero-views/src/tests/mod.rs +4 -0
- package/contracts/layerzero-views/src/tests/setup.rs +377 -0
- package/contracts/layerzero-views/src/types.rs +50 -0
- package/contracts/macro-integration-tests/Cargo.toml +30 -0
- package/contracts/macro-integration-tests/src/lib.rs +1 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/initialization.rs +62 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +22 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/only_auth_guard.rs +97 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/ownership_transfer.rs +101 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/keyed_roundtrip.rs +225 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/mod.rs +4 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/name_override_runtime.rs +52 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/ttl_extension.rs +261 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/unkeyed_roundtrip.rs +137 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +113 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +139 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +2 -0
- package/contracts/macro-integration-tests/tests/runtime.rs +5 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.rs +21 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/pass/attr_on_variant_allowed.rs +20 -0
- package/contracts/macro-integration-tests/tests/ui/error/pass/basic_auto_discriminants.rs +15 -0
- package/contracts/macro-integration-tests/tests/ui/error/pass/mixed_discriminants.rs +16 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.rs +22 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.stderr +16 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/minimal_contract.rs +26 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +21 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_auth_env_param_variants.rs +46 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/default_value_on_variant.rs +14 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_instance_unit_basic.rs +14 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_persistent_named_fields_keyed.rs +16 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_temporary_unit_option.rs +15 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/name_override.rs +14 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/no_auto_ttl_extension.rs +19 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/ttl_provider_basic.rs +15 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +44 -0
- package/contracts/macro-integration-tests/tests/ui_error.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_ownable.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_storage.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_ttl_configurable.rs +12 -0
- package/contracts/message-libs/blocked-message-lib/src/lib.rs +17 -17
- package/contracts/message-libs/message-lib-common/src/errors.rs +7 -2
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +64 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet.rs +58 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet_header.rs +138 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/mod.rs +6 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload.rs +30 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload_hash.rs +15 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/test_helper.rs +39 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_dvn_option.rs +57 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +49 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +73 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +280 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +126 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +48 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/mod.rs +7 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +139 -0
- package/contracts/message-libs/message-lib-common/src/worker_options.rs +31 -1
- package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +7 -9
- package/contracts/message-libs/treasury/src/errors.rs +2 -3
- package/contracts/message-libs/treasury/src/events.rs +1 -1
- package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +2 -2
- package/contracts/message-libs/treasury/src/lib.rs +3 -3
- package/contracts/message-libs/treasury/src/storage.rs +3 -1
- package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +1 -1
- package/contracts/message-libs/treasury/src/treasury.rs +23 -26
- package/contracts/message-libs/uln-302/Cargo.toml +1 -1
- package/contracts/message-libs/uln-302/src/errors.rs +0 -5
- package/contracts/message-libs/uln-302/src/events.rs +5 -6
- package/contracts/message-libs/uln-302/src/receive_uln.rs +37 -56
- package/contracts/message-libs/uln-302/src/send_uln.rs +112 -138
- package/contracts/message-libs/uln-302/src/storage.rs +5 -5
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +5 -7
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +3 -3
- package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +6 -9
- package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +2 -2
- package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +3 -3
- package/contracts/message-libs/uln-302/src/tests/setup.rs +9 -0
- package/contracts/message-libs/uln-302/src/tests/testing_utils.rs +5 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/get_app_receive_uln_config.rs +1 -2
- package/contracts/message-libs/uln-302/src/tests/uln302/get_app_send_uln_config.rs +1 -2
- package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +37 -55
- package/contracts/message-libs/uln-302/src/uln302.rs +10 -25
- package/contracts/oapps/counter/Cargo.toml +14 -1
- package/contracts/oapps/counter/integration_tests/mod.rs +4 -1
- package/contracts/oapps/counter/integration_tests/setup_sml.rs +169 -0
- package/contracts/oapps/counter/integration_tests/setup_uln.rs +997 -0
- package/contracts/oapps/counter/integration_tests/signing.rs +62 -0
- package/contracts/oapps/counter/integration_tests/test_with_sml.rs +24 -55
- package/contracts/oapps/counter/integration_tests/test_with_uln.rs +314 -0
- package/contracts/oapps/counter/integration_tests/utils.rs +196 -53
- package/contracts/oapps/counter/src/counter.rs +67 -44
- package/contracts/oapps/counter/src/tests/mod.rs +0 -13
- package/contracts/oapps/counter/src/tests/test_counter.rs +5 -7
- package/contracts/oapps/oapp/src/errors.rs +5 -1
- package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +318 -221
- package/contracts/oapps/oapp/src/oapp_core.rs +36 -21
- package/contracts/oapps/oapp/src/oapp_options_type3.rs +48 -12
- package/contracts/oapps/oapp/src/oapp_receiver.rs +106 -41
- package/contracts/oapps/oapp/src/oapp_sender.rs +26 -34
- package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +9 -9
- package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +25 -18
- package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +7 -8
- package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +14 -16
- package/contracts/oapps/oapp-macros/src/generators.rs +128 -0
- package/contracts/oapps/oapp-macros/src/lib.rs +211 -0
- package/contracts/oapps/oft/integration-tests/setup.rs +34 -9
- package/contracts/oapps/oft/integration-tests/utils.rs +1 -1
- package/contracts/oapps/oft/src/errors.rs +6 -1
- package/contracts/oapps/oft/src/extensions/oft_fee.rs +13 -13
- package/contracts/oapps/oft/src/extensions/pausable.rs +5 -5
- package/contracts/oapps/oft/src/extensions/rate_limiter.rs +23 -23
- package/contracts/oapps/oft/src/lib.rs +4 -2
- package/contracts/oapps/oft/src/oft.rs +31 -71
- package/contracts/oapps/oft/src/oft_impl.rs +201 -0
- package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +2 -4
- package/contracts/oapps/oft/src/oft_types/mint_burn.rs +1 -4
- package/contracts/oapps/oft/src/storage.rs +2 -0
- package/contracts/oapps/oft/src/tests/extensions/setup.rs +60 -31
- package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +5 -3
- package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +5 -3
- package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +6 -4
- package/contracts/oapps/oft/src/tests/test_decimals.rs +2 -2
- package/contracts/oapps/oft/src/tests/test_oft_msg_codec.rs +1 -2
- package/contracts/oapps/oft/src/tests/test_send.rs +4 -4
- package/contracts/oapps/oft/src/tests/test_utils.rs +122 -81
- package/contracts/oapps/oft/src/types.rs +20 -0
- package/contracts/oapps/oft-std/Cargo.toml +6 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/mod.rs +3 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/test_oft_fee.rs +157 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/test_pausable.rs +162 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/test_rate_limiter.rs +186 -0
- package/contracts/oapps/oft-std/integration-tests/mod.rs +3 -0
- package/contracts/oapps/{counter/integration_tests → oft-std/integration-tests}/setup.rs +76 -30
- package/contracts/oapps/oft-std/integration-tests/utils.rs +427 -0
- package/contracts/oapps/oft-std/src/lib.rs +12 -1
- package/contracts/oapps/oft-std/src/oft.rs +141 -26
- package/contracts/upgrader/Cargo.toml +19 -0
- package/contracts/upgrader/src/lib.rs +96 -0
- package/contracts/upgrader/src/tests/mod.rs +1 -0
- package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract1.wasm +0 -0
- package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract2.wasm +0 -0
- package/contracts/upgrader/src/tests/test_upgrader.rs +120 -0
- package/contracts/utils/src/auth.rs +44 -0
- package/contracts/utils/src/errors.rs +32 -5
- package/contracts/utils/src/lib.rs +5 -1
- package/contracts/utils/src/multisig.rs +211 -0
- package/contracts/utils/src/ownable.rs +50 -60
- package/contracts/utils/src/tests/buffer_reader.rs +6 -6
- package/contracts/utils/src/tests/buffer_writer.rs +6 -6
- package/contracts/utils/src/tests/bytes_ext.rs +2 -4
- package/contracts/utils/src/tests/mod.rs +4 -1
- package/contracts/utils/src/tests/multisig.rs +731 -0
- package/contracts/utils/src/tests/option_ext.rs +18 -0
- package/contracts/utils/src/tests/ownable.rs +22 -70
- package/contracts/utils/src/tests/ttl_configurable.rs +607 -0
- package/contracts/utils/src/tests/upgradeable.rs +290 -0
- package/contracts/utils/src/ttl_configurable.rs +153 -0
- package/contracts/utils/src/ttl_extendable.rs +27 -0
- package/contracts/utils/src/upgradeable.rs +56 -0
- package/contracts/workers/dvn/Cargo.toml +2 -2
- package/contracts/workers/dvn/src/auth.rs +24 -35
- package/contracts/workers/dvn/src/dvn.rs +23 -14
- package/contracts/workers/dvn/src/errors.rs +1 -7
- package/contracts/workers/dvn/src/events.rs +1 -14
- package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
- package/contracts/workers/dvn/src/interfaces/mod.rs +0 -2
- package/contracts/workers/dvn/src/storage.rs +3 -13
- package/contracts/workers/dvn/src/tests/auth.rs +4 -4
- package/contracts/workers/dvn/src/tests/dvn.rs +1 -2
- package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +7 -8
- package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +11 -8
- package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +11 -12
- package/contracts/workers/dvn/src/tests/setup.rs +5 -5
- package/contracts/workers/dvn-fee-lib/Cargo.toml +0 -1
- package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +45 -16
- package/contracts/workers/dvn-fee-lib/src/errors.rs +3 -2
- package/contracts/workers/dvn-fee-lib/src/lib.rs +5 -11
- package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +30 -16
- package/contracts/workers/executor/src/auth.rs +80 -16
- package/contracts/workers/executor/src/executor.rs +17 -29
- package/contracts/workers/executor/src/storage.rs +2 -9
- package/contracts/workers/executor-fee-lib/Cargo.toml +1 -1
- package/contracts/workers/executor-fee-lib/src/errors.rs +9 -7
- package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +153 -121
- package/contracts/workers/executor-helper/Cargo.toml +1 -6
- package/contracts/workers/executor-helper/src/executor_helper.rs +53 -73
- package/contracts/workers/executor-helper/src/lib.rs +1 -7
- package/contracts/workers/price-feed/Cargo.toml +1 -2
- package/contracts/workers/price-feed/src/errors.rs +3 -2
- package/contracts/workers/price-feed/src/lib.rs +5 -6
- package/contracts/workers/price-feed/src/price_feed.rs +42 -23
- package/contracts/workers/worker/Cargo.toml +4 -0
- package/contracts/workers/worker/src/errors.rs +4 -0
- package/contracts/workers/worker/src/interfaces/price_feed.rs +3 -3
- package/contracts/workers/worker/src/lib.rs +2 -2
- package/contracts/workers/worker/src/tests/mod.rs +4 -0
- package/contracts/workers/worker/src/tests/setup.rs +147 -0
- package/contracts/workers/worker/src/tests/worker.rs +502 -0
- package/contracts/workers/worker/src/worker.rs +28 -30
- package/package.json +8 -5
- package/sdk/.turbo/turbo-build.log +1 -0
- package/sdk/.turbo/turbo-test.log +1009 -0
- package/sdk/dist/generated/bml.d.ts +104 -37
- package/sdk/dist/generated/bml.js +83 -42
- package/sdk/dist/generated/counter.d.ts +334 -175
- package/sdk/dist/generated/counter.js +109 -63
- package/sdk/dist/generated/dvn.d.ts +1985 -0
- package/sdk/dist/generated/dvn.js +326 -0
- package/sdk/dist/generated/dvn_fee_lib.d.ts +690 -0
- package/sdk/dist/generated/dvn_fee_lib.js +163 -0
- package/sdk/dist/generated/endpoint.d.ts +155 -46
- package/sdk/dist/generated/endpoint.js +93 -50
- package/sdk/dist/generated/executor.d.ts +1841 -0
- package/sdk/dist/generated/executor.js +312 -0
- package/sdk/dist/generated/executor_fee_lib.d.ts +1083 -0
- package/sdk/dist/generated/executor_fee_lib.js +255 -0
- package/sdk/dist/generated/executor_helper.d.ts +981 -0
- package/sdk/dist/generated/executor_helper.js +236 -0
- package/sdk/dist/generated/oft_std.d.ts +1722 -0
- package/sdk/dist/generated/oft_std.js +316 -0
- package/sdk/dist/generated/price_feed.d.ts +1077 -0
- package/sdk/dist/generated/price_feed.js +210 -0
- package/sdk/dist/generated/sml.d.ts +171 -56
- package/sdk/dist/generated/sml.js +111 -62
- package/sdk/dist/generated/treasury.d.ts +896 -0
- package/sdk/dist/generated/treasury.js +219 -0
- package/sdk/dist/generated/uln302.d.ts +175 -75
- package/sdk/dist/generated/uln302.js +126 -82
- package/sdk/dist/generated/upgrader.d.ts +70 -0
- package/sdk/dist/generated/upgrader.js +19 -0
- package/sdk/dist/index.d.ts +10 -0
- package/sdk/dist/index.js +14 -0
- package/sdk/dist/wasm/blocked-message-lib.d.ts +1 -0
- package/sdk/dist/wasm/blocked-message-lib.js +2 -0
- package/sdk/dist/wasm/counter.d.ts +1 -0
- package/sdk/dist/wasm/counter.js +2 -0
- package/sdk/dist/wasm/dvn-fee-lib.d.ts +1 -0
- package/sdk/dist/wasm/dvn-fee-lib.js +2 -0
- package/sdk/dist/wasm/dvn.d.ts +1 -0
- package/sdk/dist/wasm/dvn.js +2 -0
- package/sdk/dist/wasm/endpoint-v2.d.ts +1 -0
- package/sdk/dist/wasm/endpoint-v2.js +2 -0
- package/sdk/dist/wasm/executor-fee-lib.d.ts +1 -0
- package/sdk/dist/wasm/executor-fee-lib.js +2 -0
- package/sdk/dist/wasm/executor-helper.d.ts +1 -0
- package/sdk/dist/wasm/executor-helper.js +2 -0
- package/sdk/dist/wasm/executor.d.ts +1 -0
- package/sdk/dist/wasm/executor.js +2 -0
- package/sdk/dist/wasm/layerzero-views.d.ts +1 -0
- package/sdk/dist/wasm/layerzero-views.js +2 -0
- package/sdk/dist/wasm/oft-std.d.ts +1 -0
- package/sdk/dist/wasm/oft-std.js +2 -0
- package/sdk/dist/wasm/price-feed.d.ts +1 -0
- package/sdk/dist/wasm/price-feed.js +2 -0
- package/sdk/dist/wasm/simple-message-lib.d.ts +1 -0
- package/sdk/dist/wasm/simple-message-lib.js +2 -0
- package/sdk/dist/wasm/treasury.d.ts +1 -0
- package/sdk/dist/wasm/treasury.js +2 -0
- package/sdk/dist/wasm/uln302.d.ts +1 -0
- package/sdk/dist/wasm/uln302.js +2 -0
- package/sdk/dist/wasm/upgrader.d.ts +1 -0
- package/sdk/dist/wasm/upgrader.js +2 -0
- package/sdk/dist/wasm.d.ts +15 -0
- package/sdk/dist/wasm.js +15 -0
- package/sdk/package.json +7 -4
- package/sdk/src/index.ts +17 -0
- package/sdk/test/counter-sml.test.ts +376 -0
- package/sdk/test/counter-uln.test.ts +493 -0
- package/sdk/test/{oft.test.ts → oft-sml.test.ts} +187 -323
- package/sdk/test/suites/constants.ts +22 -2
- package/sdk/test/suites/dummyContractClient.ts +169 -0
- package/sdk/test/suites/globalSetup.ts +450 -0
- package/sdk/test/suites/localnet.ts +23 -6
- package/sdk/test/upgrader.test.ts +300 -0
- package/sdk/test/utils.ts +558 -85
- package/sdk/vitest.config.ts +21 -0
- package/tools/ts-bindings-gen/src/main.rs +12 -1
- package/turbo.json +2 -0
- package/contracts/common-macros/src/contract_impl.rs +0 -47
- package/contracts/common-macros/src/ownable.rs +0 -59
- package/contracts/common-macros/src/tests/contract_impl.rs +0 -381
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +0 -32
- package/contracts/endpoint-v2/src/tests/messaging_channel/clear.rs +0 -316
- package/contracts/endpoint-v2/src/tests/messaging_channel/internal.rs +0 -388
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +0 -162
- package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +0 -319
- package/contracts/oapp-macros/src/lib.rs +0 -154
- package/contracts/oapp-macros/src/oapp_core.rs +0 -40
- package/contracts/oapp-macros/src/oapp_full.rs +0 -21
- package/contracts/oapp-macros/src/oapp_options_type3.rs +0 -31
- package/contracts/oapp-macros/src/oapp_receiver.rs +0 -48
- package/contracts/oapp-macros/src/oapp_sender.rs +0 -21
- package/contracts/oapp-macros/src/util.rs +0 -107
- package/contracts/oapps/oft/src/constants.rs +0 -5
- package/contracts/oapps/oft/src/default_oft_impl.rs +0 -146
- package/contracts/utils/src/tests/ttl.rs +0 -421
- package/contracts/utils/src/ttl.rs +0 -123
- package/contracts/workers/dvn/src/interfaces/multisig.rs +0 -56
- package/contracts/workers/dvn/src/multisig.rs +0 -153
- package/sdk/test/index.test.ts +0 -376
- /package/contracts/{oapp-macros → oapps/oapp-macros}/Cargo.toml +0 -0
|
@@ -18,66 +18,73 @@ fn get_call_data_size_pads_signatures() {
|
|
|
18
18
|
|
|
19
19
|
#[test]
|
|
20
20
|
fn apply_premium_multiplier_only_both_zero() {
|
|
21
|
+
let env = Env::default();
|
|
21
22
|
let fee = 1_000i128;
|
|
22
23
|
let multiplier_bps = 15_000u32;
|
|
23
24
|
// multiplier_bps is non-zero, so default_multiplier_bps is ignored
|
|
24
|
-
let result = apply_premium(fee, multiplier_bps, 10_000, 0, 0);
|
|
25
|
+
let result = apply_premium(&env, fee, multiplier_bps, 10_000, 0, 0);
|
|
25
26
|
assert_eq!(result, fee * multiplier_bps as i128 / BPS_BASE);
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
#[test]
|
|
29
30
|
fn apply_premium_multiplier_only_native_price_zero() {
|
|
31
|
+
let env = Env::default();
|
|
30
32
|
let fee = 1_000i128;
|
|
31
33
|
let multiplier_bps = 15_000u32;
|
|
32
|
-
let result = apply_premium(fee, multiplier_bps, 10_000, 100, 0);
|
|
34
|
+
let result = apply_premium(&env, fee, multiplier_bps, 10_000, 100, 0);
|
|
33
35
|
assert_eq!(result, fee * multiplier_bps as i128 / BPS_BASE);
|
|
34
36
|
}
|
|
35
37
|
|
|
36
38
|
#[test]
|
|
37
39
|
fn apply_premium_multiplier_only_floor_margin_zero() {
|
|
40
|
+
let env = Env::default();
|
|
38
41
|
let fee = 1_000i128;
|
|
39
42
|
let multiplier_bps = 15_000u32;
|
|
40
|
-
let result = apply_premium(fee, multiplier_bps, 10_000, 0, NATIVE_DECIMALS_RATE);
|
|
43
|
+
let result = apply_premium(&env, fee, multiplier_bps, 10_000, 0, NATIVE_DECIMALS_RATE);
|
|
41
44
|
assert_eq!(result, fee * multiplier_bps as i128 / BPS_BASE);
|
|
42
45
|
}
|
|
43
46
|
|
|
44
47
|
#[test]
|
|
45
48
|
fn apply_premium_uses_default_when_multiplier_zero() {
|
|
49
|
+
let env = Env::default();
|
|
46
50
|
let fee = 1_000i128;
|
|
47
51
|
let default_bps = 12_000u32;
|
|
48
52
|
// multiplier_bps is 0, so default_multiplier_bps should be used
|
|
49
|
-
let result = apply_premium(fee, 0, default_bps, 0, 0);
|
|
53
|
+
let result = apply_premium(&env, fee, 0, default_bps, 0, 0);
|
|
50
54
|
assert_eq!(result, fee * default_bps as i128 / BPS_BASE);
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
#[test]
|
|
54
58
|
fn apply_premium_floor_margin_wins() {
|
|
59
|
+
let env = Env::default();
|
|
55
60
|
let fee = 1_000i128;
|
|
56
61
|
let multiplier_bps = 10_000u32;
|
|
57
62
|
let floor_margin_usd = 10u128;
|
|
58
63
|
let native_price_usd = NATIVE_DECIMALS_RATE;
|
|
59
64
|
|
|
60
|
-
let result = apply_premium(fee, multiplier_bps, 10_000, floor_margin_usd, native_price_usd);
|
|
65
|
+
let result = apply_premium(&env, fee, multiplier_bps, 10_000, floor_margin_usd, native_price_usd);
|
|
61
66
|
assert_eq!(result, fee + floor_margin_usd as i128);
|
|
62
67
|
}
|
|
63
68
|
|
|
64
69
|
#[test]
|
|
65
70
|
fn apply_premium_multiplier_wins_over_small_floor() {
|
|
71
|
+
let env = Env::default();
|
|
66
72
|
let fee = 1_000i128;
|
|
67
73
|
let multiplier_bps = 12_000u32;
|
|
68
74
|
let floor_margin_usd = 1u128;
|
|
69
75
|
let native_price_usd = NATIVE_DECIMALS_RATE;
|
|
70
76
|
|
|
71
|
-
let result = apply_premium(fee, multiplier_bps, 10_000, floor_margin_usd, native_price_usd);
|
|
77
|
+
let result = apply_premium(&env, fee, multiplier_bps, 10_000, floor_margin_usd, native_price_usd);
|
|
72
78
|
assert_eq!(result, 1_200);
|
|
73
79
|
}
|
|
74
80
|
|
|
75
81
|
#[test]
|
|
76
|
-
#[should_panic(expected = "Error(Contract, #
|
|
82
|
+
#[should_panic(expected = "Error(Contract, #1)")] // DvnFeeLibError::EidNotSupported
|
|
77
83
|
fn get_fee_panics_when_gas_zero() {
|
|
78
84
|
let env = Env::default();
|
|
79
85
|
env.mock_all_auths();
|
|
80
|
-
let
|
|
86
|
+
let owner = Address::generate(&env);
|
|
87
|
+
let fee_lib_addr = env.register(DvnFeeLib, (&owner,));
|
|
81
88
|
let params = DvnFeeParams {
|
|
82
89
|
sender: Address::generate(&env),
|
|
83
90
|
dst_eid: 1,
|
|
@@ -95,11 +102,12 @@ fn get_fee_panics_when_gas_zero() {
|
|
|
95
102
|
}
|
|
96
103
|
|
|
97
104
|
#[test]
|
|
98
|
-
#[should_panic(expected = "Error(Contract, #
|
|
105
|
+
#[should_panic(expected = "Error(Contract, #2)")] // DvnFeeLibError::InvalidDVNOptions
|
|
99
106
|
fn get_fee_panics_when_options_not_empty() {
|
|
100
107
|
let env = Env::default();
|
|
101
108
|
env.mock_all_auths();
|
|
102
|
-
let
|
|
109
|
+
let owner = Address::generate(&env);
|
|
110
|
+
let fee_lib_addr = env.register(DvnFeeLib, (&owner,));
|
|
103
111
|
let mut options = Bytes::new(&env);
|
|
104
112
|
options.push_back(1u8);
|
|
105
113
|
|
|
@@ -171,7 +179,8 @@ impl MockPriceFeedNegative {
|
|
|
171
179
|
fn get_fee_success_path() {
|
|
172
180
|
let env = Env::default();
|
|
173
181
|
env.mock_all_auths();
|
|
174
|
-
let
|
|
182
|
+
let owner = Address::generate(&env);
|
|
183
|
+
let fee_lib_addr = env.register(DvnFeeLib, (&owner,));
|
|
175
184
|
let params = DvnFeeParams {
|
|
176
185
|
sender: Address::generate(&env),
|
|
177
186
|
dst_eid: 7,
|
|
@@ -194,7 +203,8 @@ fn get_fee_success_path() {
|
|
|
194
203
|
fn get_fee_uses_default_multiplier_when_zero() {
|
|
195
204
|
let env = Env::default();
|
|
196
205
|
env.mock_all_auths();
|
|
197
|
-
let
|
|
206
|
+
let owner = Address::generate(&env);
|
|
207
|
+
let fee_lib_addr = env.register(DvnFeeLib, (&owner,));
|
|
198
208
|
|
|
199
209
|
// multiplier_bps = 0, default_multiplier_bps = 12000 (1.2x)
|
|
200
210
|
// MockPriceFeed returns fee=100, so result = 100 * 12000 / 10000 = 120
|
|
@@ -220,7 +230,8 @@ fn get_fee_uses_default_multiplier_when_zero() {
|
|
|
220
230
|
fn get_fee_prefers_dst_multiplier_over_default() {
|
|
221
231
|
let env = Env::default();
|
|
222
232
|
env.mock_all_auths();
|
|
223
|
-
let
|
|
233
|
+
let owner = Address::generate(&env);
|
|
234
|
+
let fee_lib_addr = env.register(DvnFeeLib, (&owner,));
|
|
224
235
|
|
|
225
236
|
// multiplier_bps = 15000 (1.5x), default_multiplier_bps = 10000 (1.0x)
|
|
226
237
|
// MockPriceFeed returns fee=100, so result = 100 * 15000 / 10000 = 150
|
|
@@ -247,7 +258,8 @@ fn get_fee_prefers_dst_multiplier_over_default() {
|
|
|
247
258
|
fn get_fee_panics_when_price_feed_returns_negative_fee() {
|
|
248
259
|
let env = Env::default();
|
|
249
260
|
env.mock_all_auths();
|
|
250
|
-
let
|
|
261
|
+
let owner = Address::generate(&env);
|
|
262
|
+
let fee_lib_addr = env.register(DvnFeeLib, (&owner,));
|
|
251
263
|
let params = DvnFeeParams {
|
|
252
264
|
sender: Address::generate(&env),
|
|
253
265
|
dst_eid: 7,
|
|
@@ -267,18 +279,20 @@ fn get_fee_panics_when_price_feed_returns_negative_fee() {
|
|
|
267
279
|
#[test]
|
|
268
280
|
#[should_panic]
|
|
269
281
|
fn apply_premium_panics_on_overflow() {
|
|
282
|
+
let env = Env::default();
|
|
270
283
|
let fee = i128::MAX / 2;
|
|
271
284
|
let multiplier_bps = 20_000u32;
|
|
272
|
-
apply_premium(fee, multiplier_bps, 10_000, u128::MAX, 1);
|
|
285
|
+
apply_premium(&env, fee, multiplier_bps, 10_000, u128::MAX, 1);
|
|
273
286
|
}
|
|
274
287
|
|
|
275
288
|
#[test]
|
|
276
289
|
fn apply_premium_floor_margin_truncates() {
|
|
290
|
+
let env = Env::default();
|
|
277
291
|
let fee = 0i128;
|
|
278
292
|
let multiplier_bps = 10_000u32;
|
|
279
293
|
let floor_margin_usd = 1u128;
|
|
280
294
|
let native_price_usd = NATIVE_DECIMALS_RATE * 3 / 2;
|
|
281
295
|
|
|
282
|
-
let result = apply_premium(fee, multiplier_bps, 10_000, floor_margin_usd, native_price_usd);
|
|
296
|
+
let result = apply_premium(&env, fee, multiplier_bps, 10_000, floor_margin_usd, native_price_usd);
|
|
283
297
|
assert_eq!(result, 0);
|
|
284
298
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
use super::*;
|
|
2
|
-
|
|
2
|
+
use endpoint_v2::LayerZeroEndpointV2Client;
|
|
3
3
|
use soroban_sdk::{
|
|
4
4
|
address_payload::AddressPayload,
|
|
5
5
|
auth::{Context, CustomAccountInterface},
|
|
6
|
-
|
|
6
|
+
contracttype,
|
|
7
7
|
crypto::Hash,
|
|
8
|
+
Symbol, TryFromVal, Val,
|
|
8
9
|
};
|
|
9
10
|
|
|
10
11
|
// ============================================================================
|
|
@@ -26,7 +27,7 @@ pub struct ExecutorSignature {
|
|
|
26
27
|
// Custom Account Interface Implementation
|
|
27
28
|
// ============================================================================
|
|
28
29
|
|
|
29
|
-
#[
|
|
30
|
+
#[contract_impl]
|
|
30
31
|
impl CustomAccountInterface for LzExecutor {
|
|
31
32
|
type Signature = ExecutorSignature;
|
|
32
33
|
type Error = ExecutorError;
|
|
@@ -35,7 +36,6 @@ impl CustomAccountInterface for LzExecutor {
|
|
|
35
36
|
///
|
|
36
37
|
/// The public key must correspond to a registered admin and must have signed the signature_payload.
|
|
37
38
|
/// Uses Ed25519 signature verification.
|
|
38
|
-
/// Only whitelisted function calls are authorized.
|
|
39
39
|
fn __check_auth(
|
|
40
40
|
env: Env,
|
|
41
41
|
signature_payload: Hash<32>,
|
|
@@ -70,24 +70,88 @@ impl LzExecutor {
|
|
|
70
70
|
Ok(())
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
/// Validates
|
|
74
|
-
///
|
|
73
|
+
/// Validates auth contexts according to executor rules.
|
|
74
|
+
///
|
|
75
|
+
/// # Design
|
|
76
|
+
///
|
|
77
|
+
/// For `lz_receive`: OApps call `verify_and_clear_payload` (see `oapp_receiver.rs`)
|
|
78
|
+
/// which requires executor auth and optionally transfers native token from executor to OApp.
|
|
79
|
+
///
|
|
80
|
+
/// For `lz_compose`: Composers follow the same pattern - require executor auth and
|
|
81
|
+
/// optionally transfer native token from executor to composer.
|
|
82
|
+
///
|
|
83
|
+
/// Both create 1-2 auth contexts depending on whether value == 0:
|
|
84
|
+
/// - Context 1: `lz_receive`/`lz_compose` on the OApp/Composer (always present)
|
|
85
|
+
/// - Context 2: `transfer` on native token (only if value != 0)
|
|
86
|
+
///
|
|
87
|
+
/// For `lz_receive_alert`/`lz_compose_alert`: These are called directly on the endpoint
|
|
88
|
+
/// to record failed executions. Only 1 context on the endpoint is expected.
|
|
75
89
|
fn validate_auth_contexts(env: &Env, contexts: &Vec<Context>) -> Result<(), ExecutorError> {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
90
|
+
// Early bounds check: max 2 contexts expected
|
|
91
|
+
if contexts.len() > 2 {
|
|
92
|
+
return Err(ExecutorError::UnauthorizedContext);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
let first_ctx = contexts.first().ok_or(ExecutorError::UnauthorizedContext)?;
|
|
96
|
+
let Context::Contract(first_ctx) = first_ctx else {
|
|
97
|
+
return Err(ExecutorError::UnauthorizedContext);
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
let first_fn_name = &first_ctx.fn_name;
|
|
101
|
+
|
|
102
|
+
// Alert path: lz_receive_alert or lz_compose_alert (lazy Symbol creation)
|
|
103
|
+
if *first_fn_name == Symbol::new(env, "lz_receive_alert")
|
|
104
|
+
|| *first_fn_name == Symbol::new(env, "lz_compose_alert")
|
|
105
|
+
{
|
|
106
|
+
// Require exactly 1 context and the contract must be the endpoint
|
|
107
|
+
if contexts.len() != 1 || first_ctx.contract != Self::endpoint(env) {
|
|
108
|
+
return Err(ExecutorError::UnauthorizedContext);
|
|
84
109
|
}
|
|
85
|
-
|
|
86
|
-
|
|
110
|
+
return Ok(());
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Execute path: lz_receive or lz_compose
|
|
114
|
+
if *first_fn_name != Symbol::new(env, "lz_receive") && *first_fn_name != Symbol::new(env, "lz_compose") {
|
|
115
|
+
return Err(ExecutorError::UnauthorizedContext);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
let value = Self::extract_i128(env, first_ctx.args.last())?;
|
|
119
|
+
if value == 0 {
|
|
120
|
+
// If value is 0, there should be exactly 1 context
|
|
121
|
+
if contexts.len() != 1 {
|
|
87
122
|
return Err(ExecutorError::UnauthorizedContext);
|
|
88
123
|
}
|
|
124
|
+
return Ok(());
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// value != 0: validate transfer context (only if there are 2 contexts)
|
|
128
|
+
if contexts.len() != 2 {
|
|
129
|
+
return Err(ExecutorError::UnauthorizedContext);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Second context must be the transfer context
|
|
133
|
+
let Context::Contract(second_ctx) = contexts.get(1).unwrap() else {
|
|
134
|
+
return Err(ExecutorError::UnauthorizedContext);
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
let native_token = LayerZeroEndpointV2Client::new(env, &Self::endpoint(env)).native_token();
|
|
138
|
+
let transfer_amount = Self::extract_i128(env, second_ctx.args.get(2))?;
|
|
139
|
+
|
|
140
|
+
// Validate transfer context: must be transfer with matching value and native token contract
|
|
141
|
+
if second_ctx.fn_name != Symbol::new(env, "transfer")
|
|
142
|
+
|| second_ctx.contract != native_token
|
|
143
|
+
|| transfer_amount != value
|
|
144
|
+
{
|
|
145
|
+
return Err(ExecutorError::UnauthorizedContext);
|
|
89
146
|
}
|
|
90
147
|
|
|
91
148
|
Ok(())
|
|
92
149
|
}
|
|
150
|
+
|
|
151
|
+
/// Extracts an i128 value from an optional Val.
|
|
152
|
+
#[inline]
|
|
153
|
+
fn extract_i128(env: &Env, val: Option<Val>) -> Result<i128, ExecutorError> {
|
|
154
|
+
let val = val.ok_or(ExecutorError::UnauthorizedContext)?;
|
|
155
|
+
i128::try_from_val(env, &val).map_err(|_| ExecutorError::UnauthorizedContext)
|
|
156
|
+
}
|
|
93
157
|
}
|
|
@@ -5,27 +5,25 @@ use crate::{
|
|
|
5
5
|
storage::ExecutorStorage,
|
|
6
6
|
NativeDropParams,
|
|
7
7
|
};
|
|
8
|
-
use common_macros::{contract_impl,
|
|
8
|
+
use common_macros::{contract_impl, lz_contract};
|
|
9
9
|
use endpoint_v2::{FeeRecipient, LayerZeroEndpointV2Client, Origin};
|
|
10
10
|
use message_lib_common::interfaces::ILayerZeroExecutor;
|
|
11
|
-
use soroban_sdk::{
|
|
12
|
-
use utils::option_ext::OptionExt;
|
|
13
|
-
use utils::ownable::Ownable;
|
|
11
|
+
use soroban_sdk::{token::TokenClient, vec, Address, Bytes, BytesN, Env, Vec};
|
|
12
|
+
use utils::{option_ext::OptionExt, upgradeable::UpgradeableInternal};
|
|
14
13
|
use worker::{
|
|
15
14
|
assert_acl, assert_not_paused, assert_supported_message_lib, init_worker, require_admin_auth, set_admin_by_owner,
|
|
16
15
|
ExecutorFeeLibClient, FeeParams, Worker,
|
|
17
16
|
};
|
|
18
17
|
|
|
19
18
|
/// LayerZero Executor contract for cross-chain message execution.
|
|
20
|
-
#[
|
|
21
|
-
#[ttl_configurable]
|
|
19
|
+
#[lz_contract(upgradeable)]
|
|
22
20
|
pub struct LzExecutor;
|
|
23
21
|
|
|
24
22
|
#[contract_impl]
|
|
25
23
|
impl LzExecutor {
|
|
26
24
|
/// Initializes the executor contract.
|
|
27
25
|
///
|
|
28
|
-
/// Sets up ownership, worker configuration, endpoint address
|
|
26
|
+
/// Sets up ownership, worker configuration, and endpoint address.
|
|
29
27
|
///
|
|
30
28
|
/// # Arguments
|
|
31
29
|
/// * `endpoint` - LayerZero Endpoint V2 contract address
|
|
@@ -34,7 +32,6 @@ impl LzExecutor {
|
|
|
34
32
|
/// * `message_libs` - Supported message library addresses (e.g., ULN302)
|
|
35
33
|
/// * `price_feed` - Price feed contract address for fee calculations
|
|
36
34
|
/// * `default_multiplier_bps` - Default fee multiplier in basis points (10000 = 1x)
|
|
37
|
-
/// * `whitelist` - Initial whitelisted (contract, function) pairs for authorization
|
|
38
35
|
/// * `worker_fee_lib` - Worker fee library contract address
|
|
39
36
|
/// * `deposit_address` - Address to receive fee payments
|
|
40
37
|
pub fn __constructor(
|
|
@@ -45,7 +42,6 @@ impl LzExecutor {
|
|
|
45
42
|
message_libs: &Vec<Address>,
|
|
46
43
|
price_feed: &Address,
|
|
47
44
|
default_multiplier_bps: u32,
|
|
48
|
-
whitelist: &Vec<(Address, Symbol)>,
|
|
49
45
|
worker_fee_lib: &Address,
|
|
50
46
|
deposit_address: &Address,
|
|
51
47
|
) {
|
|
@@ -60,26 +56,6 @@ impl LzExecutor {
|
|
|
60
56
|
deposit_address,
|
|
61
57
|
);
|
|
62
58
|
ExecutorStorage::set_endpoint(env, endpoint);
|
|
63
|
-
|
|
64
|
-
// Set initial whitelisted functions
|
|
65
|
-
for (contract, fn_name) in whitelist.iter() {
|
|
66
|
-
ExecutorStorage::set_whitelisted_fn(env, &contract, &fn_name, &true);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/// Sets whether a (contract, function) pair is whitelisted.
|
|
71
|
-
/// When `allowed` is false, the entry is removed from storage to save space.
|
|
72
|
-
///
|
|
73
|
-
/// Only the contract owner can call this function.
|
|
74
|
-
#[only_owner]
|
|
75
|
-
pub fn set_whitelisted_fn(env: &Env, contract: &Address, fn_name: &Symbol, allowed: bool) {
|
|
76
|
-
let value = if allowed { Some(true) } else { None };
|
|
77
|
-
ExecutorStorage::set_or_remove_whitelisted_fn(env, contract, fn_name, &value);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/// Returns whether a (contract, function) pair is whitelisted.
|
|
81
|
-
pub fn is_whitelisted_fn(env: &Env, contract: &Address, fn_name: &Symbol) -> bool {
|
|
82
|
-
ExecutorStorage::has_whitelisted_fn(env, contract, fn_name)
|
|
83
59
|
}
|
|
84
60
|
|
|
85
61
|
/// Withdraws a token from the contract to a specified address.
|
|
@@ -227,6 +203,18 @@ impl ILayerZeroExecutor for LzExecutor {
|
|
|
227
203
|
#[contract_impl(contracttrait)]
|
|
228
204
|
impl Worker for LzExecutor {}
|
|
229
205
|
|
|
206
|
+
// ============================================================================
|
|
207
|
+
// Upgradeable Implementation
|
|
208
|
+
// ============================================================================
|
|
209
|
+
|
|
210
|
+
impl UpgradeableInternal for LzExecutor {
|
|
211
|
+
type MigrationData = ();
|
|
212
|
+
|
|
213
|
+
fn __migrate(_env: &Env, _migration_data: &Self::MigrationData) {
|
|
214
|
+
// No migration logic needed for initial upgrade capability
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
230
218
|
// ============================================================================
|
|
231
219
|
// Include SubModules
|
|
232
220
|
// ============================================================================
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
use common_macros::storage;
|
|
2
|
-
use soroban_sdk::
|
|
2
|
+
use soroban_sdk::Address;
|
|
3
3
|
|
|
4
4
|
use crate::DstConfig;
|
|
5
5
|
|
|
6
6
|
/// Storage keys for the Executor contract.
|
|
7
7
|
///
|
|
8
8
|
/// Manages persistent storage for destination configurations and instance storage
|
|
9
|
-
/// for the endpoint address
|
|
9
|
+
/// for the endpoint address.
|
|
10
10
|
#[storage]
|
|
11
11
|
pub enum ExecutorStorage {
|
|
12
12
|
/// Destination chain configuration indexed by endpoint ID.
|
|
@@ -21,11 +21,4 @@ pub enum ExecutorStorage {
|
|
|
21
21
|
/// Used for receive-flow operations to interact with the endpoint.
|
|
22
22
|
#[instance(Address)]
|
|
23
23
|
Endpoint,
|
|
24
|
-
|
|
25
|
-
/// Whitelisted function for a specific contract.
|
|
26
|
-
///
|
|
27
|
-
/// Only whitelisted (contract, function) pairs can trigger Executor authorization.
|
|
28
|
-
/// This allows fine-grained control over which contracts can call which functions.
|
|
29
|
-
#[instance(bool)]
|
|
30
|
-
WhitelistedFn { contract: Address, fn_name: Symbol },
|
|
31
24
|
}
|
|
@@ -2,14 +2,16 @@ use common_macros::contract_error;
|
|
|
2
2
|
|
|
3
3
|
#[contract_error]
|
|
4
4
|
pub enum ExecutorFeeLibError {
|
|
5
|
+
EidNotSupported,
|
|
6
|
+
InvalidExecutorOptions,
|
|
7
|
+
InvalidFee,
|
|
8
|
+
InvalidLzComposeOption,
|
|
9
|
+
InvalidLzReceiveOption,
|
|
10
|
+
InvalidNativeDropOption,
|
|
11
|
+
NativeAmountExceedsCap,
|
|
5
12
|
NoOptions,
|
|
13
|
+
Overflow,
|
|
6
14
|
UnsupportedOptionType,
|
|
7
|
-
ZeroLzReceiveGasProvided,
|
|
8
15
|
ZeroLzComposeGasProvided,
|
|
9
|
-
|
|
10
|
-
InvalidLzReceiveOption,
|
|
11
|
-
InvalidNativeDropOption,
|
|
12
|
-
InvalidLzComposeOption,
|
|
13
|
-
InvalidExecutorOptions,
|
|
14
|
-
EidNotSupported,
|
|
16
|
+
ZeroLzReceiveGasProvided,
|
|
15
17
|
}
|