@layerzerolabs/protocol-stellar-v2 0.2.12 → 0.2.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +384 -278
- package/.turbo/turbo-lint.log +110 -78
- package/.turbo/turbo-test.log +1248 -1014
- package/Cargo.lock +130 -3
- package/Cargo.toml +2 -1
- package/contracts/common-macros/src/contract_impl.rs +6 -1
- package/contracts/common-macros/src/lib.rs +47 -8
- package/contracts/common-macros/src/ownable.rs +7 -25
- package/contracts/common-macros/src/storage.rs +1 -1
- package/contracts/common-macros/src/tests/contract_impl.rs +5 -0
- package/contracts/common-macros/src/tests/mod.rs +1 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap +23 -7
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +5 -25
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +48 -48
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +5 -25
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +21 -0
- package/contracts/common-macros/src/tests/upgradeable.rs +31 -0
- package/contracts/common-macros/src/ttl_configurable.rs +14 -44
- package/contracts/common-macros/src/upgradeable.rs +76 -0
- package/contracts/endpoint-v2/src/endpoint_v2.rs +25 -1
- package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +175 -8
- package/contracts/endpoint-v2/src/tests/endpoint_v2/build_outbound_packet.rs +76 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +342 -159
- package/contracts/endpoint-v2/src/tests/endpoint_v2/delegate.rs +3 -15
- package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +20 -31
- package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +126 -164
- package/contracts/endpoint-v2/src/tests/endpoint_v2/mod.rs +1 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/native_token.rs +0 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/owner.rs +0 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +311 -304
- package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +423 -96
- package/contracts/endpoint-v2/src/tests/endpoint_v2/recover_token.rs +1 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +47 -20
- package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +373 -403
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +96 -22
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +61 -9
- package/contracts/endpoint-v2/src/tests/endpoint_v2/transfer_ownership.rs +4 -4
- package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +8 -11
- package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +81 -30
- package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +209 -76
- package/contracts/endpoint-v2/src/tests/endpoint_v2/zro.rs +0 -1
- package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library.rs +24 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library_timeout.rs +40 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/default_send_library.rs +24 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_config.rs +108 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_library_index.rs +52 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_receive_library.rs +92 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_registered_libraries.rs +74 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_send_library.rs +83 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/is_registered_library.rs +32 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/is_supported_eid.rs +28 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/is_valid_receive_library.rs +261 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/mod.rs +16 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/receive_library_timeout.rs +62 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +65 -43
- package/contracts/endpoint-v2/src/tests/message_lib_manager/registered_libraries_count.rs +42 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +61 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +3 -5
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +59 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +15 -1
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_config.rs +155 -51
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +114 -92
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +235 -132
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +93 -87
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +346 -245
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +406 -60
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +252 -78
- package/contracts/endpoint-v2/src/tests/message_lib_manager/timeout.rs +102 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +212 -273
- package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +203 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +94 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_nonce.rs +78 -248
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +7 -282
- package/contracts/endpoint-v2/src/tests/messaging_channel/lazy_inbound_nonce.rs +6 -274
- package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +3 -2
- package/contracts/endpoint-v2/src/tests/messaging_channel/next_guid.rs +86 -178
- package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +328 -212
- package/contracts/endpoint-v2/src/tests/messaging_channel/outbound.rs +68 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/outbound_nonce.rs +6 -209
- package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +207 -159
- package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +142 -153
- package/contracts/endpoint-v2/src/tests/messaging_composer/compose_queue.rs +6 -179
- package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +163 -221
- package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +90 -121
- package/contracts/endpoint-v2/src/tests/mock.rs +18 -4
- package/contracts/endpoint-v2/src/tests/util/build_payload.rs +4 -70
- package/contracts/endpoint-v2/src/tests/util/compute_guid.rs +2 -1
- package/contracts/endpoint-v2/src/tests/util/keccak256.rs +17 -106
- package/contracts/layerzero-views/Cargo.toml +35 -0
- package/contracts/layerzero-views/src/errors.rs +10 -0
- package/contracts/layerzero-views/src/layerzero_view.rs +229 -0
- package/contracts/layerzero-views/src/lib.rs +38 -0
- package/contracts/layerzero-views/src/storage.rs +18 -0
- package/contracts/layerzero-views/src/tests/layerzero_view_tests.rs +423 -0
- package/contracts/layerzero-views/src/tests/mod.rs +4 -0
- package/contracts/layerzero-views/src/tests/setup.rs +377 -0
- package/contracts/layerzero-views/src/types.rs +50 -0
- package/contracts/macro-integration-tests/Cargo.toml +30 -0
- package/contracts/macro-integration-tests/src/lib.rs +1 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/initialization.rs +62 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +22 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/only_owner_guard.rs +97 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/ownership_transfer.rs +101 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/keyed_roundtrip.rs +225 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/mod.rs +4 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/name_override_runtime.rs +52 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/ttl_extension.rs +261 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/unkeyed_roundtrip.rs +137 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +113 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/extend_instance_ttl.rs +50 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +139 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +3 -0
- package/contracts/macro-integration-tests/tests/runtime.rs +5 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.rs +21 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/pass/attr_on_variant_allowed.rs +20 -0
- package/contracts/macro-integration-tests/tests/ui/error/pass/basic_auto_discriminants.rs +15 -0
- package/contracts/macro-integration-tests/tests/ui/error/pass/mixed_discriminants.rs +16 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_owner_missing_env.rs +22 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_owner_missing_env.stderr +16 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/minimal_contract.rs +26 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +22 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_owner_env_param_variants.rs +46 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/default_value_on_variant.rs +14 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_instance_unit_basic.rs +14 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_persistent_named_fields_keyed.rs +16 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_temporary_unit_option.rs +15 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/name_override.rs +14 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/no_auto_ttl_extension.rs +19 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/ttl_provider_basic.rs +15 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +44 -0
- package/contracts/macro-integration-tests/tests/ui_error.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_ownable.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_storage.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_ttl_configurable.rs +12 -0
- package/contracts/message-libs/blocked-message-lib/src/lib.rs +17 -17
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +64 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet.rs +58 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet_header.rs +138 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/mod.rs +6 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload.rs +30 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload_hash.rs +15 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/test_helper.rs +39 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_dvn_option.rs +57 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +50 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +74 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +280 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +126 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +48 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/mod.rs +7 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +139 -0
- package/contracts/message-libs/message-lib-common/src/worker_options.rs +31 -1
- package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +2 -2
- package/contracts/message-libs/treasury/src/errors.rs +0 -1
- package/contracts/message-libs/treasury/src/lib.rs +3 -3
- package/contracts/message-libs/treasury/src/storage.rs +2 -0
- package/contracts/message-libs/treasury/src/treasury.rs +12 -13
- package/contracts/message-libs/uln-302/Cargo.toml +1 -1
- package/contracts/message-libs/uln-302/src/errors.rs +0 -5
- package/contracts/message-libs/uln-302/src/events.rs +5 -6
- package/contracts/message-libs/uln-302/src/receive_uln.rs +24 -54
- package/contracts/message-libs/uln-302/src/send_uln.rs +89 -135
- package/contracts/message-libs/uln-302/src/storage.rs +5 -5
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +5 -7
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +3 -3
- package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +6 -9
- package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +2 -2
- package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +3 -3
- package/contracts/message-libs/uln-302/src/tests/setup.rs +9 -0
- package/contracts/message-libs/uln-302/src/tests/testing_utils.rs +5 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/get_app_receive_uln_config.rs +1 -2
- package/contracts/message-libs/uln-302/src/tests/uln302/get_app_send_uln_config.rs +1 -2
- package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +37 -55
- package/contracts/message-libs/uln-302/src/uln302.rs +8 -5
- package/contracts/oapps/counter/src/counter.rs +0 -1
- package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +306 -224
- package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +0 -1
- package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +0 -1
- package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +0 -1
- package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +0 -1
- package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_core.rs +1 -0
- package/contracts/oapps/oft/integration-tests/setup.rs +10 -3
- package/contracts/oapps/oft/integration-tests/utils.rs +1 -1
- package/contracts/oapps/oft/src/default_oft_impl.rs +9 -3
- package/contracts/oapps/oft/src/extensions/oft_fee.rs +5 -5
- package/contracts/oapps/oft/src/extensions/pausable.rs +1 -1
- package/contracts/oapps/oft/src/extensions/rate_limiter.rs +18 -18
- package/contracts/oapps/oft/src/oft.rs +9 -9
- package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +1 -1
- package/contracts/oapps/oft/src/tests/extensions/setup.rs +26 -11
- package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +1 -1
- package/contracts/oapps/oft/src/tests/test_send.rs +4 -4
- package/contracts/oapps/oft/src/tests/test_utils.rs +93 -74
- package/contracts/oapps/oft-std/Cargo.toml +6 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/mod.rs +3 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/test_oft_fee.rs +157 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/test_pausable.rs +162 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/test_rate_limiter.rs +186 -0
- package/contracts/oapps/oft-std/integration-tests/mod.rs +3 -0
- package/contracts/oapps/oft-std/integration-tests/setup.rs +245 -0
- package/contracts/oapps/oft-std/integration-tests/utils.rs +427 -0
- package/contracts/oapps/oft-std/src/lib.rs +12 -1
- package/contracts/oapps/oft-std/src/oft.rs +122 -25
- package/contracts/upgrader/Cargo.toml +19 -0
- package/contracts/upgrader/src/lib.rs +96 -0
- package/contracts/upgrader/src/tests/mod.rs +1 -0
- package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract1.wasm +0 -0
- package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract2.wasm +0 -0
- package/contracts/upgrader/src/tests/test_upgrader.rs +120 -0
- package/contracts/utils/src/errors.rs +6 -1
- package/contracts/utils/src/lib.rs +2 -1
- package/contracts/utils/src/ownable.rs +49 -61
- package/contracts/utils/src/tests/mod.rs +3 -1
- package/contracts/utils/src/tests/option_ext.rs +21 -0
- package/contracts/utils/src/tests/ownable.rs +10 -69
- package/contracts/utils/src/tests/ttl_configurable.rs +596 -0
- package/contracts/utils/src/tests/upgradeable.rs +288 -0
- package/contracts/utils/src/{ttl.rs → ttl_configurable.rs} +67 -52
- package/contracts/utils/src/upgradeable.rs +54 -0
- package/contracts/workers/dvn/Cargo.toml +1 -1
- package/contracts/workers/dvn/src/auth.rs +21 -32
- package/contracts/workers/dvn/src/dvn.rs +40 -3
- package/contracts/workers/dvn/src/errors.rs +1 -0
- package/contracts/workers/dvn/src/multisig.rs +10 -6
- package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +2 -2
- package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +4 -4
- package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -2
- package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +46 -14
- package/contracts/workers/dvn-fee-lib/src/errors.rs +3 -2
- package/contracts/workers/dvn-fee-lib/src/lib.rs +5 -11
- package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +30 -16
- package/contracts/workers/executor/src/executor.rs +16 -2
- package/contracts/workers/executor-fee-lib/src/errors.rs +9 -7
- package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +154 -119
- package/contracts/workers/executor-helper/Cargo.toml +0 -5
- package/contracts/workers/executor-helper/src/lib.rs +1 -7
- package/contracts/workers/price-feed/Cargo.toml +0 -1
- package/contracts/workers/price-feed/src/errors.rs +3 -2
- package/contracts/workers/price-feed/src/lib.rs +5 -6
- package/contracts/workers/price-feed/src/price_feed.rs +39 -17
- package/contracts/workers/worker/Cargo.toml +4 -0
- package/contracts/workers/worker/src/interfaces/price_feed.rs +3 -3
- package/contracts/workers/worker/src/lib.rs +2 -2
- package/contracts/workers/worker/src/tests/mod.rs +4 -0
- package/contracts/workers/worker/src/tests/setup.rs +147 -0
- package/contracts/workers/worker/src/tests/worker.rs +501 -0
- package/contracts/workers/worker/src/worker.rs +10 -16
- package/package.json +3 -3
- package/sdk/dist/generated/bml.d.ts +40 -30
- package/sdk/dist/generated/bml.js +16 -11
- package/sdk/dist/generated/counter.d.ts +168 -134
- package/sdk/dist/generated/counter.js +26 -21
- package/sdk/dist/generated/dvn.d.ts +1932 -0
- package/sdk/dist/generated/dvn.js +288 -0
- package/sdk/dist/generated/dvn_fee_lib.d.ts +615 -0
- package/sdk/dist/generated/dvn_fee_lib.js +123 -0
- package/sdk/dist/generated/endpoint.d.ts +75 -41
- package/sdk/dist/generated/endpoint.js +22 -17
- package/sdk/dist/generated/executor.d.ts +1809 -0
- package/sdk/dist/generated/executor.js +269 -0
- package/sdk/dist/generated/executor_fee_lib.d.ts +999 -0
- package/sdk/dist/generated/executor_fee_lib.js +208 -0
- package/sdk/dist/generated/executor_helper.d.ts +869 -0
- package/sdk/dist/generated/executor_helper.js +187 -0
- package/sdk/dist/generated/oft_std.d.ts +1544 -0
- package/sdk/dist/generated/oft_std.js +271 -0
- package/sdk/dist/generated/price_feed.d.ts +1002 -0
- package/sdk/dist/generated/price_feed.js +170 -0
- package/sdk/dist/generated/sml.d.ts +75 -41
- package/sdk/dist/generated/sml.js +22 -17
- package/sdk/dist/generated/uln302.d.ts +79 -60
- package/sdk/dist/generated/uln302.js +37 -37
- package/sdk/dist/generated/upgrader.d.ts +70 -0
- package/sdk/dist/generated/upgrader.js +19 -0
- package/sdk/dist/index.d.ts +8 -0
- package/sdk/dist/index.js +11 -0
- package/sdk/package.json +4 -3
- package/sdk/src/index.ts +13 -0
- package/sdk/test/index.test.ts +0 -1
- package/sdk/test/oft.test.ts +12 -23
- package/sdk/test/suites/testUpgradeable.ts +169 -0
- package/sdk/test/upgrader.test.ts +309 -0
- package/tools/ts-bindings-gen/src/main.rs +11 -1
- package/contracts/endpoint-v2/src/tests/messaging_channel/clear.rs +0 -316
- package/contracts/endpoint-v2/src/tests/messaging_channel/internal.rs +0 -388
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +0 -162
- package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +0 -319
- package/contracts/utils/src/tests/ttl.rs +0 -421
- /package/contracts/{oapp-macros → oapps/oapp-macros}/Cargo.toml +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/lib.rs +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_full.rs +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_options_type3.rs +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_receiver.rs +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_sender.rs +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/util.rs +0 -0
|
@@ -1,40 +1,50 @@
|
|
|
1
|
-
use
|
|
2
|
-
|
|
1
|
+
use soroban_sdk::{testutils::Address as _, Address, Env, Vec};
|
|
2
|
+
|
|
3
|
+
use crate::{
|
|
4
|
+
tests::endpoint_setup::{setup, TestSetup},
|
|
5
|
+
EndpointV2, FeeRecipient,
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
fn fee_recipients(env: &Env, recipients: &[(&Address, i128)]) -> Vec<FeeRecipient> {
|
|
9
|
+
let mut v = Vec::new(env);
|
|
10
|
+
for (to, amount) in recipients {
|
|
11
|
+
v.push_back(FeeRecipient { to: (*to).clone(), amount: *amount });
|
|
12
|
+
}
|
|
13
|
+
v
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
fn pay_messaging_fees(
|
|
17
|
+
context: &TestSetup,
|
|
18
|
+
pay_in_zro: bool,
|
|
19
|
+
native_fee_recipients: &Vec<FeeRecipient>,
|
|
20
|
+
zro_fee_recipients: &Vec<FeeRecipient>,
|
|
21
|
+
refund_address: &Address,
|
|
22
|
+
) -> crate::MessagingFee {
|
|
23
|
+
let env = &context.env;
|
|
24
|
+
let endpoint_addr = &context.endpoint_client.address;
|
|
25
|
+
env.as_contract(endpoint_addr, || {
|
|
26
|
+
EndpointV2::pay_messaging_fees(env, pay_in_zro, native_fee_recipients, zro_fee_recipients, refund_address)
|
|
27
|
+
})
|
|
28
|
+
}
|
|
3
29
|
|
|
30
|
+
// Native fee distribution (payments + refunds)
|
|
4
31
|
#[test]
|
|
5
32
|
fn test_pay_native_fees_exact_amount() {
|
|
6
33
|
let context = setup();
|
|
7
34
|
let env = &context.env;
|
|
8
|
-
let endpoint_client = &context.endpoint_client;
|
|
9
35
|
let recipient = Address::generate(env);
|
|
10
36
|
let refund_address = Address::generate(env);
|
|
11
37
|
|
|
12
|
-
// Setup: Mint native tokens to endpoint
|
|
13
|
-
context.mint_native(&endpoint_client.address, 100);
|
|
14
|
-
|
|
15
|
-
let
|
|
16
|
-
|
|
17
|
-
let
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
let fee = env.as_contract(&endpoint_client.address, || {
|
|
21
|
-
EndpointV2::pay_messaging_fees(
|
|
22
|
-
env,
|
|
23
|
-
false,
|
|
24
|
-
&send_result.native_fee_recipients,
|
|
25
|
-
&send_result.zro_fee_recipients,
|
|
26
|
-
&refund_address,
|
|
27
|
-
)
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
// Verify fee was calculated correctly
|
|
38
|
+
// Setup: Mint native tokens to the endpoint contract.
|
|
39
|
+
context.mint_native(&context.endpoint_client.address, 100);
|
|
40
|
+
|
|
41
|
+
let native_fee_recipients = fee_recipients(env, &[(&recipient, 100)]);
|
|
42
|
+
let zro_fee_recipients = Vec::new(env);
|
|
43
|
+
let fee = pay_messaging_fees(&context, false, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
44
|
+
|
|
31
45
|
assert_eq!(fee.native_fee, 100);
|
|
32
46
|
assert_eq!(fee.zro_fee, 0);
|
|
33
|
-
|
|
34
|
-
// Verify recipient received payment
|
|
35
47
|
assert_eq!(context.native_token_client.balance(&recipient), 100);
|
|
36
|
-
|
|
37
|
-
// Verify no refund
|
|
38
48
|
assert_eq!(context.native_token_client.balance(&refund_address), 0);
|
|
39
49
|
}
|
|
40
50
|
|
|
@@ -42,77 +52,143 @@ fn test_pay_native_fees_exact_amount() {
|
|
|
42
52
|
fn test_pay_native_fees_with_refund() {
|
|
43
53
|
let context = setup();
|
|
44
54
|
let env = &context.env;
|
|
45
|
-
let endpoint_client = &context.endpoint_client;
|
|
46
55
|
let recipient = Address::generate(env);
|
|
47
56
|
let refund_address = Address::generate(env);
|
|
48
57
|
|
|
49
|
-
// Setup: Mint more native tokens than needed
|
|
50
|
-
context.mint_native(&endpoint_client.address, 200);
|
|
51
|
-
|
|
52
|
-
let
|
|
53
|
-
|
|
54
|
-
let
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
let fee = env.as_contract(&endpoint_client.address, || {
|
|
58
|
-
EndpointV2::pay_messaging_fees(
|
|
59
|
-
env,
|
|
60
|
-
false,
|
|
61
|
-
&send_result.native_fee_recipients,
|
|
62
|
-
&send_result.zro_fee_recipients,
|
|
63
|
-
&refund_address,
|
|
64
|
-
)
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
// Verify fee was calculated correctly
|
|
58
|
+
// Setup: Mint more native tokens than needed.
|
|
59
|
+
context.mint_native(&context.endpoint_client.address, 200);
|
|
60
|
+
|
|
61
|
+
let native_fee_recipients = fee_recipients(env, &[(&recipient, 100)]);
|
|
62
|
+
let zro_fee_recipients = Vec::new(env);
|
|
63
|
+
let fee = pay_messaging_fees(&context, false, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
64
|
+
|
|
68
65
|
assert_eq!(fee.native_fee, 100);
|
|
69
66
|
assert_eq!(fee.zro_fee, 0);
|
|
70
|
-
|
|
71
|
-
// Verify recipient received payment
|
|
72
67
|
assert_eq!(context.native_token_client.balance(&recipient), 100);
|
|
68
|
+
assert_eq!(context.native_token_client.balance(&refund_address), 100);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
#[test]
|
|
72
|
+
fn test_pay_multiple_recipients_same_token() {
|
|
73
|
+
let context = setup();
|
|
74
|
+
let env = &context.env;
|
|
75
|
+
let recipient1 = Address::generate(env);
|
|
76
|
+
let recipient2 = Address::generate(env);
|
|
77
|
+
let recipient3 = Address::generate(env);
|
|
78
|
+
let refund_address = Address::generate(env);
|
|
79
|
+
|
|
80
|
+
// Setup: Mint native tokens.
|
|
81
|
+
context.mint_native(&context.endpoint_client.address, 300);
|
|
82
|
+
|
|
83
|
+
let native_fee_recipients = fee_recipients(env, &[(&recipient1, 100), (&recipient2, 150), (&recipient3, 50)]);
|
|
84
|
+
let zro_fee_recipients = Vec::new(env);
|
|
85
|
+
let fee = pay_messaging_fees(&context, false, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
86
|
+
|
|
87
|
+
assert_eq!(fee.native_fee, 300);
|
|
88
|
+
assert_eq!(fee.zro_fee, 0);
|
|
89
|
+
assert_eq!(context.native_token_client.balance(&recipient1), 100);
|
|
90
|
+
assert_eq!(context.native_token_client.balance(&recipient2), 150);
|
|
91
|
+
assert_eq!(context.native_token_client.balance(&recipient3), 50);
|
|
92
|
+
assert_eq!(context.native_token_client.balance(&refund_address), 0);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
#[test]
|
|
96
|
+
fn test_pay_fees_with_zero_amounts_skipped() {
|
|
97
|
+
let context = setup();
|
|
98
|
+
let env = &context.env;
|
|
99
|
+
let recipient1 = Address::generate(env);
|
|
100
|
+
let recipient2 = Address::generate(env);
|
|
101
|
+
let refund_address = Address::generate(env);
|
|
102
|
+
|
|
103
|
+
// Setup: Mint native tokens.
|
|
104
|
+
context.mint_native(&context.endpoint_client.address, 100);
|
|
105
|
+
|
|
106
|
+
let native_fee_recipients = fee_recipients(env, &[(&recipient1, 100), (&recipient2, 0)]); // Zero amount.
|
|
107
|
+
let zro_fee_recipients = Vec::new(env);
|
|
108
|
+
let fee = pay_messaging_fees(&context, false, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
109
|
+
|
|
110
|
+
assert_eq!(fee.native_fee, 100);
|
|
111
|
+
assert_eq!(fee.zro_fee, 0);
|
|
112
|
+
assert_eq!(context.native_token_client.balance(&recipient1), 100);
|
|
113
|
+
assert_eq!(context.native_token_client.balance(&recipient2), 0);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
#[test]
|
|
117
|
+
fn test_pay_native_fees_all_zero_amounts_refunds_all_native() {
|
|
118
|
+
let context = setup();
|
|
119
|
+
let env = &context.env;
|
|
120
|
+
let recipient1 = Address::generate(env);
|
|
121
|
+
let recipient2 = Address::generate(env);
|
|
122
|
+
let refund_address = Address::generate(env);
|
|
123
|
+
|
|
124
|
+
// Setup: Mint native tokens to the endpoint contract.
|
|
125
|
+
context.mint_native(&context.endpoint_client.address, 100);
|
|
73
126
|
|
|
74
|
-
//
|
|
127
|
+
// All recipients have amount=0, so no native fees are paid and all native balance is refunded.
|
|
128
|
+
let native_fee_recipients = fee_recipients(env, &[(&recipient1, 0), (&recipient2, 0)]);
|
|
129
|
+
let zro_fee_recipients = Vec::new(env);
|
|
130
|
+
let fee = pay_messaging_fees(&context, false, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
131
|
+
|
|
132
|
+
assert_eq!(fee.native_fee, 0);
|
|
133
|
+
assert_eq!(fee.zro_fee, 0);
|
|
134
|
+
assert_eq!(context.native_token_client.balance(&recipient1), 0);
|
|
135
|
+
assert_eq!(context.native_token_client.balance(&recipient2), 0);
|
|
75
136
|
assert_eq!(context.native_token_client.balance(&refund_address), 100);
|
|
76
137
|
}
|
|
77
138
|
|
|
139
|
+
#[test]
|
|
140
|
+
fn test_pay_fees_with_empty_recipients() {
|
|
141
|
+
let context = setup();
|
|
142
|
+
let env = &context.env;
|
|
143
|
+
let refund_address = Address::generate(env);
|
|
144
|
+
|
|
145
|
+
// Setup: Mint tokens.
|
|
146
|
+
context.mint_native(&context.endpoint_client.address, 100);
|
|
147
|
+
|
|
148
|
+
let native_fee_recipients = Vec::new(env);
|
|
149
|
+
let zro_fee_recipients = Vec::new(env);
|
|
150
|
+
let fee = pay_messaging_fees(&context, false, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
151
|
+
|
|
152
|
+
assert_eq!(fee.native_fee, 0);
|
|
153
|
+
assert_eq!(fee.zro_fee, 0);
|
|
154
|
+
assert_eq!(context.native_token_client.balance(&refund_address), 100);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
#[test]
|
|
158
|
+
#[should_panic(expected = "Error(Contract, #6)")] // EndpointError::InsufficientNativeFee
|
|
159
|
+
fn test_panic_pay_native_fees_insufficient_balance() {
|
|
160
|
+
let context = setup();
|
|
161
|
+
let env = &context.env;
|
|
162
|
+
let recipient = Address::generate(env);
|
|
163
|
+
let refund_address = Address::generate(env);
|
|
164
|
+
|
|
165
|
+
// Setup: Mint less native balance than required by the recipients list.
|
|
166
|
+
context.mint_native(&context.endpoint_client.address, 50);
|
|
167
|
+
|
|
168
|
+
let native_fee_recipients = fee_recipients(env, &[(&recipient, 100)]);
|
|
169
|
+
let zro_fee_recipients = Vec::new(env);
|
|
170
|
+
|
|
171
|
+
pay_messaging_fees(&context, false, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// ZRO fee distribution (payments + refunds)
|
|
78
175
|
#[test]
|
|
79
176
|
fn test_pay_zro_fees_exact_amount() {
|
|
80
177
|
let context = setup();
|
|
81
178
|
let env = &context.env;
|
|
82
|
-
let endpoint_client = &context.endpoint_client;
|
|
83
179
|
let recipient = Address::generate(env);
|
|
84
180
|
let refund_address = Address::generate(env);
|
|
85
181
|
|
|
86
|
-
|
|
87
|
-
context.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
let mut zro_fee_recipients = Vec::new(env);
|
|
94
|
-
zro_fee_recipients.push_back(FeeRecipient { to: recipient.clone(), amount: 50 });
|
|
95
|
-
let send_result =
|
|
96
|
-
FeesAndPacket { native_fee_recipients: Vec::new(env), zro_fee_recipients, encoded_packet: Bytes::new(env) };
|
|
97
|
-
|
|
98
|
-
let fee = env.as_contract(&endpoint_client.address, || {
|
|
99
|
-
EndpointV2::pay_messaging_fees(
|
|
100
|
-
env,
|
|
101
|
-
true,
|
|
102
|
-
&send_result.native_fee_recipients,
|
|
103
|
-
&send_result.zro_fee_recipients,
|
|
104
|
-
&refund_address,
|
|
105
|
-
)
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
// Verify fee was calculated correctly
|
|
182
|
+
context.setup_zro_with_auth();
|
|
183
|
+
context.mint_zro(&context.endpoint_client.address, 50);
|
|
184
|
+
|
|
185
|
+
let native_fee_recipients = Vec::new(env);
|
|
186
|
+
let zro_fee_recipients = fee_recipients(env, &[(&recipient, 50)]);
|
|
187
|
+
let fee = pay_messaging_fees(&context, true, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
188
|
+
|
|
109
189
|
assert_eq!(fee.native_fee, 0);
|
|
110
190
|
assert_eq!(fee.zro_fee, 50);
|
|
111
|
-
|
|
112
|
-
// Verify recipient received payment
|
|
113
191
|
assert_eq!(context.zro_token_client.balance(&recipient), 50);
|
|
114
|
-
|
|
115
|
-
// Verify no refund
|
|
116
192
|
assert_eq!(context.zro_token_client.balance(&refund_address), 0);
|
|
117
193
|
}
|
|
118
194
|
|
|
@@ -120,305 +196,236 @@ fn test_pay_zro_fees_exact_amount() {
|
|
|
120
196
|
fn test_pay_zro_fees_with_refund() {
|
|
121
197
|
let context = setup();
|
|
122
198
|
let env = &context.env;
|
|
123
|
-
let endpoint_client = &context.endpoint_client;
|
|
124
199
|
let recipient = Address::generate(env);
|
|
125
200
|
let refund_address = Address::generate(env);
|
|
126
201
|
|
|
127
|
-
|
|
128
|
-
context.
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
let mut zro_fee_recipients = Vec::new(env);
|
|
135
|
-
zro_fee_recipients.push_back(FeeRecipient { to: recipient.clone(), amount: 50 });
|
|
136
|
-
let send_result =
|
|
137
|
-
FeesAndPacket { native_fee_recipients: Vec::new(env), zro_fee_recipients, encoded_packet: Bytes::new(env) };
|
|
138
|
-
|
|
139
|
-
let fee = env.as_contract(&endpoint_client.address, || {
|
|
140
|
-
EndpointV2::pay_messaging_fees(
|
|
141
|
-
env,
|
|
142
|
-
true,
|
|
143
|
-
&send_result.native_fee_recipients,
|
|
144
|
-
&send_result.zro_fee_recipients,
|
|
145
|
-
&refund_address,
|
|
146
|
-
)
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
// Verify fee was calculated correctly
|
|
202
|
+
context.setup_zro_with_auth();
|
|
203
|
+
context.mint_zro(&context.endpoint_client.address, 100);
|
|
204
|
+
|
|
205
|
+
let native_fee_recipients = Vec::new(env);
|
|
206
|
+
let zro_fee_recipients = fee_recipients(env, &[(&recipient, 50)]);
|
|
207
|
+
let fee = pay_messaging_fees(&context, true, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
208
|
+
|
|
150
209
|
assert_eq!(fee.native_fee, 0);
|
|
151
210
|
assert_eq!(fee.zro_fee, 50);
|
|
152
|
-
|
|
153
|
-
// Verify recipient received payment
|
|
154
211
|
assert_eq!(context.zro_token_client.balance(&recipient), 50);
|
|
155
|
-
|
|
156
|
-
// Verify refund (100 - 50 = 50)
|
|
157
212
|
assert_eq!(context.zro_token_client.balance(&refund_address), 50);
|
|
158
213
|
}
|
|
159
214
|
|
|
160
215
|
#[test]
|
|
161
|
-
fn
|
|
216
|
+
fn test_pay_zro_fees_multiple_recipients_zero_amounts_skipped_and_refunded() {
|
|
162
217
|
let context = setup();
|
|
163
218
|
let env = &context.env;
|
|
164
|
-
let
|
|
165
|
-
let
|
|
166
|
-
let
|
|
219
|
+
let recipient1 = Address::generate(env);
|
|
220
|
+
let recipient2 = Address::generate(env);
|
|
221
|
+
let recipient3 = Address::generate(env);
|
|
167
222
|
let refund_address = Address::generate(env);
|
|
168
223
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
// Mint both types of tokens
|
|
174
|
-
context.mint_native(&endpoint_client.address, 100);
|
|
175
|
-
context.mint_zro(&endpoint_client.address, 50);
|
|
176
|
-
|
|
177
|
-
let mut native_fee_recipients = Vec::new(env);
|
|
178
|
-
native_fee_recipients.push_back(FeeRecipient { to: native_recipient.clone(), amount: 100 });
|
|
179
|
-
let mut zro_fee_recipients = Vec::new(env);
|
|
180
|
-
zro_fee_recipients.push_back(FeeRecipient { to: zro_recipient.clone(), amount: 50 });
|
|
181
|
-
let send_result = FeesAndPacket { native_fee_recipients, zro_fee_recipients, encoded_packet: Bytes::new(env) };
|
|
182
|
-
|
|
183
|
-
let fee = env.as_contract(&endpoint_client.address, || {
|
|
184
|
-
EndpointV2::pay_messaging_fees(
|
|
185
|
-
env,
|
|
186
|
-
true,
|
|
187
|
-
&send_result.native_fee_recipients,
|
|
188
|
-
&send_result.zro_fee_recipients,
|
|
189
|
-
&refund_address,
|
|
190
|
-
)
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
// Verify fees were calculated correctly
|
|
194
|
-
assert_eq!(fee.native_fee, 100);
|
|
195
|
-
assert_eq!(fee.zro_fee, 50);
|
|
224
|
+
context.setup_zro_with_auth();
|
|
225
|
+
// Mint more ZRO than needed to ensure we exercise the refund path.
|
|
226
|
+
context.mint_zro(&context.endpoint_client.address, 100);
|
|
196
227
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
228
|
+
let native_fee_recipients = Vec::new(env);
|
|
229
|
+
let zro_fee_recipients = fee_recipients(env, &[(&recipient1, 40), (&recipient2, 0), (&recipient3, 50)]);
|
|
230
|
+
let fee = pay_messaging_fees(&context, true, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
200
231
|
|
|
201
|
-
|
|
202
|
-
assert_eq!(
|
|
203
|
-
assert_eq!(context.zro_token_client.balance(&
|
|
232
|
+
assert_eq!(fee.native_fee, 0);
|
|
233
|
+
assert_eq!(fee.zro_fee, 90);
|
|
234
|
+
assert_eq!(context.zro_token_client.balance(&recipient1), 40);
|
|
235
|
+
assert_eq!(context.zro_token_client.balance(&recipient2), 0);
|
|
236
|
+
assert_eq!(context.zro_token_client.balance(&recipient3), 50);
|
|
237
|
+
assert_eq!(context.zro_token_client.balance(&refund_address), 10); // 100 - 90
|
|
204
238
|
}
|
|
205
239
|
|
|
240
|
+
// ZRO prerequisites / edge cases
|
|
206
241
|
#[test]
|
|
207
|
-
|
|
242
|
+
#[should_panic(expected = "Error(Contract, #24)")] // EndpointError::ZROUnavailable
|
|
243
|
+
fn test_panic_pay_in_zro_without_zro_configured() {
|
|
208
244
|
let context = setup();
|
|
209
245
|
let env = &context.env;
|
|
210
|
-
let endpoint_client = &context.endpoint_client;
|
|
211
|
-
let recipient1 = Address::generate(env);
|
|
212
|
-
let recipient2 = Address::generate(env);
|
|
213
|
-
let recipient3 = Address::generate(env);
|
|
214
246
|
let refund_address = Address::generate(env);
|
|
215
247
|
|
|
216
|
-
//
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
native_fee_recipients.push_back(FeeRecipient { to: recipient2.clone(), amount: 150 });
|
|
222
|
-
native_fee_recipients.push_back(FeeRecipient { to: recipient3.clone(), amount: 50 });
|
|
223
|
-
let send_result =
|
|
224
|
-
FeesAndPacket { native_fee_recipients, zro_fee_recipients: Vec::new(env), encoded_packet: Bytes::new(env) };
|
|
225
|
-
|
|
226
|
-
let fee = env.as_contract(&endpoint_client.address, || {
|
|
227
|
-
EndpointV2::pay_messaging_fees(
|
|
228
|
-
env,
|
|
229
|
-
false,
|
|
230
|
-
&send_result.native_fee_recipients,
|
|
231
|
-
&send_result.zro_fee_recipients,
|
|
232
|
-
&refund_address,
|
|
233
|
-
)
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
// Verify total fee
|
|
237
|
-
assert_eq!(fee.native_fee, 300);
|
|
238
|
-
assert_eq!(fee.zro_fee, 0);
|
|
248
|
+
// pay_in_zro=true without configuring the ZRO token must panic.
|
|
249
|
+
let native_fee_recipients = Vec::new(env);
|
|
250
|
+
let zro_fee_recipients = Vec::new(env);
|
|
251
|
+
pay_messaging_fees(&context, true, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
252
|
+
}
|
|
239
253
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
254
|
+
#[test]
|
|
255
|
+
#[should_panic(expected = "Error(Contract, #23)")] // EndpointError::ZeroZROFee
|
|
256
|
+
fn test_panic_pay_in_zro_with_zero_zro_balance() {
|
|
257
|
+
let context = setup();
|
|
258
|
+
let env = &context.env;
|
|
259
|
+
let refund_address = Address::generate(env);
|
|
244
260
|
|
|
245
|
-
|
|
246
|
-
|
|
261
|
+
context.setup_zro_with_auth();
|
|
262
|
+
// Note: no ZRO is minted to the endpoint contract, so its ZRO balance is 0.
|
|
263
|
+
|
|
264
|
+
let native_fee_recipients = Vec::new(env);
|
|
265
|
+
let recipient = Address::generate(env);
|
|
266
|
+
let zro_fee_recipients = fee_recipients(env, &[(&recipient, 1)]);
|
|
267
|
+
|
|
268
|
+
pay_messaging_fees(&context, true, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
247
269
|
}
|
|
248
270
|
|
|
249
271
|
#[test]
|
|
250
|
-
fn
|
|
272
|
+
fn test_pay_in_zro_with_empty_zro_recipients_refunds_all_zro() {
|
|
251
273
|
let context = setup();
|
|
252
274
|
let env = &context.env;
|
|
253
|
-
let endpoint_client = &context.endpoint_client;
|
|
254
|
-
let recipient1 = Address::generate(env);
|
|
255
|
-
let recipient2 = Address::generate(env);
|
|
256
275
|
let refund_address = Address::generate(env);
|
|
257
276
|
|
|
258
|
-
|
|
259
|
-
context.
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
native_fee_recipients
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
env,
|
|
270
|
-
false,
|
|
271
|
-
&send_result.native_fee_recipients,
|
|
272
|
-
&send_result.zro_fee_recipients,
|
|
273
|
-
&refund_address,
|
|
274
|
-
)
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
// Verify only non-zero fees were paid
|
|
278
|
-
assert_eq!(fee.native_fee, 100);
|
|
279
|
-
assert_eq!(context.native_token_client.balance(&recipient1), 100);
|
|
280
|
-
assert_eq!(context.native_token_client.balance(&recipient2), 0);
|
|
277
|
+
context.setup_zro_with_auth();
|
|
278
|
+
context.mint_zro(&context.endpoint_client.address, 40);
|
|
279
|
+
|
|
280
|
+
// No ZRO recipients => no ZRO payments, but remaining ZRO must be refunded.
|
|
281
|
+
let native_fee_recipients = Vec::new(env);
|
|
282
|
+
let zro_fee_recipients = Vec::new(env);
|
|
283
|
+
|
|
284
|
+
let fee = pay_messaging_fees(&context, true, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
285
|
+
assert_eq!(fee.native_fee, 0);
|
|
286
|
+
assert_eq!(fee.zro_fee, 0);
|
|
287
|
+
assert_eq!(context.zro_token_client.balance(&refund_address), 40);
|
|
281
288
|
}
|
|
282
289
|
|
|
283
290
|
#[test]
|
|
284
|
-
|
|
285
|
-
fn test_panic_pay_native_fees_insufficient_balance() {
|
|
291
|
+
fn test_pay_in_zro_with_all_zero_zro_recipients_refunds_all_zro() {
|
|
286
292
|
let context = setup();
|
|
287
293
|
let env = &context.env;
|
|
288
|
-
let
|
|
289
|
-
let
|
|
294
|
+
let recipient1 = Address::generate(env);
|
|
295
|
+
let recipient2 = Address::generate(env);
|
|
290
296
|
let refund_address = Address::generate(env);
|
|
291
297
|
|
|
292
|
-
|
|
293
|
-
context.
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
let
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
&send_result.zro_fee_recipients,
|
|
307
|
-
&refund_address,
|
|
308
|
-
)
|
|
309
|
-
});
|
|
298
|
+
context.setup_zro_with_auth();
|
|
299
|
+
context.mint_zro(&context.endpoint_client.address, 40);
|
|
300
|
+
|
|
301
|
+
// A non-empty recipients list with all amount=0 should behave like an empty list:
|
|
302
|
+
// no ZRO is paid, and all ZRO balance is refunded.
|
|
303
|
+
let native_fee_recipients = Vec::new(env);
|
|
304
|
+
let zro_fee_recipients = fee_recipients(env, &[(&recipient1, 0), (&recipient2, 0)]);
|
|
305
|
+
let fee = pay_messaging_fees(&context, true, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
306
|
+
|
|
307
|
+
assert_eq!(fee.native_fee, 0);
|
|
308
|
+
assert_eq!(fee.zro_fee, 0);
|
|
309
|
+
assert_eq!(context.zro_token_client.balance(&recipient1), 0);
|
|
310
|
+
assert_eq!(context.zro_token_client.balance(&recipient2), 0);
|
|
311
|
+
assert_eq!(context.zro_token_client.balance(&refund_address), 40);
|
|
310
312
|
}
|
|
311
313
|
|
|
312
314
|
#[test]
|
|
313
|
-
#[should_panic(expected = "Error(Contract, #7)")]
|
|
315
|
+
#[should_panic(expected = "Error(Contract, #7)")] // EndpointError::InsufficientZROFee
|
|
314
316
|
fn test_panic_pay_zro_fees_insufficient_balance() {
|
|
315
317
|
let context = setup();
|
|
316
318
|
let env = &context.env;
|
|
317
|
-
let endpoint_client = &context.endpoint_client;
|
|
318
319
|
let recipient = Address::generate(env);
|
|
319
320
|
let refund_address = Address::generate(env);
|
|
320
321
|
|
|
321
|
-
|
|
322
|
-
context.
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
let mut zro_fee_recipients = Vec::new(env);
|
|
329
|
-
zro_fee_recipients.push_back(FeeRecipient { to: recipient.clone(), amount: 50 });
|
|
330
|
-
let send_result =
|
|
331
|
-
FeesAndPacket { native_fee_recipients: Vec::new(env), zro_fee_recipients, encoded_packet: Bytes::new(env) };
|
|
332
|
-
|
|
333
|
-
// Should panic with InsufficientZroFee error (code 28)
|
|
334
|
-
env.as_contract(&endpoint_client.address, || {
|
|
335
|
-
EndpointV2::pay_messaging_fees(
|
|
336
|
-
env,
|
|
337
|
-
true,
|
|
338
|
-
&send_result.native_fee_recipients,
|
|
339
|
-
&send_result.zro_fee_recipients,
|
|
340
|
-
&refund_address,
|
|
341
|
-
)
|
|
342
|
-
});
|
|
322
|
+
context.setup_zro_with_auth();
|
|
323
|
+
context.mint_zro(&context.endpoint_client.address, 25);
|
|
324
|
+
|
|
325
|
+
let native_fee_recipients = Vec::new(env);
|
|
326
|
+
let zro_fee_recipients = fee_recipients(env, &[(&recipient, 50)]);
|
|
327
|
+
|
|
328
|
+
pay_messaging_fees(&context, true, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
343
329
|
}
|
|
344
330
|
|
|
331
|
+
// Mixed native + ZRO fee behavior
|
|
345
332
|
#[test]
|
|
346
|
-
fn
|
|
333
|
+
fn test_pay_mixed_native_and_zro_fees() {
|
|
347
334
|
let context = setup();
|
|
348
335
|
let env = &context.env;
|
|
349
|
-
let
|
|
336
|
+
let native_recipient = Address::generate(env);
|
|
337
|
+
let zro_recipient = Address::generate(env);
|
|
350
338
|
let refund_address = Address::generate(env);
|
|
351
339
|
|
|
352
|
-
|
|
353
|
-
context.mint_native(&endpoint_client.address, 100);
|
|
354
|
-
|
|
355
|
-
let send_result = FeesAndPacket {
|
|
356
|
-
native_fee_recipients: Vec::new(env),
|
|
357
|
-
zro_fee_recipients: Vec::new(env),
|
|
358
|
-
encoded_packet: Bytes::new(env),
|
|
359
|
-
};
|
|
360
|
-
|
|
361
|
-
let fee = env.as_contract(&endpoint_client.address, || {
|
|
362
|
-
EndpointV2::pay_messaging_fees(
|
|
363
|
-
env,
|
|
364
|
-
false,
|
|
365
|
-
&send_result.native_fee_recipients,
|
|
366
|
-
&send_result.zro_fee_recipients,
|
|
367
|
-
&refund_address,
|
|
368
|
-
)
|
|
369
|
-
});
|
|
370
|
-
|
|
371
|
-
// Verify no fees paid
|
|
372
|
-
assert_eq!(fee.native_fee, 0);
|
|
373
|
-
assert_eq!(fee.zro_fee, 0);
|
|
340
|
+
context.setup_zro_with_auth();
|
|
341
|
+
context.mint_native(&context.endpoint_client.address, 100);
|
|
342
|
+
context.mint_zro(&context.endpoint_client.address, 50);
|
|
374
343
|
|
|
375
|
-
|
|
376
|
-
|
|
344
|
+
let native_fee_recipients = fee_recipients(env, &[(&native_recipient, 100)]);
|
|
345
|
+
let zro_fee_recipients = fee_recipients(env, &[(&zro_recipient, 50)]);
|
|
346
|
+
let fee = pay_messaging_fees(&context, true, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
347
|
+
|
|
348
|
+
assert_eq!(fee.native_fee, 100);
|
|
349
|
+
assert_eq!(fee.zro_fee, 50);
|
|
350
|
+
assert_eq!(context.native_token_client.balance(&native_recipient), 100);
|
|
351
|
+
assert_eq!(context.zro_token_client.balance(&zro_recipient), 50);
|
|
352
|
+
assert_eq!(context.native_token_client.balance(&refund_address), 0);
|
|
353
|
+
assert_eq!(context.zro_token_client.balance(&refund_address), 0);
|
|
377
354
|
}
|
|
378
355
|
|
|
379
356
|
#[test]
|
|
380
357
|
fn test_pay_fees_with_mixed_zero_and_nonzero_amounts() {
|
|
381
358
|
let context = setup();
|
|
382
359
|
let env = &context.env;
|
|
383
|
-
let endpoint_client = &context.endpoint_client;
|
|
384
360
|
let recipient1 = Address::generate(env);
|
|
385
361
|
let recipient2 = Address::generate(env);
|
|
386
362
|
let recipient3 = Address::generate(env);
|
|
387
363
|
let refund_address = Address::generate(env);
|
|
388
364
|
|
|
389
|
-
|
|
390
|
-
context.
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
let
|
|
396
|
-
|
|
397
|
-
let mut zro_fee_recipients = Vec::new(env);
|
|
398
|
-
zro_fee_recipients.push_back(FeeRecipient { to: recipient2.clone(), amount: 0 }); // Zero ZRO
|
|
399
|
-
zro_fee_recipients.push_back(FeeRecipient { to: recipient3.clone(), amount: 50 });
|
|
400
|
-
let send_result = FeesAndPacket { native_fee_recipients, zro_fee_recipients, encoded_packet: Bytes::new(env) };
|
|
401
|
-
|
|
402
|
-
let fee = env.as_contract(&endpoint_client.address, || {
|
|
403
|
-
EndpointV2::pay_messaging_fees(
|
|
404
|
-
env,
|
|
405
|
-
true,
|
|
406
|
-
&send_result.native_fee_recipients,
|
|
407
|
-
&send_result.zro_fee_recipients,
|
|
408
|
-
&refund_address,
|
|
409
|
-
)
|
|
410
|
-
});
|
|
411
|
-
|
|
412
|
-
// Verify fees
|
|
365
|
+
context.setup_zro_with_auth();
|
|
366
|
+
context.mint_native(&context.endpoint_client.address, 150);
|
|
367
|
+
context.mint_zro(&context.endpoint_client.address, 75);
|
|
368
|
+
|
|
369
|
+
let native_fee_recipients = fee_recipients(env, &[(&recipient1, 100)]);
|
|
370
|
+
let zro_fee_recipients = fee_recipients(env, &[(&recipient2, 0), (&recipient3, 50)]); // Zero ZRO.
|
|
371
|
+
let fee = pay_messaging_fees(&context, true, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
372
|
+
|
|
413
373
|
assert_eq!(fee.native_fee, 100);
|
|
414
374
|
assert_eq!(fee.zro_fee, 50);
|
|
415
|
-
|
|
416
|
-
// Verify payments
|
|
417
375
|
assert_eq!(context.native_token_client.balance(&recipient1), 100);
|
|
418
376
|
assert_eq!(context.zro_token_client.balance(&recipient2), 0);
|
|
419
377
|
assert_eq!(context.zro_token_client.balance(&recipient3), 50);
|
|
420
|
-
|
|
421
|
-
// Verify refunds (150-100=50 native, 75-50=25 zro)
|
|
422
378
|
assert_eq!(context.native_token_client.balance(&refund_address), 50);
|
|
423
379
|
assert_eq!(context.zro_token_client.balance(&refund_address), 25);
|
|
424
380
|
}
|
|
381
|
+
|
|
382
|
+
#[test]
|
|
383
|
+
fn test_pay_in_zro_still_refunds_native_balance() {
|
|
384
|
+
let context = setup();
|
|
385
|
+
let env = &context.env;
|
|
386
|
+
let refund_address = Address::generate(env);
|
|
387
|
+
|
|
388
|
+
context.setup_zro_with_auth();
|
|
389
|
+
|
|
390
|
+
// Mint native to the endpoint but provide no native recipients => all native is refunded.
|
|
391
|
+
context.mint_native(&context.endpoint_client.address, 100);
|
|
392
|
+
|
|
393
|
+
// Also pay a ZRO fee to ensure the ZRO path executes normally.
|
|
394
|
+
context.mint_zro(&context.endpoint_client.address, 50);
|
|
395
|
+
let zro_recipient = Address::generate(env);
|
|
396
|
+
|
|
397
|
+
let native_fee_recipients = Vec::new(env);
|
|
398
|
+
let zro_fee_recipients = fee_recipients(env, &[(&zro_recipient, 50)]);
|
|
399
|
+
|
|
400
|
+
let fee = pay_messaging_fees(&context, true, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
401
|
+
assert_eq!(fee.native_fee, 0);
|
|
402
|
+
assert_eq!(fee.zro_fee, 50);
|
|
403
|
+
|
|
404
|
+
// Native refund happens even when pay_in_zro=true.
|
|
405
|
+
assert_eq!(context.native_token_client.balance(&refund_address), 100);
|
|
406
|
+
assert_eq!(context.zro_token_client.balance(&refund_address), 0);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// The pay_in_zro flag behavior
|
|
410
|
+
#[test]
|
|
411
|
+
fn test_pay_in_native_does_not_touch_zro_even_if_provided() {
|
|
412
|
+
let context = setup();
|
|
413
|
+
let env = &context.env;
|
|
414
|
+
let refund_address = Address::generate(env);
|
|
415
|
+
|
|
416
|
+
// Mint ZRO to endpoint, but pay_in_zro=false should ignore ZRO recipients/balances entirely.
|
|
417
|
+
context.mint_zro(&context.endpoint_client.address, 30);
|
|
418
|
+
|
|
419
|
+
let native_fee_recipients = Vec::new(env);
|
|
420
|
+
let zro_recipient = Address::generate(env);
|
|
421
|
+
let zro_fee_recipients = fee_recipients(env, &[(&zro_recipient, 10)]);
|
|
422
|
+
|
|
423
|
+
let fee = pay_messaging_fees(&context, false, &native_fee_recipients, &zro_fee_recipients, &refund_address);
|
|
424
|
+
assert_eq!(fee.native_fee, 0);
|
|
425
|
+
assert_eq!(fee.zro_fee, 0);
|
|
426
|
+
|
|
427
|
+
// No ZRO payments or refunds when pay_in_zro=false.
|
|
428
|
+
assert_eq!(context.zro_token_client.balance(&zro_recipient), 0);
|
|
429
|
+
assert_eq!(context.zro_token_client.balance(&refund_address), 0);
|
|
430
|
+
assert_eq!(context.zro_token_client.balance(&context.endpoint_client.address), 30);
|
|
431
|
+
}
|