@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
|
@@ -1,347 +0,0 @@
|
|
|
1
|
-
use crate::{
|
|
2
|
-
events::{DstConfigSet, NativeDropApplied},
|
|
3
|
-
interfaces::{DstConfig, ExecutionParams, IExecutor, NativeDropParams, SetDstConfigParam},
|
|
4
|
-
storage::ExecutorData,
|
|
5
|
-
ComposeParams,
|
|
6
|
-
};
|
|
7
|
-
use endpoint_v2::{
|
|
8
|
-
FeeRecipient, LayerZeroComposerClient, LayerZeroEndpointV2Client, LayerZeroReceiverClient, MessagingComposerClient,
|
|
9
|
-
};
|
|
10
|
-
use message_lib_common::ILayerZeroExecutor;
|
|
11
|
-
use soroban_sdk::{assert_with_error, bytes, contract, contractimpl, token, vec, Address, Bytes, Env, Vec};
|
|
12
|
-
use stellar_access::access_control::AccessControl;
|
|
13
|
-
use stellar_macros::{default_impl, only_role, when_not_paused};
|
|
14
|
-
use worker_common::{ExecutorFeeLibClient, FeeParams, IWorker, WorkerCommon, WorkerError};
|
|
15
|
-
|
|
16
|
-
// ============================================================================
|
|
17
|
-
// Executor Contract
|
|
18
|
-
// ============================================================================
|
|
19
|
-
|
|
20
|
-
#[contract]
|
|
21
|
-
pub struct LzExecutor;
|
|
22
|
-
|
|
23
|
-
// ============================================================================
|
|
24
|
-
// Constructor
|
|
25
|
-
// ============================================================================
|
|
26
|
-
|
|
27
|
-
#[contractimpl()]
|
|
28
|
-
impl LzExecutor {
|
|
29
|
-
/// Constructor - Initialize the executor contract
|
|
30
|
-
/// Follows the EVM pattern: initialize(endpoint, messageLibs, priceFeed, roleAdmin, admins)
|
|
31
|
-
pub fn __constructor(
|
|
32
|
-
env: &Env,
|
|
33
|
-
endpoint: &Address,
|
|
34
|
-
message_libs: &Vec<Address>,
|
|
35
|
-
price_feed: &Address,
|
|
36
|
-
default_multiplier_bps: u32,
|
|
37
|
-
role_admin: &Address,
|
|
38
|
-
admins: &Vec<Address>,
|
|
39
|
-
) {
|
|
40
|
-
// Initialize WorkerCommon (handles access control and basic worker setup)
|
|
41
|
-
WorkerCommon::initialize(env, role_admin, message_libs, price_feed, default_multiplier_bps, admins);
|
|
42
|
-
|
|
43
|
-
// Store executor-specific data
|
|
44
|
-
ExecutorData::set_endpoint(env, endpoint);
|
|
45
|
-
|
|
46
|
-
// Get and store the local EID from the endpoint
|
|
47
|
-
let endpoint_client = LayerZeroEndpointV2Client::new(env, endpoint);
|
|
48
|
-
let local_eid = endpoint_client.eid();
|
|
49
|
-
ExecutorData::set_local_eid(env, &local_eid);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
pub(crate) fn endpoint(env: &Env) -> Address {
|
|
53
|
-
ExecutorData::endpoint(env).unwrap()
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// ============================================================================
|
|
58
|
-
// IWorker Implementation (delegate to WorkerCommon)
|
|
59
|
-
// ============================================================================
|
|
60
|
-
|
|
61
|
-
#[contractimpl]
|
|
62
|
-
impl IWorker for LzExecutor {
|
|
63
|
-
// ========================================================================
|
|
64
|
-
// Mutable Functions
|
|
65
|
-
// ========================================================================
|
|
66
|
-
|
|
67
|
-
fn set_paused(env: &Env, paused: bool) {
|
|
68
|
-
WorkerCommon::set_paused(env, paused);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
fn set_default_multiplier_bps(env: &Env, admin: &Address, multiplier_bps: u32) {
|
|
72
|
-
WorkerCommon::set_default_multiplier_bps(env, admin, multiplier_bps);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
fn set_deposit_address(env: &Env, admin: &Address, deposit_address: &Address) {
|
|
76
|
-
WorkerCommon::set_deposit_address(env, admin, deposit_address);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
fn set_price_feed(env: &Env, admin: &Address, price_feed: &Address) {
|
|
80
|
-
WorkerCommon::set_price_feed(env, admin, price_feed);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
fn set_supported_option_types(env: &Env, admin: &Address, eid: u32, option_types: Bytes) {
|
|
84
|
-
WorkerCommon::set_supported_option_types(env, admin, eid, option_types);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
fn set_worker_fee_lib(env: &Env, admin: &Address, worker_fee_lib: &Address) {
|
|
88
|
-
WorkerCommon::set_worker_fee_lib(env, admin, worker_fee_lib);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// ========================================================================
|
|
92
|
-
// View Functions
|
|
93
|
-
// ========================================================================
|
|
94
|
-
|
|
95
|
-
fn paused(env: &Env) -> bool {
|
|
96
|
-
WorkerCommon::paused(env)
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
fn default_multiplier_bps(env: &Env) -> u32 {
|
|
100
|
-
WorkerCommon::default_multiplier_bps(env)
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
fn deposit_address(env: &Env) -> Address {
|
|
104
|
-
WorkerCommon::deposit_address(env)
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
fn price_feed(env: &Env) -> Address {
|
|
108
|
-
WorkerCommon::price_feed(env)
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
fn get_supported_option_types(env: &Env, eid: u32) -> Bytes {
|
|
112
|
-
WorkerCommon::get_supported_option_types(env, eid)
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
fn worker_fee_lib(env: &Env) -> Address {
|
|
116
|
-
WorkerCommon::worker_fee_lib(env)
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
fn has_acl(env: &Env, sender: &Address) -> bool {
|
|
120
|
-
WorkerCommon::has_acl(env, sender)
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
fn allowlist_size(env: &Env) -> u32 {
|
|
124
|
-
WorkerCommon::allowlist_size(env)
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// ============================================================================
|
|
129
|
-
// IExecutor Implementation
|
|
130
|
-
// ============================================================================
|
|
131
|
-
|
|
132
|
-
#[contractimpl]
|
|
133
|
-
impl IExecutor for LzExecutor {
|
|
134
|
-
// === Destination Configuration ===
|
|
135
|
-
|
|
136
|
-
#[only_role(admin, "ADMIN")]
|
|
137
|
-
fn set_dst_config(env: &Env, admin: &Address, params: &Vec<SetDstConfigParam>) {
|
|
138
|
-
for param in params.iter() {
|
|
139
|
-
ExecutorData::set_dst_config(env, param.dst_eid, ¶m.dst_config);
|
|
140
|
-
}
|
|
141
|
-
DstConfigSet { params: params.clone() }.publish(env);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// === Execution Functions ===
|
|
145
|
-
|
|
146
|
-
#[only_role(admin, "ADMIN")]
|
|
147
|
-
fn native_drop(
|
|
148
|
-
env: &Env,
|
|
149
|
-
admin: &Address,
|
|
150
|
-
origin: &endpoint_v2::Origin,
|
|
151
|
-
dst_eid: u32,
|
|
152
|
-
oapp: &Address,
|
|
153
|
-
native_drop_params: &Vec<NativeDropParams>,
|
|
154
|
-
) {
|
|
155
|
-
let endpoint = Self::endpoint(env);
|
|
156
|
-
let native_token_client =
|
|
157
|
-
token::TokenClient::new(env, &LayerZeroEndpointV2Client::new(env, &endpoint).native_token());
|
|
158
|
-
|
|
159
|
-
let mut success = vec![env];
|
|
160
|
-
|
|
161
|
-
for param in native_drop_params.iter() {
|
|
162
|
-
// Attempt to transfer native tokens to the receiver
|
|
163
|
-
// In Stellar, we use the token client to transfer
|
|
164
|
-
let transfer_success = native_token_client
|
|
165
|
-
.try_transfer(&env.current_contract_address(), ¶m.receiver, ¶m.amount)
|
|
166
|
-
.is_ok();
|
|
167
|
-
|
|
168
|
-
success.push_back(transfer_success);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
NativeDropApplied {
|
|
172
|
-
origin: origin.clone(),
|
|
173
|
-
dst_eid,
|
|
174
|
-
oapp: oapp.clone(),
|
|
175
|
-
native_drop_params: native_drop_params.clone(),
|
|
176
|
-
success,
|
|
177
|
-
}
|
|
178
|
-
.publish(env);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
#[only_role(admin, "ADMIN")]
|
|
182
|
-
fn execute(env: &Env, admin: &Address, execution_params: &ExecutionParams) {
|
|
183
|
-
let endpoint = Self::endpoint(env);
|
|
184
|
-
let endpoint_client = LayerZeroEndpointV2Client::new(env, &endpoint);
|
|
185
|
-
let native_token_client = token::TokenClient::new(env, &endpoint_client.native_token());
|
|
186
|
-
|
|
187
|
-
// Transfer value to receiver if needed (matching EVM pattern)
|
|
188
|
-
if execution_params.value > 0 {
|
|
189
|
-
native_token_client.transfer(admin, env.current_contract_address(), &execution_params.value);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// Call lz_receive on the receiver
|
|
193
|
-
let receiver_client = LayerZeroReceiverClient::new(env, &execution_params.receiver);
|
|
194
|
-
|
|
195
|
-
// Try to execute lz_receive (matching EVM try-catch pattern)
|
|
196
|
-
let result = receiver_client.try_lz_receive(
|
|
197
|
-
&env.current_contract_address(),
|
|
198
|
-
&execution_params.origin,
|
|
199
|
-
&execution_params.guid,
|
|
200
|
-
&execution_params.message,
|
|
201
|
-
&execution_params.extra_data,
|
|
202
|
-
&execution_params.value,
|
|
203
|
-
);
|
|
204
|
-
|
|
205
|
-
// If execution failed, call lz_receive_alert on endpoint (matching EVM catch block)
|
|
206
|
-
if result.is_err() {
|
|
207
|
-
// Get the error reason - in Stellar we just use an empty bytes for simplicity
|
|
208
|
-
let reason = bytes![env];
|
|
209
|
-
endpoint_client.lz_receive_alert(
|
|
210
|
-
&env.current_contract_address(),
|
|
211
|
-
&execution_params.origin,
|
|
212
|
-
&execution_params.receiver,
|
|
213
|
-
&execution_params.guid,
|
|
214
|
-
&execution_params.gas_limit,
|
|
215
|
-
&execution_params.value,
|
|
216
|
-
&execution_params.message,
|
|
217
|
-
&execution_params.extra_data,
|
|
218
|
-
&reason,
|
|
219
|
-
);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
#[only_role(admin, "ADMIN")]
|
|
224
|
-
fn compose(env: &Env, admin: &Address, compose_params: &ComposeParams) {
|
|
225
|
-
let endpoint = ExecutorData::endpoint(env).expect("endpoint not set");
|
|
226
|
-
let endpoint_client = LayerZeroEndpointV2Client::new(env, &endpoint);
|
|
227
|
-
let native_token_client = token::TokenClient::new(env, &endpoint_client.native_token());
|
|
228
|
-
|
|
229
|
-
// Transfer value to composer if needed (matching EVM pattern)
|
|
230
|
-
if compose_params.value > 0 {
|
|
231
|
-
native_token_client.transfer(admin, env.current_contract_address(), &compose_params.value);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// Call lz_compose on the composer
|
|
235
|
-
let composer_client = LayerZeroComposerClient::new(env, &compose_params.to);
|
|
236
|
-
|
|
237
|
-
// Try to execute lz_compose (matching EVM try-catch pattern)
|
|
238
|
-
let result = composer_client.try_lz_compose(
|
|
239
|
-
&env.current_contract_address(),
|
|
240
|
-
&compose_params.from,
|
|
241
|
-
&compose_params.guid,
|
|
242
|
-
&compose_params.index,
|
|
243
|
-
&compose_params.message,
|
|
244
|
-
&compose_params.extra_data,
|
|
245
|
-
&compose_params.value,
|
|
246
|
-
);
|
|
247
|
-
|
|
248
|
-
// If execution failed, call lz_compose_alert on endpoint (matching EVM catch block)
|
|
249
|
-
if result.is_err() {
|
|
250
|
-
// Get the error reason - in Stellar we just use an empty bytes for simplicity
|
|
251
|
-
let reason = bytes![env];
|
|
252
|
-
|
|
253
|
-
// lz_compose_alert is on MessagingComposerClient, not LayerZeroEndpointV2Client
|
|
254
|
-
let composer_client = MessagingComposerClient::new(env, &endpoint);
|
|
255
|
-
composer_client.lz_compose_alert(
|
|
256
|
-
&env.current_contract_address(),
|
|
257
|
-
&compose_params.from,
|
|
258
|
-
&compose_params.to,
|
|
259
|
-
&compose_params.guid,
|
|
260
|
-
&compose_params.index,
|
|
261
|
-
&compose_params.gas_limit,
|
|
262
|
-
&compose_params.value,
|
|
263
|
-
&compose_params.message,
|
|
264
|
-
&compose_params.extra_data,
|
|
265
|
-
&reason,
|
|
266
|
-
);
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
// View Functions
|
|
271
|
-
|
|
272
|
-
fn dst_config(env: &Env, dst_eid: u32) -> Option<DstConfig> {
|
|
273
|
-
ExecutorData::dst_config(env, dst_eid)
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
// ============================================================================
|
|
278
|
-
// IMsgLibExecutor Implementation (for message libraries)
|
|
279
|
-
// ============================================================================
|
|
280
|
-
|
|
281
|
-
#[contractimpl]
|
|
282
|
-
impl ILayerZeroExecutor for LzExecutor {
|
|
283
|
-
#[only_role(_send_lib, "MSG_LIB")]
|
|
284
|
-
#[when_not_paused()]
|
|
285
|
-
fn assign_job(
|
|
286
|
-
env: &Env,
|
|
287
|
-
_send_lib: &Address,
|
|
288
|
-
sender: &Address,
|
|
289
|
-
dst_eid: u32,
|
|
290
|
-
calldata_size: u32,
|
|
291
|
-
options: &Bytes,
|
|
292
|
-
) -> FeeRecipient {
|
|
293
|
-
let fee = Self::get_fee(env, _send_lib, sender, dst_eid, calldata_size, options);
|
|
294
|
-
let recipient = WorkerCommon::deposit_address(env);
|
|
295
|
-
FeeRecipient { amount: fee, address: recipient }
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
#[when_not_paused()]
|
|
299
|
-
fn get_fee(
|
|
300
|
-
env: &Env,
|
|
301
|
-
_send_lib: &Address,
|
|
302
|
-
sender: &Address,
|
|
303
|
-
dst_eid: u32,
|
|
304
|
-
calldata_size: u32,
|
|
305
|
-
options: &Bytes,
|
|
306
|
-
) -> i128 {
|
|
307
|
-
// Check ACL
|
|
308
|
-
assert_with_error!(env, WorkerCommon::has_acl(env, sender), WorkerError::NotAllowed);
|
|
309
|
-
|
|
310
|
-
// Get the dst_config
|
|
311
|
-
let dst_config = Self::dst_config(env, dst_eid).unwrap_or(DstConfig {
|
|
312
|
-
lz_receive_base_gas: 0,
|
|
313
|
-
multiplier_bps: 0,
|
|
314
|
-
floor_margin_usd: 0,
|
|
315
|
-
native_cap: 0,
|
|
316
|
-
lz_compose_base_gas: 0,
|
|
317
|
-
});
|
|
318
|
-
|
|
319
|
-
// Build FeeParams for the executor fee lib
|
|
320
|
-
let fee_params = FeeParams {
|
|
321
|
-
sender: sender.clone(),
|
|
322
|
-
dst_eid,
|
|
323
|
-
calldata_size,
|
|
324
|
-
options: options.clone(),
|
|
325
|
-
price_feed: WorkerCommon::price_feed(env),
|
|
326
|
-
default_multiplier_bps: WorkerCommon::default_multiplier_bps(env),
|
|
327
|
-
lz_receive_base_gas: dst_config.lz_receive_base_gas,
|
|
328
|
-
lz_compose_base_gas: dst_config.lz_compose_base_gas,
|
|
329
|
-
floor_margin_usd: dst_config.floor_margin_usd,
|
|
330
|
-
native_cap: dst_config.native_cap,
|
|
331
|
-
multiplier_bps: dst_config.multiplier_bps,
|
|
332
|
-
};
|
|
333
|
-
|
|
334
|
-
// Call the executor fee lib to get the fee
|
|
335
|
-
let fee_lib = WorkerCommon::worker_fee_lib(env);
|
|
336
|
-
let fee_lib_client = ExecutorFeeLibClient::new(env, &fee_lib);
|
|
337
|
-
fee_lib_client.get_fee(&fee_lib, &fee_params)
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
// ============================================================================
|
|
342
|
-
// AccessControl Implementation (default from stellar-access)
|
|
343
|
-
// ============================================================================
|
|
344
|
-
|
|
345
|
-
#[default_impl]
|
|
346
|
-
#[contractimpl]
|
|
347
|
-
impl AccessControl for LzExecutor {}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
use endpoint_v2::Origin;
|
|
2
|
-
use soroban_sdk::{contracttype, Address, Bytes, BytesN};
|
|
3
|
-
|
|
4
|
-
#[contracttype]
|
|
5
|
-
#[derive(Clone, Debug)]
|
|
6
|
-
pub struct DstConfig {
|
|
7
|
-
pub lz_receive_base_gas: u64,
|
|
8
|
-
pub multiplier_bps: u32,
|
|
9
|
-
pub floor_margin_usd: u128,
|
|
10
|
-
pub native_cap: u128,
|
|
11
|
-
pub lz_compose_base_gas: u64,
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
#[contracttype]
|
|
15
|
-
#[derive(Clone, Debug)]
|
|
16
|
-
pub struct SetDstConfigParam {
|
|
17
|
-
pub dst_eid: u32,
|
|
18
|
-
pub dst_config: DstConfig,
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
#[contracttype]
|
|
22
|
-
#[derive(Clone, Debug)]
|
|
23
|
-
pub struct ExecutionParams {
|
|
24
|
-
pub receiver: Address,
|
|
25
|
-
pub origin: Origin,
|
|
26
|
-
pub guid: BytesN<32>,
|
|
27
|
-
pub message: Bytes,
|
|
28
|
-
pub extra_data: Bytes,
|
|
29
|
-
pub value: i128,
|
|
30
|
-
pub gas_limit: i128,
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
#[contracttype]
|
|
34
|
-
#[derive(Clone, Debug)]
|
|
35
|
-
pub struct NativeDropParams {
|
|
36
|
-
pub receiver: Address,
|
|
37
|
-
pub amount: i128,
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
#[contracttype]
|
|
41
|
-
#[derive(Clone, Debug)]
|
|
42
|
-
pub struct ComposeParams {
|
|
43
|
-
pub from: Address,
|
|
44
|
-
pub to: Address,
|
|
45
|
-
pub guid: BytesN<32>,
|
|
46
|
-
pub index: u32,
|
|
47
|
-
pub message: Bytes,
|
|
48
|
-
pub extra_data: Bytes,
|
|
49
|
-
pub value: i128,
|
|
50
|
-
pub gas_limit: i128,
|
|
51
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
use soroban_sdk::{symbol_short, Symbol};
|
|
2
|
-
|
|
3
|
-
// ============================================================================
|
|
4
|
-
// Role Constants (matching EVM Worker.sol)
|
|
5
|
-
// ============================================================================
|
|
6
|
-
|
|
7
|
-
/// MESSAGE_LIB_ROLE - Role for message libraries that can interact with the worker
|
|
8
|
-
pub const MESSAGE_LIB_ROLE: Symbol = symbol_short!("MSG_LIB");
|
|
9
|
-
|
|
10
|
-
/// ALLOWLIST - Role for addresses allowed to use the worker
|
|
11
|
-
pub const ALLOWLIST: Symbol = symbol_short!("ALLOW");
|
|
12
|
-
|
|
13
|
-
/// DENYLIST - Role for addresses denied from using the worker
|
|
14
|
-
pub const DENYLIST: Symbol = symbol_short!("DENY");
|
|
15
|
-
|
|
16
|
-
/// ADMIN_ROLE - Role for admins who can configure worker settings
|
|
17
|
-
pub const ADMIN_ROLE: Symbol = symbol_short!("ADMIN");
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
use soroban_sdk::{contractevent, Address, Bytes};
|
|
2
|
-
|
|
3
|
-
// === Worker Events ===
|
|
4
|
-
// Note: Role-related events (RoleGranted, RoleRevoked, etc.) are emitted by OpenZeppelin AccessControl
|
|
5
|
-
#[contractevent(topics = ["SetDefaultMultiplierBps"])]
|
|
6
|
-
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
7
|
-
pub struct SetDefaultMultiplierBps {
|
|
8
|
-
pub multiplier_bps: u32,
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
#[contractevent(topics = ["SetDepositAddress"])]
|
|
12
|
-
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
13
|
-
pub struct SetDepositAddress {
|
|
14
|
-
pub deposit_address: Address,
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
#[contractevent(topics = ["SetPriceFeed"])]
|
|
18
|
-
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
19
|
-
pub struct SetPriceFeed {
|
|
20
|
-
pub price_feed: Address,
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
#[contractevent(topics = ["SetSupportedOptionTypes"])]
|
|
24
|
-
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
25
|
-
pub struct SetSupportedOptionTypes {
|
|
26
|
-
pub dst_eid: u32,
|
|
27
|
-
pub option_types: Bytes,
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
#[contractevent(topics = ["SetWorkerFeeLib"])]
|
|
31
|
-
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
32
|
-
pub struct SetWorkerFeeLib {
|
|
33
|
-
pub fee_lib: Address,
|
|
34
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
use soroban_sdk::{contractclient, contracttype, Address, Bytes, Env};
|
|
2
|
-
|
|
3
|
-
/// FeeParams - Parameters for standard fee calculation same with the Sui
|
|
4
|
-
#[contracttype]
|
|
5
|
-
#[derive(Clone, Debug)]
|
|
6
|
-
pub struct FeeParams {
|
|
7
|
-
// message params
|
|
8
|
-
pub sender: Address,
|
|
9
|
-
pub dst_eid: u32,
|
|
10
|
-
pub calldata_size: u32,
|
|
11
|
-
pub options: Bytes,
|
|
12
|
-
// common configed params
|
|
13
|
-
pub price_feed: Address,
|
|
14
|
-
pub default_multiplier_bps: u32,
|
|
15
|
-
// by dst_eid configed params
|
|
16
|
-
pub lz_receive_base_gas: u64,
|
|
17
|
-
pub lz_compose_base_gas: u64,
|
|
18
|
-
pub floor_margin_usd: u128,
|
|
19
|
-
pub native_cap: u128,
|
|
20
|
-
pub multiplier_bps: u32,
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/// IExecutorFeeLib - Interface for calculating executor fees
|
|
24
|
-
/// This interface is called by the Executor contract to calculate fees
|
|
25
|
-
/// It uses the PriceFeed interface to get price information
|
|
26
|
-
#[contractclient(name = "ExecutorFeeLibClient")]
|
|
27
|
-
pub trait IExecutorFeeLib {
|
|
28
|
-
/// Calculate fee (view function, standard params)
|
|
29
|
-
/// Called by get_fee in the Executor contract
|
|
30
|
-
fn get_fee(env: &Env, fee_lib: &Address, params: &FeeParams) -> i128;
|
|
31
|
-
|
|
32
|
-
/// Returns the current contract version.
|
|
33
|
-
/// Because not allow return u8, use u32 instead.
|
|
34
|
-
fn version(env: &Env) -> (u64, u32);
|
|
35
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
use soroban_sdk::{contractclient, contracttype, Address, Env};
|
|
2
|
-
|
|
3
|
-
/// Struct to encapsulate the return values of estimate_fee_by_eid
|
|
4
|
-
#[contracttype]
|
|
5
|
-
#[derive(Clone, Debug)]
|
|
6
|
-
pub struct EstimateFeeResult {
|
|
7
|
-
pub fee: i128,
|
|
8
|
-
pub price_ratio: u128,
|
|
9
|
-
pub price_ratio_denominator: u128,
|
|
10
|
-
pub native_price_usd: u128,
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
/// ILayerZeroPriceFeed - Interface for price feed contract
|
|
14
|
-
/// This interface provides price information for fee calculation
|
|
15
|
-
/// Called by ExecutorFeeLib to get pricing data
|
|
16
|
-
#[contractclient(name = "LayerZeroPriceFeedClient")]
|
|
17
|
-
pub trait ILayerZeroPriceFeed {
|
|
18
|
-
/// Estimate fee with detailed breakdown by endpoint ID
|
|
19
|
-
/// This is the main function called by ExecutorFeeLib
|
|
20
|
-
/// @param dst_eid - Destination endpoint ID
|
|
21
|
-
/// @param calldata_size - Size of the calldata in bytes
|
|
22
|
-
/// @param gas - Gas amount needed for execution
|
|
23
|
-
/// @return (fee, price_ratio, price_ratio_denominator, native_price_usd)
|
|
24
|
-
fn estimate_fee_by_eid(
|
|
25
|
-
env: &Env,
|
|
26
|
-
fee_lib: &Address,
|
|
27
|
-
dst_eid: u32,
|
|
28
|
-
calldata_size: u64,
|
|
29
|
-
gas: u128,
|
|
30
|
-
) -> EstimateFeeResult;
|
|
31
|
-
|
|
32
|
-
/// Get the native token price in USD
|
|
33
|
-
/// @return native_token_price_usd - The price of the native token in USD
|
|
34
|
-
fn native_token_price_usd(env: &Env) -> u128;
|
|
35
|
-
|
|
36
|
-
/// Set the native token price in USD
|
|
37
|
-
/// @param price_updater - The address of the price updater
|
|
38
|
-
/// @param native_token_price_usd - The new price of the native token in USD
|
|
39
|
-
fn set_native_token_price_usd(env: &Env, price_updater: &Address, native_token_price_usd: u128);
|
|
40
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
use soroban_sdk::{contractclient, Address, Bytes, Env};
|
|
2
|
-
|
|
3
|
-
/// IWorker - Base worker interface for managing fees, price feeds, and admin operations
|
|
4
|
-
/// Uses OpenZeppelin AccessControl for role-based access management
|
|
5
|
-
#[contractclient(name = "WorkerClient")]
|
|
6
|
-
pub trait IWorker {
|
|
7
|
-
// ========================================================================
|
|
8
|
-
// Mutable Functions
|
|
9
|
-
// ========================================================================
|
|
10
|
-
|
|
11
|
-
/// Set the paused state of the worker (requires DEFAULT_ADMIN_ROLE)
|
|
12
|
-
fn set_paused(env: &Env, paused: bool);
|
|
13
|
-
|
|
14
|
-
/// Set the default multiplier in basis points (ADMIN_ROLE only)
|
|
15
|
-
fn set_default_multiplier_bps(env: &Env, admin: &Address, multiplier_bps: u32);
|
|
16
|
-
|
|
17
|
-
/// Set the deposit address where fees are collected (admin only)
|
|
18
|
-
fn set_deposit_address(env: &Env, admin: &Address, deposit_address: &Address);
|
|
19
|
-
|
|
20
|
-
/// Set the price feed address (admin only)
|
|
21
|
-
fn set_price_feed(env: &Env, admin: &Address, price_feed: &Address);
|
|
22
|
-
|
|
23
|
-
/// Set supported option types for a destination endpoint (ADMIN_ROLE only)
|
|
24
|
-
fn set_supported_option_types(env: &Env, admin: &Address, eid: u32, option_types: Bytes);
|
|
25
|
-
|
|
26
|
-
/// Set the worker fee library address (ADMIN_ROLE only)
|
|
27
|
-
fn set_worker_fee_lib(env: &Env, admin: &Address, worker_fee_lib: &Address);
|
|
28
|
-
|
|
29
|
-
// ========================================================================
|
|
30
|
-
// View Functions
|
|
31
|
-
// ========================================================================
|
|
32
|
-
|
|
33
|
-
/// Check if the worker is paused
|
|
34
|
-
fn paused(env: &Env) -> bool;
|
|
35
|
-
|
|
36
|
-
/// Get the default multiplier in basis points
|
|
37
|
-
fn default_multiplier_bps(env: &Env) -> u32;
|
|
38
|
-
|
|
39
|
-
/// Get the deposit address
|
|
40
|
-
fn deposit_address(env: &Env) -> Address;
|
|
41
|
-
|
|
42
|
-
/// Get the current price feed address
|
|
43
|
-
fn price_feed(env: &Env) -> Address;
|
|
44
|
-
|
|
45
|
-
/// Get supported option types for a destination endpoint
|
|
46
|
-
fn get_supported_option_types(env: &Env, eid: u32) -> Bytes;
|
|
47
|
-
|
|
48
|
-
/// Get the worker fee library address
|
|
49
|
-
fn worker_fee_lib(env: &Env) -> Address;
|
|
50
|
-
|
|
51
|
-
/// Check if an address has ACL permission
|
|
52
|
-
/// ACL logic (matching EVM Worker.sol):
|
|
53
|
-
/// 1) if address has DENYLIST role -> deny
|
|
54
|
-
/// 2) else if allowlist is empty (size == 0) OR address has ALLOWLIST role -> allow
|
|
55
|
-
/// 3) else deny
|
|
56
|
-
fn has_acl(env: &Env, sender: &Address) -> bool;
|
|
57
|
-
|
|
58
|
-
/// Get the size of the allowlist (number of accounts with ALLOWLIST role)
|
|
59
|
-
fn allowlist_size(env: &Env) -> u32;
|
|
60
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#![no_std]
|
|
2
|
-
|
|
3
|
-
mod interfaces;
|
|
4
|
-
mod worker_common;
|
|
5
|
-
|
|
6
|
-
pub mod constants;
|
|
7
|
-
pub mod errors;
|
|
8
|
-
pub mod events;
|
|
9
|
-
pub mod storage;
|
|
10
|
-
|
|
11
|
-
pub use constants::*;
|
|
12
|
-
pub use errors::*;
|
|
13
|
-
pub use events::*;
|
|
14
|
-
pub use interfaces::*;
|
|
15
|
-
pub use storage::*;
|
|
16
|
-
pub use worker_common::*;
|
|
17
|
-
|
|
18
|
-
// #[cfg(test)]
|
|
19
|
-
// mod tests;
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
use common_macros::storage;
|
|
2
|
-
use soroban_sdk::{Address, Bytes};
|
|
3
|
-
use utils::ttl::DefaultTtlConfigProvider;
|
|
4
|
-
|
|
5
|
-
// ============================================================================
|
|
6
|
-
// Worker Storage
|
|
7
|
-
// ============================================================================
|
|
8
|
-
// Note: Access control (roles) are managed by OpenZeppelin AccessControl module
|
|
9
|
-
// We only keep worker-specific data here
|
|
10
|
-
|
|
11
|
-
#[storage(DefaultTtlConfigProvider)]
|
|
12
|
-
pub enum WorkerData {
|
|
13
|
-
/// Address where fees are deposited
|
|
14
|
-
#[instance(Address)]
|
|
15
|
-
DepositAddress,
|
|
16
|
-
|
|
17
|
-
/// Price feed address for fee calculation
|
|
18
|
-
#[instance(Address)]
|
|
19
|
-
PriceFeed,
|
|
20
|
-
|
|
21
|
-
/// Worker fee library address
|
|
22
|
-
#[instance(Address)]
|
|
23
|
-
WorkerFeeLib,
|
|
24
|
-
|
|
25
|
-
/// Default multiplier in basis points for fee calculation
|
|
26
|
-
#[instance(u32)]
|
|
27
|
-
DefaultMultiplierBps,
|
|
28
|
-
|
|
29
|
-
/// Supported option types for a destination EID
|
|
30
|
-
#[persistent(Bytes)]
|
|
31
|
-
SupportedOptionTypes { eid: u32 },
|
|
32
|
-
}
|