@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,17 +1,27 @@
|
|
|
1
|
-
use
|
|
1
|
+
use soroban_sdk::{vec, Bytes, BytesN, Env};
|
|
2
|
+
use utils::testing_utils::assert_event;
|
|
3
|
+
|
|
2
4
|
use crate::{
|
|
5
|
+
errors::EndpointError,
|
|
3
6
|
events::PacketVerified,
|
|
4
|
-
|
|
5
|
-
|
|
7
|
+
tests::{
|
|
8
|
+
endpoint_setup::setup,
|
|
9
|
+
mock::{MockReceiver, MockReceiverReject},
|
|
10
|
+
},
|
|
11
|
+
util::build_payload,
|
|
6
12
|
util::keccak256,
|
|
7
13
|
Origin,
|
|
8
14
|
};
|
|
9
|
-
use soroban_sdk::{
|
|
10
|
-
testutils::{MockAuth, MockAuthInvoke},
|
|
11
|
-
vec, Bytes, BytesN, IntoVal,
|
|
12
|
-
};
|
|
13
|
-
use utils::testing_utils::assert_event;
|
|
14
15
|
|
|
16
|
+
// Helpers
|
|
17
|
+
fn default_payload_hash(env: &Env) -> BytesN<32> {
|
|
18
|
+
let message = Bytes::from_array(env, &[1, 2, 3, 4]);
|
|
19
|
+
let guid = BytesN::from_array(env, &[5u8; 32]);
|
|
20
|
+
let payload = build_payload(env, &guid, &message);
|
|
21
|
+
keccak256(env, &payload)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Happy Path
|
|
15
25
|
#[test]
|
|
16
26
|
fn test_verify_success() {
|
|
17
27
|
let context = setup();
|
|
@@ -24,36 +34,19 @@ fn test_verify_success() {
|
|
|
24
34
|
let nonce = 1u64;
|
|
25
35
|
|
|
26
36
|
// Setup receive library
|
|
27
|
-
let receive_lib = context.
|
|
28
|
-
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
29
|
-
endpoint_client.register_library(&receive_lib);
|
|
30
|
-
context.mock_owner_auth("set_default_receive_library", (&src_eid, &receive_lib, &0u64));
|
|
31
|
-
endpoint_client.set_default_receive_library(&src_eid, &receive_lib, &0);
|
|
37
|
+
let receive_lib = context.setup_default_receive_lib(src_eid, 0);
|
|
32
38
|
|
|
33
39
|
// Create payload hash
|
|
34
|
-
let
|
|
35
|
-
let guid = BytesN::from_array(env, &[5u8; 32]);
|
|
36
|
-
let payload = build_payload(env, &guid, &message);
|
|
37
|
-
let payload_hash = keccak256(env, &payload);
|
|
40
|
+
let payload_hash = default_payload_hash(env);
|
|
38
41
|
|
|
39
42
|
let origin = Origin { src_eid, sender: sender.clone(), nonce };
|
|
40
43
|
|
|
41
44
|
// Verify initial state - inbound payload hash should not exist
|
|
42
|
-
let initial_hash =
|
|
43
|
-
storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce)
|
|
44
|
-
});
|
|
45
|
+
let initial_hash = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce);
|
|
45
46
|
assert_eq!(initial_hash, None, "Initial inbound payload hash should be None");
|
|
46
47
|
|
|
47
48
|
// Mock auth for receive_lib
|
|
48
|
-
|
|
49
|
-
address: &receive_lib,
|
|
50
|
-
invoke: &MockAuthInvoke {
|
|
51
|
-
contract: &endpoint_client.address,
|
|
52
|
-
fn_name: "verify",
|
|
53
|
-
args: (&receive_lib, &origin, &receiver, &payload_hash).into_val(env),
|
|
54
|
-
sub_invokes: &[],
|
|
55
|
-
},
|
|
56
|
-
}]);
|
|
49
|
+
context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin, &receiver, &payload_hash));
|
|
57
50
|
|
|
58
51
|
endpoint_client.verify(&receive_lib, &origin, &receiver, &payload_hash);
|
|
59
52
|
|
|
@@ -67,14 +60,9 @@ fn test_verify_success() {
|
|
|
67
60
|
// Verify inbound payload hash was stored via public interface
|
|
68
61
|
let stored_hash = endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce);
|
|
69
62
|
assert_eq!(stored_hash, Some(payload_hash.clone()));
|
|
70
|
-
|
|
71
|
-
// Assert storage change directly
|
|
72
|
-
let stored_hash_direct = env.as_contract(&endpoint_client.address, || {
|
|
73
|
-
storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce)
|
|
74
|
-
});
|
|
75
|
-
assert_eq!(stored_hash_direct, Some(payload_hash), "Storage should contain the inbound payload hash");
|
|
76
63
|
}
|
|
77
64
|
|
|
65
|
+
// Storage & Nonce Behavior
|
|
78
66
|
#[test]
|
|
79
67
|
fn test_verify_stores_payload_hash() {
|
|
80
68
|
let context = setup();
|
|
@@ -87,30 +75,15 @@ fn test_verify_stores_payload_hash() {
|
|
|
87
75
|
let nonce = 1u64;
|
|
88
76
|
|
|
89
77
|
// Setup receive library
|
|
90
|
-
let receive_lib = context.
|
|
91
|
-
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
92
|
-
endpoint_client.register_library(&receive_lib);
|
|
93
|
-
context.mock_owner_auth("set_default_receive_library", (&src_eid, &receive_lib, &0u64));
|
|
94
|
-
endpoint_client.set_default_receive_library(&src_eid, &receive_lib, &0);
|
|
78
|
+
let receive_lib = context.setup_default_receive_lib(src_eid, 0);
|
|
95
79
|
|
|
96
80
|
// Create payload hash
|
|
97
|
-
let
|
|
98
|
-
let guid = BytesN::from_array(env, &[5u8; 32]);
|
|
99
|
-
let payload = build_payload(env, &guid, &message);
|
|
100
|
-
let payload_hash = keccak256(env, &payload);
|
|
81
|
+
let payload_hash = default_payload_hash(env);
|
|
101
82
|
|
|
102
83
|
let origin = Origin { src_eid, sender: sender.clone(), nonce };
|
|
103
84
|
|
|
104
85
|
// Mock auth for receive_lib
|
|
105
|
-
|
|
106
|
-
address: &receive_lib,
|
|
107
|
-
invoke: &MockAuthInvoke {
|
|
108
|
-
contract: &endpoint_client.address,
|
|
109
|
-
fn_name: "verify",
|
|
110
|
-
args: (&receive_lib, &origin, &receiver, &payload_hash).into_val(env),
|
|
111
|
-
sub_invokes: &[],
|
|
112
|
-
},
|
|
113
|
-
}]);
|
|
86
|
+
context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin, &receiver, &payload_hash));
|
|
114
87
|
|
|
115
88
|
endpoint_client.verify(&receive_lib, &origin, &receiver, &payload_hash);
|
|
116
89
|
|
|
@@ -119,6 +92,35 @@ fn test_verify_stores_payload_hash() {
|
|
|
119
92
|
assert_eq!(stored_hash, Some(payload_hash));
|
|
120
93
|
}
|
|
121
94
|
|
|
95
|
+
#[test]
|
|
96
|
+
fn test_verify_overwrites_payload_hash_for_same_nonce() {
|
|
97
|
+
let context = setup();
|
|
98
|
+
let env = &context.env;
|
|
99
|
+
let endpoint_client = &context.endpoint_client;
|
|
100
|
+
|
|
101
|
+
let src_eid = 2u32;
|
|
102
|
+
let sender = BytesN::from_array(env, &[1u8; 32]);
|
|
103
|
+
let receiver = env.register(MockReceiver, ());
|
|
104
|
+
let nonce = 1u64;
|
|
105
|
+
|
|
106
|
+
// Setup receive library
|
|
107
|
+
let receive_lib = context.setup_default_receive_lib(src_eid, 0);
|
|
108
|
+
|
|
109
|
+
let origin = Origin { src_eid, sender: sender.clone(), nonce };
|
|
110
|
+
|
|
111
|
+
// Verify once
|
|
112
|
+
let payload_hash1 = BytesN::from_array(env, &[0x11u8; 32]);
|
|
113
|
+
context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin, &receiver, &payload_hash1));
|
|
114
|
+
endpoint_client.verify(&receive_lib, &origin, &receiver, &payload_hash1);
|
|
115
|
+
assert_eq!(endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce), Some(payload_hash1.clone()));
|
|
116
|
+
|
|
117
|
+
// Verify again with a different payload hash (current logic allows overwriting)
|
|
118
|
+
let payload_hash2 = BytesN::from_array(env, &[0x22u8; 32]);
|
|
119
|
+
context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin, &receiver, &payload_hash2));
|
|
120
|
+
endpoint_client.verify(&receive_lib, &origin, &receiver, &payload_hash2);
|
|
121
|
+
assert_eq!(endpoint_client.inbound_payload_hash(&receiver, &src_eid, &sender, &nonce), Some(payload_hash2));
|
|
122
|
+
}
|
|
123
|
+
|
|
122
124
|
#[test]
|
|
123
125
|
fn test_verify_multiple_nonces() {
|
|
124
126
|
let context = setup();
|
|
@@ -130,38 +132,18 @@ fn test_verify_multiple_nonces() {
|
|
|
130
132
|
let receiver = env.register(MockReceiver, ());
|
|
131
133
|
|
|
132
134
|
// Setup receive library
|
|
133
|
-
let receive_lib = context.
|
|
134
|
-
context.mock_owner_auth("register_library", (&receive_lib,));
|
|
135
|
-
endpoint_client.register_library(&receive_lib);
|
|
136
|
-
context.mock_owner_auth("set_default_receive_library", (&src_eid, &receive_lib, &0u64));
|
|
137
|
-
endpoint_client.set_default_receive_library(&src_eid, &receive_lib, &0);
|
|
135
|
+
let receive_lib = context.setup_default_receive_lib(src_eid, 0);
|
|
138
136
|
|
|
139
137
|
// Verify nonce 1
|
|
140
138
|
let payload_hash1 = BytesN::from_array(env, &[1u8; 32]);
|
|
141
139
|
let origin1 = Origin { src_eid, sender: sender.clone(), nonce: 1 };
|
|
142
|
-
|
|
143
|
-
address: &receive_lib,
|
|
144
|
-
invoke: &MockAuthInvoke {
|
|
145
|
-
contract: &endpoint_client.address,
|
|
146
|
-
fn_name: "verify",
|
|
147
|
-
args: (&receive_lib, &origin1, &receiver, &payload_hash1).into_val(env),
|
|
148
|
-
sub_invokes: &[],
|
|
149
|
-
},
|
|
150
|
-
}]);
|
|
140
|
+
context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin1, &receiver, &payload_hash1));
|
|
151
141
|
endpoint_client.verify(&receive_lib, &origin1, &receiver, &payload_hash1);
|
|
152
142
|
|
|
153
143
|
// Verify nonce 2
|
|
154
144
|
let payload_hash2 = BytesN::from_array(env, &[2u8; 32]);
|
|
155
145
|
let origin2 = Origin { src_eid, sender: sender.clone(), nonce: 2 };
|
|
156
|
-
|
|
157
|
-
address: &receive_lib,
|
|
158
|
-
invoke: &MockAuthInvoke {
|
|
159
|
-
contract: &endpoint_client.address,
|
|
160
|
-
fn_name: "verify",
|
|
161
|
-
args: (&receive_lib, &origin2, &receiver, &payload_hash2).into_val(env),
|
|
162
|
-
sub_invokes: &[],
|
|
163
|
-
},
|
|
164
|
-
}]);
|
|
146
|
+
context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin2, &receiver, &payload_hash2));
|
|
165
147
|
endpoint_client.verify(&receive_lib, &origin2, &receiver, &payload_hash2);
|
|
166
148
|
|
|
167
149
|
// Verify both payload hashes were stored
|
|
@@ -170,3 +152,154 @@ fn test_verify_multiple_nonces() {
|
|
|
170
152
|
assert_eq!(stored_hash1, Some(payload_hash1));
|
|
171
153
|
assert_eq!(stored_hash2, Some(payload_hash2));
|
|
172
154
|
}
|
|
155
|
+
|
|
156
|
+
// Authorization
|
|
157
|
+
#[test]
|
|
158
|
+
#[should_panic(expected = "Error(Auth, InvalidAction)")]
|
|
159
|
+
fn test_verify_unauthorized() {
|
|
160
|
+
let context = setup();
|
|
161
|
+
let env = &context.env;
|
|
162
|
+
let endpoint_client = &context.endpoint_client;
|
|
163
|
+
|
|
164
|
+
let src_eid = 2u32;
|
|
165
|
+
let sender = BytesN::from_array(env, &[1u8; 32]);
|
|
166
|
+
let receiver = env.register(MockReceiver, ());
|
|
167
|
+
let nonce = 1u64;
|
|
168
|
+
|
|
169
|
+
// Setup receive library
|
|
170
|
+
let receive_lib = context.setup_default_receive_lib(src_eid, 0);
|
|
171
|
+
|
|
172
|
+
// Create payload hash
|
|
173
|
+
let payload_hash = default_payload_hash(env);
|
|
174
|
+
|
|
175
|
+
let origin = Origin { src_eid, sender, nonce };
|
|
176
|
+
|
|
177
|
+
// Don't mock auth for receive_lib - should panic with Auth error
|
|
178
|
+
endpoint_client.verify(&receive_lib, &origin, &receiver, &payload_hash);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Receive Library Validation
|
|
182
|
+
#[test]
|
|
183
|
+
fn test_verify_invalid_receive_library() {
|
|
184
|
+
let context = setup();
|
|
185
|
+
let env = &context.env;
|
|
186
|
+
let endpoint_client = &context.endpoint_client;
|
|
187
|
+
|
|
188
|
+
let src_eid = 2u32;
|
|
189
|
+
let sender = BytesN::from_array(env, &[1u8; 32]);
|
|
190
|
+
let receiver = env.register(MockReceiver, ());
|
|
191
|
+
let nonce = 1u64;
|
|
192
|
+
|
|
193
|
+
// Setup valid receive library and set as default (so get_receive_library succeeds)
|
|
194
|
+
let _valid_receive_lib = context.setup_default_receive_lib(src_eid, 0);
|
|
195
|
+
|
|
196
|
+
// Create invalid receive library (different from configured one, not registered, no timeout)
|
|
197
|
+
// is_valid_receive_library will call get_receive_library (succeeds with default),
|
|
198
|
+
// then check actual_lib != expected_lib (true), then check timeout (None), so returns false
|
|
199
|
+
let invalid_receive_lib = context.setup_mock_receive_lib(vec![env, src_eid]);
|
|
200
|
+
// Don't register or set as default - this makes it invalid
|
|
201
|
+
|
|
202
|
+
// Create payload hash
|
|
203
|
+
let payload_hash = default_payload_hash(env);
|
|
204
|
+
|
|
205
|
+
let origin = Origin { src_eid, sender, nonce };
|
|
206
|
+
|
|
207
|
+
// Mock auth for invalid receive library
|
|
208
|
+
context.mock_auth(&invalid_receive_lib, "verify", (&invalid_receive_lib, &origin, &receiver, &payload_hash));
|
|
209
|
+
|
|
210
|
+
let result = endpoint_client.try_verify(&invalid_receive_lib, &origin, &receiver, &payload_hash);
|
|
211
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::InvalidReceiveLibrary.into());
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Payload Hash Validation
|
|
215
|
+
#[test]
|
|
216
|
+
fn test_verify_invalid_payload_hash_empty() {
|
|
217
|
+
let context = setup();
|
|
218
|
+
let env = &context.env;
|
|
219
|
+
let endpoint_client = &context.endpoint_client;
|
|
220
|
+
|
|
221
|
+
let src_eid = 2u32;
|
|
222
|
+
let sender = BytesN::from_array(env, &[1u8; 32]);
|
|
223
|
+
let receiver = env.register(MockReceiver, ());
|
|
224
|
+
let nonce = 1u64;
|
|
225
|
+
|
|
226
|
+
// Setup receive library
|
|
227
|
+
let receive_lib = context.setup_default_receive_lib(src_eid, 0);
|
|
228
|
+
|
|
229
|
+
// Empty payload hash is not allowed
|
|
230
|
+
let empty_hash = BytesN::from_array(env, &[0u8; 32]);
|
|
231
|
+
let origin = Origin { src_eid, sender, nonce };
|
|
232
|
+
|
|
233
|
+
// Mock auth for receive_lib
|
|
234
|
+
context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin, &receiver, &empty_hash));
|
|
235
|
+
|
|
236
|
+
let result = endpoint_client.try_verify(&receive_lib, &origin, &receiver, &empty_hash);
|
|
237
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::InvalidPayloadHash.into());
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// Path Validation
|
|
241
|
+
#[test]
|
|
242
|
+
fn test_verify_path_not_initializable() {
|
|
243
|
+
let context = setup();
|
|
244
|
+
let env = &context.env;
|
|
245
|
+
let endpoint_client = &context.endpoint_client;
|
|
246
|
+
|
|
247
|
+
let src_eid = 2u32;
|
|
248
|
+
let sender = BytesN::from_array(env, &[1u8; 32]);
|
|
249
|
+
// Use MockReceiverReject which rejects initialization (returns false from allow_initialize_path)
|
|
250
|
+
let receiver = env.register(MockReceiverReject, ());
|
|
251
|
+
let nonce = 1u64;
|
|
252
|
+
|
|
253
|
+
// Setup receive library and set as default (so library validation passes)
|
|
254
|
+
let receive_lib = context.setup_default_receive_lib(src_eid, 0);
|
|
255
|
+
|
|
256
|
+
// Create payload hash
|
|
257
|
+
let payload_hash = default_payload_hash(env);
|
|
258
|
+
|
|
259
|
+
let origin = Origin { src_eid, sender, nonce };
|
|
260
|
+
|
|
261
|
+
// Mock auth for receive_lib
|
|
262
|
+
context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin, &receiver, &payload_hash));
|
|
263
|
+
|
|
264
|
+
// Library validation passes (receive_lib matches default)
|
|
265
|
+
// initializable checks: lazy_inbound_nonce == 0, and receiver.allow_initialize_path(origin) == false
|
|
266
|
+
// So initializable returns false, should panic with PathNotInitializable error
|
|
267
|
+
let result = endpoint_client.try_verify(&receive_lib, &origin, &receiver, &payload_hash);
|
|
268
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::PathNotInitializable.into());
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
#[test]
|
|
272
|
+
fn test_verify_path_not_verifiable() {
|
|
273
|
+
let context = setup();
|
|
274
|
+
let env = &context.env;
|
|
275
|
+
let endpoint_client = &context.endpoint_client;
|
|
276
|
+
|
|
277
|
+
let src_eid = 2u32;
|
|
278
|
+
let sender = BytesN::from_array(env, &[1u8; 32]);
|
|
279
|
+
let receiver = env.register(MockReceiver, ());
|
|
280
|
+
|
|
281
|
+
// Setup receive library and set as default (so library validation passes)
|
|
282
|
+
let receive_lib = context.setup_default_receive_lib(src_eid, 0);
|
|
283
|
+
|
|
284
|
+
// Skip nonce 1 to set lazy_inbound_nonce to 1 (so initializable passes: lazy_nonce > 0)
|
|
285
|
+
context.mock_auth(&receiver, "skip", (&receiver, &receiver, &src_eid, &sender, &1u64));
|
|
286
|
+
endpoint_client.skip(&receiver, &receiver, &src_eid, &sender, &1);
|
|
287
|
+
|
|
288
|
+
// Create payload hash
|
|
289
|
+
let message = Bytes::from_array(env, &[1, 2, 3, 4]);
|
|
290
|
+
let guid = BytesN::from_array(env, &[5u8; 32]);
|
|
291
|
+
let payload = build_payload(env, &guid, &message);
|
|
292
|
+
let payload_hash = keccak256(env, &payload);
|
|
293
|
+
|
|
294
|
+
// Try to verify nonce 1, but lazy_nonce is already 1, so nonce 1 is not verifiable
|
|
295
|
+
// verifiable checks: nonce > lazy_inbound_nonce (1 > 1 is false) OR has payload hash (false)
|
|
296
|
+
let origin = Origin { src_eid, sender, nonce: 1 };
|
|
297
|
+
|
|
298
|
+
// Mock auth for receive_lib
|
|
299
|
+
context.mock_auth(&receive_lib, "verify", (&receive_lib, &origin, &receiver, &payload_hash));
|
|
300
|
+
|
|
301
|
+
// Library validation passes, initializable passes (lazy_nonce > 0)
|
|
302
|
+
// verifiable fails (nonce <= lazy_nonce and no payload hash), should panic with PathNotVerifiable error
|
|
303
|
+
let result = endpoint_client.try_verify(&receive_lib, &origin, &receiver, &payload_hash);
|
|
304
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::PathNotVerifiable.into());
|
|
305
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
use crate::tests::endpoint_setup::setup;
|
|
2
|
+
// The default_receive_library is per-EID (None for unset EIDs, distinct libs per EID)
|
|
3
|
+
#[test]
|
|
4
|
+
fn test_default_receive_library_none_and_distinct_per_eid() {
|
|
5
|
+
let context = setup();
|
|
6
|
+
let endpoint_client = &context.endpoint_client;
|
|
7
|
+
|
|
8
|
+
let eid_a = context.eid;
|
|
9
|
+
let eid_b = eid_a + 1;
|
|
10
|
+
let eid_none = eid_a + 2;
|
|
11
|
+
|
|
12
|
+
// Set defaults for two EIDs.
|
|
13
|
+
let receive_lib_a = context.setup_default_receive_lib(eid_a, 0);
|
|
14
|
+
let receive_lib_b = context.setup_default_receive_lib(eid_b, 0);
|
|
15
|
+
|
|
16
|
+
assert_eq!(endpoint_client.default_receive_library(&eid_a), Some(receive_lib_a.clone()));
|
|
17
|
+
assert_eq!(endpoint_client.default_receive_library(&eid_b), Some(receive_lib_b.clone()));
|
|
18
|
+
|
|
19
|
+
// Different EIDs should be allowed to point to different libs.
|
|
20
|
+
assert_ne!(receive_lib_a, receive_lib_b);
|
|
21
|
+
|
|
22
|
+
// Setting other EIDs should not affect an unset EID.
|
|
23
|
+
assert_eq!(endpoint_client.default_receive_library(&eid_none), None);
|
|
24
|
+
}
|
package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library_timeout.rs
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
use soroban_sdk::{testutils::Ledger, vec};
|
|
2
|
+
|
|
3
|
+
use crate::{tests::endpoint_setup::setup, MessageLibType, Timeout};
|
|
4
|
+
|
|
5
|
+
// The default_receive_library_timeout is per-EID (None for unset EIDs, distinct values per EID)
|
|
6
|
+
#[test]
|
|
7
|
+
fn test_default_receive_library_timeout_none_and_distinct_per_eid() {
|
|
8
|
+
let context = setup();
|
|
9
|
+
let env = &context.env;
|
|
10
|
+
let endpoint_client = &context.endpoint_client;
|
|
11
|
+
|
|
12
|
+
let eid_a = context.eid;
|
|
13
|
+
let eid_b = eid_a + 1;
|
|
14
|
+
let eid_none = eid_a + 2;
|
|
15
|
+
|
|
16
|
+
let now = 1_700_000_000u64;
|
|
17
|
+
env.ledger().with_mut(|li| li.timestamp = now);
|
|
18
|
+
|
|
19
|
+
// Create and register receive libs for each EID.
|
|
20
|
+
let lib_a = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, eid_a]);
|
|
21
|
+
let lib_b = context.setup_mock_message_lib(MessageLibType::Receive, vec![env, eid_b]);
|
|
22
|
+
context.register_library_with_auth(&lib_a);
|
|
23
|
+
context.register_library_with_auth(&lib_b);
|
|
24
|
+
|
|
25
|
+
let timeout_a = Some(Timeout { lib: lib_a.clone(), expiry: now + 1000 });
|
|
26
|
+
let timeout_b = Some(Timeout { lib: lib_b.clone(), expiry: now + 2000 });
|
|
27
|
+
|
|
28
|
+
// Set timeouts as owner.
|
|
29
|
+
context.mock_owner_auth("set_default_receive_lib_timeout", (&eid_a, &timeout_a));
|
|
30
|
+
endpoint_client.set_default_receive_lib_timeout(&eid_a, &timeout_a);
|
|
31
|
+
|
|
32
|
+
context.mock_owner_auth("set_default_receive_lib_timeout", (&eid_b, &timeout_b));
|
|
33
|
+
endpoint_client.set_default_receive_lib_timeout(&eid_b, &timeout_b);
|
|
34
|
+
|
|
35
|
+
assert_eq!(endpoint_client.default_receive_library_timeout(&eid_a), timeout_a);
|
|
36
|
+
assert_eq!(endpoint_client.default_receive_library_timeout(&eid_b), timeout_b);
|
|
37
|
+
|
|
38
|
+
// Setting other EIDs should not affect an unset EID.
|
|
39
|
+
assert_eq!(endpoint_client.default_receive_library_timeout(&eid_none), None);
|
|
40
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
use crate::tests::endpoint_setup::setup;
|
|
2
|
+
// The default_send_library is per-EID (None for unset EIDs, distinct libs per EID)
|
|
3
|
+
#[test]
|
|
4
|
+
fn test_default_send_library_none_and_distinct_per_eid() {
|
|
5
|
+
let context = setup();
|
|
6
|
+
let endpoint_client = &context.endpoint_client;
|
|
7
|
+
|
|
8
|
+
let eid_a = context.eid;
|
|
9
|
+
let eid_b = eid_a + 1;
|
|
10
|
+
let eid_none = eid_a + 2;
|
|
11
|
+
|
|
12
|
+
// Set defaults for two EIDs.
|
|
13
|
+
let (send_lib_a, _fee_recipient_a) = context.setup_default_send_lib(eid_a, 100, 0);
|
|
14
|
+
let (send_lib_b, _fee_recipient_b) = context.setup_default_send_lib(eid_b, 100, 0);
|
|
15
|
+
|
|
16
|
+
assert_eq!(endpoint_client.default_send_library(&eid_a), Some(send_lib_a.clone()));
|
|
17
|
+
assert_eq!(endpoint_client.default_send_library(&eid_b), Some(send_lib_b.clone()));
|
|
18
|
+
|
|
19
|
+
// Different EIDs should be allowed to point to different libs.
|
|
20
|
+
assert_ne!(send_lib_a, send_lib_b);
|
|
21
|
+
|
|
22
|
+
// Setting other EIDs should not affect an unset EID.
|
|
23
|
+
assert_eq!(endpoint_client.default_send_library(&eid_none), None);
|
|
24
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
use soroban_sdk::{testutils::Address as _, vec, Address, Bytes, Vec};
|
|
2
|
+
|
|
3
|
+
use crate::{
|
|
4
|
+
errors::EndpointError, tests::endpoint_setup::setup, tests::mock::MockMessageLibClient, MessageLibType,
|
|
5
|
+
SetConfigParam,
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
// The get_config requires library to be registered (internal require_registered)
|
|
9
|
+
#[test]
|
|
10
|
+
fn test_get_config_requires_registered_library() {
|
|
11
|
+
let context = setup();
|
|
12
|
+
let env = &context.env;
|
|
13
|
+
let endpoint_client = &context.endpoint_client;
|
|
14
|
+
|
|
15
|
+
let oapp = Address::generate(env);
|
|
16
|
+
let unregistered_lib = Address::generate(env);
|
|
17
|
+
|
|
18
|
+
let result = endpoint_client.try_get_config(&oapp, &unregistered_lib, &context.eid, &0u32);
|
|
19
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), EndpointError::OnlyRegisteredLib.into());
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// The get_config returns empty bytes for unset keys
|
|
23
|
+
#[test]
|
|
24
|
+
fn test_get_config_returns_empty_for_unset_key() {
|
|
25
|
+
let context = setup();
|
|
26
|
+
let env = &context.env;
|
|
27
|
+
let endpoint_client = &context.endpoint_client;
|
|
28
|
+
|
|
29
|
+
let oapp = Address::generate(env);
|
|
30
|
+
let eid = context.eid;
|
|
31
|
+
let config_type = 7u32;
|
|
32
|
+
|
|
33
|
+
let message_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, eid]);
|
|
34
|
+
context.register_library_with_auth(&message_lib);
|
|
35
|
+
|
|
36
|
+
let stored = endpoint_client.get_config(&oapp, &message_lib, &eid, &config_type);
|
|
37
|
+
assert_eq!(stored, Bytes::new(env));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// The get_config forwards (eid, oapp, config_type) correctly into the message lib
|
|
41
|
+
#[test]
|
|
42
|
+
fn test_get_config_returns_persisted_and_isolated_by_oapp_and_config_type() {
|
|
43
|
+
let context = setup();
|
|
44
|
+
let env = &context.env;
|
|
45
|
+
let endpoint_client = &context.endpoint_client;
|
|
46
|
+
|
|
47
|
+
let oapp_a = Address::generate(env);
|
|
48
|
+
let oapp_b = Address::generate(env);
|
|
49
|
+
|
|
50
|
+
let eid = context.eid;
|
|
51
|
+
let config_type_a = 1u32;
|
|
52
|
+
let config_type_b = 2u32;
|
|
53
|
+
|
|
54
|
+
let message_lib = context.setup_mock_message_lib(MessageLibType::Send, vec![env, eid]);
|
|
55
|
+
context.register_library_with_auth(&message_lib);
|
|
56
|
+
|
|
57
|
+
// Seed config directly into the mock library to keep this test focused on get_config passthrough.
|
|
58
|
+
let lib_client = MockMessageLibClient::new(env, &message_lib);
|
|
59
|
+
let cfg_a = Bytes::from_slice(env, &[0x01, 0x02, 0x03]);
|
|
60
|
+
let params_a: Vec<SetConfigParam> =
|
|
61
|
+
vec![env, SetConfigParam { eid, config_type: config_type_a, config: cfg_a.clone() }];
|
|
62
|
+
lib_client.set_config(&oapp_a, ¶ms_a);
|
|
63
|
+
|
|
64
|
+
// Happy path: exact key returns the stored bytes.
|
|
65
|
+
assert_eq!(endpoint_client.get_config(&oapp_a, &message_lib, &eid, &config_type_a), cfg_a);
|
|
66
|
+
|
|
67
|
+
// Different config_type returns empty.
|
|
68
|
+
assert_eq!(endpoint_client.get_config(&oapp_a, &message_lib, &eid, &config_type_b), Bytes::new(env));
|
|
69
|
+
|
|
70
|
+
// Different OApp returns empty.
|
|
71
|
+
assert_eq!(endpoint_client.get_config(&oapp_b, &message_lib, &eid, &config_type_a), Bytes::new(env));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// The get_config is isolated by EID and by library address
|
|
75
|
+
#[test]
|
|
76
|
+
fn test_get_config_isolated_by_eid_and_lib() {
|
|
77
|
+
let context = setup();
|
|
78
|
+
let env = &context.env;
|
|
79
|
+
let endpoint_client = &context.endpoint_client;
|
|
80
|
+
|
|
81
|
+
let oapp = Address::generate(env);
|
|
82
|
+
let eid_a = context.eid;
|
|
83
|
+
let eid_b = eid_a + 1;
|
|
84
|
+
let config_type = 1u32;
|
|
85
|
+
|
|
86
|
+
let lib_a = context.setup_mock_message_lib(MessageLibType::Send, vec![env, eid_a, eid_b]);
|
|
87
|
+
let lib_b = context.setup_mock_message_lib(MessageLibType::Send, vec![env, eid_a, eid_b]);
|
|
88
|
+
context.register_library_with_auth(&lib_a);
|
|
89
|
+
context.register_library_with_auth(&lib_b);
|
|
90
|
+
|
|
91
|
+
// Seed different values into different libs under the same key.
|
|
92
|
+
let cfg_a = Bytes::from_slice(env, &[0xA1]);
|
|
93
|
+
let cfg_b = Bytes::from_slice(env, &[0xB2]);
|
|
94
|
+
|
|
95
|
+
let lib_a_client = MockMessageLibClient::new(env, &lib_a);
|
|
96
|
+
let lib_b_client = MockMessageLibClient::new(env, &lib_b);
|
|
97
|
+
|
|
98
|
+
let params_a: Vec<SetConfigParam> = vec![env, SetConfigParam { eid: eid_a, config_type, config: cfg_a.clone() }];
|
|
99
|
+
let params_b: Vec<SetConfigParam> = vec![env, SetConfigParam { eid: eid_a, config_type, config: cfg_b.clone() }];
|
|
100
|
+
lib_a_client.set_config(&oapp, ¶ms_a);
|
|
101
|
+
lib_b_client.set_config(&oapp, ¶ms_b);
|
|
102
|
+
|
|
103
|
+
assert_eq!(endpoint_client.get_config(&oapp, &lib_a, &eid_a, &config_type), cfg_a);
|
|
104
|
+
assert_eq!(endpoint_client.get_config(&oapp, &lib_b, &eid_a, &config_type), cfg_b);
|
|
105
|
+
|
|
106
|
+
// Different EID (unset) returns empty.
|
|
107
|
+
assert_eq!(endpoint_client.get_config(&oapp, &lib_a, &eid_b, &config_type), Bytes::new(env));
|
|
108
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
use soroban_sdk::{testutils::Address as _, Address};
|
|
2
|
+
|
|
3
|
+
use crate::tests::{endpoint_setup::setup, mock::MockValidMessageLib};
|
|
4
|
+
|
|
5
|
+
// The get_library_index is None for arbitrary (unregistered) addresses
|
|
6
|
+
#[test]
|
|
7
|
+
fn test_get_library_index_for_unregistered_library_is_none() {
|
|
8
|
+
let context = setup();
|
|
9
|
+
let env = &context.env;
|
|
10
|
+
let endpoint_client = &context.endpoint_client;
|
|
11
|
+
|
|
12
|
+
let unregistered = Address::generate(env);
|
|
13
|
+
assert!(!endpoint_client.is_registered_library(&unregistered));
|
|
14
|
+
assert_eq!(endpoint_client.get_library_index(&unregistered), None);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// The get_library_index returns Some(index) after successful registration
|
|
18
|
+
#[test]
|
|
19
|
+
fn test_get_library_index_for_registered_library_is_some() {
|
|
20
|
+
let context = setup();
|
|
21
|
+
let env = &context.env;
|
|
22
|
+
let endpoint_client = &context.endpoint_client;
|
|
23
|
+
|
|
24
|
+
let lib = env.register(MockValidMessageLib, ());
|
|
25
|
+
|
|
26
|
+
context.register_library_with_auth(&lib);
|
|
27
|
+
|
|
28
|
+
assert!(endpoint_client.is_registered_library(&lib));
|
|
29
|
+
assert_eq!(endpoint_client.get_library_index(&lib), Some(0));
|
|
30
|
+
assert_eq!(endpoint_client.registered_libraries_count(), 1);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Indices are sequential and stable across multiple registrations
|
|
34
|
+
#[test]
|
|
35
|
+
fn test_get_library_index_multiple_libraries_are_sequential() {
|
|
36
|
+
let context = setup();
|
|
37
|
+
let env = &context.env;
|
|
38
|
+
let endpoint_client = &context.endpoint_client;
|
|
39
|
+
|
|
40
|
+
let lib0 = env.register(MockValidMessageLib, ());
|
|
41
|
+
let lib1 = env.register(MockValidMessageLib, ());
|
|
42
|
+
let lib2 = env.register(MockValidMessageLib, ());
|
|
43
|
+
|
|
44
|
+
context.register_library_with_auth(&lib0);
|
|
45
|
+
context.register_library_with_auth(&lib1);
|
|
46
|
+
context.register_library_with_auth(&lib2);
|
|
47
|
+
|
|
48
|
+
assert_eq!(endpoint_client.get_library_index(&lib0), Some(0));
|
|
49
|
+
assert_eq!(endpoint_client.get_library_index(&lib1), Some(1));
|
|
50
|
+
assert_eq!(endpoint_client.get_library_index(&lib2), Some(2));
|
|
51
|
+
assert_eq!(endpoint_client.registered_libraries_count(), 3);
|
|
52
|
+
}
|