@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
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
use endpoint_v2::Origin;
|
|
2
|
+
use executor::NativeDropParams;
|
|
3
|
+
use soroban_sdk::testutils::Address as _;
|
|
4
|
+
use soroban_sdk::{
|
|
5
|
+
contract, contractimpl, contracttype,
|
|
6
|
+
testutils::{MockAuth, MockAuthInvoke},
|
|
7
|
+
token::StellarAssetClient,
|
|
8
|
+
Address, Bytes, BytesN, Env, IntoVal, Symbol, Vec,
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
use crate::{ComposeParams, ExecutionParams, ExecutorHelper, ExecutorHelperClient};
|
|
12
|
+
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Mock Endpoint (provides native_token)
|
|
15
|
+
// =============================================================================
|
|
16
|
+
|
|
17
|
+
#[contract]
|
|
18
|
+
pub struct MockEndpoint;
|
|
19
|
+
|
|
20
|
+
#[contractimpl]
|
|
21
|
+
impl MockEndpoint {
|
|
22
|
+
pub fn __constructor(env: &Env, native_token: &Address) {
|
|
23
|
+
env.storage().instance().set(&Symbol::new(env, "native_token"), native_token);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
pub fn native_token(env: &Env) -> Address {
|
|
27
|
+
env.storage().instance().get(&Symbol::new(env, "native_token")).unwrap()
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// =============================================================================
|
|
32
|
+
// Mock Receiver (implements lz_receive)
|
|
33
|
+
// =============================================================================
|
|
34
|
+
|
|
35
|
+
#[contract]
|
|
36
|
+
pub struct MockReceiver;
|
|
37
|
+
|
|
38
|
+
#[contracttype]
|
|
39
|
+
#[derive(Clone, Debug)]
|
|
40
|
+
pub struct LzReceiveRecord {
|
|
41
|
+
pub executor: Address,
|
|
42
|
+
pub origin: Origin,
|
|
43
|
+
pub guid: BytesN<32>,
|
|
44
|
+
pub message: Bytes,
|
|
45
|
+
pub extra_data: Bytes,
|
|
46
|
+
pub value: i128,
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
#[contractimpl]
|
|
50
|
+
impl MockReceiver {
|
|
51
|
+
pub fn __constructor(_env: &Env) {}
|
|
52
|
+
|
|
53
|
+
pub fn lz_receive(
|
|
54
|
+
env: &Env,
|
|
55
|
+
executor: &Address,
|
|
56
|
+
origin: &Origin,
|
|
57
|
+
guid: &BytesN<32>,
|
|
58
|
+
message: &Bytes,
|
|
59
|
+
extra_data: &Bytes,
|
|
60
|
+
value: i128,
|
|
61
|
+
) {
|
|
62
|
+
executor.require_auth();
|
|
63
|
+
let record = LzReceiveRecord {
|
|
64
|
+
executor: executor.clone(),
|
|
65
|
+
origin: origin.clone(),
|
|
66
|
+
guid: guid.clone(),
|
|
67
|
+
message: message.clone(),
|
|
68
|
+
extra_data: extra_data.clone(),
|
|
69
|
+
value,
|
|
70
|
+
};
|
|
71
|
+
env.storage().instance().set(&Symbol::new(env, "lz_receive"), &record);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
pub fn get_lz_receive(env: &Env) -> Option<LzReceiveRecord> {
|
|
75
|
+
env.storage().instance().get(&Symbol::new(env, "lz_receive"))
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// =============================================================================
|
|
80
|
+
// Mock Composer (implements lz_compose)
|
|
81
|
+
// =============================================================================
|
|
82
|
+
|
|
83
|
+
#[contract]
|
|
84
|
+
pub struct MockComposer;
|
|
85
|
+
|
|
86
|
+
#[contracttype]
|
|
87
|
+
#[derive(Clone, Debug)]
|
|
88
|
+
pub struct LzComposeRecord {
|
|
89
|
+
pub executor: Address,
|
|
90
|
+
pub from: Address,
|
|
91
|
+
pub guid: BytesN<32>,
|
|
92
|
+
pub index: u32,
|
|
93
|
+
pub message: Bytes,
|
|
94
|
+
pub extra_data: Bytes,
|
|
95
|
+
pub value: i128,
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
#[contractimpl]
|
|
99
|
+
impl MockComposer {
|
|
100
|
+
pub fn __constructor(_env: &Env) {}
|
|
101
|
+
|
|
102
|
+
pub fn lz_compose(
|
|
103
|
+
env: &Env,
|
|
104
|
+
executor: &Address,
|
|
105
|
+
from: &Address,
|
|
106
|
+
guid: &BytesN<32>,
|
|
107
|
+
index: u32,
|
|
108
|
+
message: &Bytes,
|
|
109
|
+
extra_data: &Bytes,
|
|
110
|
+
value: i128,
|
|
111
|
+
) {
|
|
112
|
+
executor.require_auth();
|
|
113
|
+
let record = LzComposeRecord {
|
|
114
|
+
executor: executor.clone(),
|
|
115
|
+
from: from.clone(),
|
|
116
|
+
guid: guid.clone(),
|
|
117
|
+
index,
|
|
118
|
+
message: message.clone(),
|
|
119
|
+
extra_data: extra_data.clone(),
|
|
120
|
+
value,
|
|
121
|
+
};
|
|
122
|
+
env.storage().instance().set(&Symbol::new(env, "lz_compose"), &record);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
pub fn get_lz_compose(env: &Env) -> Option<LzComposeRecord> {
|
|
126
|
+
env.storage().instance().get(&Symbol::new(env, "lz_compose"))
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// =============================================================================
|
|
131
|
+
// Mock Executor (provides endpoint() and native_drop())
|
|
132
|
+
// =============================================================================
|
|
133
|
+
|
|
134
|
+
#[contract]
|
|
135
|
+
pub struct MockExecutor;
|
|
136
|
+
|
|
137
|
+
#[contracttype]
|
|
138
|
+
#[derive(Clone, Debug)]
|
|
139
|
+
pub struct NativeDropRecord {
|
|
140
|
+
pub admin: Address,
|
|
141
|
+
pub origin: Origin,
|
|
142
|
+
pub dst_eid: u32,
|
|
143
|
+
pub oapp: Address,
|
|
144
|
+
pub params: Vec<NativeDropParams>,
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
#[contractimpl]
|
|
148
|
+
impl MockExecutor {
|
|
149
|
+
pub fn __constructor(env: &Env, endpoint: &Address) {
|
|
150
|
+
env.storage().instance().set(&Symbol::new(env, "endpoint"), endpoint);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
pub fn endpoint(env: &Env) -> Address {
|
|
154
|
+
env.storage().instance().get(&Symbol::new(env, "endpoint")).unwrap()
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
pub fn native_drop(
|
|
158
|
+
env: &Env,
|
|
159
|
+
admin: &Address,
|
|
160
|
+
origin: &Origin,
|
|
161
|
+
dst_eid: u32,
|
|
162
|
+
oapp: &Address,
|
|
163
|
+
params: &Vec<NativeDropParams>,
|
|
164
|
+
) {
|
|
165
|
+
admin.require_auth();
|
|
166
|
+
let record = NativeDropRecord {
|
|
167
|
+
admin: admin.clone(),
|
|
168
|
+
origin: origin.clone(),
|
|
169
|
+
dst_eid,
|
|
170
|
+
oapp: oapp.clone(),
|
|
171
|
+
params: params.clone(),
|
|
172
|
+
};
|
|
173
|
+
env.storage().instance().set(&Symbol::new(env, "native_drop"), &record);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
pub fn get_native_drop(env: &Env) -> Option<NativeDropRecord> {
|
|
177
|
+
env.storage().instance().get(&Symbol::new(env, "native_drop"))
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// =============================================================================
|
|
182
|
+
// Test Setup
|
|
183
|
+
// =============================================================================
|
|
184
|
+
|
|
185
|
+
pub struct TestSetup<'a> {
|
|
186
|
+
pub env: Env,
|
|
187
|
+
pub executor_helper_client: ExecutorHelperClient<'a>,
|
|
188
|
+
pub executor: Address,
|
|
189
|
+
pub receiver: Address,
|
|
190
|
+
pub composer: Address,
|
|
191
|
+
pub native_token: Address,
|
|
192
|
+
pub native_token_admin: Address,
|
|
193
|
+
pub native_token_admin_client: StellarAssetClient<'a>,
|
|
194
|
+
pub admin: Address,
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
impl<'a> TestSetup<'a> {
|
|
198
|
+
pub fn new() -> Self {
|
|
199
|
+
let env = Env::default();
|
|
200
|
+
|
|
201
|
+
// Native token
|
|
202
|
+
let native_token_admin = Address::generate(&env);
|
|
203
|
+
let native_token_sac = env.register_stellar_asset_contract_v2(native_token_admin.clone());
|
|
204
|
+
let native_token = native_token_sac.address();
|
|
205
|
+
let native_token_admin_client = StellarAssetClient::new(&env, &native_token);
|
|
206
|
+
|
|
207
|
+
// Mock endpoint (with native_token)
|
|
208
|
+
let endpoint = env.register(MockEndpoint, (&native_token,));
|
|
209
|
+
|
|
210
|
+
// Mock executor (with endpoint reference)
|
|
211
|
+
let executor = env.register(MockExecutor, (&endpoint,));
|
|
212
|
+
|
|
213
|
+
// Mock receiver
|
|
214
|
+
let receiver = env.register(MockReceiver, ());
|
|
215
|
+
|
|
216
|
+
// Mock composer
|
|
217
|
+
let composer = env.register(MockComposer, ());
|
|
218
|
+
|
|
219
|
+
// Admin address (value payer)
|
|
220
|
+
let admin = Address::generate(&env);
|
|
221
|
+
|
|
222
|
+
// Register ExecutorHelper contract
|
|
223
|
+
let contract_id = env.register(ExecutorHelper, ());
|
|
224
|
+
let client = ExecutorHelperClient::new(&env, &contract_id);
|
|
225
|
+
|
|
226
|
+
Self {
|
|
227
|
+
env,
|
|
228
|
+
executor_helper_client: client,
|
|
229
|
+
executor,
|
|
230
|
+
receiver,
|
|
231
|
+
composer,
|
|
232
|
+
native_token,
|
|
233
|
+
native_token_admin,
|
|
234
|
+
native_token_admin_client,
|
|
235
|
+
admin,
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
pub fn mint_native(&self, to: &Address, amount: i128) {
|
|
240
|
+
self.env.mock_auths(&[MockAuth {
|
|
241
|
+
address: &self.native_token_admin,
|
|
242
|
+
invoke: &MockAuthInvoke {
|
|
243
|
+
contract: &self.native_token,
|
|
244
|
+
fn_name: "mint",
|
|
245
|
+
args: (to, amount).into_val(&self.env),
|
|
246
|
+
sub_invokes: &[],
|
|
247
|
+
},
|
|
248
|
+
}]);
|
|
249
|
+
self.native_token_admin_client.mint(to, &amount);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
pub fn balance_native(&self, addr: &Address) -> i128 {
|
|
253
|
+
soroban_sdk::token::TokenClient::new(&self.env, &self.native_token).balance(addr)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
pub fn mock_lz_receive_auth(&self, executor: &Address, params: &ExecutionParams) {
|
|
257
|
+
self.env.mock_auths(&[MockAuth {
|
|
258
|
+
address: executor,
|
|
259
|
+
invoke: &MockAuthInvoke {
|
|
260
|
+
contract: ¶ms.receiver,
|
|
261
|
+
fn_name: "lz_receive",
|
|
262
|
+
args: (executor, ¶ms.origin, ¶ms.guid, ¶ms.message, ¶ms.extra_data, ¶ms.value)
|
|
263
|
+
.into_val(&self.env),
|
|
264
|
+
sub_invokes: &[],
|
|
265
|
+
},
|
|
266
|
+
}]);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
pub fn mock_lz_compose_auth(&self, executor: &Address, params: &ComposeParams) {
|
|
270
|
+
self.env.mock_auths(&[MockAuth {
|
|
271
|
+
address: executor,
|
|
272
|
+
invoke: &MockAuthInvoke {
|
|
273
|
+
contract: ¶ms.to,
|
|
274
|
+
fn_name: "lz_compose",
|
|
275
|
+
args: (
|
|
276
|
+
executor,
|
|
277
|
+
¶ms.from,
|
|
278
|
+
¶ms.guid,
|
|
279
|
+
¶ms.index,
|
|
280
|
+
¶ms.message,
|
|
281
|
+
¶ms.extra_data,
|
|
282
|
+
¶ms.value,
|
|
283
|
+
)
|
|
284
|
+
.into_val(&self.env),
|
|
285
|
+
sub_invokes: &[],
|
|
286
|
+
},
|
|
287
|
+
}]);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
pub fn mock_native_drop_auth(
|
|
291
|
+
&self,
|
|
292
|
+
executor: &Address,
|
|
293
|
+
admin: &Address,
|
|
294
|
+
origin: &Origin,
|
|
295
|
+
dst_eid: u32,
|
|
296
|
+
oapp: &Address,
|
|
297
|
+
params: &Vec<NativeDropParams>,
|
|
298
|
+
) {
|
|
299
|
+
self.env.mock_auths(&[MockAuth {
|
|
300
|
+
address: admin,
|
|
301
|
+
invoke: &MockAuthInvoke {
|
|
302
|
+
contract: executor,
|
|
303
|
+
fn_name: "native_drop",
|
|
304
|
+
args: (admin, origin, &dst_eid, oapp, params).into_val(&self.env),
|
|
305
|
+
sub_invokes: &[],
|
|
306
|
+
},
|
|
307
|
+
}]);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
pub fn default_origin(&self) -> Origin {
|
|
311
|
+
Origin { src_eid: 1, sender: BytesN::from_array(&self.env, &[1u8; 32]), nonce: 1 }
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
pub fn default_guid(&self) -> BytesN<32> {
|
|
315
|
+
BytesN::from_array(&self.env, &[2u8; 32])
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
pub fn default_message(&self) -> Bytes {
|
|
319
|
+
Bytes::from_slice(&self.env, &[1, 2, 3, 4])
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
pub fn default_extra_data(&self) -> Bytes {
|
|
323
|
+
Bytes::from_slice(&self.env, &[5, 6, 7, 8])
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
pub fn default_execution_params(&self) -> ExecutionParams {
|
|
327
|
+
ExecutionParams {
|
|
328
|
+
receiver: self.receiver.clone(),
|
|
329
|
+
origin: self.default_origin(),
|
|
330
|
+
guid: self.default_guid(),
|
|
331
|
+
message: self.default_message(),
|
|
332
|
+
extra_data: self.default_extra_data(),
|
|
333
|
+
value: 0,
|
|
334
|
+
gas_limit: 100,
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
pub fn default_compose_params(&self) -> ComposeParams {
|
|
339
|
+
let from = Address::generate(&self.env);
|
|
340
|
+
ComposeParams {
|
|
341
|
+
from,
|
|
342
|
+
to: self.composer.clone(),
|
|
343
|
+
guid: self.default_guid(),
|
|
344
|
+
index: 4,
|
|
345
|
+
message: self.default_message(),
|
|
346
|
+
extra_data: self.default_extra_data(),
|
|
347
|
+
value: 0,
|
|
348
|
+
gas_limit: 100,
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/// Returns the MockReceiverClient to access mock receiver methods
|
|
353
|
+
pub fn receiver_client(&self) -> MockReceiverClient<'_> {
|
|
354
|
+
MockReceiverClient::new(&self.env, &self.receiver)
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/// Returns the MockComposerClient to access mock composer methods
|
|
358
|
+
pub fn composer_client(&self) -> MockComposerClient<'_> {
|
|
359
|
+
MockComposerClient::new(&self.env, &self.composer)
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/// Returns the MockExecutorClient to access mock executor methods
|
|
363
|
+
pub fn executor_client(&self) -> MockExecutorClient<'_> {
|
|
364
|
+
MockExecutorClient::new(&self.env, &self.executor)
|
|
365
|
+
}
|
|
366
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
[package]
|
|
2
|
+
name = "fee-lib-interfaces"
|
|
3
|
+
version.workspace = true
|
|
4
|
+
edition.workspace = true
|
|
5
|
+
license.workspace = true
|
|
6
|
+
publish = false
|
|
7
|
+
|
|
8
|
+
[lib]
|
|
9
|
+
crate-type = ["rlib"]
|
|
10
|
+
doctest = false
|
|
11
|
+
|
|
12
|
+
[dependencies]
|
|
13
|
+
soroban-sdk = { workspace = true }
|
|
14
|
+
|
|
@@ -9,12 +9,18 @@ publish = false
|
|
|
9
9
|
crate-type = ["cdylib", "rlib"]
|
|
10
10
|
doctest = false
|
|
11
11
|
|
|
12
|
+
[features]
|
|
13
|
+
library = []
|
|
14
|
+
testutils = []
|
|
15
|
+
|
|
12
16
|
[dependencies]
|
|
17
|
+
cfg-if = { workspace = true }
|
|
13
18
|
soroban-sdk = { workspace = true }
|
|
14
19
|
utils = { workspace = true }
|
|
15
|
-
|
|
20
|
+
fee-lib-interfaces = { workspace = true }
|
|
16
21
|
common-macros = { workspace = true }
|
|
17
22
|
|
|
18
23
|
[dev-dependencies]
|
|
19
24
|
soroban-sdk = { workspace = true, features = ["testutils"] }
|
|
25
|
+
utils = { workspace = true, features = ["testutils"] }
|
|
20
26
|
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
#![no_std]
|
|
2
2
|
|
|
3
|
-
mod storage;
|
|
4
|
-
|
|
5
3
|
pub mod errors;
|
|
6
4
|
pub mod events;
|
|
7
|
-
pub mod price_feed;
|
|
8
5
|
pub mod types;
|
|
9
6
|
|
|
10
|
-
|
|
7
|
+
cfg_if::cfg_if! {
|
|
8
|
+
// Include implementation when NOT in library mode, OR when testutils is enabled (for tests)
|
|
9
|
+
if #[cfg(any(not(feature = "library"), feature = "testutils"))] {
|
|
10
|
+
mod storage;
|
|
11
|
+
mod price_feed;
|
|
12
|
+
// Export the contract and client for testing purposes
|
|
13
|
+
pub use price_feed::{LzPriceFeed, LzPriceFeedClient};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
#[cfg(test)]
|
|
18
|
+
mod tests;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
use common_macros::{contract_impl, lz_contract, only_auth};
|
|
2
|
+
use fee_lib_interfaces::{FeeEstimate, ILayerZeroPriceFeed, Price};
|
|
2
3
|
use soroban_sdk::{assert_with_error, panic_with_error, Address, Env, Vec};
|
|
3
|
-
use utils::upgradeable::UpgradeableInternal;
|
|
4
|
-
use worker::{FeeEstimate, ILayerZeroPriceFeed, Price};
|
|
5
4
|
|
|
6
5
|
use crate::{
|
|
7
6
|
errors::PriceFeedError,
|
|
@@ -10,7 +9,7 @@ use crate::{
|
|
|
10
9
|
types::{ArbitrumPriceExt, ModelType, SetEidToModelTypeParam, UpdatePrice, UpdatePriceExt},
|
|
11
10
|
};
|
|
12
11
|
|
|
13
|
-
#[lz_contract(upgradeable)]
|
|
12
|
+
#[lz_contract(upgradeable(no_migration))]
|
|
14
13
|
pub struct LzPriceFeed;
|
|
15
14
|
|
|
16
15
|
#[contract_impl]
|
|
@@ -102,9 +101,7 @@ impl LzPriceFeed {
|
|
|
102
101
|
/// Set the fee model type for destination EIDs (owner only)
|
|
103
102
|
#[only_auth]
|
|
104
103
|
pub fn set_eid_to_model_type(env: &Env, params: &Vec<SetEidToModelTypeParam>) {
|
|
105
|
-
|
|
106
|
-
PriceFeedStorage::set_eid_to_model_type(env, param.dst_eid, ¶m.model_type);
|
|
107
|
-
}
|
|
104
|
+
params.iter().for_each(|param| PriceFeedStorage::set_eid_to_model_type(env, param.dst_eid, ¶m.model_type));
|
|
108
105
|
}
|
|
109
106
|
|
|
110
107
|
// ========================================================================
|
|
@@ -115,9 +112,7 @@ impl LzPriceFeed {
|
|
|
115
112
|
pub fn set_price(env: &Env, price_updater: &Address, prices: &Vec<UpdatePrice>) {
|
|
116
113
|
Self::require_price_updater(env, price_updater);
|
|
117
114
|
|
|
118
|
-
|
|
119
|
-
Self::set_price_internal(env, update.eid, &update.price);
|
|
120
|
-
}
|
|
115
|
+
prices.iter().for_each(|update| Self::set_price_internal(env, update.eid, &update.price));
|
|
121
116
|
}
|
|
122
117
|
|
|
123
118
|
/// Set price for Arbitrum with extension (price updater or owner)
|
|
@@ -134,7 +129,7 @@ impl LzPriceFeed {
|
|
|
134
129
|
|
|
135
130
|
/// Set the native token price in USD (price updater or owner).
|
|
136
131
|
///
|
|
137
|
-
/// Kept as a standalone contract function (not part of the canonical `
|
|
132
|
+
/// Kept as a standalone contract function (not part of the canonical `fee_lib_interfaces::ILayerZeroPriceFeed` interface).
|
|
138
133
|
pub fn set_native_token_price_usd(env: &Env, price_updater: &Address, native_token_price_usd: u128) {
|
|
139
134
|
Self::require_price_updater(env, price_updater);
|
|
140
135
|
PriceFeedStorage::set_native_price_usd(env, &native_token_price_usd);
|
|
@@ -271,14 +266,3 @@ impl LzPriceFeed {
|
|
|
271
266
|
}
|
|
272
267
|
}
|
|
273
268
|
|
|
274
|
-
// ============================================================================
|
|
275
|
-
// Upgradeable Implementation
|
|
276
|
-
// ============================================================================
|
|
277
|
-
|
|
278
|
-
impl UpgradeableInternal for LzPriceFeed {
|
|
279
|
-
type MigrationData = ();
|
|
280
|
-
|
|
281
|
-
fn __migrate(_env: &Env, _migration_data: &Self::MigrationData) {
|
|
282
|
-
// No migration logic needed for initial upgrade capability
|
|
283
|
-
}
|
|
284
|
-
}
|