@layerzerolabs/protocol-stellar-v2 0.2.21 → 0.2.23
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 +347 -271
- package/.turbo/turbo-lint.log +277 -208
- package/.turbo/turbo-test.log +1700 -1370
- package/Cargo.lock +22 -51
- package/Cargo.toml +6 -1
- package/contracts/common-macros/src/auth.rs +10 -9
- package/contracts/common-macros/src/contract_ttl.rs +1 -4
- package/contracts/common-macros/src/error.rs +1 -3
- package/contracts/common-macros/src/lib.rs +65 -61
- package/contracts/common-macros/src/storage.rs +212 -65
- package/contracts/common-macros/src/tests/auth.rs +75 -6
- package/contracts/common-macros/src/tests/contract_ttl.rs +383 -350
- package/contracts/common-macros/src/tests/error.rs +9 -21
- package/contracts/common-macros/src/tests/lz_contract.rs +80 -0
- package/contracts/common-macros/src/tests/mod.rs +2 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +20 -3
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +28 -1
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap +8 -43
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contracttrait_code.snap +6 -29
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__lz_contract__snapshot_generated_lz_contract_code.snap +31 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_extendable__snapshot_generated_ttl_extendable_code.snap +8 -0
- package/contracts/common-macros/src/tests/storage/extract_fields.rs +87 -0
- package/contracts/common-macros/src/tests/storage/gen_accessor_methods.rs +223 -0
- package/contracts/common-macros/src/tests/storage/gen_args.rs +65 -0
- package/contracts/common-macros/src/tests/storage/gen_enum_variant.rs +78 -0
- package/contracts/common-macros/src/tests/storage/gen_key.rs +108 -0
- package/contracts/common-macros/src/tests/storage/gen_params.rs +105 -0
- package/contracts/common-macros/src/tests/{storage.rs → storage/generate_storage.rs} +54 -129
- package/contracts/common-macros/src/tests/storage/is_primitive_type.rs +48 -0
- package/contracts/common-macros/src/tests/storage/mod.rs +16 -0
- package/contracts/common-macros/src/tests/storage/parse_default.rs +164 -0
- package/contracts/common-macros/src/tests/storage/parse_name.rs +159 -0
- package/contracts/common-macros/src/tests/storage/parse_no_ttl_extension.rs +124 -0
- package/contracts/common-macros/src/tests/storage/parse_storage_type.rs +174 -0
- package/contracts/common-macros/src/tests/storage/snapshots/common_macros__tests__storage__generate_storage__snapshot_generated_storage_code.snap +412 -0
- package/contracts/common-macros/src/tests/storage/storage_kind.rs +39 -0
- package/contracts/common-macros/src/tests/storage/test_setup.rs +25 -0
- package/contracts/common-macros/src/tests/storage/validate_attrs.rs +138 -0
- package/contracts/common-macros/src/tests/storage/variant_config.rs +226 -0
- package/contracts/common-macros/src/tests/test_helpers.rs +4 -10
- package/contracts/common-macros/src/tests/ttl_configurable.rs +2 -2
- package/contracts/common-macros/src/tests/ttl_extendable.rs +32 -0
- package/contracts/common-macros/src/tests/upgradeable.rs +118 -2
- package/contracts/common-macros/src/ttl_configurable.rs +1 -4
- package/contracts/common-macros/src/upgradeable.rs +21 -3
- package/contracts/endpoint-v2/Cargo.toml +0 -4
- package/contracts/endpoint-v2/src/endpoint_v2.rs +37 -17
- package/contracts/endpoint-v2/src/errors.rs +26 -1
- package/contracts/endpoint-v2/src/interfaces/layerzero_endpoint_v2.rs +1 -1
- package/contracts/endpoint-v2/src/interfaces/message_lib_manager.rs +4 -4
- package/contracts/endpoint-v2/src/interfaces/messaging_composer.rs +2 -2
- package/contracts/endpoint-v2/src/lib.rs +0 -1
- package/contracts/endpoint-v2/src/message_lib_manager.rs +39 -8
- package/contracts/endpoint-v2/src/messaging_channel.rs +36 -4
- package/contracts/endpoint-v2/src/messaging_composer.rs +18 -4
- package/contracts/endpoint-v2/src/storage.rs +9 -1
- package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +2 -2
- package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +1 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +2 -2
- package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +3 -3
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +5 -5
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +2 -2
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +5 -5
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +3 -3
- package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +1 -1
- package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +4 -3
- package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +7 -2
- package/contracts/endpoint-v2/src/tests/messaging_composer/mod.rs +4 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +7 -2
- package/contracts/layerzero-views/src/layerzero_view.rs +0 -1
- package/contracts/layerzero-views/src/tests/mod.rs +1 -0
- package/contracts/layerzero-views/src/tests/types_tests.rs +31 -0
- package/contracts/layerzero-views/src/types.rs +2 -3
- package/contracts/macro-integration-tests/tests/runtime/contract_ttl/constructor.rs +61 -0
- package/contracts/macro-integration-tests/tests/runtime/contract_ttl/contract_impl_ttl_extension.rs +97 -0
- package/contracts/macro-integration-tests/tests/runtime/contract_ttl/contract_trait_ttl_extension.rs +99 -0
- package/contracts/macro-integration-tests/tests/runtime/contract_ttl/mod.rs +3 -0
- package/contracts/macro-integration-tests/tests/runtime/lz_contract/mod.rs +5 -0
- package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_default.rs +86 -0
- package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_multisig.rs +47 -0
- package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_multisig_upgradeable.rs +77 -0
- package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_upgradeable.rs +114 -0
- package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_upgradeable_no_migration.rs +105 -0
- package/contracts/macro-integration-tests/tests/runtime/multisig/admin_entrypoints.rs +242 -0
- package/contracts/macro-integration-tests/tests/runtime/multisig/mod.rs +9 -0
- package/contracts/macro-integration-tests/tests/runtime/multisig/self_auth.rs +54 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/initialization.rs +13 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +1 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/ownership_transfer.rs +70 -1
- package/contracts/macro-integration-tests/tests/runtime/ownable/two_step_transfer.rs +219 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/keyed_roundtrip.rs +41 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/ttl_extension.rs +48 -16
- package/contracts/macro-integration-tests/tests/runtime/storage/unkeyed_roundtrip.rs +10 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +96 -3
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +4 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_extendable/extend_instance_ttl.rs +64 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_extendable/mod.rs +16 -0
- package/contracts/macro-integration-tests/tests/runtime/upgradeable/migrate_guard_and_state.rs +305 -0
- package/contracts/macro-integration-tests/tests/runtime/upgradeable/mod.rs +3 -0
- package/contracts/macro-integration-tests/tests/runtime/upgradeable/no_migration.rs +59 -0
- package/contracts/macro-integration-tests/tests/runtime/upgradeable/upgrade_then_migrate.rs +88 -0
- package/contracts/macro-integration-tests/tests/runtime.rs +5 -0
- package/contracts/macro-integration-tests/tests/ui/contract_impl/fail/not_impl_item.rs +6 -0
- package/contracts/macro-integration-tests/tests/ui/contract_impl/fail/not_impl_item.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/contract_impl/pass/basic.rs +102 -0
- package/contracts/macro-integration-tests/tests/ui/contract_trait/fail/not_a_trait.rs +6 -0
- package/contracts/macro-integration-tests/tests/ui/contract_trait/fail/not_a_trait.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/contract_trait/pass/basic.rs +83 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/discriminant_too_large.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/discriminant_too_large.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_enum_input.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_enum_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/pass/basic.rs +22 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/invalid_option.rs +6 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/invalid_option.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/multisig_rejects_ownable_api.rs +20 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/multisig_rejects_ownable_api.stderr +20 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/not_a_struct.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/not_a_struct.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_invalid_inner_option.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_invalid_inner_option.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_missing_internal.rs +20 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_missing_internal.stderr +86 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/basic.rs +45 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/multisig.rs +34 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/multisig_upgradeable.rs +30 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/upgradeable.rs +39 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/upgradeable_no_migration.rs +28 -0
- package/contracts/macro-integration-tests/tests/ui/multisig/fail/non_struct_input.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/multisig/fail/non_struct_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_api.rs +20 -0
- package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_api.stderr +12 -0
- package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_trait.rs +20 -0
- package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_trait.stderr +5 -0
- package/contracts/macro-integration-tests/tests/ui/multisig/pass/basic.rs +49 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/non_struct_input.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/non_struct_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_auth.rs +19 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_auth.stderr +12 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.rs +1 -1
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.stderr +0 -8
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/basic.rs +39 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_auth_env_param_variants.rs +7 -1
- package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.stderr +1 -1
- package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.stderr +1 -1
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_default_values.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_default_values.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_name_attrs.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_name_attrs.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_no_ttl_extension.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_no_ttl_extension.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.stderr +1 -1
- package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_rejects_args.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_rejects_args.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/api_surface.rs +102 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/basic.rs +43 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/multi_key.rs +38 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/missing_auth_trait.rs +14 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/missing_auth_trait.stderr +71 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/non_struct_input.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/non_struct_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/{minimal_contract.rs → basic.rs} +2 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/multisig_contract.rs +28 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/ownable_contract.rs +32 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_extendable/fail/non_struct_input.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_extendable/fail/non_struct_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_extendable/pass/basic.rs +23 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_extendable/pass/no_user_contractimpl.rs +21 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/attr_args.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/attr_args.stderr +29 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_auth_trait.rs +20 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_auth_trait.stderr +71 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_upgradeable_internal.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_upgradeable_internal.stderr +79 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/non_struct_input.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/non_struct_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/basic.rs +43 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/multisig_contract.rs +35 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/no_migration.rs +30 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/no_user_contractimpl.rs +29 -0
- package/contracts/macro-integration-tests/tests/ui_contract_impl.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui_contract_trait.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui_lz_contract.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_multisig.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_ttl_extendable.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui_upgradeable.rs +11 -0
- package/contracts/message-libs/blocked-message-lib/Cargo.toml +1 -1
- package/contracts/message-libs/blocked-message-lib/src/lib.rs +4 -1
- package/contracts/message-libs/blocked-message-lib/src/tests/blocked_message_lib_tests.rs +108 -0
- package/contracts/message-libs/blocked-message-lib/src/tests/mod.rs +4 -0
- package/contracts/message-libs/blocked-message-lib/src/tests/setup.rs +40 -0
- package/contracts/message-libs/simple-message-lib/src/lib.rs +1 -1
- package/contracts/message-libs/simple-message-lib/src/tests/mod.rs +2 -0
- package/contracts/message-libs/simple-message-lib/src/tests/setup.rs +124 -0
- package/contracts/message-libs/simple-message-lib/src/tests/simple_message_lib_tests.rs +309 -0
- package/contracts/message-libs/uln-302/src/errors.rs +21 -0
- package/contracts/message-libs/uln-302/src/interfaces/receive_uln.rs +1 -1
- package/contracts/message-libs/uln-302/src/receive_uln.rs +6 -4
- package/contracts/message-libs/uln-302/src/send_uln.rs +15 -6
- package/contracts/message-libs/uln-302/src/storage.rs +5 -5
- package/contracts/message-libs/uln-302/src/tests/uln302/get_config.rs +71 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/mod.rs +1 -0
- package/contracts/message-libs/uln-302/src/uln302.rs +3 -0
- package/contracts/oapps/counter/Cargo.toml +2 -0
- package/contracts/oapps/counter/integration_tests/mod.rs +1 -0
- package/contracts/oapps/counter/integration_tests/setup_sml.rs +6 -4
- package/contracts/oapps/counter/integration_tests/setup_uln.rs +12 -5
- package/contracts/oapps/counter/integration_tests/test_with_blocked.rs +67 -0
- package/contracts/oapps/counter/src/tests/mod.rs +1 -0
- package/contracts/oapps/counter/src/tests/test_u256_ext.rs +48 -0
- package/contracts/oapps/oapp/src/lib.rs +0 -3
- package/contracts/oapps/oapp/src/tests/mod.rs +1 -0
- package/contracts/oapps/oft/integration-tests/setup.rs +2 -3
- package/contracts/oapps/oft/src/lib.rs +3 -0
- package/contracts/oapps/oft/src/tests/extensions/mod.rs +3 -0
- package/contracts/oapps/oft/src/tests/extensions/oft_fee.rs +240 -0
- package/contracts/oapps/oft/src/tests/extensions/pausable.rs +141 -0
- package/contracts/oapps/oft/src/tests/extensions/rate_limiter.rs +447 -0
- package/contracts/oapps/oft/src/tests/mod.rs +2 -0
- package/contracts/oapps/oft/src/tests/oft_types/lock_unlock.rs +180 -0
- package/contracts/oapps/oft/src/tests/oft_types/mod.rs +1 -0
- package/contracts/oapps/oft-core/integration-tests/setup.rs +2 -3
- package/contracts/oapps/oft-core/src/lib.rs +2 -2
- package/contracts/oapps/oft-core/src/tests/mod.rs +1 -1
- package/contracts/oapps/oft-core/src/tests/{test_oft_version.rs → test_oft_version_and_approval.rs} +9 -0
- package/contracts/oapps/oft-core/src/tests/test_utils.rs +0 -43
- package/contracts/upgrader/src/tests/test_upgrader.rs +18 -0
- package/contracts/utils/src/auth.rs +2 -2
- package/contracts/utils/src/buffer_reader.rs +61 -10
- package/contracts/utils/src/buffer_writer.rs +35 -20
- package/contracts/utils/src/bytes_ext.rs +1 -2
- package/contracts/utils/src/errors.rs +5 -3
- package/contracts/utils/src/multisig.rs +59 -36
- package/contracts/utils/src/option_ext.rs +3 -3
- package/contracts/utils/src/ownable.rs +12 -6
- package/contracts/utils/src/tests/auth.rs +179 -0
- package/contracts/utils/src/tests/buffer_reader.rs +203 -1
- package/contracts/utils/src/tests/buffer_writer.rs +176 -5
- package/contracts/utils/src/tests/mod.rs +2 -0
- package/contracts/utils/src/tests/multisig.rs +170 -141
- package/contracts/utils/src/tests/option_ext.rs +1 -1
- package/contracts/utils/src/tests/ownable.rs +156 -161
- package/contracts/utils/src/tests/test_helper.rs +21 -1
- package/contracts/utils/src/tests/testing_utils.rs +84 -2
- package/contracts/utils/src/tests/ttl_configurable.rs +66 -86
- package/contracts/utils/src/tests/ttl_extendable.rs +64 -0
- package/contracts/utils/src/tests/upgradeable.rs +115 -6
- package/contracts/utils/src/ttl_configurable.rs +22 -12
- package/contracts/utils/src/ttl_extendable.rs +1 -3
- package/contracts/utils/src/upgradeable.rs +21 -24
- package/contracts/workers/dvn/src/auth.rs +1 -1
- package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
- package/contracts/workers/dvn/src/storage.rs +1 -1
- package/contracts/workers/dvn/src/tests/auth.rs +136 -3
- package/contracts/workers/dvn/src/tests/mod.rs +0 -1
- package/contracts/workers/dvn/src/tests/setup.rs +4 -10
- package/contracts/workers/executor-helper/src/tests/executor_helper.rs +279 -0
- package/contracts/workers/executor-helper/src/tests/setup.rs +106 -1
- package/contracts/workers/worker/src/worker.rs +1 -1
- package/docs/oft-guide.md +5 -5
- package/package.json +5 -7
- package/sdk/.turbo/turbo-test.log +662 -466
- package/sdk/LICENSE +23 -0
- package/sdk/dist/generated/bml.d.ts +101 -106
- package/sdk/dist/generated/bml.js +108 -26
- package/sdk/dist/generated/counter.d.ts +123 -484
- package/sdk/dist/generated/counter.js +103 -25
- package/sdk/dist/generated/dvn.d.ts +141 -699
- package/sdk/dist/generated/dvn.js +106 -28
- package/sdk/dist/generated/dvn_fee_lib.d.ts +31 -248
- package/sdk/dist/generated/dvn_fee_lib.js +27 -24
- package/sdk/dist/generated/endpoint.d.ts +158 -836
- package/sdk/dist/generated/endpoint.js +107 -29
- package/sdk/dist/generated/executor.d.ts +139 -671
- package/sdk/dist/generated/executor.js +106 -28
- package/sdk/dist/generated/executor_fee_lib.d.ts +109 -264
- package/sdk/dist/generated/executor_fee_lib.js +106 -28
- package/sdk/dist/generated/executor_helper.d.ts +95 -92
- package/sdk/dist/generated/executor_helper.js +103 -25
- package/sdk/dist/generated/layerzero_view.d.ts +178 -335
- package/sdk/dist/generated/layerzero_view.js +172 -33
- package/sdk/dist/generated/oft.d.ts +137 -680
- package/sdk/dist/generated/oft.js +103 -25
- package/sdk/dist/generated/price_feed.d.ts +45 -444
- package/sdk/dist/generated/price_feed.js +27 -24
- package/sdk/dist/generated/sml.d.ts +119 -428
- package/sdk/dist/generated/sml.js +103 -25
- package/sdk/dist/generated/treasury.d.ts +109 -288
- package/sdk/dist/generated/treasury.js +103 -25
- package/sdk/dist/generated/uln302.d.ts +190 -527
- package/sdk/dist/generated/uln302.js +170 -31
- package/sdk/dist/generated/upgrader.d.ts +14 -34
- package/sdk/dist/generated/upgrader.js +24 -21
- package/sdk/package.json +3 -4
- package/sdk/test/counter-sml.test.ts +218 -142
- package/sdk/test/counter-uln.test.ts +189 -145
- package/sdk/test/oft-sml.test.ts +173 -156
- package/sdk/test/suites/constants.ts +7 -1
- package/sdk/test/suites/globalSetup.ts +140 -74
- package/sdk/turbo.json +1 -1
- package/tools/ts-bindings-gen/Cargo.toml +4 -4
- package/tools/ts-bindings-gen/src/main.rs +4 -0
- package/turbo.json +3 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +0 -1072
- package/contracts/endpoint-v2/src/constants.rs +0 -52
- package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.rs +0 -12
- package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.stderr +0 -7
- package/contracts/macro-integration-tests/tests/ui/error/pass/attr_on_variant_allowed.rs +0 -20
- package/contracts/macro-integration-tests/tests/ui/error/pass/basic_auto_discriminants.rs +0 -15
- package/contracts/macro-integration-tests/tests/ui/error/pass/mixed_discriminants.rs +0 -16
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/minimal_contract.rs +0 -26
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +0 -21
- package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.rs +0 -12
- package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.stderr +0 -7
- package/contracts/macro-integration-tests/tests/ui/storage/pass/default_value_on_variant.rs +0 -14
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_instance_unit_basic.rs +0 -14
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_persistent_named_fields_keyed.rs +0 -16
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_temporary_unit_option.rs +0 -15
- package/contracts/macro-integration-tests/tests/ui/storage/pass/name_override.rs +0 -14
- package/contracts/macro-integration-tests/tests/ui/storage/pass/no_auto_ttl_extension.rs +0 -19
- package/contracts/macro-integration-tests/tests/ui/storage/pass/ttl_provider_basic.rs +0 -15
- package/contracts/message-libs/simple-message-lib/src/test.rs +0 -280
- package/contracts/oapps/oapp/src/macro_tests/mod.rs +0 -1
- package/contracts/workers/dvn/src/tests/multisig/mod.rs +0 -3
- package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +0 -132
- package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +0 -109
- package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +0 -106
- /package/contracts/oapps/oapp/src/{macro_tests → tests}/test_macros.rs +0 -0
|
@@ -1,33 +1,29 @@
|
|
|
1
|
-
use crate::{
|
|
2
|
-
|
|
3
|
-
auth::{self, Auth},
|
|
4
|
-
errors::UpgradeableError,
|
|
5
|
-
option_ext::OptionExt,
|
|
6
|
-
};
|
|
7
|
-
use common_macros::{contract_trait, storage};
|
|
1
|
+
use crate::{self as utils, auth::Auth, errors::UpgradeableError, option_ext::OptionExt};
|
|
2
|
+
use common_macros::{contract_trait, only_auth, storage};
|
|
8
3
|
use soroban_sdk::{assert_with_error, xdr::FromXdr, Env};
|
|
9
4
|
|
|
10
|
-
// ============================================
|
|
11
|
-
// Upgradeable Interface
|
|
12
|
-
// ============================================
|
|
13
|
-
|
|
14
5
|
/// Trait for contracts with upgrade and migration support.
|
|
6
|
+
///
|
|
7
|
+
/// Implements a two-phase upgrade pattern:
|
|
8
|
+
/// 1. `upgrade` - Updates WASM bytecode and sets migration flag
|
|
9
|
+
/// 2. `migrate` - Runs state migration and clears the flag
|
|
10
|
+
///
|
|
11
|
+
/// Requires implementing [`UpgradeableInternal`] and [`Auth`].
|
|
15
12
|
#[contract_trait]
|
|
16
13
|
pub trait Upgradeable: UpgradeableInternal + Auth {
|
|
17
|
-
/// The type of data required for migration.
|
|
18
14
|
/// Upgrades the contract to new WASM bytecode.
|
|
19
15
|
/// Sets a migration flag that must be cleared by calling `migrate`.
|
|
16
|
+
#[only_auth]
|
|
20
17
|
fn upgrade(env: &soroban_sdk::Env, new_wasm_hash: &soroban_sdk::BytesN<32>) {
|
|
21
|
-
auth::require_auth::<Self>(env);
|
|
22
18
|
assert_with_error!(env, !Self::is_frozen(env), UpgradeableError::UpgradesFrozen);
|
|
23
19
|
UpgradeableStorage::set_migrating(env, &true);
|
|
24
20
|
env.deployer().update_current_contract_wasm(new_wasm_hash.clone());
|
|
25
21
|
}
|
|
26
22
|
|
|
27
23
|
/// Runs migration logic after an upgrade.
|
|
28
|
-
///
|
|
24
|
+
/// Parses XDR-encoded `migration_data` and calls `__migrate`. Clears the migration flag on success.
|
|
25
|
+
#[only_auth]
|
|
29
26
|
fn migrate(env: &soroban_sdk::Env, migration_data: &soroban_sdk::Bytes) {
|
|
30
|
-
auth::require_auth::<Self>(env);
|
|
31
27
|
assert_with_error!(env, UpgradeableStorage::migrating(env), UpgradeableError::MigrationNotAllowed);
|
|
32
28
|
|
|
33
29
|
// Parse the migration data and call the internal migration logic
|
|
@@ -40,10 +36,10 @@ pub trait Upgradeable: UpgradeableInternal + Auth {
|
|
|
40
36
|
UpgradeableStorage::set_migrating(env, &false);
|
|
41
37
|
}
|
|
42
38
|
|
|
43
|
-
/// Permanently freezes the contract, preventing any future upgrades.
|
|
44
|
-
|
|
39
|
+
/// Permanently freezes the contract, preventing any future upgrades. Irreversible.
|
|
40
|
+
#[only_auth]
|
|
45
41
|
fn freeze(env: &soroban_sdk::Env) {
|
|
46
|
-
|
|
42
|
+
assert_with_error!(env, !Self::is_frozen(env), UpgradeableError::UpgradesFrozen);
|
|
47
43
|
UpgradeableStorage::set_frozen(env, &true);
|
|
48
44
|
}
|
|
49
45
|
|
|
@@ -54,27 +50,28 @@ pub trait Upgradeable: UpgradeableInternal + Auth {
|
|
|
54
50
|
}
|
|
55
51
|
|
|
56
52
|
/// Trait for defining contract-specific migration logic.
|
|
57
|
-
///
|
|
53
|
+
/// Must be implemented by contracts using [`Upgradeable`].
|
|
58
54
|
pub trait UpgradeableInternal {
|
|
59
|
-
/// The type
|
|
60
|
-
/// This is the type used as the `migration_data` parameter in `Upgradeable::migrate` for this contract.
|
|
55
|
+
/// The XDR-decodable type for migration data. Use `()` if not needed.
|
|
61
56
|
type MigrationData: FromXdr;
|
|
62
57
|
|
|
63
|
-
///
|
|
58
|
+
/// Migration logic called by `migrate`. Implement state transformations here.
|
|
64
59
|
fn __migrate(env: &Env, migration_data: &Self::MigrationData);
|
|
65
60
|
}
|
|
66
61
|
|
|
67
62
|
// ============================================
|
|
68
|
-
// Storage
|
|
63
|
+
// Storage
|
|
69
64
|
// ============================================
|
|
70
65
|
|
|
71
|
-
/// Storage
|
|
66
|
+
/// Storage for upgrade state.
|
|
72
67
|
#[storage]
|
|
73
68
|
pub enum UpgradeableStorage {
|
|
69
|
+
/// Whether upgrades are permanently disabled.
|
|
74
70
|
#[instance(bool)]
|
|
75
71
|
#[default(false)]
|
|
76
72
|
Frozen,
|
|
77
73
|
|
|
74
|
+
/// Whether a migration is pending.
|
|
78
75
|
#[instance(bool)]
|
|
79
76
|
#[default(false)]
|
|
80
77
|
Migrating,
|
|
@@ -47,7 +47,7 @@ impl CustomAccountInterface for LzDVN {
|
|
|
47
47
|
}
|
|
48
48
|
DvnStorage::set_used_hash(&env, &hash, &true);
|
|
49
49
|
|
|
50
|
-
// 4.
|
|
50
|
+
// 4. MultiSig verification (most expensive - do last)
|
|
51
51
|
Self::verify_signatures(&env, &hash, &signatures);
|
|
52
52
|
|
|
53
53
|
Ok(())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
use message_lib_common::interfaces::ILayerZeroDVN;
|
|
2
2
|
use soroban_sdk::{contractclient, contracttype, Address, BytesN, Env, Symbol, Val, Vec};
|
|
3
|
-
use utils::multisig::
|
|
3
|
+
use utils::multisig::MultiSig;
|
|
4
4
|
use worker::Worker;
|
|
5
5
|
|
|
6
6
|
// ============================================================================
|
|
@@ -82,7 +82,7 @@ pub struct Call {
|
|
|
82
82
|
/// Extends the LayerZero DVN interface with destination configuration management
|
|
83
83
|
/// and multisig capabilities for secure cross-chain message verification.
|
|
84
84
|
#[contractclient(name = "DVNClient")]
|
|
85
|
-
pub trait IDVN: ILayerZeroDVN + Worker +
|
|
85
|
+
pub trait IDVN: ILayerZeroDVN + Worker + MultiSig {
|
|
86
86
|
/// Sets the configuration for one or more destination chains.
|
|
87
87
|
///
|
|
88
88
|
/// # Arguments
|
|
@@ -4,7 +4,7 @@ use soroban_sdk::BytesN;
|
|
|
4
4
|
|
|
5
5
|
/// DVN contract storage keys.
|
|
6
6
|
///
|
|
7
|
-
/// Note:
|
|
7
|
+
/// Note: MultiSig storage (Signers, Threshold) is provided by `utils::multisig::MultiSigStorage`.
|
|
8
8
|
#[storage]
|
|
9
9
|
pub enum DvnStorage {
|
|
10
10
|
/// Verifier ID - unique identifier for this DVN instance.
|
|
@@ -134,15 +134,15 @@ fn test_check_auth_wrong_signer_fails() {
|
|
|
134
134
|
sender: Sender::Admin(public_key, signature),
|
|
135
135
|
};
|
|
136
136
|
|
|
137
|
-
// verify_signatures panics with
|
|
138
|
-
let res = env.try_invoke_contract_check_auth::<utils::errors::
|
|
137
|
+
// verify_signatures panics with MultiSigError::SignerNotFound when signer is not found
|
|
138
|
+
let res = env.try_invoke_contract_check_auth::<utils::errors::MultiSigError>(
|
|
139
139
|
&setup.contract_id,
|
|
140
140
|
&payload,
|
|
141
141
|
tx_auth.into_val(&env),
|
|
142
142
|
&auth_contexts,
|
|
143
143
|
);
|
|
144
144
|
|
|
145
|
-
assert_eq!(res, Err(Ok(utils::errors::
|
|
145
|
+
assert_eq!(res, Err(Ok(utils::errors::MultiSigError::SignerNotFound)));
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
#[test]
|
|
@@ -265,3 +265,136 @@ fn test_check_auth_hash_already_used_fails() {
|
|
|
265
265
|
|
|
266
266
|
assert_eq!(res2, Err(Ok(DvnError::HashAlreadyUsed)));
|
|
267
267
|
}
|
|
268
|
+
|
|
269
|
+
#[test]
|
|
270
|
+
fn test_check_auth_sender_none_fails_when_admin_required() {
|
|
271
|
+
extern crate std;
|
|
272
|
+
use crate::Sender;
|
|
273
|
+
|
|
274
|
+
let setup = TestSetup::new(1);
|
|
275
|
+
let env = setup.env.clone();
|
|
276
|
+
let expiration = env.ledger().timestamp() + 1000;
|
|
277
|
+
let auth_contexts: Vec<Context> = Vec::new(&env);
|
|
278
|
+
|
|
279
|
+
let payload = BytesN::from_array(&env, &[0u8; 32]);
|
|
280
|
+
|
|
281
|
+
let hash = hash_auth_data(&env, VID, expiration, &auth_contexts);
|
|
282
|
+
let sig = setup.key_pairs[0].sign_bytes(&env, &hash);
|
|
283
|
+
|
|
284
|
+
// Use Sender::None which should fail when admin is required
|
|
285
|
+
let tx_auth = TransactionAuthData {
|
|
286
|
+
vid: VID,
|
|
287
|
+
expiration,
|
|
288
|
+
signatures: vec![&env, sig],
|
|
289
|
+
sender: Sender::None,
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
let res = env.try_invoke_contract_check_auth::<DvnError>(
|
|
293
|
+
&setup.contract_id,
|
|
294
|
+
&payload,
|
|
295
|
+
tx_auth.into_val(&env),
|
|
296
|
+
&auth_contexts,
|
|
297
|
+
);
|
|
298
|
+
|
|
299
|
+
assert_eq!(res, Err(Ok(DvnError::OnlyAdmin)));
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
#[test]
|
|
303
|
+
fn test_check_auth_set_admin_bypasses_admin_verification() {
|
|
304
|
+
extern crate std;
|
|
305
|
+
use crate::{Call, LzDVNClient, Sender};
|
|
306
|
+
use soroban_sdk::{auth::ContractContext, Symbol};
|
|
307
|
+
|
|
308
|
+
let setup = TestSetup::new(1);
|
|
309
|
+
let env = setup.env.clone();
|
|
310
|
+
let expiration = env.ledger().timestamp() + 1000;
|
|
311
|
+
|
|
312
|
+
// Create a context for set_admin call on the DVN contract
|
|
313
|
+
let set_admin_context = Context::Contract(ContractContext {
|
|
314
|
+
contract: setup.contract_id.clone(),
|
|
315
|
+
fn_name: Symbol::new(&env, "set_admin"),
|
|
316
|
+
args: Vec::new(&env),
|
|
317
|
+
});
|
|
318
|
+
let auth_contexts: Vec<Context> = vec![&env, set_admin_context.clone()];
|
|
319
|
+
|
|
320
|
+
let payload = BytesN::from_array(&env, &[0u8; 32]);
|
|
321
|
+
|
|
322
|
+
// Create Call structs matching what extract_contract_calls would produce
|
|
323
|
+
let calls: Vec<Call> = vec![
|
|
324
|
+
&env,
|
|
325
|
+
Call {
|
|
326
|
+
to: setup.contract_id.clone(),
|
|
327
|
+
func: Symbol::new(&env, "set_admin"),
|
|
328
|
+
args: Vec::new(&env),
|
|
329
|
+
}
|
|
330
|
+
];
|
|
331
|
+
|
|
332
|
+
// Use the contract's hash_call_data function directly
|
|
333
|
+
let dvn_client = LzDVNClient::new(&env, &setup.contract_id);
|
|
334
|
+
let hash = dvn_client.hash_call_data(&VID, &expiration, &calls);
|
|
335
|
+
let sig = setup.key_pairs[0].sign_bytes(&env, &hash);
|
|
336
|
+
|
|
337
|
+
// Use Sender::None - should succeed for set_admin since it bypasses admin verification
|
|
338
|
+
let tx_auth = TransactionAuthData {
|
|
339
|
+
vid: VID,
|
|
340
|
+
expiration,
|
|
341
|
+
signatures: vec![&env, sig],
|
|
342
|
+
sender: Sender::None,
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
let res = env.try_invoke_contract_check_auth::<DvnError>(
|
|
346
|
+
&setup.contract_id,
|
|
347
|
+
&payload,
|
|
348
|
+
tx_auth.into_val(&env),
|
|
349
|
+
&auth_contexts,
|
|
350
|
+
);
|
|
351
|
+
|
|
352
|
+
// Should succeed because set_admin bypasses admin verification
|
|
353
|
+
assert!(res.is_ok(), "Expected success for set_admin call, got {:?}", res);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
#[test]
|
|
357
|
+
fn test_check_auth_non_contract_context_fails() {
|
|
358
|
+
extern crate std;
|
|
359
|
+
use crate::Sender;
|
|
360
|
+
use soroban_sdk::auth::{ContractExecutable, CreateContractHostFnContext};
|
|
361
|
+
|
|
362
|
+
let admin_kp = Ed25519KeyPair::generate();
|
|
363
|
+
let admin_bytes = admin_kp.public_key_bytes();
|
|
364
|
+
|
|
365
|
+
let setup = TestSetup::with_admin_bytes(1, std::vec![admin_bytes]);
|
|
366
|
+
let env = setup.env.clone();
|
|
367
|
+
let expiration = env.ledger().timestamp() + 1000;
|
|
368
|
+
|
|
369
|
+
// Create a non-Contract context (CreateContractHostFn)
|
|
370
|
+
let non_contract_context = Context::CreateContractHostFn(CreateContractHostFnContext {
|
|
371
|
+
executable: ContractExecutable::Wasm(BytesN::from_array(&env, &[0; 32])),
|
|
372
|
+
salt: BytesN::from_array(&env, &[0; 32]),
|
|
373
|
+
});
|
|
374
|
+
let auth_contexts: Vec<Context> = vec![&env, non_contract_context];
|
|
375
|
+
|
|
376
|
+
let payload = BytesN::from_array(&env, &[0u8; 32]);
|
|
377
|
+
let public_key = admin_kp.public_key(&env);
|
|
378
|
+
let signature = admin_kp.sign(&env, &payload.to_array());
|
|
379
|
+
|
|
380
|
+
// Use empty hash for signatures since we expect early error
|
|
381
|
+
let hash = hash_auth_data(&env, VID, expiration, &auth_contexts);
|
|
382
|
+
let sig = setup.key_pairs[0].sign_bytes(&env, &hash);
|
|
383
|
+
|
|
384
|
+
let tx_auth = TransactionAuthData {
|
|
385
|
+
vid: VID,
|
|
386
|
+
expiration,
|
|
387
|
+
signatures: vec![&env, sig],
|
|
388
|
+
sender: Sender::Admin(public_key, signature),
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
let res = env.try_invoke_contract_check_auth::<DvnError>(
|
|
392
|
+
&setup.contract_id,
|
|
393
|
+
&payload,
|
|
394
|
+
tx_auth.into_val(&env),
|
|
395
|
+
&auth_contexts,
|
|
396
|
+
);
|
|
397
|
+
|
|
398
|
+
// Should fail with NonContractInvoke error
|
|
399
|
+
assert_eq!(res, Err(Ok(DvnError::NonContractInvoke)));
|
|
400
|
+
}
|
|
@@ -5,20 +5,18 @@ extern crate std;
|
|
|
5
5
|
use crate::{dvn::LzDVN, tests::key_pair::KeyPair};
|
|
6
6
|
use soroban_sdk::{address_payload::AddressPayload, testutils::Address as _, vec, Address, BytesN, Env, Vec};
|
|
7
7
|
use std::vec::Vec as StdVec;
|
|
8
|
-
use utils::multisig::MultisigClient;
|
|
9
8
|
|
|
10
9
|
pub const VID: u32 = 1;
|
|
11
10
|
pub const DEFAULT_MULTIPLIER_BPS: u32 = 10000;
|
|
12
11
|
|
|
13
|
-
pub struct TestSetup
|
|
12
|
+
pub struct TestSetup {
|
|
14
13
|
pub env: Env,
|
|
15
14
|
pub contract_id: Address,
|
|
16
|
-
pub multisig_client: MultisigClient<'a>,
|
|
17
15
|
pub key_pairs: StdVec<KeyPair>,
|
|
18
16
|
pub admins: Vec<Address>,
|
|
19
17
|
}
|
|
20
18
|
|
|
21
|
-
impl
|
|
19
|
+
impl TestSetup {
|
|
22
20
|
/// Create a new test setup with the specified number of signers
|
|
23
21
|
/// Threshold defaults to signer_count
|
|
24
22
|
pub fn new(signer_count: u32) -> Self {
|
|
@@ -56,9 +54,7 @@ impl<'a> TestSetup<'a> {
|
|
|
56
54
|
),
|
|
57
55
|
);
|
|
58
56
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
Self { env, contract_id, multisig_client, key_pairs, admins }
|
|
57
|
+
Self { env, contract_id, key_pairs, admins }
|
|
62
58
|
}
|
|
63
59
|
|
|
64
60
|
/// Create a new test setup with additional admins (as Ed25519 public key bytes)
|
|
@@ -98,8 +94,6 @@ impl<'a> TestSetup<'a> {
|
|
|
98
94
|
),
|
|
99
95
|
);
|
|
100
96
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
Self { env, contract_id, multisig_client, key_pairs, admins }
|
|
97
|
+
Self { env, contract_id, key_pairs, admins }
|
|
104
98
|
}
|
|
105
99
|
}
|
|
@@ -182,3 +182,282 @@ fn test_native_drop_with_empty_params() {
|
|
|
182
182
|
assert!(record.is_some());
|
|
183
183
|
assert_eq!(record.unwrap().params.len(), 0);
|
|
184
184
|
}
|
|
185
|
+
|
|
186
|
+
// =============================================================================
|
|
187
|
+
// execute() with value tests
|
|
188
|
+
// =============================================================================
|
|
189
|
+
|
|
190
|
+
#[test]
|
|
191
|
+
fn test_execute_with_value_transfers_tokens() {
|
|
192
|
+
let setup = TestSetup::new();
|
|
193
|
+
let mut params = setup.default_execution_params();
|
|
194
|
+
params.value = 50;
|
|
195
|
+
|
|
196
|
+
// Mint tokens to admin (value payer)
|
|
197
|
+
setup.mint_native(&setup.admin, 100);
|
|
198
|
+
|
|
199
|
+
let admin_before = setup.balance_native(&setup.admin);
|
|
200
|
+
let executor_before = setup.balance_native(&setup.executor);
|
|
201
|
+
|
|
202
|
+
setup.mock_all_auths();
|
|
203
|
+
setup.executor_helper_client.execute(&setup.executor, ¶ms, &setup.admin);
|
|
204
|
+
|
|
205
|
+
// Verify token transfer occurred
|
|
206
|
+
assert_eq!(setup.balance_native(&setup.admin), admin_before - 50);
|
|
207
|
+
assert_eq!(setup.balance_native(&setup.executor), executor_before + 50);
|
|
208
|
+
|
|
209
|
+
// Verify lz_receive was called with correct value
|
|
210
|
+
let record = setup.receiver_client().get_lz_receive();
|
|
211
|
+
assert!(record.is_some());
|
|
212
|
+
assert_eq!(record.unwrap().value, 50);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
#[test]
|
|
216
|
+
fn test_execute_with_exact_balance_value() {
|
|
217
|
+
let setup = TestSetup::new();
|
|
218
|
+
let mut params = setup.default_execution_params();
|
|
219
|
+
params.value = 100;
|
|
220
|
+
|
|
221
|
+
// Mint exactly the amount needed
|
|
222
|
+
setup.mint_native(&setup.admin, 100);
|
|
223
|
+
|
|
224
|
+
setup.mock_all_auths();
|
|
225
|
+
setup.executor_helper_client.execute(&setup.executor, ¶ms, &setup.admin);
|
|
226
|
+
|
|
227
|
+
// Verify all tokens transferred
|
|
228
|
+
assert_eq!(setup.balance_native(&setup.admin), 0);
|
|
229
|
+
assert_eq!(setup.balance_native(&setup.executor), 100);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// =============================================================================
|
|
233
|
+
// compose() with value tests
|
|
234
|
+
// =============================================================================
|
|
235
|
+
|
|
236
|
+
#[test]
|
|
237
|
+
fn test_compose_with_value_transfers_tokens() {
|
|
238
|
+
let setup = TestSetup::new();
|
|
239
|
+
let mut params = setup.default_compose_params();
|
|
240
|
+
params.value = 75;
|
|
241
|
+
|
|
242
|
+
// Mint tokens to admin (value payer)
|
|
243
|
+
setup.mint_native(&setup.admin, 100);
|
|
244
|
+
|
|
245
|
+
let admin_before = setup.balance_native(&setup.admin);
|
|
246
|
+
let executor_before = setup.balance_native(&setup.executor);
|
|
247
|
+
|
|
248
|
+
setup.mock_all_auths();
|
|
249
|
+
setup.executor_helper_client.compose(&setup.executor, ¶ms, &setup.admin);
|
|
250
|
+
|
|
251
|
+
// Verify token transfer occurred
|
|
252
|
+
assert_eq!(setup.balance_native(&setup.admin), admin_before - 75);
|
|
253
|
+
assert_eq!(setup.balance_native(&setup.executor), executor_before + 75);
|
|
254
|
+
|
|
255
|
+
// Verify lz_compose was called with correct value
|
|
256
|
+
let record = setup.composer_client().get_lz_compose();
|
|
257
|
+
assert!(record.is_some());
|
|
258
|
+
assert_eq!(record.unwrap().value, 75);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// =============================================================================
|
|
262
|
+
// lz_receive_alert() tests
|
|
263
|
+
// =============================================================================
|
|
264
|
+
|
|
265
|
+
#[test]
|
|
266
|
+
fn test_lz_receive_alert_records_failure() {
|
|
267
|
+
let setup = TestSetup::new();
|
|
268
|
+
let params = setup.default_execution_params();
|
|
269
|
+
let reason = Bytes::from_slice(&setup.env, b"execution failed: out of gas");
|
|
270
|
+
|
|
271
|
+
setup.executor_helper_client.lz_receive_alert(&setup.executor, ¶ms, &reason);
|
|
272
|
+
|
|
273
|
+
// Verify lz_receive_alert was called on endpoint with correct params
|
|
274
|
+
let record = setup.endpoint_client().get_lz_receive_alert();
|
|
275
|
+
assert!(record.is_some());
|
|
276
|
+
let record = record.unwrap();
|
|
277
|
+
assert_eq!(record.executor, setup.executor);
|
|
278
|
+
assert_eq!(record.origin, params.origin);
|
|
279
|
+
assert_eq!(record.receiver, params.receiver);
|
|
280
|
+
assert_eq!(record.guid, params.guid);
|
|
281
|
+
assert_eq!(record.gas_limit, params.gas_limit);
|
|
282
|
+
assert_eq!(record.value, params.value);
|
|
283
|
+
assert_eq!(record.message, params.message);
|
|
284
|
+
assert_eq!(record.extra_data, params.extra_data);
|
|
285
|
+
assert_eq!(record.reason, reason);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
#[test]
|
|
289
|
+
fn test_lz_receive_alert_with_empty_reason() {
|
|
290
|
+
let setup = TestSetup::new();
|
|
291
|
+
let params = setup.default_execution_params();
|
|
292
|
+
let reason = Bytes::new(&setup.env);
|
|
293
|
+
|
|
294
|
+
setup.executor_helper_client.lz_receive_alert(&setup.executor, ¶ms, &reason);
|
|
295
|
+
|
|
296
|
+
let record = setup.endpoint_client().get_lz_receive_alert();
|
|
297
|
+
assert!(record.is_some());
|
|
298
|
+
assert_eq!(record.unwrap().reason.len(), 0);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// =============================================================================
|
|
302
|
+
// lz_compose_alert() tests
|
|
303
|
+
// =============================================================================
|
|
304
|
+
|
|
305
|
+
#[test]
|
|
306
|
+
fn test_lz_compose_alert_records_failure() {
|
|
307
|
+
let setup = TestSetup::new();
|
|
308
|
+
let params = setup.default_compose_params();
|
|
309
|
+
let reason = Bytes::from_slice(&setup.env, b"compose failed: invalid state");
|
|
310
|
+
|
|
311
|
+
setup.executor_helper_client.lz_compose_alert(&setup.executor, ¶ms, &reason);
|
|
312
|
+
|
|
313
|
+
// Verify lz_compose_alert was called on endpoint with correct params
|
|
314
|
+
let record = setup.endpoint_client().get_lz_compose_alert();
|
|
315
|
+
assert!(record.is_some());
|
|
316
|
+
let record = record.unwrap();
|
|
317
|
+
assert_eq!(record.executor, setup.executor);
|
|
318
|
+
assert_eq!(record.from, params.from);
|
|
319
|
+
assert_eq!(record.to, params.to);
|
|
320
|
+
assert_eq!(record.guid, params.guid);
|
|
321
|
+
assert_eq!(record.index, params.index);
|
|
322
|
+
assert_eq!(record.gas_limit, params.gas_limit);
|
|
323
|
+
assert_eq!(record.value, params.value);
|
|
324
|
+
assert_eq!(record.message, params.message);
|
|
325
|
+
assert_eq!(record.extra_data, params.extra_data);
|
|
326
|
+
assert_eq!(record.reason, reason);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
#[test]
|
|
330
|
+
fn test_lz_compose_alert_with_empty_reason() {
|
|
331
|
+
let setup = TestSetup::new();
|
|
332
|
+
let params = setup.default_compose_params();
|
|
333
|
+
let reason = Bytes::new(&setup.env);
|
|
334
|
+
|
|
335
|
+
setup.executor_helper_client.lz_compose_alert(&setup.executor, ¶ms, &reason);
|
|
336
|
+
|
|
337
|
+
let record = setup.endpoint_client().get_lz_compose_alert();
|
|
338
|
+
assert!(record.is_some());
|
|
339
|
+
assert_eq!(record.unwrap().reason.len(), 0);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// =============================================================================
|
|
343
|
+
// native_drop_and_execute() tests
|
|
344
|
+
// =============================================================================
|
|
345
|
+
|
|
346
|
+
#[test]
|
|
347
|
+
fn test_native_drop_and_execute_calls_both() {
|
|
348
|
+
let setup = TestSetup::new();
|
|
349
|
+
let origin = setup.default_origin();
|
|
350
|
+
let dst_eid = 2u32;
|
|
351
|
+
let oapp = Address::generate(&setup.env);
|
|
352
|
+
|
|
353
|
+
let receiver1 = Address::generate(&setup.env);
|
|
354
|
+
let native_drop_params: Vec<NativeDropParams> =
|
|
355
|
+
vec![&setup.env, NativeDropParams { receiver: receiver1.clone(), amount: 10 }];
|
|
356
|
+
|
|
357
|
+
let execute_params = setup.default_execution_params();
|
|
358
|
+
|
|
359
|
+
setup.mock_all_auths();
|
|
360
|
+
setup.executor_helper_client.native_drop_and_execute(
|
|
361
|
+
&setup.executor,
|
|
362
|
+
&setup.admin,
|
|
363
|
+
&origin,
|
|
364
|
+
&dst_eid,
|
|
365
|
+
&oapp,
|
|
366
|
+
&native_drop_params,
|
|
367
|
+
&execute_params,
|
|
368
|
+
);
|
|
369
|
+
|
|
370
|
+
// Verify native_drop was called
|
|
371
|
+
let drop_record = setup.executor_client().get_native_drop();
|
|
372
|
+
assert!(drop_record.is_some());
|
|
373
|
+
let drop_record = drop_record.unwrap();
|
|
374
|
+
assert_eq!(drop_record.admin, setup.admin);
|
|
375
|
+
assert_eq!(drop_record.origin, origin);
|
|
376
|
+
assert_eq!(drop_record.dst_eid, dst_eid);
|
|
377
|
+
assert_eq!(drop_record.oapp, oapp);
|
|
378
|
+
assert_eq!(drop_record.params.len(), 1);
|
|
379
|
+
assert_eq!(drop_record.params.get(0).unwrap().receiver, receiver1);
|
|
380
|
+
assert_eq!(drop_record.params.get(0).unwrap().amount, 10);
|
|
381
|
+
|
|
382
|
+
// Verify lz_receive was also called
|
|
383
|
+
let receive_record = setup.receiver_client().get_lz_receive();
|
|
384
|
+
assert!(receive_record.is_some());
|
|
385
|
+
let receive_record = receive_record.unwrap();
|
|
386
|
+
assert_eq!(receive_record.executor, setup.executor);
|
|
387
|
+
assert_eq!(receive_record.origin, execute_params.origin);
|
|
388
|
+
assert_eq!(receive_record.guid, execute_params.guid);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
#[test]
|
|
392
|
+
fn test_native_drop_and_execute_with_empty_drop_params() {
|
|
393
|
+
let setup = TestSetup::new();
|
|
394
|
+
let origin = setup.default_origin();
|
|
395
|
+
let dst_eid = 1u32;
|
|
396
|
+
let oapp = Address::generate(&setup.env);
|
|
397
|
+
let native_drop_params: Vec<NativeDropParams> = vec![&setup.env];
|
|
398
|
+
let execute_params = setup.default_execution_params();
|
|
399
|
+
|
|
400
|
+
setup.mock_all_auths();
|
|
401
|
+
setup.executor_helper_client.native_drop_and_execute(
|
|
402
|
+
&setup.executor,
|
|
403
|
+
&setup.admin,
|
|
404
|
+
&origin,
|
|
405
|
+
&dst_eid,
|
|
406
|
+
&oapp,
|
|
407
|
+
&native_drop_params,
|
|
408
|
+
&execute_params,
|
|
409
|
+
);
|
|
410
|
+
|
|
411
|
+
// Verify native_drop was called with empty params
|
|
412
|
+
let drop_record = setup.executor_client().get_native_drop();
|
|
413
|
+
assert!(drop_record.is_some());
|
|
414
|
+
assert_eq!(drop_record.unwrap().params.len(), 0);
|
|
415
|
+
|
|
416
|
+
// Verify lz_receive was still called
|
|
417
|
+
let receive_record = setup.receiver_client().get_lz_receive();
|
|
418
|
+
assert!(receive_record.is_some());
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
#[test]
|
|
422
|
+
fn test_native_drop_and_execute_with_value_transfer() {
|
|
423
|
+
let setup = TestSetup::new();
|
|
424
|
+
let origin = setup.default_origin();
|
|
425
|
+
let dst_eid = 2u32;
|
|
426
|
+
let oapp = Address::generate(&setup.env);
|
|
427
|
+
|
|
428
|
+
let receiver1 = Address::generate(&setup.env);
|
|
429
|
+
let native_drop_params: Vec<NativeDropParams> =
|
|
430
|
+
vec![&setup.env, NativeDropParams { receiver: receiver1.clone(), amount: 10 }];
|
|
431
|
+
|
|
432
|
+
let mut execute_params = setup.default_execution_params();
|
|
433
|
+
execute_params.value = 25; // Add value to trigger token transfer
|
|
434
|
+
|
|
435
|
+
// Mint tokens to admin (value payer)
|
|
436
|
+
setup.mint_native(&setup.admin, 100);
|
|
437
|
+
let admin_before = setup.balance_native(&setup.admin);
|
|
438
|
+
let executor_before = setup.balance_native(&setup.executor);
|
|
439
|
+
|
|
440
|
+
setup.mock_all_auths();
|
|
441
|
+
setup.executor_helper_client.native_drop_and_execute(
|
|
442
|
+
&setup.executor,
|
|
443
|
+
&setup.admin,
|
|
444
|
+
&origin,
|
|
445
|
+
&dst_eid,
|
|
446
|
+
&oapp,
|
|
447
|
+
&native_drop_params,
|
|
448
|
+
&execute_params,
|
|
449
|
+
);
|
|
450
|
+
|
|
451
|
+
// Verify token transfer occurred
|
|
452
|
+
assert_eq!(setup.balance_native(&setup.admin), admin_before - 25);
|
|
453
|
+
assert_eq!(setup.balance_native(&setup.executor), executor_before + 25);
|
|
454
|
+
|
|
455
|
+
// Verify both operations occurred
|
|
456
|
+
let drop_record = setup.executor_client().get_native_drop();
|
|
457
|
+
assert!(drop_record.is_some());
|
|
458
|
+
assert_eq!(drop_record.unwrap().params.len(), 1);
|
|
459
|
+
|
|
460
|
+
let receive_record = setup.receiver_client().get_lz_receive();
|
|
461
|
+
assert!(receive_record.is_some());
|
|
462
|
+
assert_eq!(receive_record.unwrap().value, 25);
|
|
463
|
+
}
|