@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
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
use soroban_sdk::{testutils::Address as _, vec, Address};
|
|
2
|
+
|
|
3
|
+
use crate::{errors::EndpointError, tests::endpoint_setup::setup, MessageLibType, ResolvedLibrary};
|
|
4
|
+
|
|
5
|
+
// The get_receive_library resolves default vs custom and is isolated per receiver
|
|
6
|
+
#[test]
|
|
7
|
+
fn test_get_receive_library_default_custom_and_isolated_per_receiver() {
|
|
8
|
+
let context = setup();
|
|
9
|
+
let env = &context.env;
|
|
10
|
+
let endpoint_client = &context.endpoint_client;
|
|
11
|
+
|
|
12
|
+
let src_eid = context.eid;
|
|
13
|
+
let receiver_a = Address::generate(env);
|
|
14
|
+
let receiver_b = Address::generate(env);
|
|
15
|
+
|
|
16
|
+
let default_receive_lib = context.setup_default_receive_lib(src_eid, 0);
|
|
17
|
+
|
|
18
|
+
// No custom set => both receivers resolve to default.
|
|
19
|
+
assert_eq!(
|
|
20
|
+
endpoint_client.get_receive_library(&receiver_a, &src_eid),
|
|
21
|
+
ResolvedLibrary { lib: default_receive_lib.clone(), is_default: true }
|
|
22
|
+
);
|
|
23
|
+
assert_eq!(
|
|
24
|
+
endpoint_client.get_receive_library(&receiver_b, &src_eid),
|
|
25
|
+
ResolvedLibrary { lib: default_receive_lib, is_default: true }
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
// Create and register a custom receive lib for the same eid.
|
|
29
|
+
let custom_receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
|
|
30
|
+
context.register_library_with_auth(&custom_receive_lib);
|
|
31
|
+
|
|
32
|
+
// Receiver A sets a custom receive library for itself.
|
|
33
|
+
context.mock_auth(
|
|
34
|
+
&receiver_a,
|
|
35
|
+
"set_receive_library",
|
|
36
|
+
(&receiver_a, &receiver_a, &src_eid, &Some(custom_receive_lib.clone()), &0u64),
|
|
37
|
+
);
|
|
38
|
+
endpoint_client.set_receive_library(&receiver_a, &receiver_a, &src_eid, &Some(custom_receive_lib.clone()), &0u64);
|
|
39
|
+
|
|
40
|
+
// Receiver A resolves to custom.
|
|
41
|
+
assert_eq!(
|
|
42
|
+
endpoint_client.get_receive_library(&receiver_a, &src_eid),
|
|
43
|
+
ResolvedLibrary { lib: custom_receive_lib, is_default: false }
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
// Receiver B resolves to default.
|
|
47
|
+
assert_eq!(
|
|
48
|
+
endpoint_client.get_receive_library(&receiver_b, &src_eid),
|
|
49
|
+
ResolvedLibrary { lib: endpoint_client.get_receive_library(&receiver_b, &src_eid).lib, is_default: true }
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// The get_receive_library returns custom even when no default exists
|
|
54
|
+
#[test]
|
|
55
|
+
fn test_get_receive_library_custom_without_default() {
|
|
56
|
+
let context = setup();
|
|
57
|
+
let env = &context.env;
|
|
58
|
+
let endpoint_client = &context.endpoint_client;
|
|
59
|
+
|
|
60
|
+
let src_eid = context.eid;
|
|
61
|
+
let receiver = Address::generate(env);
|
|
62
|
+
|
|
63
|
+
let custom_receive_lib = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, src_eid]);
|
|
64
|
+
context.register_library_with_auth(&custom_receive_lib);
|
|
65
|
+
|
|
66
|
+
context.mock_auth(
|
|
67
|
+
&receiver,
|
|
68
|
+
"set_receive_library",
|
|
69
|
+
(&receiver, &receiver, &src_eid, &Some(custom_receive_lib.clone()), &0u64),
|
|
70
|
+
);
|
|
71
|
+
endpoint_client.set_receive_library(&receiver, &receiver, &src_eid, &Some(custom_receive_lib.clone()), &0u64);
|
|
72
|
+
|
|
73
|
+
assert_eq!(
|
|
74
|
+
endpoint_client.get_receive_library(&receiver, &src_eid),
|
|
75
|
+
ResolvedLibrary { lib: custom_receive_lib, is_default: false }
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// The get_receive_library fails when neither default nor custom exists
|
|
80
|
+
#[test]
|
|
81
|
+
fn test_get_receive_library_fails_without_default_and_custom() {
|
|
82
|
+
let context = setup();
|
|
83
|
+
let env = &context.env;
|
|
84
|
+
let endpoint_client = &context.endpoint_client;
|
|
85
|
+
|
|
86
|
+
let src_eid = context.eid;
|
|
87
|
+
let receiver = Address::generate(env);
|
|
88
|
+
|
|
89
|
+
// Missing both default and custom => DefaultReceiveLibUnavailable.
|
|
90
|
+
let result = endpoint_client.try_get_receive_library(&receiver, &src_eid);
|
|
91
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::DefaultReceiveLibUnavailable.into());
|
|
92
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
use soroban_sdk::vec;
|
|
2
|
+
|
|
3
|
+
use crate::tests::{endpoint_setup::setup, mock::MockValidMessageLib};
|
|
4
|
+
|
|
5
|
+
// Pagination and bounds behavior
|
|
6
|
+
#[test]
|
|
7
|
+
fn test_get_registered_libraries_pagination_and_bounds() {
|
|
8
|
+
let context = setup();
|
|
9
|
+
let env = &context.env;
|
|
10
|
+
let endpoint_client = &context.endpoint_client;
|
|
11
|
+
|
|
12
|
+
// Empty set.
|
|
13
|
+
assert_eq!(endpoint_client.registered_libraries_count(), 0);
|
|
14
|
+
assert_eq!(endpoint_client.get_registered_libraries(&0, &1).len(), 0);
|
|
15
|
+
assert_eq!(endpoint_client.get_registered_libraries(&999, &1).len(), 0);
|
|
16
|
+
|
|
17
|
+
let lib0 = env.register(MockValidMessageLib, ());
|
|
18
|
+
let lib1 = env.register(MockValidMessageLib, ());
|
|
19
|
+
let lib2 = env.register(MockValidMessageLib, ());
|
|
20
|
+
|
|
21
|
+
context.register_library_with_auth(&lib0);
|
|
22
|
+
context.register_library_with_auth(&lib1);
|
|
23
|
+
context.register_library_with_auth(&lib2);
|
|
24
|
+
|
|
25
|
+
// max_count == 0 => empty.
|
|
26
|
+
assert_eq!(endpoint_client.get_registered_libraries(&0, &0).len(), 0);
|
|
27
|
+
assert_eq!(endpoint_client.get_registered_libraries(&1, &0).len(), 0);
|
|
28
|
+
|
|
29
|
+
// start within bounds, normal pages.
|
|
30
|
+
assert_eq!(endpoint_client.get_registered_libraries(&0, &2), vec![&env, lib0.clone(), lib1.clone()]);
|
|
31
|
+
assert_eq!(endpoint_client.get_registered_libraries(&1, &2), vec![&env, lib1.clone(), lib2.clone()]);
|
|
32
|
+
assert_eq!(endpoint_client.get_registered_libraries(&2, &2), vec![&env, lib2.clone()]);
|
|
33
|
+
|
|
34
|
+
// start >= count => empty.
|
|
35
|
+
assert_eq!(endpoint_client.get_registered_libraries(&3, &1).len(), 0);
|
|
36
|
+
assert_eq!(endpoint_client.get_registered_libraries(&4, &10).len(), 0);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Ordering follows registration index
|
|
40
|
+
#[test]
|
|
41
|
+
fn test_get_registered_libraries_orders_by_registration_index() {
|
|
42
|
+
let context = setup();
|
|
43
|
+
let env = &context.env;
|
|
44
|
+
let endpoint_client = &context.endpoint_client;
|
|
45
|
+
|
|
46
|
+
let lib0 = env.register(MockValidMessageLib, ());
|
|
47
|
+
let lib1 = env.register(MockValidMessageLib, ());
|
|
48
|
+
|
|
49
|
+
context.register_library_with_auth(&lib0);
|
|
50
|
+
context.register_library_with_auth(&lib1);
|
|
51
|
+
|
|
52
|
+
let libs = endpoint_client.get_registered_libraries(&0, &10);
|
|
53
|
+
assert_eq!(libs, vec![&env, lib0.clone(), lib1.clone()]);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// The max_count larger than total count returns all remaining libraries
|
|
57
|
+
#[test]
|
|
58
|
+
fn test_get_registered_libraries_max_count_exceeds_total_returns_all() {
|
|
59
|
+
let context = setup();
|
|
60
|
+
let env = &context.env;
|
|
61
|
+
let endpoint_client = &context.endpoint_client;
|
|
62
|
+
|
|
63
|
+
let lib0 = env.register(MockValidMessageLib, ());
|
|
64
|
+
let lib1 = env.register(MockValidMessageLib, ());
|
|
65
|
+
let lib2 = env.register(MockValidMessageLib, ());
|
|
66
|
+
|
|
67
|
+
context.register_library_with_auth(&lib0);
|
|
68
|
+
context.register_library_with_auth(&lib1);
|
|
69
|
+
context.register_library_with_auth(&lib2);
|
|
70
|
+
|
|
71
|
+
// max_count is larger than total count; should return all.
|
|
72
|
+
let libs = endpoint_client.get_registered_libraries(&0, &100);
|
|
73
|
+
assert_eq!(libs, vec![&env, lib0.clone(), lib1.clone(), lib2.clone()]);
|
|
74
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
use soroban_sdk::{testutils::Address as _, vec, Address};
|
|
2
|
+
|
|
3
|
+
use crate::{errors::EndpointError, tests::endpoint_setup::setup, MessageLibType, ResolvedLibrary};
|
|
4
|
+
|
|
5
|
+
// The get_send_library resolves default vs custom and is isolated per sender
|
|
6
|
+
#[test]
|
|
7
|
+
fn test_get_send_library_default_custom_and_isolated_per_sender() {
|
|
8
|
+
let context = setup();
|
|
9
|
+
let env = &context.env;
|
|
10
|
+
let endpoint_client = &context.endpoint_client;
|
|
11
|
+
|
|
12
|
+
let dst_eid = context.eid;
|
|
13
|
+
let sender_a = Address::generate(env);
|
|
14
|
+
let sender_b = Address::generate(env);
|
|
15
|
+
|
|
16
|
+
let (default_send_lib, _fee_recipient) = context.setup_default_send_lib(dst_eid, 100, 0);
|
|
17
|
+
|
|
18
|
+
// No custom set => both senders resolve to default.
|
|
19
|
+
assert_eq!(
|
|
20
|
+
endpoint_client.get_send_library(&sender_a, &dst_eid),
|
|
21
|
+
ResolvedLibrary { lib: default_send_lib.clone(), is_default: true }
|
|
22
|
+
);
|
|
23
|
+
assert_eq!(
|
|
24
|
+
endpoint_client.get_send_library(&sender_b, &dst_eid),
|
|
25
|
+
ResolvedLibrary { lib: default_send_lib.clone(), is_default: true }
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
// Create and register a custom send lib for the same eid.
|
|
29
|
+
let custom_send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, dst_eid]);
|
|
30
|
+
context.register_library_with_auth(&custom_send_lib);
|
|
31
|
+
|
|
32
|
+
// Sender A sets a custom send library.
|
|
33
|
+
context.mock_auth(&sender_a, "set_send_library", (&sender_a, &sender_a, &dst_eid, &Some(custom_send_lib.clone())));
|
|
34
|
+
endpoint_client.set_send_library(&sender_a, &sender_a, &dst_eid, &Some(custom_send_lib.clone()));
|
|
35
|
+
|
|
36
|
+
// Sender A resolves to custom.
|
|
37
|
+
let resolved_a = endpoint_client.get_send_library(&sender_a, &dst_eid);
|
|
38
|
+
assert_eq!(resolved_a, ResolvedLibrary { lib: custom_send_lib, is_default: false });
|
|
39
|
+
|
|
40
|
+
// Sender B resolves to default.
|
|
41
|
+
let resolved_b = endpoint_client.get_send_library(&sender_b, &dst_eid);
|
|
42
|
+
assert_eq!(resolved_b, ResolvedLibrary { lib: default_send_lib, is_default: true });
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// The get_send_library returns custom even when no default exists
|
|
46
|
+
#[test]
|
|
47
|
+
fn test_get_send_library_custom_without_default() {
|
|
48
|
+
let context = setup();
|
|
49
|
+
let env = &context.env;
|
|
50
|
+
let endpoint_client = &context.endpoint_client;
|
|
51
|
+
|
|
52
|
+
let dst_eid_custom_only = context.eid;
|
|
53
|
+
let sender = Address::generate(env);
|
|
54
|
+
|
|
55
|
+
// Custom without default: register + set custom, then resolve to custom.
|
|
56
|
+
let custom_send_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, dst_eid_custom_only]);
|
|
57
|
+
context.register_library_with_auth(&custom_send_lib);
|
|
58
|
+
context.mock_auth(
|
|
59
|
+
&sender,
|
|
60
|
+
"set_send_library",
|
|
61
|
+
(&sender, &sender, &dst_eid_custom_only, &Some(custom_send_lib.clone())),
|
|
62
|
+
);
|
|
63
|
+
endpoint_client.set_send_library(&sender, &sender, &dst_eid_custom_only, &Some(custom_send_lib.clone()));
|
|
64
|
+
assert_eq!(
|
|
65
|
+
endpoint_client.get_send_library(&sender, &dst_eid_custom_only),
|
|
66
|
+
ResolvedLibrary { lib: custom_send_lib, is_default: false }
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// The get_send_library fails when neither default nor custom exists
|
|
71
|
+
#[test]
|
|
72
|
+
fn test_get_send_library_fails_without_default_and_custom() {
|
|
73
|
+
let context = setup();
|
|
74
|
+
let env = &context.env;
|
|
75
|
+
let endpoint_client = &context.endpoint_client;
|
|
76
|
+
|
|
77
|
+
let dst_eid = context.eid;
|
|
78
|
+
let sender = Address::generate(env);
|
|
79
|
+
|
|
80
|
+
// Missing both default and custom => DefaultSendLibUnavailable.
|
|
81
|
+
let result = endpoint_client.try_get_send_library(&sender, &dst_eid);
|
|
82
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::DefaultSendLibUnavailable.into());
|
|
83
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
use soroban_sdk::{testutils::Address as _, Address};
|
|
2
|
+
|
|
3
|
+
use crate::tests::endpoint_setup::setup;
|
|
4
|
+
// The is_registered_library is false for arbitrary addresses
|
|
5
|
+
#[test]
|
|
6
|
+
fn test_is_registered_library_false_for_unregistered_address() {
|
|
7
|
+
let context = setup();
|
|
8
|
+
let env = &context.env;
|
|
9
|
+
let endpoint_client = &context.endpoint_client;
|
|
10
|
+
|
|
11
|
+
let unregistered = Address::generate(env);
|
|
12
|
+
assert!(!endpoint_client.is_registered_library(&unregistered));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// The is_registered_library becomes true after successful registration
|
|
16
|
+
#[test]
|
|
17
|
+
fn test_is_registered_library_true_after_register() {
|
|
18
|
+
let context = setup();
|
|
19
|
+
let env = &context.env;
|
|
20
|
+
let endpoint_client = &context.endpoint_client;
|
|
21
|
+
|
|
22
|
+
let lib = context.setup_mock_message_lib(crate::MessageLibType::Send, soroban_sdk::vec![env, context.eid]);
|
|
23
|
+
|
|
24
|
+
// Before registering.
|
|
25
|
+
assert!(!endpoint_client.is_registered_library(&lib));
|
|
26
|
+
|
|
27
|
+
// Register as owner.
|
|
28
|
+
context.register_library_with_auth(&lib);
|
|
29
|
+
|
|
30
|
+
// After registering.
|
|
31
|
+
assert!(endpoint_client.is_registered_library(&lib));
|
|
32
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
use crate::tests::endpoint_setup::setup;
|
|
2
|
+
// The is_supported_eid view reflects whether BOTH default send & receive libraries exist, and is isolated per-EID
|
|
3
|
+
|
|
4
|
+
#[test]
|
|
5
|
+
fn test_is_supported_eid_requires_both_defaults_per_eid() {
|
|
6
|
+
let context = setup();
|
|
7
|
+
let endpoint_client = &context.endpoint_client;
|
|
8
|
+
|
|
9
|
+
let eid = context.eid;
|
|
10
|
+
let receive_only_eid = eid + 2;
|
|
11
|
+
|
|
12
|
+
// No defaults set for any EID.
|
|
13
|
+
assert!(!endpoint_client.is_supported_eid(&eid));
|
|
14
|
+
assert!(!endpoint_client.is_supported_eid(&receive_only_eid));
|
|
15
|
+
|
|
16
|
+
// Only default send set => still not supported.
|
|
17
|
+
let _ = context.setup_default_send_lib(eid, 100, 0);
|
|
18
|
+
assert!(!endpoint_client.is_supported_eid(&eid));
|
|
19
|
+
|
|
20
|
+
// Only default receive set (on a different EID) => still not supported.
|
|
21
|
+
let _ = context.setup_default_receive_lib(receive_only_eid, 0);
|
|
22
|
+
assert!(!endpoint_client.is_supported_eid(&receive_only_eid));
|
|
23
|
+
|
|
24
|
+
// Both defaults set => supported.
|
|
25
|
+
let _ = context.setup_default_receive_lib(eid, 0);
|
|
26
|
+
assert!(endpoint_client.is_supported_eid(&eid));
|
|
27
|
+
assert!(!endpoint_client.is_supported_eid(&receive_only_eid));
|
|
28
|
+
}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
use soroban_sdk::{
|
|
2
|
+
testutils::{Address as _, Ledger},
|
|
3
|
+
vec, Address,
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
use crate::{tests::endpoint_setup::setup, Timeout};
|
|
7
|
+
|
|
8
|
+
// Default receive library rotation (default timeout / grace period)
|
|
9
|
+
#[test]
|
|
10
|
+
fn test_is_valid_receive_library_allows_old_default_receive_library_within_grace_period() {
|
|
11
|
+
let context = setup();
|
|
12
|
+
let env = &context.env;
|
|
13
|
+
let endpoint_client = &context.endpoint_client;
|
|
14
|
+
|
|
15
|
+
let current_timestamp = 1_700_000_000u64;
|
|
16
|
+
let grace_period = 1_000u64;
|
|
17
|
+
env.ledger().with_mut(|li| li.timestamp = current_timestamp);
|
|
18
|
+
|
|
19
|
+
let src_eid = context.eid;
|
|
20
|
+
let receiver = Address::generate(env);
|
|
21
|
+
|
|
22
|
+
// Set an initial default receive library, then rotate it with a grace period.
|
|
23
|
+
let old_default = context.setup_default_receive_lib(src_eid, 0);
|
|
24
|
+
let new_default = context.setup_default_receive_lib(src_eid, grace_period);
|
|
25
|
+
|
|
26
|
+
// Old default is still valid due to the default timeout (grace period).
|
|
27
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver, &src_eid, &old_default));
|
|
28
|
+
// Current default is always valid.
|
|
29
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver, &src_eid, &new_default));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
#[test]
|
|
33
|
+
fn test_is_valid_receive_library_rejects_old_default_receive_library_after_grace_period_expires() {
|
|
34
|
+
let context = setup();
|
|
35
|
+
let env = &context.env;
|
|
36
|
+
let endpoint_client = &context.endpoint_client;
|
|
37
|
+
|
|
38
|
+
let current_timestamp = 1_700_000_000u64;
|
|
39
|
+
let grace_period = 1_000u64;
|
|
40
|
+
env.ledger().with_mut(|li| li.timestamp = current_timestamp);
|
|
41
|
+
|
|
42
|
+
let src_eid = context.eid;
|
|
43
|
+
let receiver = Address::generate(env);
|
|
44
|
+
|
|
45
|
+
let old_default = context.setup_default_receive_lib(src_eid, 0);
|
|
46
|
+
let new_default = context.setup_default_receive_lib(src_eid, grace_period);
|
|
47
|
+
|
|
48
|
+
// Expire the timeout: expiry <= timestamp means expired.
|
|
49
|
+
env.ledger().with_mut(|li| li.timestamp = current_timestamp + grace_period);
|
|
50
|
+
|
|
51
|
+
assert!(!endpoint_client.is_valid_receive_library(&receiver, &src_eid, &old_default));
|
|
52
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver, &src_eid, &new_default));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#[test]
|
|
56
|
+
fn test_is_valid_receive_library_allows_timeout_library_set_by_owner() {
|
|
57
|
+
let context = setup();
|
|
58
|
+
let env = &context.env;
|
|
59
|
+
let endpoint_client = &context.endpoint_client;
|
|
60
|
+
|
|
61
|
+
let now = 1_700_000_000u64;
|
|
62
|
+
env.ledger().with_mut(|li| li.timestamp = now);
|
|
63
|
+
|
|
64
|
+
let src_eid = context.eid;
|
|
65
|
+
let receiver = Address::generate(env);
|
|
66
|
+
|
|
67
|
+
// Configure a default receive library.
|
|
68
|
+
let default_receive_lib = context.setup_default_receive_lib(src_eid, 0);
|
|
69
|
+
|
|
70
|
+
// Owner sets a default receive library timeout for a different (registered) library.
|
|
71
|
+
let timeout_lib = context.setup_mock_receive_lib(vec![env, src_eid]);
|
|
72
|
+
context.register_library_with_auth(&timeout_lib);
|
|
73
|
+
let timeout = Some(Timeout { lib: timeout_lib.clone(), expiry: now + 1000 });
|
|
74
|
+
context.mock_owner_auth("set_default_receive_lib_timeout", (&src_eid, &timeout));
|
|
75
|
+
endpoint_client.set_default_receive_lib_timeout(&src_eid, &timeout);
|
|
76
|
+
|
|
77
|
+
// The current default is always valid, and the timeout lib becomes valid until expiry.
|
|
78
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver, &src_eid, &default_receive_lib));
|
|
79
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver, &src_eid, &timeout_lib));
|
|
80
|
+
|
|
81
|
+
// Other registered libs are still invalid.
|
|
82
|
+
let other_lib = context.setup_mock_receive_lib(vec![env, src_eid]);
|
|
83
|
+
context.register_library_with_auth(&other_lib);
|
|
84
|
+
assert!(!endpoint_client.is_valid_receive_library(&receiver, &src_eid, &other_lib));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Custom receive library rotation (per-receiver timeout / grace period)
|
|
88
|
+
#[test]
|
|
89
|
+
fn test_is_valid_receive_library_allows_old_custom_receive_library_within_grace_period() {
|
|
90
|
+
let context = setup();
|
|
91
|
+
let env = &context.env;
|
|
92
|
+
let endpoint_client = &context.endpoint_client;
|
|
93
|
+
|
|
94
|
+
let current_timestamp = 1_700_000_000u64;
|
|
95
|
+
let grace_period = 1_000u64;
|
|
96
|
+
env.ledger().with_mut(|li| li.timestamp = current_timestamp);
|
|
97
|
+
|
|
98
|
+
let src_eid = context.eid;
|
|
99
|
+
let receiver = Address::generate(env);
|
|
100
|
+
|
|
101
|
+
// Set old custom lib (no grace), then rotate to a new custom lib with grace.
|
|
102
|
+
let old_custom = context.setup_receive_library(&receiver, &receiver, src_eid, 0);
|
|
103
|
+
let new_custom = context.setup_receive_library(&receiver, &receiver, src_eid, grace_period);
|
|
104
|
+
|
|
105
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver, &src_eid, &old_custom));
|
|
106
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver, &src_eid, &new_custom));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
#[test]
|
|
110
|
+
fn test_is_valid_receive_library_rejects_old_custom_receive_library_after_grace_period_expires() {
|
|
111
|
+
let context = setup();
|
|
112
|
+
let env = &context.env;
|
|
113
|
+
let endpoint_client = &context.endpoint_client;
|
|
114
|
+
|
|
115
|
+
let current_timestamp = 1_700_000_000u64;
|
|
116
|
+
let grace_period = 1_000u64;
|
|
117
|
+
env.ledger().with_mut(|li| li.timestamp = current_timestamp);
|
|
118
|
+
|
|
119
|
+
let src_eid = context.eid;
|
|
120
|
+
let receiver = Address::generate(env);
|
|
121
|
+
|
|
122
|
+
let old_custom = context.setup_receive_library(&receiver, &receiver, src_eid, 0);
|
|
123
|
+
let new_custom = context.setup_receive_library(&receiver, &receiver, src_eid, grace_period);
|
|
124
|
+
|
|
125
|
+
// Expire the timeout.
|
|
126
|
+
env.ledger().with_mut(|li| li.timestamp = current_timestamp + grace_period);
|
|
127
|
+
|
|
128
|
+
assert!(!endpoint_client.is_valid_receive_library(&receiver, &src_eid, &old_custom));
|
|
129
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver, &src_eid, &new_custom));
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Unrelated libraries are rejected unless covered by a matching timeout
|
|
133
|
+
#[test]
|
|
134
|
+
fn test_is_valid_receive_library_rejects_unrelated_library_without_timeout() {
|
|
135
|
+
let context = setup();
|
|
136
|
+
let env = &context.env;
|
|
137
|
+
let endpoint_client = &context.endpoint_client;
|
|
138
|
+
|
|
139
|
+
let src_eid = context.eid;
|
|
140
|
+
let receiver = Address::generate(env);
|
|
141
|
+
|
|
142
|
+
// Configure a default receive library.
|
|
143
|
+
let default_receive_lib = context.setup_default_receive_lib(src_eid, 0);
|
|
144
|
+
|
|
145
|
+
// A registered, but unrelated, library should not be valid if no timeout applies.
|
|
146
|
+
let unrelated_lib = context.setup_mock_receive_lib(vec![env, src_eid]);
|
|
147
|
+
context.register_library_with_auth(&unrelated_lib);
|
|
148
|
+
|
|
149
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver, &src_eid, &default_receive_lib));
|
|
150
|
+
assert!(!endpoint_client.is_valid_receive_library(&receiver, &src_eid, &unrelated_lib));
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
#[test]
|
|
154
|
+
fn test_is_valid_receive_library_rejects_unrelated_library_even_when_default_timeout_exists() {
|
|
155
|
+
let context = setup();
|
|
156
|
+
let env = &context.env;
|
|
157
|
+
let endpoint_client = &context.endpoint_client;
|
|
158
|
+
|
|
159
|
+
let current_timestamp = 1_700_000_000u64;
|
|
160
|
+
let grace_period = 1_000u64;
|
|
161
|
+
env.ledger().with_mut(|li| li.timestamp = current_timestamp);
|
|
162
|
+
|
|
163
|
+
let src_eid = context.eid;
|
|
164
|
+
let receiver = Address::generate(env);
|
|
165
|
+
|
|
166
|
+
// Rotate default receive library with grace so a default timeout exists.
|
|
167
|
+
let old_default = context.setup_default_receive_lib(src_eid, 0);
|
|
168
|
+
let new_default = context.setup_default_receive_lib(src_eid, grace_period);
|
|
169
|
+
|
|
170
|
+
// A registered, unrelated library must not be valid unless it matches the timeout's lib.
|
|
171
|
+
let unrelated_lib = context.setup_mock_receive_lib(vec![env, src_eid]);
|
|
172
|
+
context.register_library_with_auth(&unrelated_lib);
|
|
173
|
+
|
|
174
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver, &src_eid, &old_default));
|
|
175
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver, &src_eid, &new_default));
|
|
176
|
+
assert!(!endpoint_client.is_valid_receive_library(&receiver, &src_eid, &unrelated_lib));
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
#[test]
|
|
180
|
+
fn test_is_valid_receive_library_rejects_unrelated_library_even_when_custom_timeout_exists() {
|
|
181
|
+
let context = setup();
|
|
182
|
+
let env = &context.env;
|
|
183
|
+
let endpoint_client = &context.endpoint_client;
|
|
184
|
+
|
|
185
|
+
let current_timestamp = 1_700_000_000u64;
|
|
186
|
+
let grace_period = 1_000u64;
|
|
187
|
+
env.ledger().with_mut(|li| li.timestamp = current_timestamp);
|
|
188
|
+
|
|
189
|
+
let src_eid = context.eid;
|
|
190
|
+
let receiver = Address::generate(env);
|
|
191
|
+
|
|
192
|
+
// Rotate a custom receive library with grace so a per-receiver timeout exists.
|
|
193
|
+
let old_custom = context.setup_receive_library(&receiver, &receiver, src_eid, 0);
|
|
194
|
+
let new_custom = context.setup_receive_library(&receiver, &receiver, src_eid, grace_period);
|
|
195
|
+
|
|
196
|
+
let unrelated_lib = context.setup_mock_receive_lib(vec![env, src_eid]);
|
|
197
|
+
context.register_library_with_auth(&unrelated_lib);
|
|
198
|
+
|
|
199
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver, &src_eid, &old_custom));
|
|
200
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver, &src_eid, &new_custom));
|
|
201
|
+
assert!(!endpoint_client.is_valid_receive_library(&receiver, &src_eid, &unrelated_lib));
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Custom configuration ignores the default receive library timeout
|
|
205
|
+
#[test]
|
|
206
|
+
fn test_is_valid_receive_library_custom_configuration_ignores_default_timeout() {
|
|
207
|
+
let context = setup();
|
|
208
|
+
let env = &context.env;
|
|
209
|
+
let endpoint_client = &context.endpoint_client;
|
|
210
|
+
|
|
211
|
+
let current_timestamp = 1_700_000_000u64;
|
|
212
|
+
env.ledger().with_mut(|li| li.timestamp = current_timestamp);
|
|
213
|
+
|
|
214
|
+
let grace_period = 1_000u64;
|
|
215
|
+
let src_eid = context.eid;
|
|
216
|
+
let receiver = Address::generate(env);
|
|
217
|
+
|
|
218
|
+
// Rotate default receive library with grace, which would normally allow old_default.
|
|
219
|
+
let old_default = context.setup_default_receive_lib(src_eid, 0);
|
|
220
|
+
let _ = context.setup_default_receive_lib(src_eid, grace_period);
|
|
221
|
+
|
|
222
|
+
// Sanity: old default is valid for a receiver when the receiver uses default.
|
|
223
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver, &src_eid, &old_default));
|
|
224
|
+
|
|
225
|
+
// Receiver switches to a custom receive library. From now on, default timeout must NOT apply.
|
|
226
|
+
let custom_receive_lib = context.setup_receive_library(&receiver, &receiver, src_eid, 0);
|
|
227
|
+
|
|
228
|
+
// After custom is configured, old_default is no longer valid (no per-receiver timeout was set for it).
|
|
229
|
+
assert!(!endpoint_client.is_valid_receive_library(&receiver, &src_eid, &old_default));
|
|
230
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver, &src_eid, &custom_receive_lib));
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Custom library timeout is isolated per receiver
|
|
234
|
+
#[test]
|
|
235
|
+
fn test_is_valid_receive_library_custom_timeout_isolated_per_receiver() {
|
|
236
|
+
let context = setup();
|
|
237
|
+
let env = &context.env;
|
|
238
|
+
let endpoint_client = &context.endpoint_client;
|
|
239
|
+
|
|
240
|
+
let current_timestamp = 1_700_000_000u64;
|
|
241
|
+
env.ledger().with_mut(|li| li.timestamp = current_timestamp);
|
|
242
|
+
|
|
243
|
+
let grace_period = 1_000u64;
|
|
244
|
+
let src_eid = context.eid;
|
|
245
|
+
let receiver_a = Address::generate(env);
|
|
246
|
+
let receiver_b = Address::generate(env);
|
|
247
|
+
|
|
248
|
+
// Ensure receiver_b has a valid default receive library so the view does not panic.
|
|
249
|
+
context.setup_default_receive_lib(src_eid, 0);
|
|
250
|
+
|
|
251
|
+
// Receiver A rotates custom lib with grace.
|
|
252
|
+
let old_custom = context.setup_receive_library(&receiver_a, &receiver_a, src_eid, 0);
|
|
253
|
+
let new_custom = context.setup_receive_library(&receiver_a, &receiver_a, src_eid, grace_period);
|
|
254
|
+
|
|
255
|
+
// Receiver A: old is valid within grace.
|
|
256
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver_a, &src_eid, &old_custom));
|
|
257
|
+
assert!(endpoint_client.is_valid_receive_library(&receiver_a, &src_eid, &new_custom));
|
|
258
|
+
|
|
259
|
+
// Receiver B: no receive library config => old_custom is not valid.
|
|
260
|
+
assert!(!endpoint_client.is_valid_receive_library(&receiver_b, &src_eid, &old_custom));
|
|
261
|
+
}
|
|
@@ -1,5 +1,20 @@
|
|
|
1
|
+
mod default_receive_library;
|
|
2
|
+
mod default_receive_library_timeout;
|
|
3
|
+
mod default_send_library;
|
|
4
|
+
mod get_config;
|
|
5
|
+
mod get_library_index;
|
|
6
|
+
mod get_receive_library;
|
|
7
|
+
mod get_registered_libraries;
|
|
8
|
+
mod get_send_library;
|
|
9
|
+
mod is_registered_library;
|
|
10
|
+
mod is_supported_eid;
|
|
11
|
+
mod is_valid_receive_library;
|
|
12
|
+
mod receive_library_timeout;
|
|
1
13
|
mod register_library;
|
|
14
|
+
mod registered_libraries_count;
|
|
15
|
+
mod require_receive_lib_for_eid;
|
|
2
16
|
mod require_registered;
|
|
17
|
+
mod require_send_lib_for_eid;
|
|
3
18
|
mod require_supported_eid;
|
|
4
19
|
mod set_config;
|
|
5
20
|
mod set_default_receive_lib_timeout;
|
|
@@ -8,3 +23,4 @@ mod set_default_send_library;
|
|
|
8
23
|
mod set_receive_library;
|
|
9
24
|
mod set_receive_library_timeout;
|
|
10
25
|
mod set_send_library;
|
|
26
|
+
mod timeout;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
use soroban_sdk::{testutils::Address as _, testutils::Ledger, vec, Address};
|
|
2
|
+
|
|
3
|
+
use crate::{tests::endpoint_setup::setup, MessageLibType, Timeout};
|
|
4
|
+
|
|
5
|
+
// The receive_library_timeout is scoped by (receiver, src_eid)
|
|
6
|
+
#[test]
|
|
7
|
+
fn test_receive_library_timeout_none_and_distinct_per_receiver_and_eid() {
|
|
8
|
+
let context = setup();
|
|
9
|
+
let env = &context.env;
|
|
10
|
+
let endpoint_client = &context.endpoint_client;
|
|
11
|
+
|
|
12
|
+
let receiver_a = Address::generate(env);
|
|
13
|
+
let receiver_b = Address::generate(env);
|
|
14
|
+
|
|
15
|
+
let eid_a = context.eid;
|
|
16
|
+
let eid_b = eid_a + 1;
|
|
17
|
+
let eid_none = eid_a + 2;
|
|
18
|
+
|
|
19
|
+
// Prepare timestamp.
|
|
20
|
+
let now = 1_700_000_000u64;
|
|
21
|
+
env.ledger().with_mut(|li| li.timestamp = now);
|
|
22
|
+
|
|
23
|
+
// Create and register receive libs for each EID.
|
|
24
|
+
let lib_a = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, eid_a]);
|
|
25
|
+
let lib_b = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, eid_b]);
|
|
26
|
+
context.register_library_with_auth(&lib_a);
|
|
27
|
+
context.register_library_with_auth(&lib_b);
|
|
28
|
+
|
|
29
|
+
// Each receiver sets a custom receive library for its EID (required: non-default receive library).
|
|
30
|
+
context.mock_auth(
|
|
31
|
+
&receiver_a,
|
|
32
|
+
"set_receive_library",
|
|
33
|
+
(&receiver_a, &receiver_a, &eid_a, &Some(lib_a.clone()), &0u64),
|
|
34
|
+
);
|
|
35
|
+
endpoint_client.set_receive_library(&receiver_a, &receiver_a, &eid_a, &Some(lib_a.clone()), &0u64);
|
|
36
|
+
|
|
37
|
+
context.mock_auth(
|
|
38
|
+
&receiver_b,
|
|
39
|
+
"set_receive_library",
|
|
40
|
+
(&receiver_b, &receiver_b, &eid_b, &Some(lib_b.clone()), &0u64),
|
|
41
|
+
);
|
|
42
|
+
endpoint_client.set_receive_library(&receiver_b, &receiver_b, &eid_b, &Some(lib_b.clone()), &0u64);
|
|
43
|
+
|
|
44
|
+
// Set timeouts.
|
|
45
|
+
let timeout_a = Some(Timeout { lib: lib_a.clone(), expiry: now + 1000 });
|
|
46
|
+
let timeout_b = Some(Timeout { lib: lib_b.clone(), expiry: now + 2000 });
|
|
47
|
+
|
|
48
|
+
context.mock_auth(&receiver_a, "set_receive_library_timeout", (&receiver_a, &receiver_a, &eid_a, &timeout_a));
|
|
49
|
+
endpoint_client.set_receive_library_timeout(&receiver_a, &receiver_a, &eid_a, &timeout_a);
|
|
50
|
+
|
|
51
|
+
context.mock_auth(&receiver_b, "set_receive_library_timeout", (&receiver_b, &receiver_b, &eid_b, &timeout_b));
|
|
52
|
+
endpoint_client.set_receive_library_timeout(&receiver_b, &receiver_b, &eid_b, &timeout_b);
|
|
53
|
+
|
|
54
|
+
// Verify view results.
|
|
55
|
+
assert_eq!(endpoint_client.receive_library_timeout(&receiver_a, &eid_a), timeout_a);
|
|
56
|
+
assert_eq!(endpoint_client.receive_library_timeout(&receiver_b, &eid_b), timeout_b);
|
|
57
|
+
|
|
58
|
+
// Unset combinations remain None.
|
|
59
|
+
assert_eq!(endpoint_client.receive_library_timeout(&receiver_a, &eid_none), None);
|
|
60
|
+
assert_eq!(endpoint_client.receive_library_timeout(&receiver_b, &eid_none), None);
|
|
61
|
+
assert_eq!(endpoint_client.receive_library_timeout(&Address::generate(env), &eid_a), None);
|
|
62
|
+
}
|