@layerzerolabs/protocol-stellar-v2 0.2.13 → 0.2.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
@@ -1,18 +1,31 @@
|
|
|
1
1
|
use soroban_sdk::{
|
|
2
|
-
testutils::{Address as _, Ledger
|
|
3
|
-
vec, Address,
|
|
2
|
+
testutils::{Address as _, Ledger},
|
|
3
|
+
vec, Address,
|
|
4
4
|
};
|
|
5
|
+
use utils::testing_utils::assert_event;
|
|
5
6
|
|
|
6
7
|
use crate::{
|
|
7
8
|
errors::EndpointError,
|
|
8
9
|
events::{ReceiveLibrarySet, ReceiveLibraryTimeoutSet},
|
|
9
|
-
storage,
|
|
10
10
|
tests::endpoint_setup::setup,
|
|
11
|
-
|
|
11
|
+
tests::endpoint_setup::TestSetup,
|
|
12
|
+
MessageLibType, ResolvedLibrary, Timeout,
|
|
12
13
|
};
|
|
13
|
-
use utils::testing_utils::assert_event;
|
|
14
14
|
|
|
15
|
-
//
|
|
15
|
+
// Helpers
|
|
16
|
+
fn try_set_receive_library_with_auth(
|
|
17
|
+
context: &TestSetup,
|
|
18
|
+
caller: &Address,
|
|
19
|
+
receiver: &Address,
|
|
20
|
+
src_eid: u32,
|
|
21
|
+
new_lib: &Option<Address>,
|
|
22
|
+
grace_period: u64,
|
|
23
|
+
) -> Result<Result<(), soroban_sdk::ConversionError>, Result<soroban_sdk::Error, soroban_sdk::InvokeError>> {
|
|
24
|
+
context.mock_auth(caller, "set_receive_library", (caller, receiver, src_eid, new_lib, grace_period));
|
|
25
|
+
context.endpoint_client.try_set_receive_library(caller, receiver, &src_eid, new_lib, &grace_period)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Authorization (OApp auth required)
|
|
16
29
|
#[test]
|
|
17
30
|
fn test_set_receive_library_requires_oapp_auth() {
|
|
18
31
|
let context = setup();
|
|
@@ -22,218 +35,191 @@ fn test_set_receive_library_requires_oapp_auth() {
|
|
|
22
35
|
let oapp = Address::generate(env);
|
|
23
36
|
let unauthorized_caller = Address::generate(env);
|
|
24
37
|
|
|
25
|
-
// Create and register a valid receive lib
|
|
38
|
+
// Create and register a valid receive lib.
|
|
26
39
|
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
40
|
+
context.register_library_with_auth(&receive_lib);
|
|
41
|
+
|
|
42
|
+
// Mock auth for unauthorized caller (not the oapp or its delegate).
|
|
43
|
+
context.mock_auth(
|
|
44
|
+
&unauthorized_caller,
|
|
45
|
+
"set_receive_library",
|
|
46
|
+
(&unauthorized_caller, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64),
|
|
47
|
+
);
|
|
27
48
|
|
|
28
|
-
// Register the library with owner auth
|
|
29
|
-
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
30
|
-
endpoint_client.register_library(&receive_lib);
|
|
31
|
-
|
|
32
|
-
// Mock auth for unauthorized caller (not the oapp or its delegate)
|
|
33
|
-
env.mock_auths(&[MockAuth {
|
|
34
|
-
address: &unauthorized_caller,
|
|
35
|
-
invoke: &MockAuthInvoke {
|
|
36
|
-
contract: &endpoint_client.address,
|
|
37
|
-
fn_name: "set_receive_library",
|
|
38
|
-
args: (&unauthorized_caller, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64).into_val(env),
|
|
39
|
-
sub_invokes: &[],
|
|
40
|
-
},
|
|
41
|
-
}]);
|
|
42
|
-
|
|
43
|
-
// Should fail with Unauthorized error
|
|
44
49
|
let result =
|
|
45
50
|
endpoint_client.try_set_receive_library(&unauthorized_caller, &oapp, &context.eid, &Some(receive_lib), &0u64);
|
|
46
51
|
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::Unauthorized.into());
|
|
47
52
|
}
|
|
48
53
|
|
|
49
54
|
#[test]
|
|
50
|
-
fn
|
|
55
|
+
fn test_set_receive_library_allows_delegate() {
|
|
51
56
|
let context = setup();
|
|
52
57
|
let env = &context.env;
|
|
53
58
|
let endpoint_client = &context.endpoint_client;
|
|
54
59
|
|
|
55
60
|
let oapp = Address::generate(env);
|
|
61
|
+
let delegate = Address::generate(env);
|
|
62
|
+
|
|
63
|
+
// Set delegate for the OApp.
|
|
64
|
+
let delegate_opt = Some(delegate.clone());
|
|
65
|
+
context.mock_auth(&oapp, "set_delegate", (&oapp, &delegate_opt));
|
|
66
|
+
endpoint_client.set_delegate(&oapp, &delegate_opt);
|
|
56
67
|
|
|
57
|
-
// Create
|
|
68
|
+
// Create and register a valid receive lib.
|
|
58
69
|
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
70
|
+
context.register_library_with_auth(&receive_lib);
|
|
71
|
+
|
|
72
|
+
// Delegate should succeed.
|
|
73
|
+
context.set_receive_library_with_auth(&delegate, &oapp, context.eid, &Some(receive_lib.clone()), 0);
|
|
74
|
+
|
|
75
|
+
// Verify event emission.
|
|
76
|
+
assert_event(
|
|
77
|
+
env,
|
|
78
|
+
&endpoint_client.address,
|
|
79
|
+
ReceiveLibrarySet { receiver: oapp.clone(), src_eid: context.eid, new_lib: Some(receive_lib.clone()) },
|
|
80
|
+
);
|
|
81
|
+
assert_event(
|
|
82
|
+
env,
|
|
83
|
+
&endpoint_client.address,
|
|
84
|
+
ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: context.eid, timeout: None },
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
// Verify state update via public interface.
|
|
88
|
+
assert_eq!(
|
|
89
|
+
endpoint_client.get_receive_library(&oapp, &context.eid),
|
|
90
|
+
ResolvedLibrary { lib: receive_lib, is_default: false }
|
|
91
|
+
);
|
|
92
|
+
assert_eq!(endpoint_client.receive_library_timeout(&oapp, &context.eid), None);
|
|
93
|
+
}
|
|
59
94
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
let result = endpoint_client.try_set_receive_library(&oapp, &oapp, &context.eid, &Some(receive_lib), &0u64);
|
|
95
|
+
// Unregistered library rejection
|
|
96
|
+
#[test]
|
|
97
|
+
fn test_set_receive_library_unregistered_lib() {
|
|
98
|
+
let context = setup();
|
|
99
|
+
let env = &context.env;
|
|
100
|
+
|
|
101
|
+
let oapp = Address::generate(env);
|
|
102
|
+
|
|
103
|
+
// Create but do not register a valid receive lib.
|
|
104
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
105
|
+
|
|
106
|
+
let result = try_set_receive_library_with_auth(&context, &oapp, &oapp, context.eid, &Some(receive_lib), 0);
|
|
73
107
|
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyRegisteredLib.into());
|
|
74
108
|
}
|
|
75
109
|
|
|
110
|
+
// Wrong library type rejection (must be Receive)
|
|
76
111
|
#[test]
|
|
77
112
|
fn test_set_receive_library_wrong_lib_type() {
|
|
78
113
|
let context = setup();
|
|
79
114
|
let env = &context.env;
|
|
80
|
-
let endpoint_client = &context.endpoint_client;
|
|
81
115
|
|
|
82
116
|
let oapp = Address::generate(env);
|
|
83
117
|
|
|
84
|
-
// Create and register a send-only lib
|
|
118
|
+
// Create and register a send-only lib.
|
|
85
119
|
let send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, context.eid]);
|
|
120
|
+
context.register_library_with_auth(&send_lib);
|
|
86
121
|
|
|
87
|
-
|
|
88
|
-
context.mock_owner_auth("register_library", (&send_lib,));
|
|
89
|
-
endpoint_client.register_library(&send_lib);
|
|
90
|
-
|
|
91
|
-
// Mock auth for oapp
|
|
92
|
-
env.mock_auths(&[MockAuth {
|
|
93
|
-
address: &oapp,
|
|
94
|
-
invoke: &MockAuthInvoke {
|
|
95
|
-
contract: &endpoint_client.address,
|
|
96
|
-
fn_name: "set_receive_library",
|
|
97
|
-
args: (&oapp, &oapp, &context.eid, &Some(send_lib.clone()), &0u64).into_val(env),
|
|
98
|
-
sub_invokes: &[],
|
|
99
|
-
},
|
|
100
|
-
}]);
|
|
101
|
-
|
|
102
|
-
// Should fail with wrong library type error
|
|
103
|
-
let result = endpoint_client.try_set_receive_library(&oapp, &oapp, &context.eid, &Some(send_lib), &0u64);
|
|
122
|
+
let result = try_set_receive_library_with_auth(&context, &oapp, &oapp, context.eid, &Some(send_lib), 0);
|
|
104
123
|
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyReceiveLib.into());
|
|
105
124
|
}
|
|
106
125
|
|
|
126
|
+
// Unsupported EID rejection (library must support src_eid)
|
|
107
127
|
#[test]
|
|
108
128
|
fn test_set_receive_library_unsupported_eid() {
|
|
109
129
|
let context = setup();
|
|
110
130
|
let env = &context.env;
|
|
111
|
-
let endpoint_client = &context.endpoint_client;
|
|
112
131
|
|
|
113
132
|
let oapp = Address::generate(env);
|
|
114
133
|
let unsupported_eid = context.eid + 1;
|
|
115
134
|
|
|
116
|
-
// Create and register a receive lib that only supports
|
|
135
|
+
// Create and register a receive lib that only supports `context.eid`.
|
|
117
136
|
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
137
|
+
context.register_library_with_auth(&receive_lib);
|
|
118
138
|
|
|
119
|
-
|
|
120
|
-
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
121
|
-
endpoint_client.register_library(&receive_lib);
|
|
122
|
-
|
|
123
|
-
// Mock auth for oapp
|
|
124
|
-
env.mock_auths(&[MockAuth {
|
|
125
|
-
address: &oapp,
|
|
126
|
-
invoke: &MockAuthInvoke {
|
|
127
|
-
contract: &endpoint_client.address,
|
|
128
|
-
fn_name: "set_receive_library",
|
|
129
|
-
args: (&oapp, &oapp, &unsupported_eid, &Some(receive_lib.clone()), &0u64).into_val(env),
|
|
130
|
-
sub_invokes: &[],
|
|
131
|
-
},
|
|
132
|
-
}]);
|
|
133
|
-
|
|
134
|
-
// Should fail with unsupported eid error
|
|
135
|
-
let result = endpoint_client.try_set_receive_library(&oapp, &oapp, &unsupported_eid, &Some(receive_lib), &0u64);
|
|
139
|
+
let result = try_set_receive_library_with_auth(&context, &oapp, &oapp, unsupported_eid, &Some(receive_lib), 0);
|
|
136
140
|
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::UnsupportedEid.into());
|
|
137
141
|
}
|
|
138
142
|
|
|
143
|
+
// Successful update (state update + event emission)
|
|
139
144
|
#[test]
|
|
140
|
-
fn
|
|
145
|
+
fn test_set_receive_library_success() {
|
|
141
146
|
let context = setup();
|
|
142
147
|
let env = &context.env;
|
|
143
148
|
let endpoint_client = &context.endpoint_client;
|
|
144
149
|
|
|
145
150
|
let oapp = Address::generate(env);
|
|
146
151
|
|
|
147
|
-
//
|
|
152
|
+
// Set up a default receive library first.
|
|
153
|
+
let default_receive_lib = context.setup_default_receive_lib(context.eid, 0);
|
|
154
|
+
|
|
155
|
+
// Create and register a valid receive lib that supports `context.eid`.
|
|
148
156
|
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
157
|
+
context.register_library_with_auth(&receive_lib);
|
|
149
158
|
|
|
150
|
-
//
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
let result = endpoint_client.try_set_receive_library(&oapp, &oapp, &context.eid, &Some(receive_lib), &0u64);
|
|
178
|
-
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::SameValue.into());
|
|
159
|
+
// Verify initial state via public interface (should use default).
|
|
160
|
+
assert_eq!(
|
|
161
|
+
endpoint_client.get_receive_library(&oapp, &context.eid),
|
|
162
|
+
ResolvedLibrary { lib: default_receive_lib.clone(), is_default: true }
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
// Should succeed.
|
|
166
|
+
context.set_receive_library_with_auth(&oapp, &oapp, context.eid, &Some(receive_lib.clone()), 0);
|
|
167
|
+
|
|
168
|
+
// Verify event emission.
|
|
169
|
+
assert_event(
|
|
170
|
+
env,
|
|
171
|
+
&endpoint_client.address,
|
|
172
|
+
ReceiveLibrarySet { receiver: oapp.clone(), src_eid: context.eid, new_lib: Some(receive_lib.clone()) },
|
|
173
|
+
);
|
|
174
|
+
assert_event(
|
|
175
|
+
env,
|
|
176
|
+
&endpoint_client.address,
|
|
177
|
+
ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: context.eid, timeout: None },
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
// Verify state update via public interface.
|
|
181
|
+
assert_eq!(
|
|
182
|
+
endpoint_client.get_receive_library(&oapp, &context.eid),
|
|
183
|
+
ResolvedLibrary { lib: receive_lib.clone(), is_default: false }
|
|
184
|
+
);
|
|
185
|
+
assert_eq!(endpoint_client.receive_library_timeout(&oapp, &context.eid), None);
|
|
179
186
|
}
|
|
180
187
|
|
|
188
|
+
// Successful update with SendAndReceive library type (valid for receive)
|
|
181
189
|
#[test]
|
|
182
|
-
fn
|
|
190
|
+
fn test_set_receive_library_success_with_send_and_receive_type() {
|
|
183
191
|
let context = setup();
|
|
184
192
|
let env = &context.env;
|
|
185
193
|
let endpoint_client = &context.endpoint_client;
|
|
186
194
|
|
|
187
195
|
let oapp = Address::generate(env);
|
|
188
196
|
|
|
189
|
-
// Create and register a
|
|
190
|
-
let
|
|
197
|
+
// Create and register a SendAndReceive lib that supports `context.eid`.
|
|
198
|
+
let send_and_receive_lib = context.setup_mock_message_lib(MessageLibType::SendAndReceive, vec![env, context.eid]);
|
|
199
|
+
context.register_library_with_auth(&send_and_receive_lib);
|
|
191
200
|
|
|
192
|
-
//
|
|
193
|
-
context.
|
|
194
|
-
endpoint_client.register_library(&receive_lib);
|
|
201
|
+
// Should succeed.
|
|
202
|
+
context.set_receive_library_with_auth(&oapp, &oapp, context.eid, &Some(send_and_receive_lib.clone()), 0);
|
|
195
203
|
|
|
196
|
-
// Verify
|
|
197
|
-
|
|
198
|
-
env
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
context.eid
|
|
202
|
-
)),
|
|
203
|
-
None
|
|
204
|
+
// Verify event emission.
|
|
205
|
+
assert_event(
|
|
206
|
+
env,
|
|
207
|
+
&endpoint_client.address,
|
|
208
|
+
ReceiveLibrarySet { receiver: oapp.clone(), src_eid: context.eid, new_lib: Some(send_and_receive_lib.clone()) },
|
|
204
209
|
);
|
|
205
|
-
|
|
206
|
-
// Set with oapp auth
|
|
207
|
-
env.mock_auths(&[MockAuth {
|
|
208
|
-
address: &oapp,
|
|
209
|
-
invoke: &MockAuthInvoke {
|
|
210
|
-
contract: &endpoint_client.address,
|
|
211
|
-
fn_name: "set_receive_library",
|
|
212
|
-
args: (&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64).into_val(env),
|
|
213
|
-
sub_invokes: &[],
|
|
214
|
-
},
|
|
215
|
-
}]);
|
|
216
|
-
|
|
217
|
-
endpoint_client.set_receive_library(&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64);
|
|
218
|
-
|
|
219
210
|
assert_event(
|
|
220
211
|
env,
|
|
221
212
|
&endpoint_client.address,
|
|
222
213
|
ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: context.eid, timeout: None },
|
|
223
214
|
);
|
|
224
215
|
|
|
225
|
-
// Verify it was set correctly
|
|
226
216
|
assert_eq!(
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
&oapp,
|
|
230
|
-
context.eid
|
|
231
|
-
)),
|
|
232
|
-
Some(receive_lib)
|
|
217
|
+
endpoint_client.get_receive_library(&oapp, &context.eid),
|
|
218
|
+
ResolvedLibrary { lib: send_and_receive_lib.clone(), is_default: false }
|
|
233
219
|
);
|
|
234
|
-
assert_eq!(endpoint_client.receive_library_timeout(&oapp, &context.eid), None);
|
|
235
220
|
}
|
|
236
221
|
|
|
222
|
+
// Successful update with grace period (timeout should be set)
|
|
237
223
|
#[test]
|
|
238
224
|
fn test_set_receive_library_success_with_grace_period() {
|
|
239
225
|
let context = setup();
|
|
@@ -241,147 +227,196 @@ fn test_set_receive_library_success_with_grace_period() {
|
|
|
241
227
|
let endpoint_client = &context.endpoint_client;
|
|
242
228
|
|
|
243
229
|
let oapp = Address::generate(env);
|
|
244
|
-
let current_timestamp =
|
|
245
|
-
let grace_period =
|
|
230
|
+
let current_timestamp = 1_700_000_000u64;
|
|
231
|
+
let grace_period = 1000u64;
|
|
246
232
|
|
|
247
|
-
// Set
|
|
233
|
+
// Set an arbitrary unix timestamp (seconds).
|
|
248
234
|
env.ledger().with_mut(|li| {
|
|
249
235
|
li.timestamp = current_timestamp;
|
|
250
236
|
});
|
|
251
237
|
|
|
252
|
-
// Create and register
|
|
238
|
+
// Create and register valid receive libs that support `context.eid`.
|
|
253
239
|
let old_receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
254
240
|
let new_receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
255
241
|
|
|
256
|
-
|
|
257
|
-
context.
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
//
|
|
263
|
-
|
|
264
|
-
address: &oapp,
|
|
265
|
-
invoke: &MockAuthInvoke {
|
|
266
|
-
contract: &endpoint_client.address,
|
|
267
|
-
fn_name: "set_receive_library",
|
|
268
|
-
args: (&oapp, &oapp, &context.eid, &Some(old_receive_lib.clone()), &0u64).into_val(env),
|
|
269
|
-
sub_invokes: &[],
|
|
270
|
-
},
|
|
271
|
-
}]);
|
|
272
|
-
endpoint_client.set_receive_library(&oapp, &oapp, &context.eid, &Some(old_receive_lib.clone()), &0u64);
|
|
273
|
-
|
|
274
|
-
// Now set the new library with grace period
|
|
275
|
-
env.mock_auths(&[MockAuth {
|
|
276
|
-
address: &oapp,
|
|
277
|
-
invoke: &MockAuthInvoke {
|
|
278
|
-
contract: &endpoint_client.address,
|
|
279
|
-
fn_name: "set_receive_library",
|
|
280
|
-
args: (&oapp, &oapp, &context.eid, &Some(new_receive_lib.clone()), &grace_period).into_val(env),
|
|
281
|
-
sub_invokes: &[],
|
|
282
|
-
},
|
|
283
|
-
}]);
|
|
284
|
-
endpoint_client.set_receive_library(&oapp, &oapp, &context.eid, &Some(new_receive_lib.clone()), &grace_period);
|
|
242
|
+
context.register_library_with_auth(&old_receive_lib);
|
|
243
|
+
context.register_library_with_auth(&new_receive_lib);
|
|
244
|
+
|
|
245
|
+
// First set the old library without grace period.
|
|
246
|
+
context.set_receive_library_with_auth(&oapp, &oapp, context.eid, &Some(old_receive_lib.clone()), 0);
|
|
247
|
+
|
|
248
|
+
// Then set the new library with grace period.
|
|
249
|
+
context.set_receive_library_with_auth(&oapp, &oapp, context.eid, &Some(new_receive_lib.clone()), grace_period);
|
|
285
250
|
|
|
286
251
|
let expected_timeout = Some(Timeout { lib: old_receive_lib.clone(), expiry: current_timestamp + grace_period });
|
|
287
252
|
|
|
288
|
-
// Verify the
|
|
253
|
+
// Verify event emission (from the second call).
|
|
289
254
|
assert_event(
|
|
290
255
|
env,
|
|
291
256
|
&endpoint_client.address,
|
|
292
|
-
|
|
257
|
+
ReceiveLibrarySet { receiver: oapp.clone(), src_eid: context.eid, new_lib: Some(new_receive_lib.clone()) },
|
|
293
258
|
);
|
|
294
259
|
assert_event(
|
|
295
260
|
env,
|
|
296
261
|
&endpoint_client.address,
|
|
297
|
-
|
|
262
|
+
ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: context.eid, timeout: expected_timeout.clone() },
|
|
298
263
|
);
|
|
299
264
|
|
|
300
|
-
// Verify
|
|
265
|
+
// Verify state update via public interface.
|
|
301
266
|
assert_eq!(
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
&oapp,
|
|
305
|
-
context.eid
|
|
306
|
-
)),
|
|
307
|
-
Some(new_receive_lib)
|
|
267
|
+
endpoint_client.get_receive_library(&oapp, &context.eid),
|
|
268
|
+
ResolvedLibrary { lib: new_receive_lib.clone(), is_default: false }
|
|
308
269
|
);
|
|
309
|
-
|
|
310
|
-
// Verify the timeout was set correctly
|
|
311
270
|
assert_eq!(endpoint_client.receive_library_timeout(&oapp, &context.eid), expected_timeout);
|
|
312
271
|
}
|
|
313
272
|
|
|
273
|
+
// Grace period > 0 requires both old and new libraries to be custom (non-default)
|
|
314
274
|
#[test]
|
|
315
275
|
fn test_set_receive_library_grace_period_requires_both_libs() {
|
|
316
276
|
let context = setup();
|
|
317
277
|
let env = &context.env;
|
|
318
|
-
let endpoint_client = &context.endpoint_client;
|
|
319
278
|
|
|
320
279
|
let oapp = Address::generate(env);
|
|
321
|
-
let grace_period =
|
|
280
|
+
let grace_period = 1000u64;
|
|
322
281
|
|
|
323
|
-
// Create and register a valid receive lib
|
|
282
|
+
// Create and register a valid receive lib that supports `context.eid`.
|
|
324
283
|
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
284
|
+
context.register_library_with_auth(&receive_lib);
|
|
325
285
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
endpoint_client.register_library(&receive_lib);
|
|
329
|
-
|
|
330
|
-
// Try to set library with grace period when there's no existing library
|
|
331
|
-
env.mock_auths(&[MockAuth {
|
|
332
|
-
address: &oapp,
|
|
333
|
-
invoke: &MockAuthInvoke {
|
|
334
|
-
contract: &endpoint_client.address,
|
|
335
|
-
fn_name: "set_receive_library",
|
|
336
|
-
args: (&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &grace_period).into_val(env),
|
|
337
|
-
sub_invokes: &[],
|
|
338
|
-
},
|
|
339
|
-
}]);
|
|
340
|
-
|
|
341
|
-
let result = endpoint_client.try_set_receive_library(&oapp, &oapp, &context.eid, &Some(receive_lib), &grace_period);
|
|
286
|
+
let result =
|
|
287
|
+
try_set_receive_library_with_auth(&context, &oapp, &oapp, context.eid, &Some(receive_lib), grace_period);
|
|
342
288
|
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyNonDefaultLib.into());
|
|
343
289
|
}
|
|
344
290
|
|
|
345
291
|
#[test]
|
|
346
|
-
fn
|
|
292
|
+
fn test_set_receive_library_grace_period_requires_both_libs_even_with_default_receive_lib() {
|
|
293
|
+
let context = setup();
|
|
294
|
+
let env = &context.env;
|
|
295
|
+
|
|
296
|
+
let oapp = Address::generate(env);
|
|
297
|
+
let grace_period = 1000u64;
|
|
298
|
+
|
|
299
|
+
// Set up a default receive library. Even with a default, grace period logic still requires
|
|
300
|
+
// both old and new libraries to be custom (non-default).
|
|
301
|
+
context.setup_default_receive_lib(context.eid, 0);
|
|
302
|
+
|
|
303
|
+
// Create and register a valid receive lib that supports `context.eid`.
|
|
304
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
305
|
+
context.register_library_with_auth(&receive_lib);
|
|
306
|
+
|
|
307
|
+
let result =
|
|
308
|
+
try_set_receive_library_with_auth(&context, &oapp, &oapp, context.eid, &Some(receive_lib), grace_period);
|
|
309
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyNonDefaultLib.into());
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
#[test]
|
|
313
|
+
fn test_set_receive_library_cannot_clear_to_none_with_grace_period() {
|
|
314
|
+
let context = setup();
|
|
315
|
+
let env = &context.env;
|
|
316
|
+
|
|
317
|
+
let oapp = Address::generate(env);
|
|
318
|
+
let grace_period = 1000u64;
|
|
319
|
+
|
|
320
|
+
// Create and register a valid receive lib that supports `context.eid`.
|
|
321
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
322
|
+
context.register_library_with_auth(&receive_lib);
|
|
323
|
+
|
|
324
|
+
// First set a custom library.
|
|
325
|
+
context.set_receive_library_with_auth(&oapp, &oapp, context.eid, &Some(receive_lib), 0);
|
|
326
|
+
|
|
327
|
+
// Clearing to default must use grace_period = 0. Any grace period should be rejected.
|
|
328
|
+
let result = try_set_receive_library_with_auth(&context, &oapp, &oapp, context.eid, &None, grace_period);
|
|
329
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyNonDefaultLib.into());
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// The grace_period = 0 clears an existing timeout
|
|
333
|
+
#[test]
|
|
334
|
+
fn test_set_receive_library_grace_period_zero_clears_timeout() {
|
|
335
|
+
let context = setup();
|
|
336
|
+
let env = &context.env;
|
|
337
|
+
let endpoint_client = &context.endpoint_client;
|
|
338
|
+
|
|
339
|
+
let oapp = Address::generate(env);
|
|
340
|
+
let src_eid = context.eid;
|
|
341
|
+
|
|
342
|
+
let t0 = 1_700_000_000u64;
|
|
343
|
+
env.ledger().with_mut(|li| li.timestamp = t0);
|
|
344
|
+
|
|
345
|
+
let lib_a = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
|
|
346
|
+
let lib_b = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
|
|
347
|
+
let lib_c = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
|
|
348
|
+
|
|
349
|
+
context.register_library_with_auth(&lib_a);
|
|
350
|
+
context.register_library_with_auth(&lib_b);
|
|
351
|
+
context.register_library_with_auth(&lib_c);
|
|
352
|
+
|
|
353
|
+
// A: initial set (no timeout).
|
|
354
|
+
context.set_receive_library_with_auth(&oapp, &oapp, src_eid, &Some(lib_a.clone()), 0);
|
|
355
|
+
assert_event(
|
|
356
|
+
env,
|
|
357
|
+
&endpoint_client.address,
|
|
358
|
+
ReceiveLibrarySet { receiver: oapp.clone(), src_eid, new_lib: Some(lib_a.clone()) },
|
|
359
|
+
);
|
|
360
|
+
assert_event(
|
|
361
|
+
env,
|
|
362
|
+
&endpoint_client.address,
|
|
363
|
+
ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: src_eid, timeout: None },
|
|
364
|
+
);
|
|
365
|
+
|
|
366
|
+
// B: rotate with grace -> timeout for A must be set.
|
|
367
|
+
let grace_period = 1_000u64;
|
|
368
|
+
context.set_receive_library_with_auth(&oapp, &oapp, src_eid, &Some(lib_b.clone()), grace_period);
|
|
369
|
+
let expected_timeout_b = Some(Timeout { lib: lib_a.clone(), expiry: t0 + grace_period });
|
|
370
|
+
assert_event(
|
|
371
|
+
env,
|
|
372
|
+
&endpoint_client.address,
|
|
373
|
+
ReceiveLibrarySet { receiver: oapp.clone(), src_eid, new_lib: Some(lib_b.clone()) },
|
|
374
|
+
);
|
|
375
|
+
assert_event(
|
|
376
|
+
env,
|
|
377
|
+
&endpoint_client.address,
|
|
378
|
+
ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: src_eid, timeout: expected_timeout_b.clone() },
|
|
379
|
+
);
|
|
380
|
+
assert_eq!(endpoint_client.receive_library_timeout(&oapp, &src_eid), expected_timeout_b.clone());
|
|
381
|
+
|
|
382
|
+
// C: rotate with grace=0 -> timeout must be cleared (None).
|
|
383
|
+
context.set_receive_library_with_auth(&oapp, &oapp, src_eid, &Some(lib_c.clone()), 0);
|
|
384
|
+
assert_event(
|
|
385
|
+
env,
|
|
386
|
+
&endpoint_client.address,
|
|
387
|
+
ReceiveLibrarySet { receiver: oapp.clone(), src_eid, new_lib: Some(lib_c.clone()) },
|
|
388
|
+
);
|
|
389
|
+
assert_event(
|
|
390
|
+
env,
|
|
391
|
+
&endpoint_client.address,
|
|
392
|
+
ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: src_eid, timeout: None },
|
|
393
|
+
);
|
|
394
|
+
assert_eq!(endpoint_client.receive_library_timeout(&oapp, &src_eid), None);
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// Clearing to None (removes custom library)
|
|
398
|
+
#[test]
|
|
399
|
+
fn test_set_receive_library_clear_to_none() {
|
|
347
400
|
let context = setup();
|
|
348
401
|
let env = &context.env;
|
|
349
402
|
let endpoint_client = &context.endpoint_client;
|
|
350
403
|
|
|
351
404
|
let oapp = Address::generate(env);
|
|
352
405
|
|
|
353
|
-
//
|
|
406
|
+
// Set up a default receive library first.
|
|
407
|
+
let default_receive_lib = context.setup_default_receive_lib(context.eid, 0);
|
|
408
|
+
|
|
409
|
+
// Create and register a valid receive lib that supports `context.eid`.
|
|
354
410
|
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
411
|
+
context.register_library_with_auth(&receive_lib);
|
|
412
|
+
|
|
413
|
+
// First set Some(receive_lib).
|
|
414
|
+
context.set_receive_library_with_auth(&oapp, &oapp, context.eid, &Some(receive_lib.clone()), 0);
|
|
415
|
+
|
|
416
|
+
// Then clear to None.
|
|
417
|
+
context.set_receive_library_with_auth(&oapp, &oapp, context.eid, &None, 0);
|
|
355
418
|
|
|
356
|
-
//
|
|
357
|
-
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
358
|
-
endpoint_client.register_library(&receive_lib);
|
|
359
|
-
|
|
360
|
-
// First set a library
|
|
361
|
-
env.mock_auths(&[MockAuth {
|
|
362
|
-
address: &oapp,
|
|
363
|
-
invoke: &MockAuthInvoke {
|
|
364
|
-
contract: &endpoint_client.address,
|
|
365
|
-
fn_name: "set_receive_library",
|
|
366
|
-
args: (&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64).into_val(env),
|
|
367
|
-
sub_invokes: &[],
|
|
368
|
-
},
|
|
369
|
-
}]);
|
|
370
|
-
endpoint_client.set_receive_library(&oapp, &oapp, &context.eid, &Some(receive_lib.clone()), &0u64);
|
|
371
|
-
|
|
372
|
-
// Now clear the library by setting to None
|
|
373
|
-
env.mock_auths(&[MockAuth {
|
|
374
|
-
address: &oapp,
|
|
375
|
-
invoke: &MockAuthInvoke {
|
|
376
|
-
contract: &endpoint_client.address,
|
|
377
|
-
fn_name: "set_receive_library",
|
|
378
|
-
args: (&oapp, &oapp, &context.eid, &None::<Address>, &0u64).into_val(env),
|
|
379
|
-
sub_invokes: &[],
|
|
380
|
-
},
|
|
381
|
-
}]);
|
|
382
|
-
endpoint_client.set_receive_library(&oapp, &oapp, &context.eid, &None, &0u64);
|
|
383
|
-
|
|
384
|
-
// Verify the event was published with None for both receive_library_set and receive_library_timeout_set
|
|
419
|
+
// Verify event emission.
|
|
385
420
|
assert_event(
|
|
386
421
|
env,
|
|
387
422
|
&endpoint_client.address,
|
|
@@ -393,13 +428,79 @@ fn test_set_receive_library_clear_library() {
|
|
|
393
428
|
ReceiveLibraryTimeoutSet { receiver: oapp.clone(), eid: context.eid, timeout: None },
|
|
394
429
|
);
|
|
395
430
|
|
|
396
|
-
// Verify
|
|
431
|
+
// Verify state update via public interface (should fall back to default).
|
|
397
432
|
assert_eq!(
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
&oapp,
|
|
401
|
-
context.eid
|
|
402
|
-
)),
|
|
403
|
-
None
|
|
433
|
+
endpoint_client.get_receive_library(&oapp, &context.eid),
|
|
434
|
+
ResolvedLibrary { lib: default_receive_lib, is_default: true }
|
|
404
435
|
);
|
|
405
436
|
}
|
|
437
|
+
|
|
438
|
+
// Updating from one custom library to another (A -> B)
|
|
439
|
+
#[test]
|
|
440
|
+
fn test_set_receive_library_can_change_library() {
|
|
441
|
+
let context = setup();
|
|
442
|
+
let env = &context.env;
|
|
443
|
+
let endpoint_client = &context.endpoint_client;
|
|
444
|
+
|
|
445
|
+
let oapp = Address::generate(env);
|
|
446
|
+
|
|
447
|
+
let receive_lib_a = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
448
|
+
let receive_lib_b = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
449
|
+
|
|
450
|
+
context.register_library_with_auth(&receive_lib_a);
|
|
451
|
+
context.register_library_with_auth(&receive_lib_b);
|
|
452
|
+
|
|
453
|
+
// Set A first.
|
|
454
|
+
context.set_receive_library_with_auth(&oapp, &oapp, context.eid, &Some(receive_lib_a.clone()), 0);
|
|
455
|
+
assert_event(
|
|
456
|
+
env,
|
|
457
|
+
&endpoint_client.address,
|
|
458
|
+
ReceiveLibrarySet { receiver: oapp.clone(), src_eid: context.eid, new_lib: Some(receive_lib_a.clone()) },
|
|
459
|
+
);
|
|
460
|
+
assert_eq!(
|
|
461
|
+
endpoint_client.get_receive_library(&oapp, &context.eid),
|
|
462
|
+
ResolvedLibrary { lib: receive_lib_a.clone(), is_default: false }
|
|
463
|
+
);
|
|
464
|
+
|
|
465
|
+
// Then change to B.
|
|
466
|
+
context.set_receive_library_with_auth(&oapp, &oapp, context.eid, &Some(receive_lib_b.clone()), 0);
|
|
467
|
+
assert_event(
|
|
468
|
+
env,
|
|
469
|
+
&endpoint_client.address,
|
|
470
|
+
ReceiveLibrarySet { receiver: oapp.clone(), src_eid: context.eid, new_lib: Some(receive_lib_b.clone()) },
|
|
471
|
+
);
|
|
472
|
+
assert_eq!(
|
|
473
|
+
endpoint_client.get_receive_library(&oapp, &context.eid),
|
|
474
|
+
ResolvedLibrary { lib: receive_lib_b.clone(), is_default: false }
|
|
475
|
+
);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
// Same value rejection (no-op is not allowed)
|
|
479
|
+
#[test]
|
|
480
|
+
fn test_set_receive_library_same_value() {
|
|
481
|
+
let context = setup();
|
|
482
|
+
let env = &context.env;
|
|
483
|
+
|
|
484
|
+
let oapp = Address::generate(env);
|
|
485
|
+
|
|
486
|
+
// Create and register a valid receive lib that supports `context.eid`.
|
|
487
|
+
let receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, context.eid]);
|
|
488
|
+
context.register_library_with_auth(&receive_lib);
|
|
489
|
+
|
|
490
|
+
context.set_receive_library_with_auth(&oapp, &oapp, context.eid, &Some(receive_lib.clone()), 0);
|
|
491
|
+
|
|
492
|
+
let result = try_set_receive_library_with_auth(&context, &oapp, &oapp, context.eid, &Some(receive_lib), 0);
|
|
493
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::SameValue.into());
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
// Setting None when already None (SameValue)
|
|
497
|
+
#[test]
|
|
498
|
+
fn test_set_receive_library_none_when_already_none() {
|
|
499
|
+
let context = setup();
|
|
500
|
+
let env = &context.env;
|
|
501
|
+
|
|
502
|
+
let oapp = Address::generate(env);
|
|
503
|
+
|
|
504
|
+
let result = try_set_receive_library_with_auth(&context, &oapp, &oapp, context.eid, &None, 0);
|
|
505
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::SameValue.into());
|
|
506
|
+
}
|