@layerzerolabs/protocol-stellar-v2 0.2.13 → 0.2.18
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 +484 -337
- package/.turbo/turbo-lint.log +126 -56
- package/.turbo/turbo-test.log +1403 -984
- package/Cargo.lock +142 -3
- package/Cargo.toml +5 -1
- package/contracts/ERROR_SPEC.md +44 -0
- package/contracts/common-macros/src/auth.rs +113 -0
- package/contracts/common-macros/src/contract_ttl.rs +84 -0
- package/contracts/common-macros/src/lib.rs +219 -29
- package/contracts/common-macros/src/lz_contract.rs +83 -0
- package/contracts/common-macros/src/storage.rs +1 -1
- package/contracts/common-macros/src/tests/{ownable.rs → auth.rs} +48 -15
- package/contracts/common-macros/src/tests/contract_ttl.rs +662 -0
- package/contracts/common-macros/src/tests/mod.rs +3 -2
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +20 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +24 -0
- package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__ownable__snapshot_only_owner_preserves_function_signature.snap → common_macros__tests__auth__snapshot_only_auth_preserves_function_signature.snap} +4 -4
- package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap → common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap} +26 -10
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contracttrait_code.snap +69 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +48 -48
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +7 -41
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +21 -0
- package/contracts/common-macros/src/tests/upgradeable.rs +31 -0
- package/contracts/common-macros/src/ttl_configurable.rs +21 -66
- package/contracts/common-macros/src/ttl_extendable.rs +36 -0
- package/contracts/common-macros/src/upgradeable.rs +76 -0
- package/contracts/common-macros/src/utils.rs +9 -0
- package/contracts/endpoint-v2/src/constants.rs +4 -4
- package/contracts/endpoint-v2/src/endpoint_v2.rs +58 -36
- package/contracts/endpoint-v2/src/errors.rs +4 -3
- package/contracts/endpoint-v2/src/events.rs +1 -1
- package/contracts/endpoint-v2/src/message_lib_manager.rs +18 -5
- package/contracts/endpoint-v2/src/messaging_channel.rs +11 -1
- package/contracts/endpoint-v2/src/messaging_composer.rs +11 -1
- package/contracts/endpoint-v2/src/storage.rs +1 -1
- package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +175 -8
- package/contracts/endpoint-v2/src/tests/endpoint_v2/build_outbound_packet.rs +76 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +342 -159
- package/contracts/endpoint-v2/src/tests/endpoint_v2/delegate.rs +3 -15
- package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +20 -31
- package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +126 -164
- package/contracts/endpoint-v2/src/tests/endpoint_v2/mod.rs +1 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/native_token.rs +0 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/owner.rs +0 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +311 -304
- package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +423 -96
- package/contracts/endpoint-v2/src/tests/endpoint_v2/recover_token.rs +1 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +47 -20
- package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +373 -403
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +96 -22
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +62 -10
- package/contracts/endpoint-v2/src/tests/endpoint_v2/transfer_ownership.rs +4 -4
- package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +8 -11
- package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +81 -30
- package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +209 -76
- package/contracts/endpoint-v2/src/tests/endpoint_v2/zro.rs +0 -1
- package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library.rs +24 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library_timeout.rs +40 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/default_send_library.rs +24 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_config.rs +108 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_library_index.rs +52 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_receive_library.rs +92 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_registered_libraries.rs +74 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_send_library.rs +83 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/is_registered_library.rs +32 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/is_supported_eid.rs +28 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/is_valid_receive_library.rs +261 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/mod.rs +16 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/receive_library_timeout.rs +62 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +65 -43
- package/contracts/endpoint-v2/src/tests/message_lib_manager/registered_libraries_count.rs +42 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +61 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +4 -6
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +59 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +16 -2
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_config.rs +155 -51
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +114 -92
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +235 -132
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +93 -87
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +346 -245
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +406 -60
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +252 -78
- package/contracts/endpoint-v2/src/tests/message_lib_manager/timeout.rs +102 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +212 -273
- package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +203 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +94 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_nonce.rs +78 -248
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +7 -282
- package/contracts/endpoint-v2/src/tests/messaging_channel/lazy_inbound_nonce.rs +6 -274
- package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +3 -2
- package/contracts/endpoint-v2/src/tests/messaging_channel/next_guid.rs +86 -178
- package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +328 -212
- package/contracts/endpoint-v2/src/tests/messaging_channel/outbound.rs +68 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/outbound_nonce.rs +6 -209
- package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +207 -159
- package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +142 -153
- package/contracts/endpoint-v2/src/tests/messaging_composer/compose_queue.rs +6 -179
- package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +163 -221
- package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +90 -121
- package/contracts/endpoint-v2/src/tests/mock.rs +18 -4
- package/contracts/endpoint-v2/src/tests/util/build_payload.rs +4 -70
- package/contracts/endpoint-v2/src/tests/util/compute_guid.rs +2 -1
- package/contracts/endpoint-v2/src/tests/util/keccak256.rs +17 -106
- package/contracts/layerzero-views/Cargo.toml +35 -0
- package/contracts/layerzero-views/src/errors.rs +10 -0
- package/contracts/layerzero-views/src/layerzero_view.rs +226 -0
- package/contracts/layerzero-views/src/lib.rs +38 -0
- package/contracts/layerzero-views/src/storage.rs +18 -0
- package/contracts/layerzero-views/src/tests/layerzero_view_tests.rs +423 -0
- package/contracts/layerzero-views/src/tests/mod.rs +4 -0
- package/contracts/layerzero-views/src/tests/setup.rs +377 -0
- package/contracts/layerzero-views/src/types.rs +50 -0
- package/contracts/macro-integration-tests/Cargo.toml +30 -0
- package/contracts/macro-integration-tests/src/lib.rs +1 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/initialization.rs +62 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +22 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/only_auth_guard.rs +97 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/ownership_transfer.rs +101 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/keyed_roundtrip.rs +225 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/mod.rs +4 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/name_override_runtime.rs +52 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/ttl_extension.rs +261 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/unkeyed_roundtrip.rs +137 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +113 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +139 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +2 -0
- package/contracts/macro-integration-tests/tests/runtime.rs +5 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.rs +21 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/pass/attr_on_variant_allowed.rs +20 -0
- package/contracts/macro-integration-tests/tests/ui/error/pass/basic_auto_discriminants.rs +15 -0
- package/contracts/macro-integration-tests/tests/ui/error/pass/mixed_discriminants.rs +16 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.rs +22 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.stderr +16 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/minimal_contract.rs +26 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +21 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_auth_env_param_variants.rs +46 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/default_value_on_variant.rs +14 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_instance_unit_basic.rs +14 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_persistent_named_fields_keyed.rs +16 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_temporary_unit_option.rs +15 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/name_override.rs +14 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/no_auto_ttl_extension.rs +19 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/ttl_provider_basic.rs +15 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +44 -0
- package/contracts/macro-integration-tests/tests/ui_error.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_ownable.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_storage.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_ttl_configurable.rs +12 -0
- package/contracts/message-libs/blocked-message-lib/src/lib.rs +17 -17
- package/contracts/message-libs/message-lib-common/src/errors.rs +7 -2
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +64 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet.rs +58 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet_header.rs +138 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/mod.rs +6 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload.rs +30 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload_hash.rs +15 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/test_helper.rs +39 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_dvn_option.rs +57 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +49 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +73 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +280 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +126 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +48 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/mod.rs +7 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +139 -0
- package/contracts/message-libs/message-lib-common/src/worker_options.rs +31 -1
- package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +7 -9
- package/contracts/message-libs/treasury/src/errors.rs +2 -3
- package/contracts/message-libs/treasury/src/events.rs +1 -1
- package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +2 -2
- package/contracts/message-libs/treasury/src/lib.rs +3 -3
- package/contracts/message-libs/treasury/src/storage.rs +3 -1
- package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +1 -1
- package/contracts/message-libs/treasury/src/treasury.rs +23 -26
- package/contracts/message-libs/uln-302/Cargo.toml +1 -1
- package/contracts/message-libs/uln-302/src/errors.rs +0 -5
- package/contracts/message-libs/uln-302/src/events.rs +5 -6
- package/contracts/message-libs/uln-302/src/receive_uln.rs +37 -56
- package/contracts/message-libs/uln-302/src/send_uln.rs +112 -138
- package/contracts/message-libs/uln-302/src/storage.rs +5 -5
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +5 -7
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +3 -3
- package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +6 -9
- package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +2 -2
- package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +3 -3
- package/contracts/message-libs/uln-302/src/tests/setup.rs +9 -0
- package/contracts/message-libs/uln-302/src/tests/testing_utils.rs +5 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/get_app_receive_uln_config.rs +1 -2
- package/contracts/message-libs/uln-302/src/tests/uln302/get_app_send_uln_config.rs +1 -2
- package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +37 -55
- package/contracts/message-libs/uln-302/src/uln302.rs +10 -25
- package/contracts/oapps/counter/Cargo.toml +14 -1
- package/contracts/oapps/counter/integration_tests/mod.rs +4 -1
- package/contracts/oapps/counter/integration_tests/setup_sml.rs +169 -0
- package/contracts/oapps/counter/integration_tests/setup_uln.rs +997 -0
- package/contracts/oapps/counter/integration_tests/signing.rs +62 -0
- package/contracts/oapps/counter/integration_tests/test_with_sml.rs +24 -55
- package/contracts/oapps/counter/integration_tests/test_with_uln.rs +314 -0
- package/contracts/oapps/counter/integration_tests/utils.rs +196 -53
- package/contracts/oapps/counter/src/counter.rs +67 -44
- package/contracts/oapps/counter/src/tests/mod.rs +0 -13
- package/contracts/oapps/counter/src/tests/test_counter.rs +5 -7
- package/contracts/oapps/oapp/src/errors.rs +5 -1
- package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +318 -221
- package/contracts/oapps/oapp/src/oapp_core.rs +36 -21
- package/contracts/oapps/oapp/src/oapp_options_type3.rs +48 -12
- package/contracts/oapps/oapp/src/oapp_receiver.rs +106 -41
- package/contracts/oapps/oapp/src/oapp_sender.rs +26 -34
- package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +9 -9
- package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +25 -18
- package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +7 -8
- package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +14 -16
- package/contracts/oapps/oapp-macros/src/generators.rs +128 -0
- package/contracts/oapps/oapp-macros/src/lib.rs +211 -0
- package/contracts/oapps/oft/integration-tests/setup.rs +34 -9
- package/contracts/oapps/oft/integration-tests/utils.rs +1 -1
- package/contracts/oapps/oft/src/errors.rs +6 -1
- package/contracts/oapps/oft/src/extensions/oft_fee.rs +13 -13
- package/contracts/oapps/oft/src/extensions/pausable.rs +5 -5
- package/contracts/oapps/oft/src/extensions/rate_limiter.rs +23 -23
- package/contracts/oapps/oft/src/lib.rs +4 -2
- package/contracts/oapps/oft/src/oft.rs +31 -71
- package/contracts/oapps/oft/src/oft_impl.rs +201 -0
- package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +2 -4
- package/contracts/oapps/oft/src/oft_types/mint_burn.rs +1 -4
- package/contracts/oapps/oft/src/storage.rs +2 -0
- package/contracts/oapps/oft/src/tests/extensions/setup.rs +60 -31
- package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +5 -3
- package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +5 -3
- package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +6 -4
- package/contracts/oapps/oft/src/tests/test_decimals.rs +2 -2
- package/contracts/oapps/oft/src/tests/test_oft_msg_codec.rs +1 -2
- package/contracts/oapps/oft/src/tests/test_send.rs +4 -4
- package/contracts/oapps/oft/src/tests/test_utils.rs +122 -81
- package/contracts/oapps/oft/src/types.rs +20 -0
- package/contracts/oapps/oft-std/Cargo.toml +6 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/mod.rs +3 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/test_oft_fee.rs +157 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/test_pausable.rs +162 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/test_rate_limiter.rs +186 -0
- package/contracts/oapps/oft-std/integration-tests/mod.rs +3 -0
- package/contracts/oapps/{counter/integration_tests → oft-std/integration-tests}/setup.rs +76 -30
- package/contracts/oapps/oft-std/integration-tests/utils.rs +427 -0
- package/contracts/oapps/oft-std/src/lib.rs +12 -1
- package/contracts/oapps/oft-std/src/oft.rs +141 -26
- package/contracts/upgrader/Cargo.toml +19 -0
- package/contracts/upgrader/src/lib.rs +96 -0
- package/contracts/upgrader/src/tests/mod.rs +1 -0
- package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract1.wasm +0 -0
- package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract2.wasm +0 -0
- package/contracts/upgrader/src/tests/test_upgrader.rs +120 -0
- package/contracts/utils/src/auth.rs +44 -0
- package/contracts/utils/src/errors.rs +32 -5
- package/contracts/utils/src/lib.rs +5 -1
- package/contracts/utils/src/multisig.rs +211 -0
- package/contracts/utils/src/ownable.rs +50 -60
- package/contracts/utils/src/tests/buffer_reader.rs +6 -6
- package/contracts/utils/src/tests/buffer_writer.rs +6 -6
- package/contracts/utils/src/tests/bytes_ext.rs +2 -4
- package/contracts/utils/src/tests/mod.rs +4 -1
- package/contracts/utils/src/tests/multisig.rs +731 -0
- package/contracts/utils/src/tests/option_ext.rs +18 -0
- package/contracts/utils/src/tests/ownable.rs +22 -70
- package/contracts/utils/src/tests/ttl_configurable.rs +607 -0
- package/contracts/utils/src/tests/upgradeable.rs +290 -0
- package/contracts/utils/src/ttl_configurable.rs +153 -0
- package/contracts/utils/src/ttl_extendable.rs +27 -0
- package/contracts/utils/src/upgradeable.rs +56 -0
- package/contracts/workers/dvn/Cargo.toml +2 -2
- package/contracts/workers/dvn/src/auth.rs +24 -35
- package/contracts/workers/dvn/src/dvn.rs +23 -14
- package/contracts/workers/dvn/src/errors.rs +1 -7
- package/contracts/workers/dvn/src/events.rs +1 -14
- package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
- package/contracts/workers/dvn/src/interfaces/mod.rs +0 -2
- package/contracts/workers/dvn/src/storage.rs +3 -13
- package/contracts/workers/dvn/src/tests/auth.rs +4 -4
- package/contracts/workers/dvn/src/tests/dvn.rs +1 -2
- package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +7 -8
- package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +11 -8
- package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +11 -12
- package/contracts/workers/dvn/src/tests/setup.rs +5 -5
- package/contracts/workers/dvn-fee-lib/Cargo.toml +0 -1
- package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +45 -16
- package/contracts/workers/dvn-fee-lib/src/errors.rs +3 -2
- package/contracts/workers/dvn-fee-lib/src/lib.rs +5 -11
- package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +30 -16
- package/contracts/workers/executor/src/auth.rs +80 -16
- package/contracts/workers/executor/src/executor.rs +17 -29
- package/contracts/workers/executor/src/storage.rs +2 -9
- package/contracts/workers/executor-fee-lib/Cargo.toml +1 -1
- package/contracts/workers/executor-fee-lib/src/errors.rs +9 -7
- package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +153 -121
- package/contracts/workers/executor-helper/Cargo.toml +1 -6
- package/contracts/workers/executor-helper/src/executor_helper.rs +53 -73
- package/contracts/workers/executor-helper/src/lib.rs +1 -7
- package/contracts/workers/price-feed/Cargo.toml +1 -2
- package/contracts/workers/price-feed/src/errors.rs +3 -2
- package/contracts/workers/price-feed/src/lib.rs +5 -6
- package/contracts/workers/price-feed/src/price_feed.rs +42 -23
- package/contracts/workers/worker/Cargo.toml +4 -0
- package/contracts/workers/worker/src/errors.rs +4 -0
- package/contracts/workers/worker/src/interfaces/price_feed.rs +3 -3
- package/contracts/workers/worker/src/lib.rs +2 -2
- package/contracts/workers/worker/src/tests/mod.rs +4 -0
- package/contracts/workers/worker/src/tests/setup.rs +147 -0
- package/contracts/workers/worker/src/tests/worker.rs +502 -0
- package/contracts/workers/worker/src/worker.rs +28 -30
- package/package.json +8 -5
- package/sdk/.turbo/turbo-build.log +1 -0
- package/sdk/.turbo/turbo-test.log +1009 -0
- package/sdk/dist/generated/bml.d.ts +104 -37
- package/sdk/dist/generated/bml.js +83 -42
- package/sdk/dist/generated/counter.d.ts +334 -175
- package/sdk/dist/generated/counter.js +109 -63
- package/sdk/dist/generated/dvn.d.ts +1985 -0
- package/sdk/dist/generated/dvn.js +326 -0
- package/sdk/dist/generated/dvn_fee_lib.d.ts +690 -0
- package/sdk/dist/generated/dvn_fee_lib.js +163 -0
- package/sdk/dist/generated/endpoint.d.ts +155 -46
- package/sdk/dist/generated/endpoint.js +93 -50
- package/sdk/dist/generated/executor.d.ts +1841 -0
- package/sdk/dist/generated/executor.js +312 -0
- package/sdk/dist/generated/executor_fee_lib.d.ts +1083 -0
- package/sdk/dist/generated/executor_fee_lib.js +255 -0
- package/sdk/dist/generated/executor_helper.d.ts +981 -0
- package/sdk/dist/generated/executor_helper.js +236 -0
- package/sdk/dist/generated/oft_std.d.ts +1722 -0
- package/sdk/dist/generated/oft_std.js +316 -0
- package/sdk/dist/generated/price_feed.d.ts +1077 -0
- package/sdk/dist/generated/price_feed.js +210 -0
- package/sdk/dist/generated/sml.d.ts +171 -56
- package/sdk/dist/generated/sml.js +111 -62
- package/sdk/dist/generated/treasury.d.ts +896 -0
- package/sdk/dist/generated/treasury.js +219 -0
- package/sdk/dist/generated/uln302.d.ts +175 -75
- package/sdk/dist/generated/uln302.js +126 -82
- package/sdk/dist/generated/upgrader.d.ts +70 -0
- package/sdk/dist/generated/upgrader.js +19 -0
- package/sdk/dist/index.d.ts +10 -0
- package/sdk/dist/index.js +14 -0
- package/sdk/dist/wasm/blocked-message-lib.d.ts +1 -0
- package/sdk/dist/wasm/blocked-message-lib.js +2 -0
- package/sdk/dist/wasm/counter.d.ts +1 -0
- package/sdk/dist/wasm/counter.js +2 -0
- package/sdk/dist/wasm/dvn-fee-lib.d.ts +1 -0
- package/sdk/dist/wasm/dvn-fee-lib.js +2 -0
- package/sdk/dist/wasm/dvn.d.ts +1 -0
- package/sdk/dist/wasm/dvn.js +2 -0
- package/sdk/dist/wasm/endpoint-v2.d.ts +1 -0
- package/sdk/dist/wasm/endpoint-v2.js +2 -0
- package/sdk/dist/wasm/executor-fee-lib.d.ts +1 -0
- package/sdk/dist/wasm/executor-fee-lib.js +2 -0
- package/sdk/dist/wasm/executor-helper.d.ts +1 -0
- package/sdk/dist/wasm/executor-helper.js +2 -0
- package/sdk/dist/wasm/executor.d.ts +1 -0
- package/sdk/dist/wasm/executor.js +2 -0
- package/sdk/dist/wasm/layerzero-views.d.ts +1 -0
- package/sdk/dist/wasm/layerzero-views.js +2 -0
- package/sdk/dist/wasm/oft-std.d.ts +1 -0
- package/sdk/dist/wasm/oft-std.js +2 -0
- package/sdk/dist/wasm/price-feed.d.ts +1 -0
- package/sdk/dist/wasm/price-feed.js +2 -0
- package/sdk/dist/wasm/simple-message-lib.d.ts +1 -0
- package/sdk/dist/wasm/simple-message-lib.js +2 -0
- package/sdk/dist/wasm/treasury.d.ts +1 -0
- package/sdk/dist/wasm/treasury.js +2 -0
- package/sdk/dist/wasm/uln302.d.ts +1 -0
- package/sdk/dist/wasm/uln302.js +2 -0
- package/sdk/dist/wasm/upgrader.d.ts +1 -0
- package/sdk/dist/wasm/upgrader.js +2 -0
- package/sdk/dist/wasm.d.ts +15 -0
- package/sdk/dist/wasm.js +15 -0
- package/sdk/package.json +7 -4
- package/sdk/src/index.ts +17 -0
- package/sdk/test/counter-sml.test.ts +376 -0
- package/sdk/test/counter-uln.test.ts +493 -0
- package/sdk/test/{oft.test.ts → oft-sml.test.ts} +187 -323
- package/sdk/test/suites/constants.ts +22 -2
- package/sdk/test/suites/dummyContractClient.ts +169 -0
- package/sdk/test/suites/globalSetup.ts +450 -0
- package/sdk/test/suites/localnet.ts +23 -6
- package/sdk/test/upgrader.test.ts +300 -0
- package/sdk/test/utils.ts +558 -85
- package/sdk/vitest.config.ts +21 -0
- package/tools/ts-bindings-gen/src/main.rs +12 -1
- package/turbo.json +2 -0
- package/contracts/common-macros/src/contract_impl.rs +0 -47
- package/contracts/common-macros/src/ownable.rs +0 -59
- package/contracts/common-macros/src/tests/contract_impl.rs +0 -381
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +0 -32
- package/contracts/endpoint-v2/src/tests/messaging_channel/clear.rs +0 -316
- package/contracts/endpoint-v2/src/tests/messaging_channel/internal.rs +0 -388
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +0 -162
- package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +0 -319
- package/contracts/oapp-macros/src/lib.rs +0 -154
- package/contracts/oapp-macros/src/oapp_core.rs +0 -40
- package/contracts/oapp-macros/src/oapp_full.rs +0 -21
- package/contracts/oapp-macros/src/oapp_options_type3.rs +0 -31
- package/contracts/oapp-macros/src/oapp_receiver.rs +0 -48
- package/contracts/oapp-macros/src/oapp_sender.rs +0 -21
- package/contracts/oapp-macros/src/util.rs +0 -107
- package/contracts/oapps/oft/src/constants.rs +0 -5
- package/contracts/oapps/oft/src/default_oft_impl.rs +0 -146
- package/contracts/utils/src/tests/ttl.rs +0 -421
- package/contracts/utils/src/ttl.rs +0 -123
- package/contracts/workers/dvn/src/interfaces/multisig.rs +0 -56
- package/contracts/workers/dvn/src/multisig.rs +0 -153
- package/sdk/test/index.test.ts +0 -376
- /package/contracts/{oapp-macros → oapps/oapp-macros}/Cargo.toml +0 -0
|
@@ -1,25 +1,42 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
2
|
import { $, sleep } from 'zx';
|
|
3
3
|
|
|
4
|
-
import { DEFAULT_DEPLOYER, FRIENDBOT_URL, ZRO_DISTRIBUTOR } from './constants';
|
|
4
|
+
import { DEFAULT_DEPLOYER, EXECUTOR_ADMIN, FRIENDBOT_URL, ZRO_DISTRIBUTOR } from './constants';
|
|
5
5
|
import { deployNativeSac, deployZroToken } from './deploy';
|
|
6
6
|
|
|
7
|
+
const CONTAINER_NAME = 'stellar-localnet';
|
|
8
|
+
const QUICKSTART_IMAGE = 'stellar/quickstart';
|
|
9
|
+
|
|
7
10
|
export async function startStellarLocalnet(): Promise<void> {
|
|
8
11
|
console.log('🚀 Starting Stellar localnet...');
|
|
9
12
|
|
|
10
|
-
//
|
|
11
|
-
await $`
|
|
13
|
+
// Remove any existing container first (ignore errors if not running)
|
|
14
|
+
await $`docker rm -f ${CONTAINER_NAME}`.nothrow();
|
|
15
|
+
|
|
16
|
+
// Pull image only if not available locally
|
|
17
|
+
const imageExists = await $`docker image inspect ${QUICKSTART_IMAGE}`.nothrow().quiet();
|
|
18
|
+
if (imageExists.exitCode !== 0) {
|
|
19
|
+
console.log(`📥 Pulling ${QUICKSTART_IMAGE}...`);
|
|
20
|
+
await $`docker pull ${QUICKSTART_IMAGE}`;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Start the stellar/quickstart container directly (no Stellar CLI needed)
|
|
24
|
+
await $`docker run -d --name ${CONTAINER_NAME} -p 8086:8000 ${QUICKSTART_IMAGE} --local`;
|
|
12
25
|
|
|
13
26
|
// Wait for Stellar to start
|
|
14
|
-
for (let i = 0; i <
|
|
27
|
+
for (let i = 0; i < 180; i++) {
|
|
15
28
|
try {
|
|
16
29
|
// Ensure faucet service is started and fund the default deployer account
|
|
17
30
|
await fundAccount(DEFAULT_DEPLOYER.publicKey());
|
|
18
|
-
await fundAccount(ZRO_DISTRIBUTOR.publicKey());
|
|
19
31
|
console.log(`✅ Account ${DEFAULT_DEPLOYER.publicKey()} funded`);
|
|
32
|
+
await fundAccount(ZRO_DISTRIBUTOR.publicKey());
|
|
33
|
+
console.log(`✅ Account ${ZRO_DISTRIBUTOR.publicKey()} funded`);
|
|
34
|
+
await fundAccount(EXECUTOR_ADMIN.publicKey());
|
|
35
|
+
console.log(`✅ Account ${EXECUTOR_ADMIN.publicKey()} funded`);
|
|
20
36
|
console.log('✅ Stellar localnet started');
|
|
21
37
|
break;
|
|
22
38
|
} catch (_e) {
|
|
39
|
+
console.error(`❌ Failed to fund account ${_e}`);
|
|
23
40
|
await sleep(1000);
|
|
24
41
|
console.log('⏳ Waiting for Stellar localnet to start...');
|
|
25
42
|
}
|
|
@@ -37,6 +54,6 @@ export async function fundAccount(publicKey: string): Promise<void> {
|
|
|
37
54
|
}
|
|
38
55
|
|
|
39
56
|
export async function stopStellarLocalnet(): Promise<void> {
|
|
40
|
-
await $`
|
|
57
|
+
await $`docker rm -f ${CONTAINER_NAME}`;
|
|
41
58
|
console.log('✅ Stellar localnet stopped');
|
|
42
59
|
}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import { Address, authorizeEntry, Keypair, xdr } from '@stellar/stellar-sdk';
|
|
2
|
+
import { assembleTransaction } from '@stellar/stellar-sdk/rpc';
|
|
3
|
+
import * as rpc from '@stellar/stellar-sdk/rpc';
|
|
4
|
+
import { readFileSync } from 'fs';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import { describe, expect, it } from 'vitest';
|
|
7
|
+
|
|
8
|
+
import { getFullyQualifiedRepoRootPath } from '@layerzerolabs/common-node-utils';
|
|
9
|
+
|
|
10
|
+
import { Client as UpgraderClient } from '../src/generated/upgrader';
|
|
11
|
+
import { DEFAULT_DEPLOYER, NETWORK_PASSPHRASE, RPC_URL } from './suites/constants';
|
|
12
|
+
import { deployContract, uploadWasm } from './suites/deploy';
|
|
13
|
+
import { Client as DummyContractClient } from './suites/dummyContractClient';
|
|
14
|
+
|
|
15
|
+
let upgraderClient: UpgraderClient;
|
|
16
|
+
let dummyContractClient: DummyContractClient;
|
|
17
|
+
let testContractAddress: string;
|
|
18
|
+
|
|
19
|
+
// Test data paths
|
|
20
|
+
let TEST_CONTRACT_V1_WASM_PATH: string;
|
|
21
|
+
let TEST_CONTRACT_V2_WASM_PATH: string;
|
|
22
|
+
|
|
23
|
+
describe('Upgrader Contract Testing', async () => {
|
|
24
|
+
const repoRoot = await getFullyQualifiedRepoRootPath();
|
|
25
|
+
const upgraderWasmDir = path.join(
|
|
26
|
+
repoRoot,
|
|
27
|
+
'contracts',
|
|
28
|
+
'protocol',
|
|
29
|
+
'stellar',
|
|
30
|
+
'target',
|
|
31
|
+
'wasm32v1-none',
|
|
32
|
+
'release',
|
|
33
|
+
);
|
|
34
|
+
const testDataDir = path.join(
|
|
35
|
+
repoRoot,
|
|
36
|
+
'contracts',
|
|
37
|
+
'protocol',
|
|
38
|
+
'stellar',
|
|
39
|
+
'contracts',
|
|
40
|
+
'upgrader',
|
|
41
|
+
'src',
|
|
42
|
+
'tests',
|
|
43
|
+
'test_data',
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
const UPGRADER_WASM_PATH = path.join(upgraderWasmDir, 'upgrader.wasm');
|
|
47
|
+
TEST_CONTRACT_V1_WASM_PATH = path.join(testDataDir, 'test_upgradeable_contract1.wasm');
|
|
48
|
+
TEST_CONTRACT_V2_WASM_PATH = path.join(testDataDir, 'test_upgradeable_contract2.wasm');
|
|
49
|
+
|
|
50
|
+
describe('Contract Deployments', () => {
|
|
51
|
+
it('Deploy Upgrader Contract', async () => {
|
|
52
|
+
// Deploy upgrader contract using the helper (no constructor args needed)
|
|
53
|
+
upgraderClient = await deployContract<UpgraderClient>(
|
|
54
|
+
UpgraderClient,
|
|
55
|
+
UPGRADER_WASM_PATH,
|
|
56
|
+
undefined,
|
|
57
|
+
DEFAULT_DEPLOYER,
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
console.log('✅ Upgrader deployed at:', upgraderClient.options.contractId);
|
|
61
|
+
expect(upgraderClient.options.contractId).toBeDefined();
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('Deploy Test Upgradeable Contract V1', async () => {
|
|
65
|
+
console.log('📖 Reading Test Contract V1 WASM file from:', TEST_CONTRACT_V1_WASM_PATH);
|
|
66
|
+
|
|
67
|
+
const server = new rpc.Server(RPC_URL, { allowHttp: true });
|
|
68
|
+
|
|
69
|
+
// Read and upload WASM
|
|
70
|
+
const wasmBuffer = readFileSync(TEST_CONTRACT_V1_WASM_PATH);
|
|
71
|
+
const wasmHash = await uploadWasm(wasmBuffer, DEFAULT_DEPLOYER, server);
|
|
72
|
+
console.log('✅ Test Contract V1 WASM uploaded, hash:', wasmHash);
|
|
73
|
+
|
|
74
|
+
// Deploy test contract V1 with owner as constructor arg
|
|
75
|
+
console.log('🚀 Deploying Test Contract V1...');
|
|
76
|
+
const { TransactionBuilder, Operation, StrKey, Address } = await import(
|
|
77
|
+
'@stellar/stellar-sdk'
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
const account = await server.getAccount(DEFAULT_DEPLOYER.publicKey());
|
|
81
|
+
const salt = Buffer.from(Keypair.random().rawPublicKey());
|
|
82
|
+
|
|
83
|
+
// Create contract from WASM with constructor args
|
|
84
|
+
const wasmHashBuffer = Buffer.from(wasmHash, 'hex');
|
|
85
|
+
|
|
86
|
+
// Encode constructor args: owner (Address)
|
|
87
|
+
const ownerScVal = Address.fromString(DEFAULT_DEPLOYER.publicKey()).toScVal();
|
|
88
|
+
|
|
89
|
+
const createContractTx = new TransactionBuilder(account, {
|
|
90
|
+
fee: '100000',
|
|
91
|
+
networkPassphrase: NETWORK_PASSPHRASE,
|
|
92
|
+
})
|
|
93
|
+
.addOperation(
|
|
94
|
+
Operation.createCustomContract({
|
|
95
|
+
address: Address.fromString(DEFAULT_DEPLOYER.publicKey()),
|
|
96
|
+
wasmHash: wasmHashBuffer,
|
|
97
|
+
salt: salt,
|
|
98
|
+
constructorArgs: [ownerScVal],
|
|
99
|
+
}),
|
|
100
|
+
)
|
|
101
|
+
.setTimeout(30)
|
|
102
|
+
.build();
|
|
103
|
+
|
|
104
|
+
// Simulate to get the contract ID
|
|
105
|
+
const simulated = await server.simulateTransaction(createContractTx);
|
|
106
|
+
const preparedTx = rpc.assembleTransaction(createContractTx, simulated).build();
|
|
107
|
+
preparedTx.sign(DEFAULT_DEPLOYER);
|
|
108
|
+
|
|
109
|
+
const sendResult = await server.sendTransaction(preparedTx);
|
|
110
|
+
if (sendResult.status !== 'PENDING') {
|
|
111
|
+
throw new Error(`Transaction failed: ${JSON.stringify(sendResult)}`);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const txResult = await server.pollTransaction(sendResult.hash);
|
|
115
|
+
if (txResult.status !== 'SUCCESS') {
|
|
116
|
+
throw new Error(`Transaction not successful: ${JSON.stringify(txResult)}`);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Extract contract address from the transaction result
|
|
120
|
+
const returnValue = txResult.returnValue;
|
|
121
|
+
if (!returnValue) {
|
|
122
|
+
throw new Error('No return value from contract creation');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// The return value is an Address ScVal, decode it
|
|
126
|
+
const contractIdHash = returnValue.address().contractId();
|
|
127
|
+
testContractAddress = StrKey.encodeContract(
|
|
128
|
+
Buffer.from(contractIdHash as unknown as Uint8Array),
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
// Create client for the deployed contract
|
|
132
|
+
dummyContractClient = new DummyContractClient({
|
|
133
|
+
contractId: testContractAddress,
|
|
134
|
+
publicKey: DEFAULT_DEPLOYER.publicKey(),
|
|
135
|
+
signTransaction: async (tx: string) => {
|
|
136
|
+
const transaction = TransactionBuilder.fromXDR(tx, NETWORK_PASSPHRASE);
|
|
137
|
+
transaction.sign(DEFAULT_DEPLOYER);
|
|
138
|
+
return {
|
|
139
|
+
signedTxXdr: transaction.toXDR(),
|
|
140
|
+
signerAddress: DEFAULT_DEPLOYER.publicKey(),
|
|
141
|
+
};
|
|
142
|
+
},
|
|
143
|
+
rpcUrl: RPC_URL,
|
|
144
|
+
networkPassphrase: NETWORK_PASSPHRASE,
|
|
145
|
+
allowHttp: true,
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
console.log('✅ Test Contract V1 deployed at:', testContractAddress);
|
|
149
|
+
expect(testContractAddress).toBeDefined();
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
it('Verify Test Contract V1 Counter', async () => {
|
|
153
|
+
// Call counter() on V1 contract, should return 1
|
|
154
|
+
const { result } = await dummyContractClient.counter();
|
|
155
|
+
console.log('✅ Test Contract V1 counter value:', result);
|
|
156
|
+
expect(result).toBe(1);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
describe('Upgrade Workflow', () => {
|
|
161
|
+
let newWasmHash: string;
|
|
162
|
+
|
|
163
|
+
it('Upload Test Contract V2 WASM', async () => {
|
|
164
|
+
console.log('📖 Reading Test Contract V2 WASM file from:', TEST_CONTRACT_V2_WASM_PATH);
|
|
165
|
+
|
|
166
|
+
const server = new rpc.Server(RPC_URL, { allowHttp: true });
|
|
167
|
+
|
|
168
|
+
// Read and upload WASM for V2
|
|
169
|
+
const wasmBuffer = readFileSync(TEST_CONTRACT_V2_WASM_PATH);
|
|
170
|
+
newWasmHash = await uploadWasm(wasmBuffer, DEFAULT_DEPLOYER, server);
|
|
171
|
+
console.log('✅ Test Contract V2 WASM uploaded, hash:', newWasmHash);
|
|
172
|
+
expect(newWasmHash).toBeDefined();
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it('Test Upgrader Contract Can Be Called', async () => {
|
|
176
|
+
console.log('🔄 Testing upgrader contract call...');
|
|
177
|
+
console.log(' Contract address:', testContractAddress);
|
|
178
|
+
console.log(' New WASM hash:', newWasmHash);
|
|
179
|
+
|
|
180
|
+
// NOTE: Using Option 2 - Hybrid approach with generated client
|
|
181
|
+
// Build with generated client, then manually simulate with authMode, then inject back
|
|
182
|
+
|
|
183
|
+
const voidScVal = xdr.ScVal.scvVoid();
|
|
184
|
+
const server = new rpc.Server(RPC_URL, { allowHttp: true });
|
|
185
|
+
|
|
186
|
+
// 1. Build transaction using generated client (don't auto-simulate)
|
|
187
|
+
const assembledTx = await upgraderClient.upgrade_and_migrate(
|
|
188
|
+
{
|
|
189
|
+
contract_address: testContractAddress,
|
|
190
|
+
wasm_hash: Buffer.from(newWasmHash, 'hex'),
|
|
191
|
+
migration_data: [voidScVal],
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
simulate: false, // Don't simulate yet
|
|
195
|
+
},
|
|
196
|
+
);
|
|
197
|
+
|
|
198
|
+
console.log('✅ Transaction built with generated client');
|
|
199
|
+
|
|
200
|
+
// Build the transaction from the raw builder
|
|
201
|
+
const rawTx = assembledTx.raw!.build();
|
|
202
|
+
|
|
203
|
+
console.log('✅ Raw transaction built');
|
|
204
|
+
|
|
205
|
+
// 2. Manually simulate with record_allow_nonroot authMode
|
|
206
|
+
const sim = await server.simulateTransaction(
|
|
207
|
+
rawTx,
|
|
208
|
+
undefined, // addlResources
|
|
209
|
+
'record_allow_nonroot', // ← This enables non-root auth recording!
|
|
210
|
+
);
|
|
211
|
+
|
|
212
|
+
if (rpc.Api.isSimulationError(sim)) {
|
|
213
|
+
throw new Error(`Simulation failed: ${JSON.stringify(sim)}`);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
console.log('✅ Transaction simulated with record_allow_nonroot');
|
|
217
|
+
console.log(' Auth entries returned:', sim.result?.auth?.length ?? 0);
|
|
218
|
+
|
|
219
|
+
// 3. Sign auth entries manually (high-level API doesn't see them after injection)
|
|
220
|
+
const latestLedger = sim.latestLedger;
|
|
221
|
+
const validUntilLedger = latestLedger + 100;
|
|
222
|
+
|
|
223
|
+
if (sim.result && sim.result.auth) {
|
|
224
|
+
sim.result.auth = await Promise.all(
|
|
225
|
+
sim.result.auth.map(async (entry) => {
|
|
226
|
+
// Source account credentials are already signed by tx envelope
|
|
227
|
+
if (
|
|
228
|
+
entry.credentials().switch() ===
|
|
229
|
+
xdr.SorobanCredentialsType.sorobanCredentialsSourceAccount()
|
|
230
|
+
) {
|
|
231
|
+
console.log(' Skipping source account auth entry');
|
|
232
|
+
return entry;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Address credentials need explicit signature
|
|
236
|
+
const addr = Address.fromScAddress(
|
|
237
|
+
entry.credentials().address().address(),
|
|
238
|
+
).toString();
|
|
239
|
+
|
|
240
|
+
console.log(' Signing auth entry for address:', addr);
|
|
241
|
+
|
|
242
|
+
if (addr === DEFAULT_DEPLOYER.publicKey()) {
|
|
243
|
+
// Sign with owner's keypair
|
|
244
|
+
return authorizeEntry(
|
|
245
|
+
entry,
|
|
246
|
+
DEFAULT_DEPLOYER,
|
|
247
|
+
validUntilLedger,
|
|
248
|
+
NETWORK_PASSPHRASE,
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
throw new Error(`Unexpected auth signer needed: ${addr}`);
|
|
253
|
+
}),
|
|
254
|
+
);
|
|
255
|
+
console.log('✅ Auth entries signed');
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// 4. Assemble final transaction with signed auth entries
|
|
259
|
+
const finalTxBuilder = assembleTransaction(rawTx, sim);
|
|
260
|
+
const finalTx = finalTxBuilder.build();
|
|
261
|
+
|
|
262
|
+
console.log('✅ Final transaction assembled');
|
|
263
|
+
|
|
264
|
+
// 5. Sign the transaction envelope
|
|
265
|
+
finalTx.sign(DEFAULT_DEPLOYER);
|
|
266
|
+
|
|
267
|
+
console.log('✅ Transaction envelope signed');
|
|
268
|
+
|
|
269
|
+
// 6. Send and poll
|
|
270
|
+
const sentResult = await server.sendTransaction(finalTx);
|
|
271
|
+
|
|
272
|
+
if (sentResult.status !== 'PENDING') {
|
|
273
|
+
throw new Error(`Transaction failed to send: ${JSON.stringify(sentResult)}`);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
console.log('✅ Transaction sent, hash:', sentResult.hash);
|
|
277
|
+
|
|
278
|
+
const txResult = await server.pollTransaction(sentResult.hash);
|
|
279
|
+
|
|
280
|
+
console.log('✅ Upgrade transaction completed');
|
|
281
|
+
console.log(' Transaction status:', txResult.status);
|
|
282
|
+
|
|
283
|
+
expect(txResult.status).toBe('SUCCESS');
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
it('Verify Test Contract V2 Counter2 After Upgrade', async () => {
|
|
287
|
+
// After upgrade, the contract should have counter2() function that returns 2
|
|
288
|
+
const { result } = await dummyContractClient.counter2();
|
|
289
|
+
console.log('✅ Test Contract V2 counter2 value:', result);
|
|
290
|
+
expect(result).toBe(2);
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
it('Verify Test Contract V1 Counter Still Works After Upgrade', async () => {
|
|
294
|
+
// The original counter() should still be accessible and return 1
|
|
295
|
+
const { result } = await dummyContractClient.counter();
|
|
296
|
+
console.log('✅ Test Contract V2 counter value (from V1):', result);
|
|
297
|
+
expect(result).toBe(1);
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
});
|