@layerzerolabs/protocol-stellar-v2 0.2.8 → 0.2.10
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 +443 -302
- package/.turbo/turbo-lint.log +118 -96
- package/.turbo/turbo-test.log +853 -731
- package/Cargo.lock +120 -37
- package/Cargo.toml +8 -5
- package/contracts/common-macros/src/contract_impl.rs +44 -0
- package/contracts/common-macros/src/lib.rs +86 -40
- package/contracts/common-macros/src/ownable.rs +24 -32
- package/contracts/common-macros/src/storage.rs +95 -120
- package/contracts/common-macros/src/tests/contract_impl.rs +289 -0
- package/contracts/common-macros/src/tests/mod.rs +9 -0
- package/contracts/common-macros/src/tests/ownable.rs +151 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap +85 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +30 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_only_owner_preserves_function_signature.snap +9 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +1072 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +45 -0
- package/contracts/common-macros/src/tests/storage.rs +485 -0
- package/contracts/common-macros/src/tests/test_helpers.rs +93 -0
- package/contracts/common-macros/src/tests/ttl_configurable.rs +34 -0
- package/contracts/common-macros/src/ttl_configurable.rs +31 -14
- package/contracts/common-macros/src/utils.rs +27 -0
- package/contracts/endpoint-v2/ARCHITECTURE.md +4 -4
- package/contracts/endpoint-v2/src/endpoint_v2.rs +18 -15
- package/contracts/endpoint-v2/src/interfaces/message_lib.rs +2 -3
- package/contracts/endpoint-v2/src/interfaces/message_lib_manager.rs +5 -3
- package/contracts/endpoint-v2/src/interfaces/messaging_channel.rs +2 -2
- package/contracts/endpoint-v2/src/interfaces/messaging_composer.rs +2 -2
- package/contracts/endpoint-v2/src/interfaces/send_lib.rs +4 -4
- package/contracts/endpoint-v2/src/lib.rs +6 -5
- package/contracts/endpoint-v2/src/message_lib_manager.rs +14 -6
- package/contracts/endpoint-v2/src/messaging_channel.rs +6 -2
- package/contracts/endpoint-v2/src/messaging_composer.rs +6 -2
- package/contracts/endpoint-v2/src/storage.rs +10 -7
- package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +16 -16
- package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +46 -46
- package/contracts/endpoint-v2/src/tests/mock.rs +2 -2
- package/contracts/endpoint-v2/src/util.rs +8 -2
- package/contracts/message-libs/block-message-lib/Cargo.toml +1 -0
- package/contracts/message-libs/block-message-lib/src/lib.rs +5 -5
- package/contracts/message-libs/message-lib-common/src/errors.rs +8 -8
- package/contracts/message-libs/message-lib-common/src/interfaces/dvn.rs +0 -1
- package/contracts/message-libs/message-lib-common/src/interfaces/mod.rs +3 -3
- package/contracts/message-libs/message-lib-common/src/lib.rs +0 -2
- package/contracts/message-libs/message-lib-common/src/packet_codec_v1.rs +4 -6
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +2 -2
- package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +11 -11
- package/contracts/message-libs/message-lib-common/src/worker_options.rs +10 -16
- package/contracts/message-libs/simple-message-lib/src/errors.rs +0 -4
- package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +49 -34
- package/contracts/message-libs/simple-message-lib/src/storage.rs +3 -7
- package/contracts/message-libs/simple-message-lib/src/test.rs +3 -3
- package/contracts/message-libs/treasury/src/storage.rs +1 -2
- package/contracts/message-libs/treasury/src/tests/setup.rs +3 -2
- package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +0 -13
- package/contracts/message-libs/treasury/src/treasury.rs +18 -21
- package/contracts/message-libs/uln-302/Cargo.toml +1 -0
- package/contracts/message-libs/uln-302/src/interfaces/mod.rs +4 -4
- package/contracts/message-libs/uln-302/src/interfaces/{receive.rs → receive_uln.rs} +3 -3
- package/contracts/message-libs/uln-302/src/interfaces/{send.rs → send_uln.rs} +8 -80
- package/contracts/message-libs/uln-302/src/lib.rs +5 -4
- package/contracts/message-libs/uln-302/src/{receive.rs → receive_uln.rs} +20 -12
- package/contracts/message-libs/uln-302/src/{send.rs → send_uln.rs} +19 -13
- package/contracts/message-libs/uln-302/src/storage.rs +1 -2
- package/contracts/message-libs/uln-302/src/tests/config/uln_config.rs +3 -2
- package/contracts/message-libs/uln-302/src/tests/send_uln302/send.rs +30 -30
- package/contracts/message-libs/uln-302/src/tests/setup.rs +12 -11
- package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +1 -1
- package/contracts/message-libs/uln-302/src/{config_validation.rs → types.rs} +79 -11
- package/contracts/message-libs/uln-302/src/uln302.rs +15 -10
- package/contracts/oapp-macros/Cargo.toml +2 -8
- package/contracts/oapp-macros/src/lib.rs +57 -311
- package/contracts/oapp-macros/src/oapp_core.rs +23 -32
- package/contracts/oapp-macros/src/oapp_full.rs +8 -2
- package/contracts/oapp-macros/src/oapp_options_type3.rs +21 -36
- package/contracts/oapp-macros/src/oapp_receiver.rs +38 -57
- package/contracts/oapp-macros/src/oapp_sender.rs +12 -14
- package/contracts/oapp-macros/src/util.rs +14 -10
- package/contracts/oapps/counter/Cargo.toml +2 -1
- package/contracts/oapps/counter/integration_tests/utils.rs +4 -4
- package/contracts/oapps/counter/src/codec.rs +8 -9
- package/contracts/oapps/counter/src/counter.rs +156 -147
- package/contracts/oapps/counter/src/storage.rs +1 -2
- package/contracts/oapps/counter/src/tests/test_codec.rs +5 -5
- package/contracts/oapps/counter/src/tests/test_counter.rs +11 -13
- package/contracts/oapps/oapp/Cargo.toml +1 -0
- package/contracts/oapps/oapp/src/errors.rs +1 -1
- package/contracts/oapps/oapp/src/lib.rs +3 -0
- package/contracts/oapps/oapp/src/macro_tests/mod.rs +1 -0
- package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +312 -0
- package/contracts/oapps/oapp/src/oapp_core.rs +52 -53
- package/contracts/oapps/oapp/src/oapp_options_type3.rs +18 -28
- package/contracts/oapps/oapp/src/oapp_receiver.rs +82 -31
- package/contracts/oapps/oapp/src/oapp_sender.rs +55 -13
- package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +16 -3
- package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +33 -8
- package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +6 -9
- package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +28 -15
- package/contracts/oapps/oft/Cargo.toml +27 -0
- package/contracts/oapps/oft/integration-tests/mod.rs +3 -0
- package/contracts/oapps/oft/integration-tests/setup.rs +320 -0
- package/contracts/oapps/oft/integration-tests/test_with_sml.rs +155 -0
- package/contracts/oapps/oft/integration-tests/utils.rs +201 -0
- package/contracts/oapps/oft/src/codec/mod.rs +2 -0
- package/contracts/oapps/oft/src/codec/oft_compose_msg_codec.rs +55 -0
- package/contracts/oapps/oft/src/codec/oft_msg_codec.rs +62 -0
- package/contracts/oapps/oft/src/constants.rs +5 -0
- package/contracts/oapps/oft/src/errors.rs +8 -0
- package/contracts/oapps/oft/src/events.rs +19 -0
- package/contracts/oapps/oft/src/interfaces/mint_burn_token.rs +23 -0
- package/contracts/oapps/oft/src/interfaces/mod.rs +3 -0
- package/contracts/oapps/oft/src/lib.rs +22 -0
- package/contracts/oapps/oft/src/macro_tests/mod.rs +2 -0
- package/contracts/oapps/oft/src/macro_tests/test_all_default.rs +41 -0
- package/contracts/oapps/oft/src/macro_tests/test_override.rs +83 -0
- package/contracts/oapps/oft/src/oft.rs +320 -0
- package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +50 -0
- package/contracts/oapps/oft/src/oft_types/mint_burn.rs +50 -0
- package/contracts/oapps/oft/src/oft_types/mod.rs +10 -0
- package/contracts/oapps/oft/src/storage.rs +11 -0
- package/contracts/oapps/oft/src/tests/mod.rs +13 -0
- package/contracts/oapps/oft/src/tests/test_decimals.rs +89 -0
- package/contracts/oapps/oft/src/tests/test_lz_receive.rs +282 -0
- package/contracts/oapps/oft/src/tests/test_oft_compose_msg_codec.rs +68 -0
- package/contracts/oapps/oft/src/tests/test_oft_msg_codec.rs +136 -0
- package/contracts/oapps/oft/src/tests/test_oft_version.rs +13 -0
- package/contracts/oapps/oft/src/tests/test_quote_oft.rs +159 -0
- package/contracts/oapps/oft/src/tests/test_quote_send.rs +195 -0
- package/contracts/oapps/oft/src/tests/test_resolve_address.rs +37 -0
- package/contracts/oapps/oft/src/tests/test_send.rs +915 -0
- package/contracts/oapps/oft/src/tests/test_token.rs +47 -0
- package/contracts/oapps/oft/src/tests/test_utils.rs +789 -0
- package/contracts/oapps/oft/src/types.rs +38 -0
- package/contracts/oapps/oft/src/utils.rs +67 -0
- package/contracts/oapps/oft-mint-burn/Cargo.toml +26 -0
- package/contracts/oapps/oft-mint-burn/src/lib.rs +3 -0
- package/contracts/oapps/oft-mint-burn/src/oft.rs +28 -0
- package/contracts/oapps/oft-mint-burn/src/tests/mod.rs +1 -0
- package/contracts/utils/src/buffer_reader.rs +8 -9
- package/contracts/utils/src/buffer_writer.rs +11 -5
- package/contracts/utils/src/errors.rs +5 -5
- package/contracts/utils/src/ownable.rs +14 -6
- package/contracts/utils/src/testing_utils.rs +11 -1
- package/contracts/utils/src/tests/buffer_reader.rs +491 -730
- package/contracts/utils/src/tests/buffer_writer.rs +336 -148
- package/contracts/utils/src/tests/bytes_ext.rs +125 -40
- package/contracts/utils/src/tests/mod.rs +3 -0
- package/contracts/utils/src/tests/ownable.rs +379 -27
- package/contracts/utils/src/tests/test_helper.rs +47 -0
- package/contracts/utils/src/tests/testing_utils.rs +555 -0
- package/contracts/utils/src/tests/ttl.rs +421 -0
- package/contracts/utils/src/ttl.rs +29 -89
- package/contracts/workers/dvn/Cargo.toml +31 -0
- package/contracts/workers/dvn/src/auth.rs +66 -0
- package/contracts/workers/dvn/src/dvn.rs +143 -0
- package/contracts/workers/dvn/src/errors.rs +21 -0
- package/contracts/workers/dvn/src/events.rs +19 -0
- package/contracts/workers/dvn/src/interfaces/dvn.rs +12 -0
- package/contracts/workers/dvn/src/interfaces/mod.rs +5 -0
- package/contracts/workers/dvn/src/interfaces/multisig.rs +15 -0
- package/contracts/workers/dvn/src/lib.rs +24 -0
- package/contracts/workers/dvn/src/multisig.rs +127 -0
- package/contracts/workers/dvn/src/storage.rs +35 -0
- package/contracts/workers/dvn/src/tests/auth.rs +237 -0
- package/contracts/workers/dvn/src/tests/dvn.rs +349 -0
- package/contracts/workers/dvn/src/tests/key_pair.rs +66 -0
- package/contracts/workers/dvn/src/tests/mod.rs +5 -0
- package/contracts/workers/dvn/src/tests/multisig/mod.rs +3 -0
- package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +133 -0
- package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +108 -0
- package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +109 -0
- package/contracts/workers/dvn/src/tests/setup.rs +109 -0
- package/contracts/workers/dvn/src/types.rs +26 -0
- package/contracts/workers/dvn-fee-lib/Cargo.toml +24 -0
- package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +113 -0
- package/contracts/workers/dvn-fee-lib/src/errors.rs +8 -0
- package/contracts/workers/dvn-fee-lib/src/lib.rs +17 -0
- package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +282 -0
- package/contracts/workers/dvn-fee-lib/src/tests/mod.rs +1 -0
- package/contracts/workers/executor/Cargo.toml +10 -7
- package/contracts/workers/executor/src/errors.rs +8 -0
- package/contracts/workers/executor/src/events.rs +4 -7
- package/contracts/workers/executor/src/interfaces/executor.rs +72 -22
- package/contracts/workers/executor/src/interfaces/mod.rs +0 -2
- package/contracts/workers/executor/src/lib.rs +16 -7
- package/contracts/workers/executor/src/lz_executor.rs +308 -0
- package/contracts/workers/executor/src/storage.rs +24 -16
- package/contracts/workers/executor-fee-lib/Cargo.toml +22 -0
- package/contracts/workers/executor-fee-lib/src/errors.rs +15 -0
- package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +215 -0
- package/contracts/workers/executor-fee-lib/src/executor_option.rs +203 -0
- package/contracts/workers/executor-fee-lib/src/lib.rs +7 -0
- package/contracts/workers/executor-helper/Cargo.toml +29 -0
- package/contracts/workers/executor-helper/src/executor_helper.rs +161 -0
- package/contracts/workers/executor-helper/src/lib.rs +11 -0
- package/contracts/workers/{worker-common → worker}/Cargo.toml +1 -4
- package/contracts/workers/worker/src/errors.rs +24 -0
- package/contracts/workers/worker/src/events.rs +62 -0
- package/contracts/workers/worker/src/interfaces/dvn_fee_lib.rs +75 -0
- package/contracts/workers/worker/src/interfaces/executor_fee_lib.rs +84 -0
- package/contracts/workers/{worker-common → worker}/src/interfaces/mod.rs +2 -2
- package/contracts/workers/worker/src/interfaces/price_feed.rs +85 -0
- package/contracts/workers/worker/src/lib.rs +14 -0
- package/contracts/workers/worker/src/storage.rs +63 -0
- package/contracts/workers/worker/src/worker.rs +459 -0
- package/package.json +3 -3
- package/sdk/dist/generated/bml.d.ts +88 -17
- package/sdk/dist/generated/bml.js +62 -16
- package/sdk/dist/generated/counter.d.ts +281 -102
- package/sdk/dist/generated/counter.js +93 -41
- package/sdk/dist/generated/endpoint.d.ts +128 -105
- package/sdk/dist/generated/endpoint.js +47 -45
- package/sdk/dist/generated/sml.d.ts +212 -69
- package/sdk/dist/generated/sml.js +103 -53
- package/sdk/dist/generated/uln302.d.ts +270 -173
- package/sdk/dist/generated/uln302.js +112 -64
- package/sdk/package.json +11 -11
- package/sdk/test/index.test.ts +147 -42
- package/sdk/test/suites/constants.ts +7 -3
- package/sdk/test/suites/deploy.ts +65 -42
- package/sdk/test/suites/localnet.ts +2 -2
- package/sdk/test/suites/scan.ts +28 -25
- package/sdk/test/utils.ts +199 -0
- package/sdk/tsconfig.json +93 -95
- package/tools/ts-bindings-gen/src/main.rs +2 -0
- package/contracts/common-macros/src/snapshots/common_macros__tests__tests__snapshot_generated_storage_code.snap +0 -310
- package/contracts/common-macros/src/tests.rs +0 -287
- package/contracts/oapp-macros/tests/test_macros.rs +0 -522
- package/contracts/workers/executor/src/executor.rs +0 -347
- package/contracts/workers/executor/src/interfaces/types.rs +0 -51
- package/contracts/workers/worker-common/src/constants.rs +0 -17
- package/contracts/workers/worker-common/src/errors.rs +0 -6
- package/contracts/workers/worker-common/src/events.rs +0 -34
- package/contracts/workers/worker-common/src/interfaces/executor_fee_lib.rs +0 -35
- package/contracts/workers/worker-common/src/interfaces/price_feed.rs +0 -40
- package/contracts/workers/worker-common/src/interfaces/worker.rs +0 -60
- package/contracts/workers/worker-common/src/lib.rs +0 -19
- package/contracts/workers/worker-common/src/storage.rs +0 -32
- package/contracts/workers/worker-common/src/worker_common.rs +0 -166
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
use proc_macro2::TokenStream;
|
|
2
|
+
use quote::quote;
|
|
3
|
+
|
|
4
|
+
use crate::tests::test_helpers::{assert_panics_contains, non_struct_item_inputs};
|
|
5
|
+
// ============================================
|
|
6
|
+
// Snapshot Test: Ownable Code Generation
|
|
7
|
+
// ============================================
|
|
8
|
+
|
|
9
|
+
#[test]
|
|
10
|
+
fn snapshot_generated_ownable_code() {
|
|
11
|
+
let input = quote! {
|
|
12
|
+
pub struct MyContract;
|
|
13
|
+
};
|
|
14
|
+
let result = crate::ownable::generate_ownable_impl(input);
|
|
15
|
+
let formatted = prettyplease::unparse(&syn::parse2::<syn::File>(result).expect("failed to parse generated code"));
|
|
16
|
+
|
|
17
|
+
insta::assert_snapshot!(formatted);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
#[test]
|
|
21
|
+
fn snapshot_only_owner_preserves_function_signature() {
|
|
22
|
+
let input = quote! {
|
|
23
|
+
pub(crate) async fn admin_action<T: Clone>(env: &Env, value: T) -> Result<T, Error> {
|
|
24
|
+
Ok(value.clone())
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
let result = crate::ownable::prepend_only_owner_check(input);
|
|
28
|
+
let formatted = prettyplease::unparse(&syn::parse2::<syn::File>(result).expect("failed to parse generated code"));
|
|
29
|
+
|
|
30
|
+
insta::assert_snapshot!(formatted);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// ============================================
|
|
34
|
+
// prepend_only_owner_check Tests
|
|
35
|
+
// ============================================
|
|
36
|
+
|
|
37
|
+
/// Helper function to verify that the owner check is correctly inserted at the beginning of a function.
|
|
38
|
+
fn assert_owner_check_inserted(input: TokenStream, test_name: &str) {
|
|
39
|
+
let result_tokens = crate::ownable::prepend_only_owner_check(input);
|
|
40
|
+
let output_fn: syn::ItemFn =
|
|
41
|
+
syn::parse2(result_tokens).unwrap_or_else(|e| panic!("{}: failed to parse output function: {}", test_name, e));
|
|
42
|
+
|
|
43
|
+
assert!(!output_fn.block.stmts.is_empty(), "{}: function body should contain at least one statement", test_name);
|
|
44
|
+
|
|
45
|
+
let first_stmt = &output_fn.block.stmts[0];
|
|
46
|
+
let expected_stmt = "utils::ownable::require_owner_auth::<Self>(my_custom_env);";
|
|
47
|
+
let actual_stmt = quote::quote!(#first_stmt).to_string().replace(" ", "");
|
|
48
|
+
|
|
49
|
+
assert_eq!(
|
|
50
|
+
actual_stmt, expected_stmt,
|
|
51
|
+
"{}: expected owner check statement '{}', but got '{}'",
|
|
52
|
+
test_name, expected_stmt, actual_stmt
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
#[test]
|
|
57
|
+
fn test_only_owner_inserts_correct_code_at_the_beginning() {
|
|
58
|
+
let test_cases = vec![
|
|
59
|
+
("Env by value", quote! { pub fn f(my_custom_env: Env) {} }),
|
|
60
|
+
("Env not first param", quote! { pub fn f(x: u32, my_custom_env: &Env) {} }),
|
|
61
|
+
("Qualified path (soroban_sdk::Env)", quote! { pub fn f(my_custom_env: soroban_sdk::Env) {} }),
|
|
62
|
+
("Nested reference (&&Env)", quote! { pub fn f(my_custom_env: &&Env) {} }),
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
for (description, input) in test_cases {
|
|
66
|
+
assert_owner_check_inserted(input, description);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
#[test]
|
|
71
|
+
fn test_only_owner_requires_env_param() {
|
|
72
|
+
// ============================================
|
|
73
|
+
// Error Cases: Missing/Invalid Env Argument Patterns
|
|
74
|
+
// ============================================
|
|
75
|
+
let cases = vec![
|
|
76
|
+
("no Env param", quote! { pub fn admin_action(value: u32) {} }),
|
|
77
|
+
// Tuple pattern destructuring is not supported - must use simple identifier
|
|
78
|
+
("tuple pattern", quote! { pub fn admin_action((env, _other): (&Env, u32)) {} }),
|
|
79
|
+
// Wildcard pattern (_) is not supported - must use named identifier
|
|
80
|
+
("wildcard pattern", quote! { pub fn admin_action(_: &Env) {} }),
|
|
81
|
+
// Struct destructuring pattern is not supported
|
|
82
|
+
("struct pattern", quote! { pub fn admin_action(Env { .. }: Env) {} }),
|
|
83
|
+
];
|
|
84
|
+
|
|
85
|
+
for (case, input) in cases {
|
|
86
|
+
assert_panics_contains(case, "function must have an Env argument", || {
|
|
87
|
+
crate::ownable::prepend_only_owner_check(input.clone());
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// ============================================
|
|
93
|
+
// Error Cases: ownable macro non-struct input
|
|
94
|
+
// ============================================
|
|
95
|
+
|
|
96
|
+
#[test]
|
|
97
|
+
fn test_ownable_rejects_non_struct_inputs() {
|
|
98
|
+
for (case, input) in non_struct_item_inputs() {
|
|
99
|
+
assert_panics_contains(case, "failed to parse struct", || {
|
|
100
|
+
crate::ownable::generate_ownable_impl(input.clone());
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// ============================================
|
|
106
|
+
// is_env_type Unit Tests
|
|
107
|
+
// ============================================
|
|
108
|
+
|
|
109
|
+
#[test]
|
|
110
|
+
fn test_is_env_type_recognizes_env_types() {
|
|
111
|
+
let env_types = [
|
|
112
|
+
"Env",
|
|
113
|
+
"&Env",
|
|
114
|
+
"&&Env",
|
|
115
|
+
"&mut Env",
|
|
116
|
+
"soroban_sdk::Env",
|
|
117
|
+
"&soroban_sdk::Env",
|
|
118
|
+
"some::deeply::nested::module::Env",
|
|
119
|
+
];
|
|
120
|
+
|
|
121
|
+
for ty_str in env_types {
|
|
122
|
+
let ty = syn::parse_str::<syn::Type>(ty_str).expect("failed to parse type");
|
|
123
|
+
assert!(crate::utils::is_env_type(&ty), "{ty_str} should be recognized as an Env type");
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
#[test]
|
|
128
|
+
fn test_is_env_type_rejects_non_env_types() {
|
|
129
|
+
let non_env_types = ["u32", "bool", "String", "Address", "&u32", "soroban_sdk::Address"];
|
|
130
|
+
|
|
131
|
+
for ty_str in non_env_types {
|
|
132
|
+
let ty = syn::parse_str::<syn::Type>(ty_str).expect("failed to parse type");
|
|
133
|
+
assert!(!crate::utils::is_env_type(&ty), "{ty_str} should NOT be recognized as an Env type");
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
#[test]
|
|
138
|
+
fn test_is_env_type_rejects_other_type_variants() {
|
|
139
|
+
let other_variants = [
|
|
140
|
+
("(Env, u32)", "tuple"),
|
|
141
|
+
("[Env; 1]", "array"),
|
|
142
|
+
("[Env]", "slice"),
|
|
143
|
+
("Option<Env>", "generic"),
|
|
144
|
+
("!", "never"),
|
|
145
|
+
];
|
|
146
|
+
|
|
147
|
+
for (ty_str, label) in other_variants {
|
|
148
|
+
let ty = syn::parse_str::<syn::Type>(ty_str).expect("failed to parse type");
|
|
149
|
+
assert!(!crate::utils::is_env_type(&ty), "{label} type {ty_str} should NOT be recognized as an Env type");
|
|
150
|
+
}
|
|
151
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
source: contracts/common-macros/src/tests/contract_impl.rs
|
|
3
|
+
assertion_line: 98
|
|
4
|
+
expression: combined
|
|
5
|
+
---
|
|
6
|
+
// === Inherent Impl (no attr) ===
|
|
7
|
+
|
|
8
|
+
#[soroban_sdk::contractimpl]
|
|
9
|
+
impl MyContract {
|
|
10
|
+
/// Public method with Env - should have TTL extension
|
|
11
|
+
pub fn public_with_env(env: Env, value: u32) -> u32 {
|
|
12
|
+
if let Some(instance_ttl) = utils::ttl::TtlConfigStorage::instance(env) {
|
|
13
|
+
env.storage()
|
|
14
|
+
.instance()
|
|
15
|
+
.extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
|
|
16
|
+
}
|
|
17
|
+
value * 2
|
|
18
|
+
}
|
|
19
|
+
/// Public method with qualified Env path - should have TTL extension
|
|
20
|
+
pub fn with_qualified_env(env: soroban_sdk::Env) -> u32 {
|
|
21
|
+
if let Some(instance_ttl) = utils::ttl::TtlConfigStorage::instance(env) {
|
|
22
|
+
env.storage()
|
|
23
|
+
.instance()
|
|
24
|
+
.extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
|
|
25
|
+
}
|
|
26
|
+
42
|
|
27
|
+
}
|
|
28
|
+
/// Public method with Env not as first parameter - should have TTL extension
|
|
29
|
+
pub fn env_second(value: u32, env: Env) -> u32 {
|
|
30
|
+
if let Some(instance_ttl) = utils::ttl::TtlConfigStorage::instance(env) {
|
|
31
|
+
env.storage()
|
|
32
|
+
.instance()
|
|
33
|
+
.extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
|
|
34
|
+
}
|
|
35
|
+
value * 2
|
|
36
|
+
}
|
|
37
|
+
/// Public method without Env - should NOT have TTL extension
|
|
38
|
+
pub fn public_without_env(value: u32) -> u32 {
|
|
39
|
+
value * 4
|
|
40
|
+
}
|
|
41
|
+
/// Private method with Env - should NOT have TTL extension (not public)
|
|
42
|
+
fn private_with_env(env: Env, value: u32) -> u32 {
|
|
43
|
+
value * 5
|
|
44
|
+
}
|
|
45
|
+
/// Pub(crate) method with Env - should NOT have TTL extension (not fully public)
|
|
46
|
+
pub(crate) fn pub_crate_with_env(env: Env, value: u32) -> u32 {
|
|
47
|
+
value * 7
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
// === Trait Impl (no attr) ===
|
|
53
|
+
|
|
54
|
+
#[soroban_sdk::contractimpl]
|
|
55
|
+
impl SomeTrait for MyContract {
|
|
56
|
+
/// Trait method with Env - should have TTL extension
|
|
57
|
+
fn trait_method_with_env(env: Env, value: u32) -> u32 {
|
|
58
|
+
if let Some(instance_ttl) = utils::ttl::TtlConfigStorage::instance(env) {
|
|
59
|
+
env.storage()
|
|
60
|
+
.instance()
|
|
61
|
+
.extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
|
|
62
|
+
}
|
|
63
|
+
value * 2
|
|
64
|
+
}
|
|
65
|
+
/// Trait method without Env - should NOT have TTL extension
|
|
66
|
+
fn trait_method_without_env(value: u32) -> u32 {
|
|
67
|
+
value * 4
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
// === Trait Impl (contracttrait attr) ===
|
|
73
|
+
|
|
74
|
+
#[soroban_sdk::contractimpl(contracttrait)]
|
|
75
|
+
impl AnotherTrait for MyContract {
|
|
76
|
+
/// Trait method with contracttrait attr - should have TTL extension
|
|
77
|
+
fn contracttrait_method(env: Env, value: u32) -> u32 {
|
|
78
|
+
if let Some(instance_ttl) = utils::ttl::TtlConfigStorage::instance(env) {
|
|
79
|
+
env.storage()
|
|
80
|
+
.instance()
|
|
81
|
+
.extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
|
|
82
|
+
}
|
|
83
|
+
value * 3
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
source: contracts/common-macros/src/tests/ownable.rs
|
|
3
|
+
assertion_line: 17
|
|
4
|
+
expression: formatted
|
|
5
|
+
---
|
|
6
|
+
pub struct MyContract;
|
|
7
|
+
use utils::ownable::Ownable as _;
|
|
8
|
+
use utils::ownable::OwnableInitializer as _;
|
|
9
|
+
/// Implement the OwnableInitializer trait for the contract.
|
|
10
|
+
impl utils::ownable::OwnableInitializer for MyContract {
|
|
11
|
+
fn init_owner(env: &soroban_sdk::Env, owner: &soroban_sdk::Address) {
|
|
12
|
+
<utils::ownable::DefaultOwnable as utils::ownable::OwnableInitializer>::init_owner(
|
|
13
|
+
env,
|
|
14
|
+
owner,
|
|
15
|
+
)
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/// Implement the Ownable trait for the contract.
|
|
19
|
+
#[soroban_sdk::contractimpl]
|
|
20
|
+
impl utils::ownable::Ownable for MyContract {
|
|
21
|
+
fn owner(env: &soroban_sdk::Env) -> Option<soroban_sdk::Address> {
|
|
22
|
+
utils::ownable::DefaultOwnable::owner(env)
|
|
23
|
+
}
|
|
24
|
+
fn transfer_ownership(env: &soroban_sdk::Env, new_owner: &soroban_sdk::Address) {
|
|
25
|
+
utils::ownable::DefaultOwnable::transfer_ownership(env, new_owner)
|
|
26
|
+
}
|
|
27
|
+
fn renounce_ownership(env: &soroban_sdk::Env) {
|
|
28
|
+
utils::ownable::DefaultOwnable::renounce_ownership(env)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
source: contracts/common-macros/src/tests/ownable.rs
|
|
3
|
+
assertion_line: 28
|
|
4
|
+
expression: formatted
|
|
5
|
+
---
|
|
6
|
+
pub(crate) async fn admin_action<T: Clone>(env: &Env, value: T) -> Result<T, Error> {
|
|
7
|
+
utils::ownable::require_owner_auth::<Self>(env);
|
|
8
|
+
Ok(value.clone())
|
|
9
|
+
}
|