@layerzerolabs/protocol-stellar-v2 0.2.12 → 0.2.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +384 -278
- package/.turbo/turbo-lint.log +110 -78
- package/.turbo/turbo-test.log +1248 -1014
- package/Cargo.lock +130 -3
- package/Cargo.toml +2 -1
- package/contracts/common-macros/src/contract_impl.rs +6 -1
- package/contracts/common-macros/src/lib.rs +47 -8
- package/contracts/common-macros/src/ownable.rs +7 -25
- package/contracts/common-macros/src/storage.rs +1 -1
- package/contracts/common-macros/src/tests/contract_impl.rs +5 -0
- package/contracts/common-macros/src/tests/mod.rs +1 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap +23 -7
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +5 -25
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +48 -48
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +5 -25
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +21 -0
- package/contracts/common-macros/src/tests/upgradeable.rs +31 -0
- package/contracts/common-macros/src/ttl_configurable.rs +14 -44
- package/contracts/common-macros/src/upgradeable.rs +76 -0
- package/contracts/endpoint-v2/src/endpoint_v2.rs +25 -1
- package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +175 -8
- package/contracts/endpoint-v2/src/tests/endpoint_v2/build_outbound_packet.rs +76 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +342 -159
- package/contracts/endpoint-v2/src/tests/endpoint_v2/delegate.rs +3 -15
- package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +20 -31
- package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +126 -164
- package/contracts/endpoint-v2/src/tests/endpoint_v2/mod.rs +1 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/native_token.rs +0 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/owner.rs +0 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +311 -304
- package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +423 -96
- package/contracts/endpoint-v2/src/tests/endpoint_v2/recover_token.rs +1 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +47 -20
- package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +373 -403
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +96 -22
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +61 -9
- package/contracts/endpoint-v2/src/tests/endpoint_v2/transfer_ownership.rs +4 -4
- package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +8 -11
- package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +81 -30
- package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +209 -76
- package/contracts/endpoint-v2/src/tests/endpoint_v2/zro.rs +0 -1
- package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library.rs +24 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library_timeout.rs +40 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/default_send_library.rs +24 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_config.rs +108 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_library_index.rs +52 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_receive_library.rs +92 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_registered_libraries.rs +74 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/get_send_library.rs +83 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/is_registered_library.rs +32 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/is_supported_eid.rs +28 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/is_valid_receive_library.rs +261 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/mod.rs +16 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/receive_library_timeout.rs +62 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +65 -43
- package/contracts/endpoint-v2/src/tests/message_lib_manager/registered_libraries_count.rs +42 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +61 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +3 -5
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +59 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +15 -1
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_config.rs +155 -51
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +114 -92
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +235 -132
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +93 -87
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +346 -245
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +406 -60
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +252 -78
- package/contracts/endpoint-v2/src/tests/message_lib_manager/timeout.rs +102 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +212 -273
- package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +203 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +94 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_nonce.rs +78 -248
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +7 -282
- package/contracts/endpoint-v2/src/tests/messaging_channel/lazy_inbound_nonce.rs +6 -274
- package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +3 -2
- package/contracts/endpoint-v2/src/tests/messaging_channel/next_guid.rs +86 -178
- package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +328 -212
- package/contracts/endpoint-v2/src/tests/messaging_channel/outbound.rs +68 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/outbound_nonce.rs +6 -209
- package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +207 -159
- package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +142 -153
- package/contracts/endpoint-v2/src/tests/messaging_composer/compose_queue.rs +6 -179
- package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +163 -221
- package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +90 -121
- package/contracts/endpoint-v2/src/tests/mock.rs +18 -4
- package/contracts/endpoint-v2/src/tests/util/build_payload.rs +4 -70
- package/contracts/endpoint-v2/src/tests/util/compute_guid.rs +2 -1
- package/contracts/endpoint-v2/src/tests/util/keccak256.rs +17 -106
- package/contracts/layerzero-views/Cargo.toml +35 -0
- package/contracts/layerzero-views/src/errors.rs +10 -0
- package/contracts/layerzero-views/src/layerzero_view.rs +229 -0
- package/contracts/layerzero-views/src/lib.rs +38 -0
- package/contracts/layerzero-views/src/storage.rs +18 -0
- package/contracts/layerzero-views/src/tests/layerzero_view_tests.rs +423 -0
- package/contracts/layerzero-views/src/tests/mod.rs +4 -0
- package/contracts/layerzero-views/src/tests/setup.rs +377 -0
- package/contracts/layerzero-views/src/types.rs +50 -0
- package/contracts/macro-integration-tests/Cargo.toml +30 -0
- package/contracts/macro-integration-tests/src/lib.rs +1 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/initialization.rs +62 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +22 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/only_owner_guard.rs +97 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/ownership_transfer.rs +101 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/keyed_roundtrip.rs +225 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/mod.rs +4 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/name_override_runtime.rs +52 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/ttl_extension.rs +261 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/unkeyed_roundtrip.rs +137 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +113 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/extend_instance_ttl.rs +50 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +139 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +3 -0
- package/contracts/macro-integration-tests/tests/runtime.rs +5 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.rs +21 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/pass/attr_on_variant_allowed.rs +20 -0
- package/contracts/macro-integration-tests/tests/ui/error/pass/basic_auto_discriminants.rs +15 -0
- package/contracts/macro-integration-tests/tests/ui/error/pass/mixed_discriminants.rs +16 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_owner_missing_env.rs +22 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_owner_missing_env.stderr +16 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/minimal_contract.rs +26 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +22 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_owner_env_param_variants.rs +46 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/default_value_on_variant.rs +14 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_instance_unit_basic.rs +14 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_persistent_named_fields_keyed.rs +16 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_temporary_unit_option.rs +15 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/name_override.rs +14 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/no_auto_ttl_extension.rs +19 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/ttl_provider_basic.rs +15 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +44 -0
- package/contracts/macro-integration-tests/tests/ui_error.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_ownable.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_storage.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_ttl_configurable.rs +12 -0
- package/contracts/message-libs/blocked-message-lib/src/lib.rs +17 -17
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +64 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet.rs +58 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet_header.rs +138 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/mod.rs +6 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload.rs +30 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload_hash.rs +15 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/test_helper.rs +39 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_dvn_option.rs +57 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +50 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +74 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +280 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +126 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +48 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/mod.rs +7 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +139 -0
- package/contracts/message-libs/message-lib-common/src/worker_options.rs +31 -1
- package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +2 -2
- package/contracts/message-libs/treasury/src/errors.rs +0 -1
- package/contracts/message-libs/treasury/src/lib.rs +3 -3
- package/contracts/message-libs/treasury/src/storage.rs +2 -0
- package/contracts/message-libs/treasury/src/treasury.rs +12 -13
- package/contracts/message-libs/uln-302/Cargo.toml +1 -1
- package/contracts/message-libs/uln-302/src/errors.rs +0 -5
- package/contracts/message-libs/uln-302/src/events.rs +5 -6
- package/contracts/message-libs/uln-302/src/receive_uln.rs +24 -54
- package/contracts/message-libs/uln-302/src/send_uln.rs +89 -135
- package/contracts/message-libs/uln-302/src/storage.rs +5 -5
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +5 -7
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +3 -3
- package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +6 -9
- package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +2 -2
- package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +3 -3
- package/contracts/message-libs/uln-302/src/tests/setup.rs +9 -0
- package/contracts/message-libs/uln-302/src/tests/testing_utils.rs +5 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/get_app_receive_uln_config.rs +1 -2
- package/contracts/message-libs/uln-302/src/tests/uln302/get_app_send_uln_config.rs +1 -2
- package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +37 -55
- package/contracts/message-libs/uln-302/src/uln302.rs +8 -5
- package/contracts/oapps/counter/src/counter.rs +0 -1
- package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +306 -224
- package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +0 -1
- package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +0 -1
- package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +0 -1
- package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +0 -1
- package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_core.rs +1 -0
- package/contracts/oapps/oft/integration-tests/setup.rs +10 -3
- package/contracts/oapps/oft/integration-tests/utils.rs +1 -1
- package/contracts/oapps/oft/src/default_oft_impl.rs +9 -3
- package/contracts/oapps/oft/src/extensions/oft_fee.rs +5 -5
- package/contracts/oapps/oft/src/extensions/pausable.rs +1 -1
- package/contracts/oapps/oft/src/extensions/rate_limiter.rs +18 -18
- package/contracts/oapps/oft/src/oft.rs +9 -9
- package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +1 -1
- package/contracts/oapps/oft/src/tests/extensions/setup.rs +26 -11
- package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +1 -1
- package/contracts/oapps/oft/src/tests/test_send.rs +4 -4
- package/contracts/oapps/oft/src/tests/test_utils.rs +93 -74
- package/contracts/oapps/oft-std/Cargo.toml +6 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/mod.rs +3 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/test_oft_fee.rs +157 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/test_pausable.rs +162 -0
- package/contracts/oapps/oft-std/integration-tests/extensions/test_rate_limiter.rs +186 -0
- package/contracts/oapps/oft-std/integration-tests/mod.rs +3 -0
- package/contracts/oapps/oft-std/integration-tests/setup.rs +245 -0
- package/contracts/oapps/oft-std/integration-tests/utils.rs +427 -0
- package/contracts/oapps/oft-std/src/lib.rs +12 -1
- package/contracts/oapps/oft-std/src/oft.rs +122 -25
- package/contracts/upgrader/Cargo.toml +19 -0
- package/contracts/upgrader/src/lib.rs +96 -0
- package/contracts/upgrader/src/tests/mod.rs +1 -0
- package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract1.wasm +0 -0
- package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract2.wasm +0 -0
- package/contracts/upgrader/src/tests/test_upgrader.rs +120 -0
- package/contracts/utils/src/errors.rs +6 -1
- package/contracts/utils/src/lib.rs +2 -1
- package/contracts/utils/src/ownable.rs +49 -61
- package/contracts/utils/src/tests/mod.rs +3 -1
- package/contracts/utils/src/tests/option_ext.rs +21 -0
- package/contracts/utils/src/tests/ownable.rs +10 -69
- package/contracts/utils/src/tests/ttl_configurable.rs +596 -0
- package/contracts/utils/src/tests/upgradeable.rs +288 -0
- package/contracts/utils/src/{ttl.rs → ttl_configurable.rs} +67 -52
- package/contracts/utils/src/upgradeable.rs +54 -0
- package/contracts/workers/dvn/Cargo.toml +1 -1
- package/contracts/workers/dvn/src/auth.rs +21 -32
- package/contracts/workers/dvn/src/dvn.rs +40 -3
- package/contracts/workers/dvn/src/errors.rs +1 -0
- package/contracts/workers/dvn/src/multisig.rs +10 -6
- package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +2 -2
- package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +4 -4
- package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -2
- package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +46 -14
- package/contracts/workers/dvn-fee-lib/src/errors.rs +3 -2
- package/contracts/workers/dvn-fee-lib/src/lib.rs +5 -11
- package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +30 -16
- package/contracts/workers/executor/src/executor.rs +16 -2
- package/contracts/workers/executor-fee-lib/src/errors.rs +9 -7
- package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +154 -119
- package/contracts/workers/executor-helper/Cargo.toml +0 -5
- package/contracts/workers/executor-helper/src/lib.rs +1 -7
- package/contracts/workers/price-feed/Cargo.toml +0 -1
- package/contracts/workers/price-feed/src/errors.rs +3 -2
- package/contracts/workers/price-feed/src/lib.rs +5 -6
- package/contracts/workers/price-feed/src/price_feed.rs +39 -17
- package/contracts/workers/worker/Cargo.toml +4 -0
- package/contracts/workers/worker/src/interfaces/price_feed.rs +3 -3
- package/contracts/workers/worker/src/lib.rs +2 -2
- package/contracts/workers/worker/src/tests/mod.rs +4 -0
- package/contracts/workers/worker/src/tests/setup.rs +147 -0
- package/contracts/workers/worker/src/tests/worker.rs +501 -0
- package/contracts/workers/worker/src/worker.rs +10 -16
- package/package.json +3 -3
- package/sdk/dist/generated/bml.d.ts +40 -30
- package/sdk/dist/generated/bml.js +16 -11
- package/sdk/dist/generated/counter.d.ts +168 -134
- package/sdk/dist/generated/counter.js +26 -21
- package/sdk/dist/generated/dvn.d.ts +1932 -0
- package/sdk/dist/generated/dvn.js +288 -0
- package/sdk/dist/generated/dvn_fee_lib.d.ts +615 -0
- package/sdk/dist/generated/dvn_fee_lib.js +123 -0
- package/sdk/dist/generated/endpoint.d.ts +75 -41
- package/sdk/dist/generated/endpoint.js +22 -17
- package/sdk/dist/generated/executor.d.ts +1809 -0
- package/sdk/dist/generated/executor.js +269 -0
- package/sdk/dist/generated/executor_fee_lib.d.ts +999 -0
- package/sdk/dist/generated/executor_fee_lib.js +208 -0
- package/sdk/dist/generated/executor_helper.d.ts +869 -0
- package/sdk/dist/generated/executor_helper.js +187 -0
- package/sdk/dist/generated/oft_std.d.ts +1544 -0
- package/sdk/dist/generated/oft_std.js +271 -0
- package/sdk/dist/generated/price_feed.d.ts +1002 -0
- package/sdk/dist/generated/price_feed.js +170 -0
- package/sdk/dist/generated/sml.d.ts +75 -41
- package/sdk/dist/generated/sml.js +22 -17
- package/sdk/dist/generated/uln302.d.ts +79 -60
- package/sdk/dist/generated/uln302.js +37 -37
- package/sdk/dist/generated/upgrader.d.ts +70 -0
- package/sdk/dist/generated/upgrader.js +19 -0
- package/sdk/dist/index.d.ts +8 -0
- package/sdk/dist/index.js +11 -0
- package/sdk/package.json +4 -3
- package/sdk/src/index.ts +13 -0
- package/sdk/test/index.test.ts +0 -1
- package/sdk/test/oft.test.ts +12 -23
- package/sdk/test/suites/testUpgradeable.ts +169 -0
- package/sdk/test/upgrader.test.ts +309 -0
- package/tools/ts-bindings-gen/src/main.rs +11 -1
- package/contracts/endpoint-v2/src/tests/messaging_channel/clear.rs +0 -316
- package/contracts/endpoint-v2/src/tests/messaging_channel/internal.rs +0 -388
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +0 -162
- package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +0 -319
- package/contracts/utils/src/tests/ttl.rs +0 -421
- /package/contracts/{oapp-macros → oapps/oapp-macros}/Cargo.toml +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/lib.rs +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_full.rs +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_options_type3.rs +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_receiver.rs +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_sender.rs +0 -0
- /package/contracts/{oapp-macros → oapps/oapp-macros}/src/util.rs +0 -0
package/sdk/test/oft.test.ts
CHANGED
|
@@ -197,7 +197,6 @@ describe('OFT E2E Testing with SAC', async () => {
|
|
|
197
197
|
{ contract: CONTRACT_ADDRESSES.executorHelper, fn_name: 'native_drop_and_execute' },
|
|
198
198
|
{ contract: CONTRACT_ADDRESSES.executorHelper, fn_name: 'execute' },
|
|
199
199
|
{ contract: CONTRACT_ADDRESSES.executorHelper, fn_name: 'compose' },
|
|
200
|
-
{ contract: CONTRACT_ADDRESSES.executorHelper, fn_name: 'native_drop' },
|
|
201
200
|
];
|
|
202
201
|
|
|
203
202
|
executorClient = await deployContract<ExecutorClient>(
|
|
@@ -286,7 +285,7 @@ describe('OFT E2E Testing with SAC', async () => {
|
|
|
286
285
|
endpoint: CONTRACT_ADDRESSES.endpointV2,
|
|
287
286
|
delegate: DEFAULT_DEPLOYER.publicKey(),
|
|
288
287
|
shared_decimals: SHARED_DECIMALS,
|
|
289
|
-
|
|
288
|
+
mode: { tag: 'LockUnlock' }, // Lock/Unlock mode
|
|
290
289
|
},
|
|
291
290
|
DEFAULT_DEPLOYER,
|
|
292
291
|
);
|
|
@@ -295,8 +294,8 @@ describe('OFT E2E Testing with SAC', async () => {
|
|
|
295
294
|
console.log('✅ Lock/Unlock OFT deployed:', CONTRACT_ADDRESSES.lockUnlockOft);
|
|
296
295
|
|
|
297
296
|
// Verify it's in lock/unlock mode
|
|
298
|
-
const { result:
|
|
299
|
-
expect(
|
|
297
|
+
const { result: mode } = await lockUnlockOftClient.mode();
|
|
298
|
+
expect(mode).toEqual({ tag: 'LockUnlock' });
|
|
300
299
|
});
|
|
301
300
|
|
|
302
301
|
it('Deploy Mint/Burn OFT', async () => {
|
|
@@ -309,7 +308,7 @@ describe('OFT E2E Testing with SAC', async () => {
|
|
|
309
308
|
endpoint: CONTRACT_ADDRESSES.endpointV2,
|
|
310
309
|
delegate: DEFAULT_DEPLOYER.publicKey(),
|
|
311
310
|
shared_decimals: SHARED_DECIMALS,
|
|
312
|
-
|
|
311
|
+
mode: { tag: 'MintBurn' }, // Mint/Burn mode
|
|
313
312
|
},
|
|
314
313
|
DEFAULT_DEPLOYER,
|
|
315
314
|
);
|
|
@@ -318,8 +317,8 @@ describe('OFT E2E Testing with SAC', async () => {
|
|
|
318
317
|
console.log('✅ Mint/Burn OFT deployed:', CONTRACT_ADDRESSES.mintBurnOft);
|
|
319
318
|
|
|
320
319
|
// Verify it's in mint/burn mode
|
|
321
|
-
const { result:
|
|
322
|
-
expect(
|
|
320
|
+
const { result: mode } = await mintBurnOftClient.mode();
|
|
321
|
+
expect(mode).toEqual({ tag: 'MintBurn' });
|
|
323
322
|
});
|
|
324
323
|
|
|
325
324
|
it('Verify all contracts deployed', () => {
|
|
@@ -594,15 +593,9 @@ describe('OFT E2E Testing with SAC', async () => {
|
|
|
594
593
|
src_eid: EID,
|
|
595
594
|
};
|
|
596
595
|
|
|
597
|
-
|
|
598
|
-
const assembledTx = await executorHelperClient.native_drop_and_execute({
|
|
596
|
+
const assembledTx = await executorHelperClient.execute({
|
|
599
597
|
executor: CONTRACT_ADDRESSES.executor,
|
|
600
|
-
|
|
601
|
-
origin,
|
|
602
|
-
dst_eid: EID,
|
|
603
|
-
oapp: CONTRACT_ADDRESSES.mintBurnOft,
|
|
604
|
-
native_drop_params: [],
|
|
605
|
-
execute_params: {
|
|
598
|
+
params: {
|
|
606
599
|
extra_data: Buffer.from([]),
|
|
607
600
|
gas_limit: 0n,
|
|
608
601
|
guid,
|
|
@@ -611,6 +604,7 @@ describe('OFT E2E Testing with SAC', async () => {
|
|
|
611
604
|
receiver: CONTRACT_ADDRESSES.mintBurnOft,
|
|
612
605
|
value: 0n,
|
|
613
606
|
},
|
|
607
|
+
value_payer: EXECUTOR_ADMIN.publicKey(),
|
|
614
608
|
});
|
|
615
609
|
|
|
616
610
|
// Sign the Executor's auth entries
|
|
@@ -770,15 +764,9 @@ describe('OFT E2E Testing with SAC', async () => {
|
|
|
770
764
|
src_eid: EID,
|
|
771
765
|
};
|
|
772
766
|
|
|
773
|
-
|
|
774
|
-
const assembledTx = await executorHelperClient.native_drop_and_execute({
|
|
767
|
+
const assembledTx = await executorHelperClient.execute({
|
|
775
768
|
executor: CONTRACT_ADDRESSES.executor,
|
|
776
|
-
|
|
777
|
-
origin,
|
|
778
|
-
dst_eid: EID,
|
|
779
|
-
oapp: CONTRACT_ADDRESSES.lockUnlockOft,
|
|
780
|
-
native_drop_params: [],
|
|
781
|
-
execute_params: {
|
|
769
|
+
params: {
|
|
782
770
|
extra_data: Buffer.from([]),
|
|
783
771
|
gas_limit: 0n,
|
|
784
772
|
guid,
|
|
@@ -787,6 +775,7 @@ describe('OFT E2E Testing with SAC', async () => {
|
|
|
787
775
|
receiver: CONTRACT_ADDRESSES.lockUnlockOft,
|
|
788
776
|
value: 0n,
|
|
789
777
|
},
|
|
778
|
+
value_payer: EXECUTOR_ADMIN.publicKey(),
|
|
790
779
|
});
|
|
791
780
|
|
|
792
781
|
// Sign the Executor's auth entries
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import type { Option, u32 } from '@stellar/stellar-sdk/contract';
|
|
2
|
+
import {
|
|
3
|
+
AssembledTransaction,
|
|
4
|
+
Client as ContractClient,
|
|
5
|
+
ClientOptions as ContractClientOptions,
|
|
6
|
+
MethodOptions,
|
|
7
|
+
Spec as ContractSpec,
|
|
8
|
+
} from '@stellar/stellar-sdk/contract';
|
|
9
|
+
import { Buffer } from 'buffer';
|
|
10
|
+
export * from '@stellar/stellar-sdk';
|
|
11
|
+
export * as contract from '@stellar/stellar-sdk/contract';
|
|
12
|
+
export * as rpc from '@stellar/stellar-sdk/rpc';
|
|
13
|
+
|
|
14
|
+
if (typeof window !== 'undefined') {
|
|
15
|
+
//@ts-ignore Buffer exists
|
|
16
|
+
window.Buffer = window.Buffer || Buffer;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const BufferReaderError = {
|
|
20
|
+
1000: { message: 'InvalidLength' },
|
|
21
|
+
1001: { message: 'InvalidAddressPayload' },
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const BufferWriterError = {
|
|
25
|
+
1100: { message: 'InvalidAddressPayload' },
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export const TtlError = {
|
|
29
|
+
1200: { message: 'InvalidTtlConfig' },
|
|
30
|
+
1201: { message: 'TtlConfigFrozen' },
|
|
31
|
+
1202: { message: 'TtlConfigAlreadyFrozen' },
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const OwnableError = {
|
|
35
|
+
1300: { message: 'OwnerAlreadySet' },
|
|
36
|
+
1301: { message: 'OwnerNotSet' },
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export const BytesExtError = {
|
|
40
|
+
1400: { message: 'LengthMismatch' },
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export const UpgradeableError = {
|
|
44
|
+
1500: { message: 'MigrationNotAllowed' },
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export type DefaultOwnableStorage = { tag: 'Owner'; values: void };
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* A pair of TTL values: threshold (when to trigger extension) and extend_to (target TTL).
|
|
51
|
+
*/
|
|
52
|
+
export interface TtlConfig {
|
|
53
|
+
/**
|
|
54
|
+
* Target TTL after extension (in ledgers).
|
|
55
|
+
*/
|
|
56
|
+
extend_to: u32;
|
|
57
|
+
/**
|
|
58
|
+
* TTL threshold that triggers extension (in ledgers).
|
|
59
|
+
*/
|
|
60
|
+
threshold: u32;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export type TtlConfigStorage =
|
|
64
|
+
| { tag: 'Frozen'; values: void }
|
|
65
|
+
| { tag: 'Instance'; values: void }
|
|
66
|
+
| { tag: 'Persistent'; values: void };
|
|
67
|
+
|
|
68
|
+
export type UpgradeableStorage = { tag: 'Migrating'; values: void };
|
|
69
|
+
|
|
70
|
+
export interface Client {
|
|
71
|
+
/**
|
|
72
|
+
* Construct and simulate a owner transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
|
|
73
|
+
*/
|
|
74
|
+
owner: (options?: MethodOptions) => Promise<AssembledTransaction<Option<string>>>;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Construct and simulate a transfer_ownership transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
|
|
78
|
+
*/
|
|
79
|
+
transfer_ownership: (
|
|
80
|
+
{ new_owner }: { new_owner: string },
|
|
81
|
+
options?: MethodOptions,
|
|
82
|
+
) => Promise<AssembledTransaction<null>>;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Construct and simulate a renounce_ownership transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
|
|
86
|
+
*/
|
|
87
|
+
renounce_ownership: (options?: MethodOptions) => Promise<AssembledTransaction<null>>;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Construct and simulate a upgrade transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
|
|
91
|
+
*/
|
|
92
|
+
upgrade: (
|
|
93
|
+
{ new_wasm_hash }: { new_wasm_hash: Buffer },
|
|
94
|
+
options?: MethodOptions,
|
|
95
|
+
) => Promise<AssembledTransaction<null>>;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Construct and simulate a migrate transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
|
|
99
|
+
*/
|
|
100
|
+
migrate: (
|
|
101
|
+
{ migration_data }: { migration_data: MigrationData },
|
|
102
|
+
options?: MethodOptions,
|
|
103
|
+
) => Promise<AssembledTransaction<null>>;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Construct and simulate a counter transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
|
|
107
|
+
*/
|
|
108
|
+
counter: (options?: MethodOptions) => Promise<AssembledTransaction<u32>>;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Construct and simulate a counter2 transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
|
|
112
|
+
*/
|
|
113
|
+
counter2: (options?: MethodOptions) => Promise<AssembledTransaction<u32>>;
|
|
114
|
+
}
|
|
115
|
+
export class Client extends ContractClient {
|
|
116
|
+
static async deploy<T = Client>(
|
|
117
|
+
/** Options for initializing a Client as well as for calling a method, with extras specific to deploying. */
|
|
118
|
+
options: MethodOptions &
|
|
119
|
+
Omit<ContractClientOptions, 'contractId'> & {
|
|
120
|
+
/** The hash of the Wasm blob, which must already be installed on-chain. */
|
|
121
|
+
wasmHash: Buffer | string;
|
|
122
|
+
/** Salt used to generate the contract's ID. Passed through to {@link Operation.createCustomContract}. Default: random. */
|
|
123
|
+
salt?: Buffer | Uint8Array;
|
|
124
|
+
/** The format used to decode `wasmHash`, if it's provided as a string. */
|
|
125
|
+
format?: 'hex' | 'base64';
|
|
126
|
+
},
|
|
127
|
+
): Promise<AssembledTransaction<T>> {
|
|
128
|
+
return ContractClient.deploy(null, options);
|
|
129
|
+
}
|
|
130
|
+
constructor(public readonly options: ContractClientOptions) {
|
|
131
|
+
super(
|
|
132
|
+
new ContractSpec([
|
|
133
|
+
'AAAAAAAAAAAAAAAFb3duZXIAAAAAAAAAAAAAAQAAA+gAAAAT',
|
|
134
|
+
'AAAAAAAAAAAAAAASdHJhbnNmZXJfb3duZXJzaGlwAAAAAAABAAAAAAAAAAluZXdfb3duZXIAAAAAAAATAAAAAA==',
|
|
135
|
+
'AAAAAAAAAAAAAAAScmVub3VuY2Vfb3duZXJzaGlwAAAAAAAAAAAAAA==',
|
|
136
|
+
'AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAAA',
|
|
137
|
+
'AAAAAAAAAAAAAAAHbWlncmF0ZQAAAAABAAAAAAAAAA5taWdyYXRpb25fZGF0YQAAAAAH0AAAAA1NaWdyYXRpb25EYXRhAAAAAAAAAA==',
|
|
138
|
+
'AAAAAAAAAAAAAAAHY291bnRlcgAAAAAAAAAAAQAAAAQ=',
|
|
139
|
+
'AAAAAAAAAAAAAAAIY291bnRlcjIAAAAAAAAAAQAAAAQ=',
|
|
140
|
+
'AAAABAAAAAAAAAAAAAAAEUJ1ZmZlclJlYWRlckVycm9yAAAAAAAAAgAAAAAAAAANSW52YWxpZExlbmd0aAAAAAAAA+gAAAAAAAAAFUludmFsaWRBZGRyZXNzUGF5bG9hZAAAAAAAA+k=',
|
|
141
|
+
'AAAABAAAAAAAAAAAAAAAEUJ1ZmZlcldyaXRlckVycm9yAAAAAAAAAQAAAAAAAAAVSW52YWxpZEFkZHJlc3NQYXlsb2FkAAAAAAAETA==',
|
|
142
|
+
'AAAABAAAAAAAAAAAAAAACFR0bEVycm9yAAAAAwAAAAAAAAAQSW52YWxpZFR0bENvbmZpZwAABLAAAAAAAAAAD1R0bENvbmZpZ0Zyb3plbgAAAASxAAAAAAAAABZUdGxDb25maWdBbHJlYWR5RnJvemVuAAAAAASy',
|
|
143
|
+
'AAAABAAAAAAAAAAAAAAADE93bmFibGVFcnJvcgAAAAIAAAAAAAAAD093bmVyQWxyZWFkeVNldAAAAAUUAAAAAAAAAAtPd25lck5vdFNldAAAAAUV',
|
|
144
|
+
'AAAABAAAAAAAAAAAAAAADUJ5dGVzRXh0RXJyb3IAAAAAAAABAAAAAAAAAA5MZW5ndGhNaXNtYXRjaAAAAAAFeA==',
|
|
145
|
+
'AAAABAAAAAAAAAAAAAAAEFVwZ3JhZGVhYmxlRXJyb3IAAAABAAAAAAAAABNNaWdyYXRpb25Ob3RBbGxvd2VkAAAABdw=',
|
|
146
|
+
'AAAABQAAACxFdmVudCBlbWl0dGVkIHdoZW4gb3duZXJzaGlwIGlzIHRyYW5zZmVycmVkLgAAAAAAAAAUT3duZXJzaGlwVHJhbnNmZXJyZWQAAAABAAAAFE93bmVyc2hpcFRyYW5zZmVycmVkAAAAAgAAAAAAAAAJb2xkX293bmVyAAAAAAAAEwAAAAAAAAAAAAAACW5ld19vd25lcgAAAAAAABMAAAAAAAAAAg==',
|
|
147
|
+
'AAAABQAAACpFdmVudCBlbWl0dGVkIHdoZW4gb3duZXJzaGlwIGlzIHJlbm91bmNlZC4AAAAAAAAAAAAST3duZXJzaGlwUmVub3VuY2VkAAAAAAABAAAAEk93bmVyc2hpcFJlbm91bmNlZAAAAAAAAQAAAAAAAAAJb2xkX293bmVyAAAAAAAAEwAAAAAAAAAC',
|
|
148
|
+
'AAAAAgAAAAAAAAAAAAAAFURlZmF1bHRPd25hYmxlU3RvcmFnZQAAAAAAAAEAAAAAAAAAAAAAAAVPd25lcgAAAA==',
|
|
149
|
+
'AAAAAQAAAFdBIHBhaXIgb2YgVFRMIHZhbHVlczogdGhyZXNob2xkICh3aGVuIHRvIHRyaWdnZXIgZXh0ZW5zaW9uKSBhbmQgZXh0ZW5kX3RvICh0YXJnZXQgVFRMKS4AAAAAAAAAAAlUdGxDb25maWcAAAAAAAACAAAAKFRhcmdldCBUVEwgYWZ0ZXIgZXh0ZW5zaW9uIChpbiBsZWRnZXJzKS4AAAAJZXh0ZW5kX3RvAAAAAAAABAAAADNUVEwgdGhyZXNob2xkIHRoYXQgdHJpZ2dlcnMgZXh0ZW5zaW9uIChpbiBsZWRnZXJzKS4AAAAACXRocmVzaG9sZAAAAAAAAAQ=',
|
|
150
|
+
'AAAAAgAAAAAAAAAAAAAAEFR0bENvbmZpZ1N0b3JhZ2UAAAADAAAAAAAAAAAAAAAGRnJvemVuAAAAAAAAAAAAAAAAAAhJbnN0YW5jZQAAAAAAAAAAAAAAClBlcnNpc3RlbnQAAA==',
|
|
151
|
+
'AAAABQAAACdFdmVudCBlbWl0dGVkIHdoZW4gVFRMIGNvbmZpZ3MgYXJlIHNldC4AAAAAAAAAAA1UdGxDb25maWdzU2V0AAAAAAAAAQAAAA1UdGxDb25maWdzU2V0AAAAAAAAAgAAAAAAAAAIaW5zdGFuY2UAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAAAAAAAAAAAAApwZXJzaXN0ZW50AAAAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAAAAAAAAg==',
|
|
152
|
+
'AAAABQAAACpFdmVudCBlbWl0dGVkIHdoZW4gVFRMIGNvbmZpZ3MgYXJlIGZyb3plbi4AAAAAAAAAAAAQVHRsQ29uZmlnc0Zyb3plbgAAAAEAAAAQVHRsQ29uZmlnc0Zyb3plbgAAAAAAAAAC',
|
|
153
|
+
'AAAAAgAAAAAAAAAAAAAAElVwZ3JhZGVhYmxlU3RvcmFnZQAAAAAAAQAAAAAAAAAAAAAACU1pZ3JhdGluZwAAAA==',
|
|
154
|
+
]),
|
|
155
|
+
options,
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
public readonly fromJSON = {
|
|
159
|
+
owner: this.txFromJSON<Option<string>>,
|
|
160
|
+
transfer_ownership: this.txFromJSON<null>,
|
|
161
|
+
renounce_ownership: this.txFromJSON<null>,
|
|
162
|
+
upgrade: this.txFromJSON<null>,
|
|
163
|
+
migrate: this.txFromJSON<null>,
|
|
164
|
+
counter: this.txFromJSON<u32>,
|
|
165
|
+
counter2: this.txFromJSON<u32>,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export type MigrationData = void;
|
|
@@ -0,0 +1,309 @@
|
|
|
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 { afterAll, beforeAll, 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 { startStellarLocalnet, stopStellarLocalnet } from './suites/localnet';
|
|
14
|
+
import { Client as TestUpgradeableContractClient } from './suites/testUpgradeable';
|
|
15
|
+
|
|
16
|
+
let upgraderClient: UpgraderClient;
|
|
17
|
+
let testContractClient: TestUpgradeableContractClient;
|
|
18
|
+
let testContractAddress: string;
|
|
19
|
+
|
|
20
|
+
// Test data paths
|
|
21
|
+
let TEST_CONTRACT_V1_WASM_PATH: string;
|
|
22
|
+
let TEST_CONTRACT_V2_WASM_PATH: string;
|
|
23
|
+
|
|
24
|
+
describe('Upgrader Contract Testing', async () => {
|
|
25
|
+
const repoRoot = await getFullyQualifiedRepoRootPath();
|
|
26
|
+
const upgraderWasmDir = path.join(
|
|
27
|
+
repoRoot,
|
|
28
|
+
'contracts',
|
|
29
|
+
'protocol',
|
|
30
|
+
'stellar',
|
|
31
|
+
'target',
|
|
32
|
+
'wasm32v1-none',
|
|
33
|
+
'release',
|
|
34
|
+
);
|
|
35
|
+
const testDataDir = path.join(
|
|
36
|
+
repoRoot,
|
|
37
|
+
'contracts',
|
|
38
|
+
'protocol',
|
|
39
|
+
'stellar',
|
|
40
|
+
'contracts',
|
|
41
|
+
'upgrader',
|
|
42
|
+
'src',
|
|
43
|
+
'tests',
|
|
44
|
+
'test_data',
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
const UPGRADER_WASM_PATH = path.join(upgraderWasmDir, 'upgrader.wasm');
|
|
48
|
+
TEST_CONTRACT_V1_WASM_PATH = path.join(testDataDir, 'test_upgradeable_contract1.wasm');
|
|
49
|
+
TEST_CONTRACT_V2_WASM_PATH = path.join(testDataDir, 'test_upgradeable_contract2.wasm');
|
|
50
|
+
|
|
51
|
+
beforeAll(async () => {
|
|
52
|
+
await startStellarLocalnet();
|
|
53
|
+
}, 120000); // 2 minute timeout for setup
|
|
54
|
+
|
|
55
|
+
afterAll(async () => {
|
|
56
|
+
await stopStellarLocalnet();
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
describe('Contract Deployments', () => {
|
|
60
|
+
it('Deploy Upgrader Contract', async () => {
|
|
61
|
+
// Deploy upgrader contract using the helper (no constructor args needed)
|
|
62
|
+
upgraderClient = await deployContract<UpgraderClient>(
|
|
63
|
+
UpgraderClient,
|
|
64
|
+
UPGRADER_WASM_PATH,
|
|
65
|
+
undefined,
|
|
66
|
+
DEFAULT_DEPLOYER,
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
console.log('✅ Upgrader deployed at:', upgraderClient.options.contractId);
|
|
70
|
+
expect(upgraderClient.options.contractId).toBeDefined();
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('Deploy Test Upgradeable Contract V1', async () => {
|
|
74
|
+
console.log('📖 Reading Test Contract V1 WASM file from:', TEST_CONTRACT_V1_WASM_PATH);
|
|
75
|
+
|
|
76
|
+
const server = new rpc.Server(RPC_URL, { allowHttp: true });
|
|
77
|
+
|
|
78
|
+
// Read and upload WASM
|
|
79
|
+
const wasmBuffer = readFileSync(TEST_CONTRACT_V1_WASM_PATH);
|
|
80
|
+
const wasmHash = await uploadWasm(wasmBuffer, DEFAULT_DEPLOYER, server);
|
|
81
|
+
console.log('✅ Test Contract V1 WASM uploaded, hash:', wasmHash);
|
|
82
|
+
|
|
83
|
+
// Deploy test contract V1 with owner as constructor arg
|
|
84
|
+
console.log('🚀 Deploying Test Contract V1...');
|
|
85
|
+
const { TransactionBuilder, Operation, StrKey, Address } = await import(
|
|
86
|
+
'@stellar/stellar-sdk'
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
const account = await server.getAccount(DEFAULT_DEPLOYER.publicKey());
|
|
90
|
+
const salt = Buffer.from(Keypair.random().rawPublicKey());
|
|
91
|
+
|
|
92
|
+
// Create contract from WASM with constructor args
|
|
93
|
+
const wasmHashBuffer = Buffer.from(wasmHash, 'hex');
|
|
94
|
+
|
|
95
|
+
// Encode constructor args: owner (Address)
|
|
96
|
+
const ownerScVal = Address.fromString(DEFAULT_DEPLOYER.publicKey()).toScVal();
|
|
97
|
+
|
|
98
|
+
const createContractTx = new TransactionBuilder(account, {
|
|
99
|
+
fee: '100000',
|
|
100
|
+
networkPassphrase: NETWORK_PASSPHRASE,
|
|
101
|
+
})
|
|
102
|
+
.addOperation(
|
|
103
|
+
Operation.createCustomContract({
|
|
104
|
+
address: Address.fromString(DEFAULT_DEPLOYER.publicKey()),
|
|
105
|
+
wasmHash: wasmHashBuffer,
|
|
106
|
+
salt: salt,
|
|
107
|
+
constructorArgs: [ownerScVal],
|
|
108
|
+
}),
|
|
109
|
+
)
|
|
110
|
+
.setTimeout(30)
|
|
111
|
+
.build();
|
|
112
|
+
|
|
113
|
+
// Simulate to get the contract ID
|
|
114
|
+
const simulated = await server.simulateTransaction(createContractTx);
|
|
115
|
+
const preparedTx = rpc.assembleTransaction(createContractTx, simulated).build();
|
|
116
|
+
preparedTx.sign(DEFAULT_DEPLOYER);
|
|
117
|
+
|
|
118
|
+
const sendResult = await server.sendTransaction(preparedTx);
|
|
119
|
+
if (sendResult.status !== 'PENDING') {
|
|
120
|
+
throw new Error(`Transaction failed: ${JSON.stringify(sendResult)}`);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const txResult = await server.pollTransaction(sendResult.hash);
|
|
124
|
+
if (txResult.status !== 'SUCCESS') {
|
|
125
|
+
throw new Error(`Transaction not successful: ${JSON.stringify(txResult)}`);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Extract contract address from the transaction result
|
|
129
|
+
const returnValue = txResult.returnValue;
|
|
130
|
+
if (!returnValue) {
|
|
131
|
+
throw new Error('No return value from contract creation');
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// The return value is an Address ScVal, decode it
|
|
135
|
+
const contractIdHash = returnValue.address().contractId();
|
|
136
|
+
testContractAddress = StrKey.encodeContract(
|
|
137
|
+
Buffer.from(contractIdHash as unknown as Uint8Array),
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
// Create client for the deployed contract
|
|
141
|
+
testContractClient = new TestUpgradeableContractClient({
|
|
142
|
+
contractId: testContractAddress,
|
|
143
|
+
publicKey: DEFAULT_DEPLOYER.publicKey(),
|
|
144
|
+
signTransaction: async (tx: string) => {
|
|
145
|
+
const transaction = TransactionBuilder.fromXDR(tx, NETWORK_PASSPHRASE);
|
|
146
|
+
transaction.sign(DEFAULT_DEPLOYER);
|
|
147
|
+
return {
|
|
148
|
+
signedTxXdr: transaction.toXDR(),
|
|
149
|
+
signerAddress: DEFAULT_DEPLOYER.publicKey(),
|
|
150
|
+
};
|
|
151
|
+
},
|
|
152
|
+
rpcUrl: RPC_URL,
|
|
153
|
+
networkPassphrase: NETWORK_PASSPHRASE,
|
|
154
|
+
allowHttp: true,
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
console.log('✅ Test Contract V1 deployed at:', testContractAddress);
|
|
158
|
+
expect(testContractAddress).toBeDefined();
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
it('Verify Test Contract V1 Counter', async () => {
|
|
162
|
+
// Call counter() on V1 contract, should return 1
|
|
163
|
+
const { result } = await testContractClient.counter();
|
|
164
|
+
console.log('✅ Test Contract V1 counter value:', result);
|
|
165
|
+
expect(result).toBe(1);
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
describe('Upgrade Workflow', () => {
|
|
170
|
+
let newWasmHash: string;
|
|
171
|
+
|
|
172
|
+
it('Upload Test Contract V2 WASM', async () => {
|
|
173
|
+
console.log('📖 Reading Test Contract V2 WASM file from:', TEST_CONTRACT_V2_WASM_PATH);
|
|
174
|
+
|
|
175
|
+
const server = new rpc.Server(RPC_URL, { allowHttp: true });
|
|
176
|
+
|
|
177
|
+
// Read and upload WASM for V2
|
|
178
|
+
const wasmBuffer = readFileSync(TEST_CONTRACT_V2_WASM_PATH);
|
|
179
|
+
newWasmHash = await uploadWasm(wasmBuffer, DEFAULT_DEPLOYER, server);
|
|
180
|
+
console.log('✅ Test Contract V2 WASM uploaded, hash:', newWasmHash);
|
|
181
|
+
expect(newWasmHash).toBeDefined();
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it('Test Upgrader Contract Can Be Called', async () => {
|
|
185
|
+
console.log('🔄 Testing upgrader contract call...');
|
|
186
|
+
console.log(' Contract address:', testContractAddress);
|
|
187
|
+
console.log(' New WASM hash:', newWasmHash);
|
|
188
|
+
|
|
189
|
+
// NOTE: Using Option 2 - Hybrid approach with generated client
|
|
190
|
+
// Build with generated client, then manually simulate with authMode, then inject back
|
|
191
|
+
|
|
192
|
+
const voidScVal = xdr.ScVal.scvVoid();
|
|
193
|
+
const server = new rpc.Server(RPC_URL, { allowHttp: true });
|
|
194
|
+
|
|
195
|
+
// 1. Build transaction using generated client (don't auto-simulate)
|
|
196
|
+
const assembledTx = await upgraderClient.upgrade_and_migrate(
|
|
197
|
+
{
|
|
198
|
+
contract_address: testContractAddress,
|
|
199
|
+
wasm_hash: Buffer.from(newWasmHash, 'hex'),
|
|
200
|
+
migration_data: [voidScVal],
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
simulate: false, // Don't simulate yet
|
|
204
|
+
},
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
console.log('✅ Transaction built with generated client');
|
|
208
|
+
|
|
209
|
+
// Build the transaction from the raw builder
|
|
210
|
+
const rawTx = assembledTx.raw!.build();
|
|
211
|
+
|
|
212
|
+
console.log('✅ Raw transaction built');
|
|
213
|
+
|
|
214
|
+
// 2. Manually simulate with record_allow_nonroot authMode
|
|
215
|
+
const sim = await server.simulateTransaction(
|
|
216
|
+
rawTx,
|
|
217
|
+
undefined, // addlResources
|
|
218
|
+
'record_allow_nonroot', // ← This enables non-root auth recording!
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
if (rpc.Api.isSimulationError(sim)) {
|
|
222
|
+
throw new Error(`Simulation failed: ${JSON.stringify(sim)}`);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
console.log('✅ Transaction simulated with record_allow_nonroot');
|
|
226
|
+
console.log(' Auth entries returned:', sim.result?.auth?.length ?? 0);
|
|
227
|
+
|
|
228
|
+
// 3. Sign auth entries manually (high-level API doesn't see them after injection)
|
|
229
|
+
const latestLedger = sim.latestLedger;
|
|
230
|
+
const validUntilLedger = latestLedger + 100;
|
|
231
|
+
|
|
232
|
+
if (sim.result && sim.result.auth) {
|
|
233
|
+
sim.result.auth = await Promise.all(
|
|
234
|
+
sim.result.auth.map(async (entry) => {
|
|
235
|
+
// Source account credentials are already signed by tx envelope
|
|
236
|
+
if (
|
|
237
|
+
entry.credentials().switch() ===
|
|
238
|
+
xdr.SorobanCredentialsType.sorobanCredentialsSourceAccount()
|
|
239
|
+
) {
|
|
240
|
+
console.log(' Skipping source account auth entry');
|
|
241
|
+
return entry;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// Address credentials need explicit signature
|
|
245
|
+
const addr = Address.fromScAddress(
|
|
246
|
+
entry.credentials().address().address(),
|
|
247
|
+
).toString();
|
|
248
|
+
|
|
249
|
+
console.log(' Signing auth entry for address:', addr);
|
|
250
|
+
|
|
251
|
+
if (addr === DEFAULT_DEPLOYER.publicKey()) {
|
|
252
|
+
// Sign with owner's keypair
|
|
253
|
+
return authorizeEntry(
|
|
254
|
+
entry,
|
|
255
|
+
DEFAULT_DEPLOYER,
|
|
256
|
+
validUntilLedger,
|
|
257
|
+
NETWORK_PASSPHRASE,
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
throw new Error(`Unexpected auth signer needed: ${addr}`);
|
|
262
|
+
}),
|
|
263
|
+
);
|
|
264
|
+
console.log('✅ Auth entries signed');
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// 4. Assemble final transaction with signed auth entries
|
|
268
|
+
const finalTxBuilder = assembleTransaction(rawTx, sim);
|
|
269
|
+
const finalTx = finalTxBuilder.build();
|
|
270
|
+
|
|
271
|
+
console.log('✅ Final transaction assembled');
|
|
272
|
+
|
|
273
|
+
// 5. Sign the transaction envelope
|
|
274
|
+
finalTx.sign(DEFAULT_DEPLOYER);
|
|
275
|
+
|
|
276
|
+
console.log('✅ Transaction envelope signed');
|
|
277
|
+
|
|
278
|
+
// 6. Send and poll
|
|
279
|
+
const sentResult = await server.sendTransaction(finalTx);
|
|
280
|
+
|
|
281
|
+
if (sentResult.status !== 'PENDING') {
|
|
282
|
+
throw new Error(`Transaction failed to send: ${JSON.stringify(sentResult)}`);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
console.log('✅ Transaction sent, hash:', sentResult.hash);
|
|
286
|
+
|
|
287
|
+
const txResult = await server.pollTransaction(sentResult.hash);
|
|
288
|
+
|
|
289
|
+
console.log('✅ Upgrade transaction completed');
|
|
290
|
+
console.log(' Transaction status:', txResult.status);
|
|
291
|
+
|
|
292
|
+
expect(txResult.status).toBe('SUCCESS');
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
it('Verify Test Contract V2 Counter2 After Upgrade', async () => {
|
|
296
|
+
// After upgrade, the contract should have counter2() function that returns 2
|
|
297
|
+
const { result } = await testContractClient.counter2();
|
|
298
|
+
console.log('✅ Test Contract V2 counter2 value:', result);
|
|
299
|
+
expect(result).toBe(2);
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
it('Verify Test Contract V1 Counter Still Works After Upgrade', async () => {
|
|
303
|
+
// The original counter() should still be accessible and return 1
|
|
304
|
+
const { result } = await testContractClient.counter();
|
|
305
|
+
console.log('✅ Test Contract V2 counter value (from V1):', result);
|
|
306
|
+
expect(result).toBe(1);
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
});
|
|
@@ -31,6 +31,8 @@ export * from '@stellar/stellar-sdk'
|
|
|
31
31
|
export * as contract from '@stellar/stellar-sdk/contract'
|
|
32
32
|
export * as rpc from '@stellar/stellar-sdk/rpc'
|
|
33
33
|
|
|
34
|
+
export type MigrationData = void;
|
|
35
|
+
|
|
34
36
|
|
|
35
37
|
"#
|
|
36
38
|
}
|
|
@@ -45,13 +47,21 @@ fn main() -> Result<()> {
|
|
|
45
47
|
// Configuration for each contract
|
|
46
48
|
// Format: (wasm_filename, ts_filename)
|
|
47
49
|
let contracts = vec![
|
|
50
|
+
// Protocol contracts
|
|
48
51
|
("endpoint_v2", "endpoint.ts"),
|
|
49
52
|
("simple_message_lib", "sml.ts"),
|
|
50
53
|
("blocked_message_lib", "bml.ts"),
|
|
51
54
|
("uln302", "uln302.ts"),
|
|
52
|
-
("
|
|
55
|
+
("upgrader", "upgrader.ts"),
|
|
56
|
+
// Worker contracts
|
|
57
|
+
("dvn", "dvn.ts"),
|
|
58
|
+
("dvn_fee_lib", "dvn_fee_lib.ts"),
|
|
53
59
|
("executor", "executor.ts"),
|
|
60
|
+
("executor_fee_lib", "executor_fee_lib.ts"),
|
|
54
61
|
("executor_helper", "executor_helper.ts"),
|
|
62
|
+
("price_feed", "price_feed.ts"),
|
|
63
|
+
// OApp contracts
|
|
64
|
+
("counter", "counter.ts"),
|
|
55
65
|
("oft_std", "oft_std.ts"),
|
|
56
66
|
// Add more contracts here as needed:
|
|
57
67
|
];
|