@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.
- package/.turbo/turbo-build.log +384 -278
- package/.turbo/turbo-lint.log +110 -78
- package/.turbo/turbo-test.log +1248 -1014
- package/Cargo.lock +130 -3
- package/Cargo.toml +2 -1
- package/contracts/common-macros/src/contract_impl.rs +6 -1
- package/contracts/common-macros/src/lib.rs +47 -8
- package/contracts/common-macros/src/ownable.rs +7 -25
- package/contracts/common-macros/src/storage.rs +1 -1
- package/contracts/common-macros/src/tests/contract_impl.rs +5 -0
- package/contracts/common-macros/src/tests/mod.rs +1 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap +23 -7
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +5 -25
- 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 +5 -25
- 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 +14 -44
- package/contracts/common-macros/src/upgradeable.rs +76 -0
- package/contracts/endpoint-v2/src/endpoint_v2.rs +25 -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 +61 -9
- 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 +3 -5
- 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 +15 -1
- 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 +229 -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_owner_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/extend_instance_ttl.rs +50 -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 +3 -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_owner_missing_env.rs +22 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_owner_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 +22 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_owner_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/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 +50 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +74 -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 +2 -2
- package/contracts/message-libs/treasury/src/errors.rs +0 -1
- package/contracts/message-libs/treasury/src/lib.rs +3 -3
- package/contracts/message-libs/treasury/src/storage.rs +2 -0
- package/contracts/message-libs/treasury/src/treasury.rs +12 -13
- 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 +24 -54
- package/contracts/message-libs/uln-302/src/send_uln.rs +89 -135
- 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 +8 -5
- package/contracts/oapps/counter/src/counter.rs +0 -1
- package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +306 -224
- package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +0 -1
- package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +0 -1
- package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +0 -1
- package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +0 -1
- package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_core.rs +1 -0
- package/contracts/oapps/oft/integration-tests/setup.rs +10 -3
- package/contracts/oapps/oft/integration-tests/utils.rs +1 -1
- package/contracts/oapps/oft/src/default_oft_impl.rs +9 -3
- package/contracts/oapps/oft/src/extensions/oft_fee.rs +5 -5
- package/contracts/oapps/oft/src/extensions/pausable.rs +1 -1
- package/contracts/oapps/oft/src/extensions/rate_limiter.rs +18 -18
- package/contracts/oapps/oft/src/oft.rs +9 -9
- package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +1 -1
- package/contracts/oapps/oft/src/tests/extensions/setup.rs +26 -11
- package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +1 -1
- package/contracts/oapps/oft/src/tests/test_send.rs +4 -4
- package/contracts/oapps/oft/src/tests/test_utils.rs +93 -74
- 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/oft-std/integration-tests/setup.rs +245 -0
- 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 +122 -25
- 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/errors.rs +6 -1
- package/contracts/utils/src/lib.rs +2 -1
- package/contracts/utils/src/ownable.rs +49 -61
- package/contracts/utils/src/tests/mod.rs +3 -1
- package/contracts/utils/src/tests/option_ext.rs +21 -0
- package/contracts/utils/src/tests/ownable.rs +10 -69
- package/contracts/utils/src/tests/ttl_configurable.rs +596 -0
- package/contracts/utils/src/tests/upgradeable.rs +288 -0
- package/contracts/utils/src/{ttl.rs → ttl_configurable.rs} +67 -52
- package/contracts/utils/src/upgradeable.rs +54 -0
- package/contracts/workers/dvn/Cargo.toml +1 -1
- package/contracts/workers/dvn/src/auth.rs +21 -32
- package/contracts/workers/dvn/src/dvn.rs +40 -3
- package/contracts/workers/dvn/src/errors.rs +1 -0
- package/contracts/workers/dvn/src/multisig.rs +10 -6
- package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +2 -2
- package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +4 -4
- package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -2
- package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +46 -14
- 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/executor.rs +16 -2
- package/contracts/workers/executor-fee-lib/src/errors.rs +9 -7
- package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +154 -119
- package/contracts/workers/executor-helper/Cargo.toml +0 -5
- package/contracts/workers/executor-helper/src/lib.rs +1 -7
- package/contracts/workers/price-feed/Cargo.toml +0 -1
- 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 +39 -17
- package/contracts/workers/worker/Cargo.toml +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 +501 -0
- package/contracts/workers/worker/src/worker.rs +10 -16
- package/package.json +3 -3
- package/sdk/dist/generated/bml.d.ts +40 -30
- package/sdk/dist/generated/bml.js +16 -11
- package/sdk/dist/generated/counter.d.ts +168 -134
- package/sdk/dist/generated/counter.js +26 -21
- package/sdk/dist/generated/dvn.d.ts +1932 -0
- package/sdk/dist/generated/dvn.js +288 -0
- package/sdk/dist/generated/dvn_fee_lib.d.ts +615 -0
- package/sdk/dist/generated/dvn_fee_lib.js +123 -0
- package/sdk/dist/generated/endpoint.d.ts +75 -41
- package/sdk/dist/generated/endpoint.js +22 -17
- package/sdk/dist/generated/executor.d.ts +1809 -0
- package/sdk/dist/generated/executor.js +269 -0
- package/sdk/dist/generated/executor_fee_lib.d.ts +999 -0
- package/sdk/dist/generated/executor_fee_lib.js +208 -0
- package/sdk/dist/generated/executor_helper.d.ts +869 -0
- package/sdk/dist/generated/executor_helper.js +187 -0
- package/sdk/dist/generated/oft_std.d.ts +1544 -0
- package/sdk/dist/generated/oft_std.js +271 -0
- package/sdk/dist/generated/price_feed.d.ts +1002 -0
- package/sdk/dist/generated/price_feed.js +170 -0
- package/sdk/dist/generated/sml.d.ts +75 -41
- package/sdk/dist/generated/sml.js +22 -17
- package/sdk/dist/generated/uln302.d.ts +79 -60
- package/sdk/dist/generated/uln302.js +37 -37
- package/sdk/dist/generated/upgrader.d.ts +70 -0
- package/sdk/dist/generated/upgrader.js +19 -0
- package/sdk/dist/index.d.ts +8 -0
- package/sdk/dist/index.js +11 -0
- package/sdk/package.json +4 -3
- package/sdk/src/index.ts +13 -0
- package/sdk/test/index.test.ts +0 -1
- package/sdk/test/oft.test.ts +12 -23
- package/sdk/test/suites/testUpgradeable.ts +169 -0
- package/sdk/test/upgrader.test.ts +309 -0
- package/tools/ts-bindings-gen/src/main.rs +11 -1
- 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/utils/src/tests/ttl.rs +0 -421
- /package/contracts/{oapp-macros → oapps/oapp-macros}/Cargo.toml +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/lib.rs +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_full.rs +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_options_type3.rs +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_receiver.rs +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_sender.rs +0 -0
- /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
|
|
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
|
|
28
|
-
|
|
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
|
|
44
|
-
|
|
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
|
|
61
|
-
let
|
|
62
|
-
|
|
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
|
-
|
|
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, ¶m.config);
|
|
92
104
|
}
|
|
93
|
-
|
|
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, ¶m.config);
|
|
102
114
|
}
|
|
103
|
-
|
|
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::
|
|
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 =
|
|
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
|
|
149
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
206
|
-
|
|
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
|
-
.
|
|
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
|
-
|
|
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
|
-
|
|
251
|
+
executor_client.assign_job(&env.current_contract_address(), sender, &dst_eid, &message_length, options);
|
|
270
252
|
|
|
271
|
-
ExecutorFeePaid { executor:
|
|
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
|
|
299
|
-
|
|
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(
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
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
|
-
|
|
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
|
-
|
|
352
|
-
|
|
353
|
-
|
|
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> },
|
package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
extern crate std;
|
|
2
2
|
use crate::{
|
|
3
3
|
errors::Uln302Error,
|
|
4
|
-
events::
|
|
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.
|
|
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, ¶ms);
|
|
59
58
|
|
|
60
|
-
// Assert
|
|
59
|
+
// Assert ReceiveUlnConfigSet event was published immediately after the setter
|
|
61
60
|
assert_event(
|
|
62
61
|
&env,
|
|
63
62
|
&uln302.address,
|
|
64
|
-
|
|
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.
|
|
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
|
|
package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
extern crate std;
|
|
2
2
|
use crate::{
|
|
3
3
|
errors::Uln302Error,
|
|
4
|
-
events::
|
|
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
|
|
36
|
-
assert_event(&env, &uln302.address,
|
|
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::
|
|
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.
|
|
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.
|
|
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, ¶ms);
|
|
68
66
|
|
|
69
|
-
// Assert
|
|
67
|
+
// Assert SendUlnConfigSet event was published immediately after the setter
|
|
70
68
|
assert_event(
|
|
71
69
|
&env,
|
|
72
70
|
&uln302.address,
|
|
73
|
-
|
|
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.
|
|
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
|
|
package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs
CHANGED
|
@@ -7,7 +7,7 @@ use utils::testing_utils::assert_event;
|
|
|
7
7
|
|
|
8
8
|
use crate::{
|
|
9
9
|
errors::Uln302Error,
|
|
10
|
-
events::
|
|
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,
|
|
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() {
|
package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs
CHANGED
|
@@ -7,7 +7,7 @@ use utils::testing_utils::assert_event;
|
|
|
7
7
|
|
|
8
8
|
use crate::{
|
|
9
9
|
errors::Uln302Error,
|
|
10
|
-
events::
|
|
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
|
|
37
|
-
assert_event(&env, &uln302.address,
|
|
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(¶ms);
|
|
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.
|
|
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.
|
|
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
|
|