@layerzerolabs/protocol-stellar-v2 0.2.19 → 0.2.21
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 +795 -791
- package/.turbo/turbo-lint.log +325 -155
- package/.turbo/turbo-test.log +1398 -1277
- package/Cargo.lock +122 -111
- package/Cargo.toml +32 -16
- package/contracts/common-macros/Cargo.toml +7 -7
- package/contracts/common-macros/src/auth.rs +18 -37
- package/contracts/common-macros/src/contract_ttl.rs +18 -7
- package/contracts/common-macros/src/lib.rs +31 -14
- package/contracts/common-macros/src/lz_contract.rs +38 -7
- package/contracts/common-macros/src/storage.rs +251 -292
- package/contracts/common-macros/src/tests/contract_ttl.rs +1 -1
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +6 -12
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +12 -17
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap +2 -1
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +2 -7
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +20 -14
- package/contracts/common-macros/src/tests/upgradeable.rs +26 -4
- package/contracts/common-macros/src/ttl_configurable.rs +2 -10
- package/contracts/common-macros/src/ttl_extendable.rs +2 -10
- package/contracts/common-macros/src/upgradeable.rs +61 -26
- package/contracts/common-macros/src/utils.rs +0 -9
- package/contracts/endpoint-v2/src/lib.rs +3 -2
- package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +2 -2
- package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +3 -3
- package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +4 -4
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +17 -5
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +4 -4
- package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +2 -2
- package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +2 -2
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +6 -6
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +67 -37
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +5 -5
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +44 -54
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +7 -7
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +8 -8
- package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +3 -3
- package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +4 -4
- package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +3 -3
- package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +2 -2
- package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +3 -3
- package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +2 -2
- package/contracts/layerzero-views/Cargo.toml +0 -1
- package/contracts/layerzero-views/src/layerzero_view.rs +1 -13
- package/contracts/macro-integration-tests/Cargo.toml +5 -15
- package/contracts/macro-integration-tests/tests/runtime/oapp/mod.rs +48 -0
- package/contracts/macro-integration-tests/tests/runtime/oapp/oapp_core.rs +170 -0
- package/contracts/macro-integration-tests/tests/runtime/oapp/options_type3.rs +154 -0
- package/contracts/macro-integration-tests/tests/runtime/oapp/receiver.rs +338 -0
- package/contracts/macro-integration-tests/tests/runtime/oapp/sender.rs +435 -0
- package/contracts/macro-integration-tests/tests/runtime.rs +1 -0
- package/contracts/macro-integration-tests/tests/ui/oapp/fail/custom_wrong_value.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/oapp/fail/custom_wrong_value.stderr +5 -0
- package/contracts/macro-integration-tests/tests/ui/oapp/fail/missing_lz_receive_internal.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/oapp/fail/missing_lz_receive_internal.stderr +71 -0
- package/contracts/macro-integration-tests/tests/ui/oapp/fail/non_struct_input.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/oapp/fail/non_struct_input.stderr +5 -0
- package/contracts/macro-integration-tests/tests/ui/oapp/fail/unknown_custom_option.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/oapp/fail/unknown_custom_option.stderr +5 -0
- package/contracts/macro-integration-tests/tests/ui/oapp/fail/wrong_key.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/oapp/fail/wrong_key.stderr +5 -0
- package/contracts/macro-integration-tests/tests/ui/oapp/pass/custom_all.rs +38 -0
- package/contracts/macro-integration-tests/tests/ui/oapp/pass/custom_single_trait.rs +96 -0
- package/contracts/macro-integration-tests/tests/ui/oapp/pass/minimal_contract.rs +64 -0
- package/contracts/macro-integration-tests/tests/ui/oapp/pass/struct_with_fields.rs +46 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.stderr +8 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +1 -1
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_auth_env_param_variants.rs +1 -1
- package/contracts/macro-integration-tests/tests/ui_oapp.rs +11 -0
- package/contracts/message-libs/message-lib-common/Cargo.toml +0 -1
- package/contracts/message-libs/message-lib-common/src/errors.rs +1 -1
- package/contracts/message-libs/treasury/Cargo.toml +0 -2
- package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +2 -2
- package/contracts/message-libs/uln-302/src/events.rs +4 -0
- package/contracts/message-libs/uln-302/src/send_uln.rs +22 -6
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +2 -2
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +2 -2
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/verify.rs +2 -2
- package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_executor_config.rs +2 -2
- package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +2 -2
- package/contracts/message-libs/uln-302/src/tests/send_uln302/send.rs +21 -67
- 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 +2 -2
- package/contracts/oapps/counter/Cargo.toml +5 -6
- package/contracts/oapps/counter/integration_tests/setup_uln.rs +1 -1
- package/contracts/oapps/counter/integration_tests/utils.rs +19 -12
- package/contracts/oapps/oapp/src/errors.rs +1 -1
- package/contracts/oapps/oapp/src/interfaces/mod.rs +3 -0
- package/contracts/oapps/oapp/src/interfaces/oapp_msg_inspector.rs +47 -0
- package/contracts/oapps/oapp/src/lib.rs +1 -0
- package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +4 -4
- package/contracts/oapps/oapp/src/oapp_core.rs +5 -5
- package/contracts/oapps/oapp/src/oapp_options_type3.rs +12 -4
- package/contracts/oapps/oapp/src/oapp_receiver.rs +14 -9
- package/contracts/oapps/oapp/src/tests/mod.rs +4 -4
- package/contracts/oapps/oapp/src/tests/oapp_core.rs +223 -0
- package/contracts/oapps/oapp/src/tests/oapp_options_type3.rs +240 -0
- package/contracts/oapps/oapp/src/tests/oapp_receiver.rs +381 -0
- package/contracts/oapps/oapp/src/tests/oapp_sender.rs +569 -0
- package/contracts/oapps/oapp-macros/Cargo.toml +8 -4
- package/contracts/oapps/oapp-macros/src/generators.rs +9 -34
- package/contracts/oapps/oapp-macros/src/lib.rs +3 -0
- package/contracts/oapps/oapp-macros/src/tests/mod.rs +2 -0
- package/contracts/oapps/oapp-macros/src/tests/oapp.rs +88 -0
- package/contracts/oapps/oapp-macros/src/tests/parse_custom_impls.rs +86 -0
- package/contracts/oapps/oapp-macros/src/tests/snapshots/oapp_macros__tests__oapp__snapshot_generate_oapp.snap +103 -0
- package/contracts/oapps/oft/integration-tests/utils.rs +28 -8
- package/contracts/oapps/oft/src/extensions/oft_fee.rs +153 -75
- package/contracts/oapps/oft/src/extensions/pausable.rs +61 -12
- package/contracts/oapps/oft/src/extensions/rate_limiter.rs +198 -134
- package/contracts/oapps/oft/src/oft.rs +45 -50
- package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +1 -1
- package/contracts/oapps/oft/src/oft_types/mint_burn.rs +4 -26
- package/contracts/oapps/oft-core/Cargo.toml +1 -4
- package/contracts/oapps/oft-core/integration-tests/setup.rs +3 -3
- package/contracts/oapps/oft-core/integration-tests/utils.rs +21 -3
- package/contracts/oapps/oft-core/src/errors.rs +3 -2
- package/contracts/oapps/oft-core/src/events.rs +6 -0
- package/contracts/oapps/oft-core/src/lib.rs +1 -1
- package/contracts/oapps/oft-core/src/oft_core.rs +341 -246
- package/contracts/oapps/oft-core/src/storage.rs +7 -3
- package/contracts/oapps/oft-core/src/tests/mod.rs +1 -0
- package/contracts/oapps/oft-core/src/tests/test_decimals.rs +37 -2
- package/contracts/oapps/oft-core/src/tests/test_lz_receive.rs +2 -2
- package/contracts/oapps/oft-core/src/tests/test_msg_inspector.rs +323 -0
- package/contracts/oapps/oft-core/src/tests/test_send.rs +2 -2
- package/contracts/oapps/oft-core/src/tests/test_utils.rs +61 -16
- package/contracts/upgrader/src/lib.rs +30 -57
- 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 +44 -35
- package/contracts/utils/Cargo.toml +0 -1
- package/contracts/utils/src/buffer_reader.rs +1 -0
- package/contracts/utils/src/errors.rs +4 -2
- package/contracts/utils/src/multisig.rs +17 -8
- package/contracts/utils/src/ownable.rs +6 -6
- package/contracts/utils/src/testing_utils.rs +124 -54
- package/contracts/utils/src/tests/multisig.rs +12 -12
- package/contracts/utils/src/tests/ownable.rs +6 -6
- package/contracts/utils/src/tests/testing_utils.rs +50 -167
- package/contracts/utils/src/tests/ttl_configurable.rs +5 -5
- package/contracts/utils/src/tests/upgradeable.rs +372 -175
- package/contracts/utils/src/ttl_configurable.rs +13 -7
- package/contracts/utils/src/upgradeable.rs +48 -23
- package/contracts/workers/dvn/Cargo.toml +6 -6
- package/contracts/workers/dvn/src/auth.rs +12 -42
- package/contracts/workers/dvn/src/dvn.rs +15 -40
- package/contracts/workers/dvn/src/errors.rs +0 -1
- package/contracts/workers/dvn/src/interfaces/dvn.rs +35 -0
- package/contracts/workers/dvn/src/lib.rs +4 -3
- package/contracts/workers/dvn/src/tests/auth.rs +1 -1
- package/contracts/workers/dvn/src/tests/dvn.rs +19 -15
- package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +2 -4
- package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +1 -3
- package/contracts/workers/dvn/src/tests/setup.rs +5 -9
- package/contracts/workers/dvn-fee-lib/Cargo.toml +2 -2
- package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +38 -22
- package/contracts/workers/dvn-fee-lib/src/lib.rs +12 -2
- package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +17 -16
- package/contracts/workers/executor/Cargo.toml +4 -0
- package/contracts/workers/executor/src/executor.rs +15 -36
- package/contracts/workers/executor/src/lib.rs +2 -2
- package/contracts/workers/executor/src/tests/auth.rs +394 -0
- package/contracts/workers/executor/src/tests/executor.rs +410 -0
- package/contracts/workers/executor/src/tests/mod.rs +3 -0
- package/contracts/workers/executor/src/tests/setup.rs +250 -0
- package/contracts/workers/executor-fee-lib/Cargo.toml +7 -1
- package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +62 -15
- package/contracts/workers/executor-fee-lib/src/executor_option.rs +28 -1
- package/contracts/workers/executor-fee-lib/src/lib.rs +11 -2
- package/contracts/workers/executor-fee-lib/src/tests/executor_fee_lib.rs +701 -0
- package/contracts/workers/executor-fee-lib/src/tests/executor_option.rs +370 -0
- package/contracts/workers/executor-fee-lib/src/tests/mod.rs +4 -0
- package/contracts/workers/executor-fee-lib/src/tests/setup.rs +60 -0
- package/contracts/workers/executor-helper/Cargo.toml +0 -1
- package/contracts/workers/executor-helper/src/lib.rs +3 -0
- package/contracts/workers/executor-helper/src/tests/executor_helper.rs +184 -0
- package/contracts/workers/executor-helper/src/tests/mod.rs +2 -0
- package/contracts/workers/executor-helper/src/tests/setup.rs +366 -0
- package/contracts/workers/fee-lib-interfaces/Cargo.toml +14 -0
- package/contracts/workers/{worker/src/interfaces/mod.rs → fee-lib-interfaces/src/lib.rs} +4 -3
- package/contracts/workers/price-feed/Cargo.toml +7 -1
- package/contracts/workers/price-feed/src/events.rs +1 -1
- package/contracts/workers/price-feed/src/lib.rs +12 -4
- package/contracts/workers/price-feed/src/price_feed.rs +5 -21
- package/contracts/workers/price-feed/src/storage.rs +1 -1
- package/contracts/workers/price-feed/src/tests/mod.rs +2 -0
- package/contracts/workers/price-feed/src/tests/price_feed.rs +869 -0
- package/contracts/workers/price-feed/src/tests/setup.rs +70 -0
- package/contracts/workers/price-feed/src/types.rs +1 -1
- package/contracts/workers/worker/src/errors.rs +1 -4
- package/contracts/workers/worker/src/lib.rs +0 -2
- package/contracts/workers/worker/src/storage.rs +32 -29
- package/contracts/workers/worker/src/tests/setup.rs +2 -8
- package/contracts/workers/worker/src/tests/worker.rs +96 -74
- package/contracts/workers/worker/src/worker.rs +75 -75
- package/docs/error-spec.md +55 -0
- package/docs/layerzero-v2-on-stellar.md +447 -0
- package/docs/oapp-guide.md +212 -0
- package/docs/oft-guide.md +314 -0
- package/package.json +3 -3
- package/sdk/.turbo/turbo-test.log +268 -263
- package/sdk/dist/generated/bml.d.ts +12 -4
- package/sdk/dist/generated/bml.js +9 -7
- package/sdk/dist/generated/counter.d.ts +306 -298
- package/sdk/dist/generated/counter.js +48 -46
- package/sdk/dist/generated/dvn.d.ts +450 -411
- package/sdk/dist/generated/dvn.js +66 -64
- package/sdk/dist/generated/dvn_fee_lib.d.ts +294 -338
- package/sdk/dist/generated/dvn_fee_lib.js +33 -64
- package/sdk/dist/generated/endpoint.d.ts +108 -100
- package/sdk/dist/generated/endpoint.js +21 -19
- package/sdk/dist/generated/executor.d.ts +414 -370
- package/sdk/dist/generated/executor.js +58 -55
- package/sdk/dist/generated/executor_fee_lib.d.ts +333 -377
- package/sdk/dist/generated/executor_fee_lib.js +34 -65
- package/sdk/dist/generated/executor_helper.d.ts +26 -190
- package/sdk/dist/generated/executor_helper.js +23 -28
- package/sdk/dist/generated/layerzero_view.d.ts +1271 -0
- package/sdk/dist/generated/layerzero_view.js +294 -0
- package/sdk/dist/generated/oft.d.ts +408 -385
- package/sdk/dist/generated/oft.js +89 -92
- package/sdk/dist/generated/price_feed.d.ts +385 -429
- package/sdk/dist/generated/price_feed.js +50 -81
- package/sdk/dist/generated/sml.d.ts +108 -100
- package/sdk/dist/generated/sml.js +21 -19
- package/sdk/dist/generated/treasury.d.ts +108 -100
- package/sdk/dist/generated/treasury.js +21 -19
- package/sdk/dist/generated/uln302.d.ts +108 -100
- package/sdk/dist/generated/uln302.js +23 -21
- package/sdk/dist/generated/upgrader.d.ts +189 -18
- package/sdk/dist/generated/upgrader.js +84 -4
- package/sdk/dist/index.d.ts +1 -0
- package/sdk/dist/index.js +2 -0
- package/sdk/package.json +1 -1
- package/sdk/src/index.ts +3 -0
- package/sdk/test/oft-sml.test.ts +4 -4
- package/sdk/test/suites/localnet.ts +84 -20
- package/sdk/test/upgrader.test.ts +2 -3
- package/tools/ts-bindings-gen/src/main.rs +2 -1
- package/contracts/ERROR_SPEC.md +0 -44
- package/contracts/endpoint-v2/ARCHITECTURE.md +0 -233
- package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +0 -175
- package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +0 -212
- package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +0 -153
- package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +0 -294
- /package/contracts/workers/{worker/src/interfaces → fee-lib-interfaces/src}/dvn_fee_lib.rs +0 -0
- /package/contracts/workers/{worker/src/interfaces → fee-lib-interfaces/src}/executor_fee_lib.rs +0 -0
- /package/contracts/workers/{worker/src/interfaces → fee-lib-interfaces/src}/price_feed.rs +0 -0
|
@@ -22,35 +22,23 @@ use syn::{parse_quote, ItemFn, ItemStruct};
|
|
|
22
22
|
pub fn generate_ownable_impl(input: TokenStream) -> TokenStream {
|
|
23
23
|
let item_struct: ItemStruct = syn::parse2(input).unwrap_or_else(|e| panic!("failed to parse struct: {}", e));
|
|
24
24
|
let name = &item_struct.ident;
|
|
25
|
-
let impl_mod = utils::impl_mod_ident(name, "ownable");
|
|
26
25
|
|
|
27
26
|
quote! {
|
|
28
27
|
#item_struct
|
|
29
28
|
|
|
30
|
-
use utils::{auth::Auth as _, ownable::{Ownable as _, OwnableInitializer as _}};
|
|
31
|
-
|
|
32
|
-
#
|
|
33
|
-
mod #impl_mod {
|
|
34
|
-
use super::*;
|
|
35
|
-
use utils::{
|
|
36
|
-
auth::Auth,
|
|
37
|
-
errors::OwnableError,
|
|
38
|
-
option_ext::OptionExt as _,
|
|
39
|
-
ownable::{Ownable, OwnableInitializer},
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
impl OwnableInitializer for #name {}
|
|
43
|
-
|
|
44
|
-
#[common_macros::contract_impl]
|
|
45
|
-
impl Auth for #name {
|
|
46
|
-
fn authorizer(env: &soroban_sdk::Env) -> soroban_sdk::Address {
|
|
47
|
-
<Self as Ownable>::owner(env).unwrap_or_panic(env, OwnableError::OwnerNotSet)
|
|
48
|
-
}
|
|
49
|
-
}
|
|
29
|
+
use utils::{auth::Auth as _, option_ext::OptionExt as _, ownable::{Ownable as _, OwnableInitializer as _}};
|
|
30
|
+
|
|
31
|
+
impl utils::ownable::OwnableInitializer for #name {}
|
|
50
32
|
|
|
51
|
-
|
|
52
|
-
|
|
33
|
+
#[common_macros::contract_impl]
|
|
34
|
+
impl utils::auth::Auth for #name {
|
|
35
|
+
fn authorizer(env: &soroban_sdk::Env) -> soroban_sdk::Address {
|
|
36
|
+
<Self as utils::ownable::Ownable>::owner(env).unwrap_or_panic(env, utils::errors::OwnableError::OwnerNotSet)
|
|
37
|
+
}
|
|
53
38
|
}
|
|
39
|
+
|
|
40
|
+
#[common_macros::contract_impl(contracttrait)]
|
|
41
|
+
impl utils::ownable::Ownable for #name {}
|
|
54
42
|
}
|
|
55
43
|
}
|
|
56
44
|
|
|
@@ -66,28 +54,21 @@ pub fn generate_ownable_impl(input: TokenStream) -> TokenStream {
|
|
|
66
54
|
pub fn generate_multisig_impl(input: TokenStream) -> TokenStream {
|
|
67
55
|
let item_struct: ItemStruct = syn::parse2(input).unwrap_or_else(|e| panic!("failed to parse struct: {}", e));
|
|
68
56
|
let name = &item_struct.ident;
|
|
69
|
-
let impl_mod = utils::impl_mod_ident(name, "multisig");
|
|
70
57
|
|
|
71
58
|
quote! {
|
|
72
59
|
#item_struct
|
|
73
60
|
|
|
74
61
|
use utils::{auth::Auth as _, multisig::Multisig as _};
|
|
75
62
|
|
|
76
|
-
#[
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
#[common_macros::contract_impl]
|
|
82
|
-
impl Auth for #name {
|
|
83
|
-
fn authorizer(env: &soroban_sdk::Env) -> soroban_sdk::Address {
|
|
84
|
-
env.current_contract_address()
|
|
85
|
-
}
|
|
63
|
+
#[common_macros::contract_impl]
|
|
64
|
+
impl utils::auth::Auth for #name {
|
|
65
|
+
fn authorizer(env: &soroban_sdk::Env) -> soroban_sdk::Address {
|
|
66
|
+
env.current_contract_address()
|
|
86
67
|
}
|
|
87
|
-
|
|
88
|
-
#[common_macros::contract_impl(contracttrait)]
|
|
89
|
-
impl Multisig for #name {}
|
|
90
68
|
}
|
|
69
|
+
|
|
70
|
+
#[common_macros::contract_impl(contracttrait)]
|
|
71
|
+
impl utils::multisig::Multisig for #name {}
|
|
91
72
|
}
|
|
92
73
|
}
|
|
93
74
|
|
|
@@ -4,6 +4,9 @@ use quote::quote;
|
|
|
4
4
|
use syn::{ImplItem, ItemImpl, ItemTrait, TraitItem, Visibility};
|
|
5
5
|
|
|
6
6
|
/// Generates a `#[soroban_sdk::contractimpl]` with automatic instance TTL extension.
|
|
7
|
+
///
|
|
8
|
+
/// - For `__constructor` methods: injects `ttl_configurable::init_default_ttl_configs(env)`
|
|
9
|
+
/// - For other methods: injects TTL extension logic to extend instance TTL if configured
|
|
7
10
|
pub fn contractimpl_with_ttl(attr: TokenStream, input: TokenStream) -> TokenStream {
|
|
8
11
|
let mut impl_block: ItemImpl = syn::parse2(input).unwrap_or_else(|e| panic!("failed to parse impl block: {}", e));
|
|
9
12
|
|
|
@@ -17,16 +20,16 @@ pub fn contractimpl_with_ttl(attr: TokenStream, input: TokenStream) -> TokenStre
|
|
|
17
20
|
continue;
|
|
18
21
|
}
|
|
19
22
|
|
|
20
|
-
// Skip the constructor as TTL config is typically not set during initialization
|
|
21
|
-
if method.sig.ident == "__constructor" {
|
|
22
|
-
continue;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
23
|
// Skip methods without Env parameter
|
|
26
24
|
let Some(env_param) = utils::find_env_param(&method.sig.inputs) else { continue };
|
|
27
25
|
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
if method.sig.ident == "__constructor" {
|
|
27
|
+
// Inject default TTL config initialization in constructor
|
|
28
|
+
method.block.stmts.insert(0, init_default_ttl_configs_stmt(&env_param));
|
|
29
|
+
} else {
|
|
30
|
+
// Inject TTL extension at the start of other methods
|
|
31
|
+
method.block.stmts.insert(0, extend_instance_ttl_stmt(&env_param));
|
|
32
|
+
}
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
let contract_attr = if attr.is_empty() {
|
|
@@ -72,6 +75,14 @@ pub fn contracttrait_with_ttl(attr: TokenStream, input: TokenStream) -> TokenStr
|
|
|
72
75
|
}
|
|
73
76
|
}
|
|
74
77
|
|
|
78
|
+
/// Generates a statement that initializes default TTL configs in the constructor.
|
|
79
|
+
fn init_default_ttl_configs_stmt(env_param: &utils::EnvParam<'_>) -> syn::Stmt {
|
|
80
|
+
let env_ref = env_param.as_ref_tokens();
|
|
81
|
+
syn::parse_quote! {
|
|
82
|
+
utils::ttl_configurable::init_default_ttl_configs(#env_ref);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
75
86
|
/// Generates a statement that extends instance TTL if configured.
|
|
76
87
|
fn extend_instance_ttl_stmt(env_param: &utils::EnvParam<'_>) -> syn::Stmt {
|
|
77
88
|
let env_ref = env_param.as_ref_tokens();
|
|
@@ -386,36 +386,48 @@ pub fn contract_trait(attr: TokenStream, item: TokenStream) -> TokenStream {
|
|
|
386
386
|
// Upgradeable Macro
|
|
387
387
|
// ============================================================================
|
|
388
388
|
|
|
389
|
-
/// Generates upgradeable implementation
|
|
389
|
+
/// Generates upgradeable implementation using the `Upgradeable` trait's default methods.
|
|
390
390
|
///
|
|
391
|
-
///
|
|
391
|
+
/// This macro implements `Upgradeable` using the trait's default methods (which include auth).
|
|
392
392
|
///
|
|
393
393
|
/// # Requirements
|
|
394
394
|
/// - The contract must implement the `Auth` trait (via `#[ownable]` or `Multisig`)
|
|
395
|
-
/// -
|
|
395
|
+
/// - By default, requires manual `UpgradeableInternal` implementation
|
|
396
|
+
/// - With `no_migration` flag, auto-generates a no-op `UpgradeableInternal` impl
|
|
397
|
+
///
|
|
398
|
+
/// # Options
|
|
399
|
+
/// - `#[upgradeable]` - Requires manual `UpgradeableInternal` implementation (safety by default)
|
|
400
|
+
/// - `#[upgradeable(no_migration)]` - Auto-generates no-op `UpgradeableInternal` (for initial deployment)
|
|
396
401
|
///
|
|
397
402
|
/// # Example
|
|
398
403
|
/// ```ignore
|
|
399
|
-
///
|
|
404
|
+
/// // Requires manual UpgradeableInternal implementation (default)
|
|
405
|
+
/// #[ownable]
|
|
400
406
|
/// #[upgradeable]
|
|
401
407
|
/// pub struct MyContract;
|
|
402
408
|
///
|
|
403
409
|
/// impl utils::upgradeable::UpgradeableInternal for MyContract {
|
|
404
|
-
/// type MigrationData =
|
|
410
|
+
/// type MigrationData = MyMigrationParams;
|
|
405
411
|
///
|
|
406
|
-
/// fn
|
|
407
|
-
/// //
|
|
412
|
+
/// fn __migrate(env: &Env, migration_data: &Self::MigrationData) {
|
|
413
|
+
/// // Custom migration logic here
|
|
408
414
|
/// }
|
|
409
415
|
/// }
|
|
416
|
+
///
|
|
417
|
+
/// // Auto-generates no-op UpgradeableInternal (for initial deployment)
|
|
418
|
+
/// #[ownable]
|
|
419
|
+
/// #[upgradeable(no_migration)]
|
|
420
|
+
/// pub struct MyContract;
|
|
421
|
+
/// // No UpgradeableInternal impl needed!
|
|
410
422
|
/// ```
|
|
411
423
|
///
|
|
412
424
|
/// Generated code includes:
|
|
413
425
|
/// - `upgrade(env, new_wasm_hash)` - Upgrades the contract WASM (auth required)
|
|
414
|
-
/// - `migrate(env, migration_data)` - Runs migration after upgrade (auth required)
|
|
426
|
+
/// - `migrate(env, migration_data)` - Runs migration after upgrade (auth required, XDR-decodes `Bytes` to `MigrationData`)
|
|
415
427
|
/// - `contractmeta!` with `binver` set to the Cargo package version (if not 0.0.0)
|
|
416
428
|
#[proc_macro_attribute]
|
|
417
|
-
pub fn upgradeable(
|
|
418
|
-
upgradeable::generate_upgradeable_impl(item.into()).into()
|
|
429
|
+
pub fn upgradeable(attr: TokenStream, item: TokenStream) -> TokenStream {
|
|
430
|
+
upgradeable::generate_upgradeable_impl(attr.into(), item.into()).into()
|
|
419
431
|
}
|
|
420
432
|
|
|
421
433
|
// ============================================================================
|
|
@@ -435,7 +447,8 @@ pub fn upgradeable(_attr: TokenStream, item: TokenStream) -> TokenStream {
|
|
|
435
447
|
/// - `#[ownable]` - Single-owner access control
|
|
436
448
|
///
|
|
437
449
|
/// # Options
|
|
438
|
-
/// - `upgradeable` - Adds `#[upgradeable]
|
|
450
|
+
/// - `upgradeable` - Adds `#[upgradeable]`, requires manual `UpgradeableInternal` impl
|
|
451
|
+
/// - `upgradeable(no_migration)` - Adds `#[upgradeable(no_migration)]`, auto-generates no-op impl
|
|
439
452
|
/// - `multisig` - Uses `#[multisig]` instead of `#[ownable]`
|
|
440
453
|
///
|
|
441
454
|
/// # Examples
|
|
@@ -444,12 +457,16 @@ pub fn upgradeable(_attr: TokenStream, item: TokenStream) -> TokenStream {
|
|
|
444
457
|
/// #[lz_contract]
|
|
445
458
|
/// pub struct EndpointV2;
|
|
446
459
|
///
|
|
447
|
-
/// // Contract with upgrade support
|
|
460
|
+
/// // Contract with upgrade support (requires manual UpgradeableInternal)
|
|
448
461
|
/// #[lz_contract(upgradeable)]
|
|
449
462
|
/// pub struct DVNFeeLib;
|
|
450
463
|
///
|
|
451
|
-
/// // Contract with
|
|
452
|
-
/// #[lz_contract(
|
|
464
|
+
/// // Contract with upgrade support and no migration (auto no-op impl)
|
|
465
|
+
/// #[lz_contract(upgradeable(no_migration))]
|
|
466
|
+
/// pub struct DVNFeeLib;
|
|
467
|
+
///
|
|
468
|
+
/// // Contract with multisig auth and upgrade support (no migration)
|
|
469
|
+
/// #[lz_contract(multisig, upgradeable(no_migration))]
|
|
453
470
|
/// pub struct DVN;
|
|
454
471
|
/// ```
|
|
455
472
|
#[proc_macro_attribute]
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
use proc_macro2::TokenStream;
|
|
7
7
|
use quote::quote;
|
|
8
8
|
use syn::{
|
|
9
|
+
parenthesized,
|
|
9
10
|
parse::{Parse, ParseStream},
|
|
10
|
-
punctuated::Punctuated,
|
|
11
11
|
Error, Ident, ItemStruct, Token,
|
|
12
12
|
};
|
|
13
13
|
|
|
@@ -16,6 +16,9 @@ use syn::{
|
|
|
16
16
|
pub struct LzContractConfig {
|
|
17
17
|
/// If true, adds `#[upgradeable]` for contract upgrade support.
|
|
18
18
|
pub upgradeable: bool,
|
|
19
|
+
/// If true, generates a default no-op `UpgradeableInternal` implementation.
|
|
20
|
+
/// Only valid when `upgradeable` is also true.
|
|
21
|
+
pub no_migration: bool,
|
|
19
22
|
/// If true, uses `#[multisig]` instead of `#[ownable]` for auth.
|
|
20
23
|
pub multisig: bool,
|
|
21
24
|
}
|
|
@@ -26,17 +29,40 @@ impl Parse for LzContractConfig {
|
|
|
26
29
|
return Ok(Self::default());
|
|
27
30
|
}
|
|
28
31
|
|
|
29
|
-
let idents = Punctuated::<Ident, Token![,]>::parse_terminated(input)?;
|
|
30
32
|
let mut config = Self::default();
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
// Parse comma-separated items, handling nested parentheses for upgradeable(no_migration)
|
|
35
|
+
while !input.is_empty() {
|
|
36
|
+
let ident: Ident = input.parse()?;
|
|
37
|
+
|
|
33
38
|
match ident.to_string().as_str() {
|
|
34
|
-
"upgradeable" =>
|
|
39
|
+
"upgradeable" => {
|
|
40
|
+
config.upgradeable = true;
|
|
41
|
+
// Check for optional (no_migration) suffix
|
|
42
|
+
if input.peek(syn::token::Paren) {
|
|
43
|
+
let content;
|
|
44
|
+
parenthesized!(content in input);
|
|
45
|
+
let inner_ident: Ident = content.parse()?;
|
|
46
|
+
if inner_ident == "no_migration" {
|
|
47
|
+
config.no_migration = true;
|
|
48
|
+
} else {
|
|
49
|
+
return Err(Error::new(inner_ident.span(), "expected `no_migration`"));
|
|
50
|
+
}
|
|
51
|
+
if !content.is_empty() {
|
|
52
|
+
return Err(Error::new(content.span(), "unexpected tokens in `upgradeable(...)`"));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
35
56
|
"multisig" => config.multisig = true,
|
|
36
57
|
_ => {
|
|
37
58
|
return Err(Error::new(ident.span(), "expected one of `upgradeable`, `multisig`"));
|
|
38
59
|
}
|
|
39
60
|
}
|
|
61
|
+
|
|
62
|
+
// Consume optional trailing comma
|
|
63
|
+
if input.peek(Token![,]) {
|
|
64
|
+
let _: Token![,] = input.parse()?;
|
|
65
|
+
}
|
|
40
66
|
}
|
|
41
67
|
|
|
42
68
|
Ok(config)
|
|
@@ -53,8 +79,9 @@ impl Parse for LzContractConfig {
|
|
|
53
79
|
/// - `#[common_macros::ownable]` - Single-owner access control
|
|
54
80
|
///
|
|
55
81
|
/// # Options
|
|
56
|
-
/// - `upgradeable` - Adds `#[
|
|
57
|
-
/// - `
|
|
82
|
+
/// - `upgradeable` - Adds `#[upgradeable]`, requires manual `UpgradeableInternal` impl
|
|
83
|
+
/// - `upgradeable(no_migration)` - Adds `#[upgradeable(no_migration)]`, auto-generates no-op impl
|
|
84
|
+
/// - `multisig` - Uses `#[multisig]` instead of `#[ownable]`
|
|
58
85
|
pub fn generate_lz_contract(attr: TokenStream, input: TokenStream) -> TokenStream {
|
|
59
86
|
let config: LzContractConfig =
|
|
60
87
|
syn::parse2(attr).unwrap_or_else(|e| panic!("failed to parse lz_contract config: {}", e));
|
|
@@ -67,7 +94,11 @@ pub fn generate_lz_contract(attr: TokenStream, input: TokenStream) -> TokenStrea
|
|
|
67
94
|
};
|
|
68
95
|
|
|
69
96
|
let upgrade = if config.upgradeable {
|
|
70
|
-
|
|
97
|
+
if config.no_migration {
|
|
98
|
+
quote! { #[common_macros::upgradeable(no_migration)] }
|
|
99
|
+
} else {
|
|
100
|
+
quote! { #[common_macros::upgradeable] }
|
|
101
|
+
}
|
|
71
102
|
} else {
|
|
72
103
|
quote! {}
|
|
73
104
|
};
|