@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
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// Runtime tests: `#[ttl_extendable]` behavior (manual instance TTL extension).
|
|
2
|
+
|
|
3
|
+
use super::{TestContract, TestContractClient};
|
|
4
|
+
use soroban_sdk::testutils::{storage::Instance as _, Ledger as _};
|
|
5
|
+
use soroban_sdk::Env;
|
|
6
|
+
use utils::ttl_configurable::{TtlConfig, TtlConfigStorage};
|
|
7
|
+
|
|
8
|
+
#[test]
|
|
9
|
+
fn extend_instance_ttl_extends_instance_storage() {
|
|
10
|
+
let env = Env::default();
|
|
11
|
+
let contract_id = env.register(TestContract, ());
|
|
12
|
+
let client = TestContractClient::new(&env, &contract_id);
|
|
13
|
+
|
|
14
|
+
// Ensure instance storage exists.
|
|
15
|
+
client.touch();
|
|
16
|
+
|
|
17
|
+
let before = env.as_contract(&contract_id, || env.storage().instance().get_ttl());
|
|
18
|
+
let before_seq = env.ledger().sequence();
|
|
19
|
+
let live_until = before_seq + before;
|
|
20
|
+
|
|
21
|
+
// Move ledger forward so current TTL equals a small number, then extend.
|
|
22
|
+
let threshold = 1u32;
|
|
23
|
+
env.ledger().set_sequence_number(live_until.saturating_sub(threshold));
|
|
24
|
+
let extend_to = threshold + 50;
|
|
25
|
+
|
|
26
|
+
client.extend_instance_ttl(&threshold, &extend_to);
|
|
27
|
+
|
|
28
|
+
let after = env.as_contract(&contract_id, || env.storage().instance().get_ttl());
|
|
29
|
+
assert_eq!(after, extend_to);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
#[test]
|
|
33
|
+
fn extend_instance_ttl_does_not_auto_extend_from_config() {
|
|
34
|
+
let env = Env::default();
|
|
35
|
+
let contract_id = env.register(TestContract, ());
|
|
36
|
+
let client = TestContractClient::new(&env, &contract_id);
|
|
37
|
+
|
|
38
|
+
// Ensure instance storage exists so TTL is meaningful.
|
|
39
|
+
client.touch();
|
|
40
|
+
|
|
41
|
+
// Capture current TTL and compute live_until.
|
|
42
|
+
let before = env.as_contract(&contract_id, || env.storage().instance().get_ttl());
|
|
43
|
+
let before_seq = env.ledger().sequence();
|
|
44
|
+
let live_until = before_seq + before;
|
|
45
|
+
|
|
46
|
+
// Configure an instance TTL auto-extension config that would trigger at threshold=10 and extend to before+100.
|
|
47
|
+
// NOTE: `#[ttl_extendable]` intentionally uses `#[soroban_sdk::contractimpl]` (not `common_macros::contract_impl`),
|
|
48
|
+
// so calling `extend_instance_ttl` should NOT also run any auto-TTL extension logic.
|
|
49
|
+
let cfg = TtlConfig::new(10, before + 100);
|
|
50
|
+
env.as_contract(&contract_id, || {
|
|
51
|
+
TtlConfigStorage::set_instance(&env, &cfg);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// Move ledger so current TTL equals cfg.threshold (this is the would-be auto-extension trigger point).
|
|
55
|
+
env.ledger().set_sequence_number(live_until.saturating_sub(cfg.threshold));
|
|
56
|
+
|
|
57
|
+
// Call manual extension with a threshold that should NOT trigger (0), regardless of extend_to.
|
|
58
|
+
client.extend_instance_ttl(&0, &9999);
|
|
59
|
+
|
|
60
|
+
// If auto-extension were incorrectly injected, TTL would become cfg.extend_to.
|
|
61
|
+
// Instead, it should remain at the current TTL (cfg.threshold).
|
|
62
|
+
let after = env.as_contract(&contract_id, || env.storage().instance().get_ttl());
|
|
63
|
+
assert_eq!(after, cfg.threshold);
|
|
64
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
use soroban_sdk::{contract, Env};
|
|
2
|
+
|
|
3
|
+
mod extend_instance_ttl;
|
|
4
|
+
|
|
5
|
+
/// Shared contract used by ttl_extendable runtime tests.
|
|
6
|
+
#[contract]
|
|
7
|
+
#[common_macros::ttl_extendable]
|
|
8
|
+
pub struct TestContract;
|
|
9
|
+
|
|
10
|
+
#[soroban_sdk::contractimpl]
|
|
11
|
+
impl TestContract {
|
|
12
|
+
pub fn touch(env: Env) {
|
|
13
|
+
// Create some instance storage state so instance TTL is meaningful.
|
|
14
|
+
env.storage().instance().set(&soroban_sdk::Symbol::new(&env, "touched"), &true);
|
|
15
|
+
}
|
|
16
|
+
}
|
package/contracts/macro-integration-tests/tests/runtime/upgradeable/migrate_guard_and_state.rs
ADDED
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
// Runtime tests: `#[upgradeable]` + `#[only_auth]` behavior and migration state wiring.
|
|
2
|
+
//
|
|
3
|
+
// We avoid exercising `env.deployer().update_current_contract_wasm(...)` directly by setting
|
|
4
|
+
// the migrating flag via storage; the purpose here is to verify macro-generated wiring:
|
|
5
|
+
// - `upgrade`/`migrate` are generated as contract entrypoints
|
|
6
|
+
// - both are guarded by `#[only_auth]`
|
|
7
|
+
// - `migrate` delegates to `utils::upgradeable::migrate::<Self>` with correct MigrationData
|
|
8
|
+
|
|
9
|
+
use soroban_sdk::{
|
|
10
|
+
contract, contractimpl,
|
|
11
|
+
testutils::{Address as _, MockAuth, MockAuthInvoke},
|
|
12
|
+
xdr::ToXdr,
|
|
13
|
+
xdr::{ScErrorCode, ScErrorType},
|
|
14
|
+
Address, Bytes, BytesN, Env, Error, IntoVal, Val,
|
|
15
|
+
};
|
|
16
|
+
use utils::upgradeable::{UpgradeableInternal, UpgradeableStorage};
|
|
17
|
+
use utils::errors::OwnableError;
|
|
18
|
+
|
|
19
|
+
// A small, known-good contract WASM used for upgrade() testing.
|
|
20
|
+
// Sourced from the `upgrader` crate test fixtures.
|
|
21
|
+
const TEST_UPGRADE_WASM: &[u8] =
|
|
22
|
+
include_bytes!("../../../../upgrader/src/tests/test_data/test_upgradeable_contract1.wasm");
|
|
23
|
+
|
|
24
|
+
#[contract]
|
|
25
|
+
#[common_macros::ownable]
|
|
26
|
+
#[common_macros::upgradeable]
|
|
27
|
+
pub struct TestContract;
|
|
28
|
+
|
|
29
|
+
impl UpgradeableInternal for TestContract {
|
|
30
|
+
type MigrationData = u32;
|
|
31
|
+
|
|
32
|
+
fn __migrate(env: &Env, _migration_data: &Self::MigrationData) {
|
|
33
|
+
env.storage().instance().set(&soroban_sdk::Symbol::new(env, "migrated"), &true);
|
|
34
|
+
env.storage().instance().set(&soroban_sdk::Symbol::new(env, "migration_data"), _migration_data);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
#[contractimpl]
|
|
39
|
+
impl TestContract {
|
|
40
|
+
pub fn init(env: Env, owner: Address) {
|
|
41
|
+
Self::init_owner(&env, &owner);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
#[test]
|
|
46
|
+
fn upgrade_is_guarded_by_only_auth() {
|
|
47
|
+
let env = Env::default();
|
|
48
|
+
let contract_id = env.register(TestContract, ());
|
|
49
|
+
let client = TestContractClient::new(&env, &contract_id);
|
|
50
|
+
|
|
51
|
+
let owner = Address::generate(&env);
|
|
52
|
+
let attacker = Address::generate(&env);
|
|
53
|
+
client.init(&owner);
|
|
54
|
+
|
|
55
|
+
// Unauthorized call should fail (guard triggers before any upgrade body work).
|
|
56
|
+
let hash = BytesN::<32>::from_array(&env, &[7u8; 32]);
|
|
57
|
+
let unauthorized = client.try_upgrade(&hash);
|
|
58
|
+
assert_eq!(
|
|
59
|
+
unauthorized.unwrap_err().unwrap(),
|
|
60
|
+
Error::from_type_and_code(ScErrorType::Context, ScErrorCode::InvalidAction)
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
// Wrong-address auth should also fail (auth must be provided by the current owner).
|
|
64
|
+
let wrong_auth = client
|
|
65
|
+
.mock_auths(&[MockAuth {
|
|
66
|
+
address: &attacker,
|
|
67
|
+
invoke: &MockAuthInvoke {
|
|
68
|
+
contract: &contract_id,
|
|
69
|
+
fn_name: "upgrade",
|
|
70
|
+
args: (&hash,).into_val(&env),
|
|
71
|
+
sub_invokes: &[],
|
|
72
|
+
},
|
|
73
|
+
}])
|
|
74
|
+
.try_upgrade(&hash);
|
|
75
|
+
assert_eq!(
|
|
76
|
+
wrong_auth.unwrap_err().unwrap(),
|
|
77
|
+
Error::from_type_and_code(ScErrorType::Context, ScErrorCode::InvalidAction)
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
#[test]
|
|
82
|
+
fn upgrade_sets_migrating_flag_with_auth() {
|
|
83
|
+
let env = Env::default();
|
|
84
|
+
let contract_id = env.register(TestContract, ());
|
|
85
|
+
let client = TestContractClient::new(&env, &contract_id);
|
|
86
|
+
|
|
87
|
+
let owner = Address::generate(&env);
|
|
88
|
+
client.init(&owner);
|
|
89
|
+
|
|
90
|
+
// Upload a real contract WASM so update_current_contract_wasm succeeds.
|
|
91
|
+
let wasm_hash = env.deployer().upload_contract_wasm(Bytes::from_slice(&env, TEST_UPGRADE_WASM));
|
|
92
|
+
|
|
93
|
+
client
|
|
94
|
+
.mock_auths(&[MockAuth {
|
|
95
|
+
address: &owner,
|
|
96
|
+
invoke: &MockAuthInvoke {
|
|
97
|
+
contract: &contract_id,
|
|
98
|
+
fn_name: "upgrade",
|
|
99
|
+
args: (&wasm_hash,).into_val(&env),
|
|
100
|
+
sub_invokes: &[],
|
|
101
|
+
},
|
|
102
|
+
}])
|
|
103
|
+
.upgrade(&wasm_hash);
|
|
104
|
+
|
|
105
|
+
env.as_contract(&contract_id, || {
|
|
106
|
+
assert_eq!(UpgradeableStorage::migrating(&env), true);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
#[test]
|
|
111
|
+
fn migrate_is_guarded_and_obeys_migrating_flag() {
|
|
112
|
+
let env = Env::default();
|
|
113
|
+
let contract_id = env.register(TestContract, ());
|
|
114
|
+
let client = TestContractClient::new(&env, &contract_id);
|
|
115
|
+
|
|
116
|
+
let owner = Address::generate(&env);
|
|
117
|
+
let attacker = Address::generate(&env);
|
|
118
|
+
client.init(&owner);
|
|
119
|
+
let data: u32 = 7;
|
|
120
|
+
let migration_data = data.to_xdr(&env);
|
|
121
|
+
|
|
122
|
+
// Unauthorized migrate should fail.
|
|
123
|
+
let unauthorized = client.try_migrate(&migration_data);
|
|
124
|
+
assert_eq!(
|
|
125
|
+
unauthorized.unwrap_err().unwrap(),
|
|
126
|
+
Error::from_type_and_code(ScErrorType::Context, ScErrorCode::InvalidAction)
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
// Authorized migrate without migrating flag should fail with UpgradeableError.
|
|
130
|
+
let result = client
|
|
131
|
+
.mock_auths(&[MockAuth {
|
|
132
|
+
address: &owner,
|
|
133
|
+
invoke: &MockAuthInvoke {
|
|
134
|
+
contract: &contract_id,
|
|
135
|
+
fn_name: "migrate",
|
|
136
|
+
args: (&migration_data,).into_val(&env),
|
|
137
|
+
sub_invokes: &[],
|
|
138
|
+
},
|
|
139
|
+
}])
|
|
140
|
+
.try_migrate(&migration_data);
|
|
141
|
+
assert_eq!(result.err().unwrap().ok().unwrap(), utils::errors::UpgradeableError::MigrationNotAllowed.into());
|
|
142
|
+
|
|
143
|
+
// Even with migrating flag set, wrong-address auth should fail.
|
|
144
|
+
env.as_contract(&contract_id, || {
|
|
145
|
+
UpgradeableStorage::set_migrating(&env, &true);
|
|
146
|
+
});
|
|
147
|
+
let wrong_auth = client
|
|
148
|
+
.mock_auths(&[MockAuth {
|
|
149
|
+
address: &attacker,
|
|
150
|
+
invoke: &MockAuthInvoke {
|
|
151
|
+
contract: &contract_id,
|
|
152
|
+
fn_name: "migrate",
|
|
153
|
+
args: (&migration_data,).into_val(&env),
|
|
154
|
+
sub_invokes: &[],
|
|
155
|
+
},
|
|
156
|
+
}])
|
|
157
|
+
.try_migrate(&migration_data);
|
|
158
|
+
assert_eq!(
|
|
159
|
+
wrong_auth.unwrap_err().unwrap(),
|
|
160
|
+
Error::from_type_and_code(ScErrorType::Context, ScErrorCode::InvalidAction)
|
|
161
|
+
);
|
|
162
|
+
|
|
163
|
+
// Set migrating flag directly, then migrate should succeed and clear the flag + run __migrate.
|
|
164
|
+
env.as_contract(&contract_id, || {
|
|
165
|
+
UpgradeableStorage::set_migrating(&env, &true);
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
client
|
|
169
|
+
.mock_auths(&[MockAuth {
|
|
170
|
+
address: &owner,
|
|
171
|
+
invoke: &MockAuthInvoke {
|
|
172
|
+
contract: &contract_id,
|
|
173
|
+
fn_name: "migrate",
|
|
174
|
+
args: (&migration_data,).into_val(&env),
|
|
175
|
+
sub_invokes: &[],
|
|
176
|
+
},
|
|
177
|
+
}])
|
|
178
|
+
.migrate(&migration_data);
|
|
179
|
+
|
|
180
|
+
env.as_contract(&contract_id, || {
|
|
181
|
+
assert_eq!(UpgradeableStorage::migrating(&env), false);
|
|
182
|
+
let migrated: Option<bool> = env.storage().instance().get(&soroban_sdk::Symbol::new(&env, "migrated"));
|
|
183
|
+
assert_eq!(migrated, Some(true));
|
|
184
|
+
let stored: Option<u32> = env.storage().instance().get(&soroban_sdk::Symbol::new(&env, "migration_data"));
|
|
185
|
+
assert_eq!(stored, Some(data));
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
#[test]
|
|
190
|
+
fn freeze_is_guarded_and_blocks_upgrade() {
|
|
191
|
+
let env = Env::default();
|
|
192
|
+
let contract_id = env.register(TestContract, ());
|
|
193
|
+
let client = TestContractClient::new(&env, &contract_id);
|
|
194
|
+
|
|
195
|
+
let owner = Address::generate(&env);
|
|
196
|
+
client.init(&owner);
|
|
197
|
+
|
|
198
|
+
// Unauthorized freeze should fail.
|
|
199
|
+
let unauthorized = client.try_freeze();
|
|
200
|
+
assert_eq!(
|
|
201
|
+
unauthorized.unwrap_err().unwrap(),
|
|
202
|
+
Error::from_type_and_code(ScErrorType::Context, ScErrorCode::InvalidAction)
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
// Authorized freeze should succeed.
|
|
206
|
+
client
|
|
207
|
+
.mock_auths(&[MockAuth {
|
|
208
|
+
address: &owner,
|
|
209
|
+
invoke: &MockAuthInvoke {
|
|
210
|
+
contract: &contract_id,
|
|
211
|
+
fn_name: "freeze",
|
|
212
|
+
args: ().into_val(&env),
|
|
213
|
+
sub_invokes: &[],
|
|
214
|
+
},
|
|
215
|
+
}])
|
|
216
|
+
.freeze();
|
|
217
|
+
|
|
218
|
+
env.as_contract(&contract_id, || {
|
|
219
|
+
assert_eq!(UpgradeableStorage::frozen(&env), true);
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
// After freeze, upgrade should fail with UpgradesFrozen (even with auth).
|
|
223
|
+
let hash = BytesN::<32>::from_array(&env, &[7u8; 32]);
|
|
224
|
+
let frozen_upgrade = client
|
|
225
|
+
.mock_auths(&[MockAuth {
|
|
226
|
+
address: &owner,
|
|
227
|
+
invoke: &MockAuthInvoke {
|
|
228
|
+
contract: &contract_id,
|
|
229
|
+
fn_name: "upgrade",
|
|
230
|
+
args: (&hash,).into_val(&env),
|
|
231
|
+
sub_invokes: &[],
|
|
232
|
+
},
|
|
233
|
+
}])
|
|
234
|
+
.try_upgrade(&hash);
|
|
235
|
+
|
|
236
|
+
assert_eq!(
|
|
237
|
+
frozen_upgrade.err().unwrap().ok().unwrap(),
|
|
238
|
+
utils::errors::UpgradeableError::UpgradesFrozen.into()
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
#[test]
|
|
243
|
+
fn upgrade_freeze_and_migrate_fail_before_owner_init() {
|
|
244
|
+
let env = Env::default();
|
|
245
|
+
let contract_id = env.register(TestContract, ());
|
|
246
|
+
let client = TestContractClient::new(&env, &contract_id);
|
|
247
|
+
|
|
248
|
+
// Without owner initialization, authorizer lookup fails (OwnableError::OwnerNotSet),
|
|
249
|
+
// which should surface as a contract error (not Context/InvalidAction).
|
|
250
|
+
let hash = BytesN::<32>::from_array(&env, &[7u8; 32]);
|
|
251
|
+
assert_eq!(client.try_upgrade(&hash).unwrap_err().unwrap(), OwnableError::OwnerNotSet.into());
|
|
252
|
+
|
|
253
|
+
// freeze() should also fail the same way.
|
|
254
|
+
assert_eq!(client.try_freeze().unwrap_err().unwrap(), OwnableError::OwnerNotSet.into());
|
|
255
|
+
|
|
256
|
+
// Even if migrating is set, migrate() still fails before init because auth can't resolve authorizer.
|
|
257
|
+
env.as_contract(&contract_id, || {
|
|
258
|
+
UpgradeableStorage::set_migrating(&env, &true);
|
|
259
|
+
});
|
|
260
|
+
let migration_data = 1u32.to_xdr(&env);
|
|
261
|
+
assert_eq!(
|
|
262
|
+
client.try_migrate(&migration_data).unwrap_err().unwrap(),
|
|
263
|
+
OwnableError::OwnerNotSet.into()
|
|
264
|
+
);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
#[test]
|
|
268
|
+
fn migrate_rejects_invalid_migration_data_and_does_not_clear_flag() {
|
|
269
|
+
let env = Env::default();
|
|
270
|
+
let contract_id = env.register(TestContract, ());
|
|
271
|
+
let client = TestContractClient::new(&env, &contract_id);
|
|
272
|
+
|
|
273
|
+
let owner = Address::generate(&env);
|
|
274
|
+
client.init(&owner);
|
|
275
|
+
|
|
276
|
+
// Allow migrate, then pass invalid bytes (not XDR for u32).
|
|
277
|
+
env.as_contract(&contract_id, || {
|
|
278
|
+
UpgradeableStorage::set_migrating(&env, &true);
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
// Provide auth and pass bytes that are valid XDR but *not* a u32 payload.
|
|
282
|
+
// Using a stable Bytes object avoids mock-arg matching pitfalls.
|
|
283
|
+
let bad_bytes = Val::VOID.to_xdr(&env);
|
|
284
|
+
let res = client
|
|
285
|
+
.mock_auths(&[MockAuth {
|
|
286
|
+
address: &owner,
|
|
287
|
+
invoke: &MockAuthInvoke {
|
|
288
|
+
contract: &contract_id,
|
|
289
|
+
fn_name: "migrate",
|
|
290
|
+
args: (&bad_bytes,).into_val(&env),
|
|
291
|
+
sub_invokes: &[],
|
|
292
|
+
},
|
|
293
|
+
}])
|
|
294
|
+
.try_migrate(&bad_bytes);
|
|
295
|
+
|
|
296
|
+
assert_eq!(
|
|
297
|
+
res.err().unwrap().ok().unwrap(),
|
|
298
|
+
utils::errors::UpgradeableError::InvalidMigrationData.into()
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
// Since migration failed before reaching the "clear flag" line, migrating should still be true.
|
|
302
|
+
env.as_contract(&contract_id, || {
|
|
303
|
+
assert_eq!(UpgradeableStorage::migrating(&env), true);
|
|
304
|
+
});
|
|
305
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Runtime tests: `#[upgradeable(no_migration)]` macro variant.
|
|
2
|
+
//
|
|
3
|
+
// This ensures the macro-generated default `UpgradeableInternal` impl works end-to-end at runtime
|
|
4
|
+
// (i.e. no manual impl required), and that migrate clears the migrating flag.
|
|
5
|
+
|
|
6
|
+
use soroban_sdk::{
|
|
7
|
+
contract, contractimpl,
|
|
8
|
+
testutils::{Address as _, MockAuth, MockAuthInvoke},
|
|
9
|
+
xdr::ToXdr,
|
|
10
|
+
Address, Env, IntoVal,
|
|
11
|
+
};
|
|
12
|
+
use utils::upgradeable::UpgradeableStorage;
|
|
13
|
+
|
|
14
|
+
#[contract]
|
|
15
|
+
#[common_macros::ownable]
|
|
16
|
+
#[common_macros::upgradeable(no_migration)]
|
|
17
|
+
pub struct NoMigrationContract;
|
|
18
|
+
|
|
19
|
+
#[contractimpl]
|
|
20
|
+
impl NoMigrationContract {
|
|
21
|
+
pub fn init(env: Env, owner: Address) {
|
|
22
|
+
Self::init_owner(&env, &owner);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
#[test]
|
|
27
|
+
fn no_migration_contract_can_migrate_and_clears_flag() {
|
|
28
|
+
let env = Env::default();
|
|
29
|
+
let contract_id = env.register(NoMigrationContract, ());
|
|
30
|
+
let client = NoMigrationContractClient::new(&env, &contract_id);
|
|
31
|
+
|
|
32
|
+
let owner = Address::generate(&env);
|
|
33
|
+
client.init(&owner);
|
|
34
|
+
|
|
35
|
+
// Allow migrate.
|
|
36
|
+
env.as_contract(&contract_id, || {
|
|
37
|
+
UpgradeableStorage::set_migrating(&env, &true);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// The no_migration impl uses MigrationData = (), so we pass XDR bytes for ().
|
|
41
|
+
let migration_data = ().to_xdr(&env);
|
|
42
|
+
|
|
43
|
+
client
|
|
44
|
+
.mock_auths(&[MockAuth {
|
|
45
|
+
address: &owner,
|
|
46
|
+
invoke: &MockAuthInvoke {
|
|
47
|
+
contract: &contract_id,
|
|
48
|
+
fn_name: "migrate",
|
|
49
|
+
args: (&migration_data,).into_val(&env),
|
|
50
|
+
sub_invokes: &[],
|
|
51
|
+
},
|
|
52
|
+
}])
|
|
53
|
+
.migrate(&migration_data);
|
|
54
|
+
|
|
55
|
+
env.as_contract(&contract_id, || {
|
|
56
|
+
assert_eq!(UpgradeableStorage::migrating(&env), false);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// Runtime tests: complete upgrade -> migrate flow.
|
|
2
|
+
//
|
|
3
|
+
// Note: `upgrade()` swaps the contract WASM, so the `migrate()` invocation that follows is
|
|
4
|
+
// executed in the *upgraded* WASM. This test therefore uses `MigrationData = ()` to match the
|
|
5
|
+
// upgradeable WASM fixture used in this repo.
|
|
6
|
+
|
|
7
|
+
use soroban_sdk::{
|
|
8
|
+
contract, contractimpl,
|
|
9
|
+
testutils::{Address as _, MockAuth, MockAuthInvoke},
|
|
10
|
+
xdr::ToXdr,
|
|
11
|
+
Address, Bytes, Env, IntoVal,
|
|
12
|
+
};
|
|
13
|
+
use utils::upgradeable::{UpgradeableInternal, UpgradeableStorage};
|
|
14
|
+
|
|
15
|
+
// Upgrade target WASM fixture.
|
|
16
|
+
const TEST_UPGRADE_WASM: &[u8] =
|
|
17
|
+
include_bytes!("../../../../upgrader/src/tests/test_data/test_upgradeable_contract1.wasm");
|
|
18
|
+
|
|
19
|
+
#[contract]
|
|
20
|
+
#[common_macros::ownable]
|
|
21
|
+
#[common_macros::upgradeable]
|
|
22
|
+
pub struct FlowContract;
|
|
23
|
+
|
|
24
|
+
impl UpgradeableInternal for FlowContract {
|
|
25
|
+
type MigrationData = ();
|
|
26
|
+
|
|
27
|
+
fn __migrate(env: &Env, _migration_data: &Self::MigrationData) {
|
|
28
|
+
// Marker in case the upgraded WASM delegates back to our migrate logic.
|
|
29
|
+
env.storage().instance().set(&soroban_sdk::Symbol::new(env, "flow_migrated"), &true);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
#[contractimpl]
|
|
34
|
+
impl FlowContract {
|
|
35
|
+
pub fn init(env: Env, owner: Address) {
|
|
36
|
+
Self::init_owner(&env, &owner);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
#[test]
|
|
41
|
+
fn upgrade_then_migrate_happy_path() {
|
|
42
|
+
let env = Env::default();
|
|
43
|
+
let contract_id = env.register(FlowContract, ());
|
|
44
|
+
let client = FlowContractClient::new(&env, &contract_id);
|
|
45
|
+
|
|
46
|
+
let owner = Address::generate(&env);
|
|
47
|
+
client.init(&owner);
|
|
48
|
+
|
|
49
|
+
// Upload a real contract WASM so update_current_contract_wasm succeeds.
|
|
50
|
+
let wasm_hash = env.deployer().upload_contract_wasm(Bytes::from_slice(&env, TEST_UPGRADE_WASM));
|
|
51
|
+
|
|
52
|
+
// upgrade() should set migrating=true.
|
|
53
|
+
client
|
|
54
|
+
.mock_auths(&[MockAuth {
|
|
55
|
+
address: &owner,
|
|
56
|
+
invoke: &MockAuthInvoke {
|
|
57
|
+
contract: &contract_id,
|
|
58
|
+
fn_name: "upgrade",
|
|
59
|
+
args: (&wasm_hash,).into_val(&env),
|
|
60
|
+
sub_invokes: &[],
|
|
61
|
+
},
|
|
62
|
+
}])
|
|
63
|
+
.upgrade(&wasm_hash);
|
|
64
|
+
|
|
65
|
+
env.as_contract(&contract_id, || {
|
|
66
|
+
assert_eq!(UpgradeableStorage::migrating(&env), true);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
// migrate() should be allowed after upgrade and should clear migrating back to false.
|
|
70
|
+
// The upgraded WASM fixture expects XDR-encoded migration data bytes.
|
|
71
|
+
// (This fixture is shared with `upgrader` tests which pass a u32 migration payload.)
|
|
72
|
+
let migration_data = 1u32.to_xdr(&env);
|
|
73
|
+
client
|
|
74
|
+
.mock_auths(&[MockAuth {
|
|
75
|
+
address: &owner,
|
|
76
|
+
invoke: &MockAuthInvoke {
|
|
77
|
+
contract: &contract_id,
|
|
78
|
+
fn_name: "migrate",
|
|
79
|
+
args: (&migration_data,).into_val(&env),
|
|
80
|
+
sub_invokes: &[],
|
|
81
|
+
},
|
|
82
|
+
}])
|
|
83
|
+
.migrate(&migration_data);
|
|
84
|
+
|
|
85
|
+
env.as_contract(&contract_id, || {
|
|
86
|
+
assert_eq!(UpgradeableStorage::migrating(&env), false);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// UI (trybuild) test: `#[contract_impl]` on an impl block compiles.
|
|
2
|
+
//
|
|
3
|
+
// Purpose:
|
|
4
|
+
// - Verifies `#[common_macros::contract_impl]` can wrap a `impl MyContract { ... }` block.
|
|
5
|
+
// - Covers the "pass" surface area:
|
|
6
|
+
// - Inherent impls: only **public** methods with an `Env` parameter are instrumented.
|
|
7
|
+
// - Trait impls: **all** methods with an `Env` parameter are instrumented.
|
|
8
|
+
// - Methods without `Env` are skipped.
|
|
9
|
+
// - `__constructor` is instrumented to initialize default TTL configs.
|
|
10
|
+
// - `Env` can be passed by `&Env` or `Env` (and must be the first param for soroban `contractimpl`).
|
|
11
|
+
|
|
12
|
+
use soroban_sdk::{contract, contracttrait, Env};
|
|
13
|
+
|
|
14
|
+
#[contract]
|
|
15
|
+
pub struct MyContract;
|
|
16
|
+
|
|
17
|
+
#[common_macros::contract_impl]
|
|
18
|
+
impl MyContract {
|
|
19
|
+
// Public method with `&Env` (instrumented).
|
|
20
|
+
pub fn ping(env: &Env) {
|
|
21
|
+
let _ = env;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Public method with `Env` by value (instrumented).
|
|
25
|
+
pub fn ping_owned(env: Env) {
|
|
26
|
+
let _ = env;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Public method with extra args (still instrumented).
|
|
30
|
+
pub fn ping_with_args(env: Env, x: u32) -> u32 {
|
|
31
|
+
let _ = &env;
|
|
32
|
+
x
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Public method with a fully-qualified Env path (instrumented).
|
|
36
|
+
pub fn ping_fq_env(env: &soroban_sdk::Env) {
|
|
37
|
+
let _ = env;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Public method without `Env` (skipped).
|
|
41
|
+
pub fn no_env(x: u32) -> u32 {
|
|
42
|
+
x
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Constructor is instrumented to initialize default TTL configs.
|
|
46
|
+
// This contract covers the `Env`-by-value variant.
|
|
47
|
+
pub fn __constructor(env: Env) {
|
|
48
|
+
let _ = env;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Non-public methods in inherent impls are skipped (should still compile).
|
|
52
|
+
fn private_with_env(env: &Env) {
|
|
53
|
+
let _ = env;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// `pub(crate)` is also non-public in syn::Visibility terms (skipped in inherent impls).
|
|
57
|
+
pub(crate) fn crate_visible_with_env(env: &Env) {
|
|
58
|
+
let _ = env;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#[contract]
|
|
63
|
+
pub struct MyContractCtorRef;
|
|
64
|
+
|
|
65
|
+
#[common_macros::contract_impl]
|
|
66
|
+
impl MyContractCtorRef {
|
|
67
|
+
// Constructor is instrumented to initialize default TTL configs.
|
|
68
|
+
// This contract covers the `&Env` variant.
|
|
69
|
+
pub fn __constructor(env: &Env) {
|
|
70
|
+
let _ = env;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Include at least one regular entrypoint to ensure the impl is still processed.
|
|
74
|
+
pub fn ping_ref(env: &Env) {
|
|
75
|
+
let _ = env;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
pub fn ping(env: Env) {
|
|
79
|
+
let _ = env;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// A neutral multi-method trait impl to better exercise the "trait impl branch"
|
|
84
|
+
#[contracttrait]
|
|
85
|
+
pub trait UiTraitImplBranch {
|
|
86
|
+
fn t1(env: &Env);
|
|
87
|
+
fn t2(env: &Env, x: u32) -> u32;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
#[common_macros::contract_impl(contracttrait)]
|
|
91
|
+
impl UiTraitImplBranch for MyContract {
|
|
92
|
+
fn t1(env: &Env) {
|
|
93
|
+
let _ = env;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
fn t2(env: &Env, x: u32) -> u32 {
|
|
97
|
+
let _ = env;
|
|
98
|
+
x
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
fn main() {}
|