@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
|
@@ -7,11 +7,8 @@ use crate::{
|
|
|
7
7
|
storage::WorkerStorage,
|
|
8
8
|
};
|
|
9
9
|
use common_macros::contract_trait;
|
|
10
|
-
use soroban_sdk::{assert_with_error, panic_with_error, Address,
|
|
11
|
-
use utils::{
|
|
12
|
-
auth::{enforce_auth, require_auth, Auth},
|
|
13
|
-
option_ext::OptionExt,
|
|
14
|
-
};
|
|
10
|
+
use soroban_sdk::{assert_with_error, panic_with_error, Address, Env, Vec};
|
|
11
|
+
use utils::auth::{self, Auth};
|
|
15
12
|
|
|
16
13
|
/// Worker interface providing common functionality for LayerZero workers.
|
|
17
14
|
///
|
|
@@ -31,8 +28,8 @@ pub trait Worker: Auth {
|
|
|
31
28
|
///
|
|
32
29
|
/// # Arguments
|
|
33
30
|
/// * `paused` - `true` to pause, `false` to unpause
|
|
34
|
-
fn set_paused(env: &Env, paused: bool) {
|
|
35
|
-
let authorizer = enforce_auth::<Self>(env);
|
|
31
|
+
fn set_paused(env: &soroban_sdk::Env, paused: bool) {
|
|
32
|
+
let authorizer = auth::enforce_auth::<Self>(env);
|
|
36
33
|
assert_with_error!(env, Self::paused(env) != paused, WorkerError::PauseStatusUnchanged);
|
|
37
34
|
|
|
38
35
|
WorkerStorage::set_paused(env, &paused);
|
|
@@ -43,6 +40,19 @@ pub trait Worker: Auth {
|
|
|
43
40
|
}
|
|
44
41
|
}
|
|
45
42
|
|
|
43
|
+
/// Sets admin status for an address.
|
|
44
|
+
///
|
|
45
|
+
/// Admins can configure worker settings like fee multipliers, deposit addresses,
|
|
46
|
+
/// and supported option types.
|
|
47
|
+
///
|
|
48
|
+
/// # Arguments
|
|
49
|
+
/// * `admin` - The address to set admin status for
|
|
50
|
+
/// * `active` - `true` to add admin, `false` to remove
|
|
51
|
+
fn set_admin(env: &soroban_sdk::Env, admin: &soroban_sdk::Address, active: bool) {
|
|
52
|
+
auth::require_auth::<Self>(env);
|
|
53
|
+
set_admin_no_auth::<Self>(env, admin, active);
|
|
54
|
+
}
|
|
55
|
+
|
|
46
56
|
/// Sets whether a message library is supported by this worker.
|
|
47
57
|
///
|
|
48
58
|
/// Message libraries (e.g., ULN302) call workers to assign jobs. Only supported
|
|
@@ -51,8 +61,8 @@ pub trait Worker: Auth {
|
|
|
51
61
|
/// # Arguments
|
|
52
62
|
/// * `message_lib` - The message library contract address
|
|
53
63
|
/// * `supported` - `true` to add support, `false` to remove support
|
|
54
|
-
fn set_supported_message_lib(env: &Env, message_lib: &Address, supported: bool) {
|
|
55
|
-
require_auth::<Self>(env);
|
|
64
|
+
fn set_supported_message_lib(env: &soroban_sdk::Env, message_lib: &soroban_sdk::Address, supported: bool) {
|
|
65
|
+
auth::require_auth::<Self>(env);
|
|
56
66
|
set_message_lib_no_auth::<Self>(env, message_lib, supported);
|
|
57
67
|
}
|
|
58
68
|
|
|
@@ -65,8 +75,8 @@ pub trait Worker: Auth {
|
|
|
65
75
|
/// # Arguments
|
|
66
76
|
/// * `oapp` - The OApp contract address
|
|
67
77
|
/// * `allowed` - `true` to add to allowlist, `false` to remove
|
|
68
|
-
fn set_allowlist(env: &Env, oapp: &Address, allowed: bool) {
|
|
69
|
-
require_auth::<Self>(env);
|
|
78
|
+
fn set_allowlist(env: &soroban_sdk::Env, oapp: &soroban_sdk::Address, allowed: bool) {
|
|
79
|
+
auth::require_auth::<Self>(env);
|
|
70
80
|
|
|
71
81
|
let is_on_list = Self::is_on_allowlist(env, oapp);
|
|
72
82
|
if allowed {
|
|
@@ -95,8 +105,8 @@ pub trait Worker: Auth {
|
|
|
95
105
|
/// # Arguments
|
|
96
106
|
/// * `oapp` - The OApp contract address
|
|
97
107
|
/// * `denied` - `true` to add to denylist, `false` to remove
|
|
98
|
-
fn set_denylist(env: &Env, oapp: &Address, denied: bool) {
|
|
99
|
-
require_auth::<Self>(env);
|
|
108
|
+
fn set_denylist(env: &soroban_sdk::Env, oapp: &soroban_sdk::Address, denied: bool) {
|
|
109
|
+
auth::require_auth::<Self>(env);
|
|
100
110
|
let is_on_list = Self::is_on_denylist(env, oapp);
|
|
101
111
|
|
|
102
112
|
if denied {
|
|
@@ -123,7 +133,7 @@ pub trait Worker: Auth {
|
|
|
123
133
|
/// # Arguments
|
|
124
134
|
/// * `admin` - Admin address (must provide authorization)
|
|
125
135
|
/// * `multiplier_bps` - Multiplier in basis points (10000 = 1x, 12000 = 1.2x)
|
|
126
|
-
fn set_default_multiplier_bps(env: &Env, admin: &Address, multiplier_bps: u32) {
|
|
136
|
+
fn set_default_multiplier_bps(env: &soroban_sdk::Env, admin: &soroban_sdk::Address, multiplier_bps: u32) {
|
|
127
137
|
require_admin_auth::<Self>(env, admin);
|
|
128
138
|
set_default_multiplier_bps_no_auth(env, multiplier_bps);
|
|
129
139
|
}
|
|
@@ -135,7 +145,11 @@ pub trait Worker: Auth {
|
|
|
135
145
|
/// # Arguments
|
|
136
146
|
/// * `admin` - Admin address (must provide authorization)
|
|
137
147
|
/// * `deposit_address` - Address to receive collected fees
|
|
138
|
-
fn set_deposit_address(
|
|
148
|
+
fn set_deposit_address(
|
|
149
|
+
env: &soroban_sdk::Env,
|
|
150
|
+
admin: &soroban_sdk::Address,
|
|
151
|
+
deposit_address: &soroban_sdk::Address,
|
|
152
|
+
) {
|
|
139
153
|
require_admin_auth::<Self>(env, admin);
|
|
140
154
|
WorkerStorage::set_deposit_address(env, deposit_address);
|
|
141
155
|
SetDepositAddress { deposit_address: deposit_address.clone() }.publish(env);
|
|
@@ -146,11 +160,16 @@ pub trait Worker: Auth {
|
|
|
146
160
|
/// # Arguments
|
|
147
161
|
/// * `admin` - Admin address (must provide authorization)
|
|
148
162
|
/// * `eid` - Destination endpoint ID (chain identifier)
|
|
149
|
-
/// * `option_types` -
|
|
150
|
-
fn set_supported_option_types(
|
|
163
|
+
/// * `option_types` - Supported option types. Each byte represents an option type.
|
|
164
|
+
fn set_supported_option_types(
|
|
165
|
+
env: &soroban_sdk::Env,
|
|
166
|
+
admin: &soroban_sdk::Address,
|
|
167
|
+
eid: u32,
|
|
168
|
+
option_types: &soroban_sdk::Bytes,
|
|
169
|
+
) {
|
|
151
170
|
require_admin_auth::<Self>(env, admin);
|
|
152
|
-
WorkerStorage::set_supported_option_types(env, eid,
|
|
153
|
-
SetSupportedOptionTypes { dst_eid: eid, option_types }.publish(env);
|
|
171
|
+
WorkerStorage::set_supported_option_types(env, eid, option_types);
|
|
172
|
+
SetSupportedOptionTypes { dst_eid: eid, option_types: option_types.clone() }.publish(env);
|
|
154
173
|
}
|
|
155
174
|
|
|
156
175
|
/// Sets the worker fee library contract address.
|
|
@@ -160,7 +179,7 @@ pub trait Worker: Auth {
|
|
|
160
179
|
/// # Arguments
|
|
161
180
|
/// * `admin` - Admin address (must provide authorization)
|
|
162
181
|
/// * `worker_fee_lib` - Fee library contract address implementing `IExecutorFeeLib`
|
|
163
|
-
fn set_worker_fee_lib(env: &Env, admin: &Address, worker_fee_lib: &Address) {
|
|
182
|
+
fn set_worker_fee_lib(env: &soroban_sdk::Env, admin: &soroban_sdk::Address, worker_fee_lib: &soroban_sdk::Address) {
|
|
164
183
|
require_admin_auth::<Self>(env, admin);
|
|
165
184
|
WorkerStorage::set_worker_fee_lib(env, worker_fee_lib);
|
|
166
185
|
SetWorkerFeeLib { fee_lib: worker_fee_lib.clone() }.publish(env);
|
|
@@ -174,7 +193,7 @@ pub trait Worker: Auth {
|
|
|
174
193
|
/// # Arguments
|
|
175
194
|
/// * `admin` - Admin address (must provide authorization)
|
|
176
195
|
/// * `price_feed` - Price feed contract address implementing `ILayerZeroPriceFeed`
|
|
177
|
-
fn set_price_feed(env: &Env, admin: &Address, price_feed: &Address) {
|
|
196
|
+
fn set_price_feed(env: &soroban_sdk::Env, admin: &soroban_sdk::Address, price_feed: &soroban_sdk::Address) {
|
|
178
197
|
require_admin_auth::<Self>(env, admin);
|
|
179
198
|
WorkerStorage::set_price_feed(env, price_feed);
|
|
180
199
|
SetPriceFeed { price_feed: price_feed.clone() }.publish(env);
|
|
@@ -184,29 +203,29 @@ pub trait Worker: Auth {
|
|
|
184
203
|
// View Functions
|
|
185
204
|
// ========================================================================
|
|
186
205
|
|
|
206
|
+
/// Returns whether the worker is paused.
|
|
207
|
+
fn paused(env: &soroban_sdk::Env) -> bool {
|
|
208
|
+
WorkerStorage::paused(env)
|
|
209
|
+
}
|
|
210
|
+
|
|
187
211
|
/// Returns whether an address is an admin.
|
|
188
212
|
///
|
|
189
213
|
/// # Arguments
|
|
190
214
|
/// * `admin` - The address to check
|
|
191
|
-
fn is_admin(env: &Env, admin: &Address) -> bool {
|
|
215
|
+
fn is_admin(env: &soroban_sdk::Env, admin: &soroban_sdk::Address) -> bool {
|
|
192
216
|
Self::admins(env).contains(admin)
|
|
193
217
|
}
|
|
194
218
|
|
|
195
219
|
/// Returns all admin addresses.
|
|
196
|
-
fn admins(env: &Env) -> Vec<Address> {
|
|
197
|
-
WorkerStorage::admins(env)
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
/// Returns whether the worker is paused.
|
|
201
|
-
fn paused(env: &Env) -> bool {
|
|
202
|
-
WorkerStorage::paused(env)
|
|
220
|
+
fn admins(env: &soroban_sdk::Env) -> soroban_sdk::Vec<soroban_sdk::Address> {
|
|
221
|
+
WorkerStorage::admins(env)
|
|
203
222
|
}
|
|
204
223
|
|
|
205
224
|
/// Returns whether a message library is supported.
|
|
206
225
|
///
|
|
207
226
|
/// # Arguments
|
|
208
227
|
/// * `message_lib` - Message library contract address
|
|
209
|
-
fn is_supported_message_lib(env: &Env, message_lib: &Address) -> bool {
|
|
228
|
+
fn is_supported_message_lib(env: &soroban_sdk::Env, message_lib: &soroban_sdk::Address) -> bool {
|
|
210
229
|
Self::message_libs(env).contains(message_lib)
|
|
211
230
|
}
|
|
212
231
|
|
|
@@ -214,23 +233,28 @@ pub trait Worker: Auth {
|
|
|
214
233
|
///
|
|
215
234
|
/// # Returns
|
|
216
235
|
/// Vector of supported message library contract addresses.
|
|
217
|
-
fn message_libs(env: &Env) -> Vec<Address> {
|
|
218
|
-
WorkerStorage::message_libs(env)
|
|
236
|
+
fn message_libs(env: &soroban_sdk::Env) -> soroban_sdk::Vec<soroban_sdk::Address> {
|
|
237
|
+
WorkerStorage::message_libs(env)
|
|
219
238
|
}
|
|
220
239
|
|
|
221
240
|
/// Returns whether an OApp is on the allowlist.
|
|
222
241
|
///
|
|
223
242
|
/// # Arguments
|
|
224
243
|
/// * `oapp` - OApp contract address
|
|
225
|
-
fn is_on_allowlist(env: &Env, oapp: &Address) -> bool {
|
|
244
|
+
fn is_on_allowlist(env: &soroban_sdk::Env, oapp: &soroban_sdk::Address) -> bool {
|
|
226
245
|
WorkerStorage::has_allowlist(env, oapp)
|
|
227
246
|
}
|
|
228
247
|
|
|
248
|
+
/// Returns the number of addresses on the allowlist.
|
|
249
|
+
fn allowlist_size(env: &soroban_sdk::Env) -> u32 {
|
|
250
|
+
WorkerStorage::allowlist_size(env)
|
|
251
|
+
}
|
|
252
|
+
|
|
229
253
|
/// Returns whether an OApp is on the denylist.
|
|
230
254
|
///
|
|
231
255
|
/// # Arguments
|
|
232
256
|
/// * `oapp` - OApp contract address
|
|
233
|
-
fn is_on_denylist(env: &Env, oapp: &Address) -> bool {
|
|
257
|
+
fn is_on_denylist(env: &soroban_sdk::Env, oapp: &soroban_sdk::Address) -> bool {
|
|
234
258
|
WorkerStorage::has_denylist(env, oapp)
|
|
235
259
|
}
|
|
236
260
|
|
|
@@ -242,42 +266,37 @@ pub trait Worker: Auth {
|
|
|
242
266
|
/// 3. Otherwise → denied
|
|
243
267
|
///
|
|
244
268
|
/// # Arguments
|
|
245
|
-
/// * `
|
|
246
|
-
fn has_acl(env: &Env,
|
|
247
|
-
!Self::is_on_denylist(env,
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/// Returns the number of addresses on the allowlist.
|
|
251
|
-
fn allowlist_size(env: &Env) -> u32 {
|
|
252
|
-
WorkerStorage::allowlist_size(env)
|
|
269
|
+
/// * `oapp` - OApp contract address to check
|
|
270
|
+
fn has_acl(env: &soroban_sdk::Env, oapp: &soroban_sdk::Address) -> bool {
|
|
271
|
+
!Self::is_on_denylist(env, oapp) && (Self::allowlist_size(env) == 0 || Self::is_on_allowlist(env, oapp))
|
|
253
272
|
}
|
|
254
273
|
|
|
255
274
|
/// Returns the default fee multiplier in basis points.
|
|
256
|
-
fn default_multiplier_bps(env: &Env) -> u32 {
|
|
257
|
-
WorkerStorage::default_multiplier_bps(env)
|
|
275
|
+
fn default_multiplier_bps(env: &soroban_sdk::Env) -> u32 {
|
|
276
|
+
WorkerStorage::default_multiplier_bps(env)
|
|
258
277
|
}
|
|
259
278
|
|
|
260
279
|
/// Returns the deposit address where fees are collected.
|
|
261
|
-
fn deposit_address(env: &Env) -> Address {
|
|
262
|
-
WorkerStorage::deposit_address(env)
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
/// Returns the price feed contract address.
|
|
266
|
-
fn price_feed(env: &Env) -> Address {
|
|
267
|
-
WorkerStorage::price_feed(env).unwrap_or_panic(env, WorkerError::PriceFeedNotSet)
|
|
280
|
+
fn deposit_address(env: &soroban_sdk::Env) -> Option<soroban_sdk::Address> {
|
|
281
|
+
WorkerStorage::deposit_address(env)
|
|
268
282
|
}
|
|
269
283
|
|
|
270
284
|
/// Returns supported option types for a destination endpoint.
|
|
271
285
|
///
|
|
272
286
|
/// # Arguments
|
|
273
287
|
/// * `eid` - Destination endpoint ID (chain identifier)
|
|
274
|
-
fn get_supported_option_types(env: &Env, eid: u32) -> Option<Bytes> {
|
|
288
|
+
fn get_supported_option_types(env: &soroban_sdk::Env, eid: u32) -> Option<soroban_sdk::Bytes> {
|
|
275
289
|
WorkerStorage::supported_option_types(env, eid)
|
|
276
290
|
}
|
|
277
291
|
|
|
278
292
|
/// Returns the worker fee library contract address.
|
|
279
|
-
fn worker_fee_lib(env: &Env) -> Address {
|
|
280
|
-
WorkerStorage::worker_fee_lib(env)
|
|
293
|
+
fn worker_fee_lib(env: &soroban_sdk::Env) -> Option<soroban_sdk::Address> {
|
|
294
|
+
WorkerStorage::worker_fee_lib(env)
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/// Returns the price feed contract address.
|
|
298
|
+
fn price_feed(env: &soroban_sdk::Env) -> Option<soroban_sdk::Address> {
|
|
299
|
+
WorkerStorage::price_feed(env)
|
|
281
300
|
}
|
|
282
301
|
}
|
|
283
302
|
|
|
@@ -305,16 +324,8 @@ pub fn init_worker<T: Worker>(
|
|
|
305
324
|
worker_fee_lib: &Address,
|
|
306
325
|
deposit_address: &Address,
|
|
307
326
|
) {
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
for admin in admins {
|
|
312
|
-
set_admin_no_auth::<T>(env, &admin, true);
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
for lib in message_libs {
|
|
316
|
-
set_message_lib_no_auth::<T>(env, &lib, true);
|
|
317
|
-
}
|
|
327
|
+
admins.iter().for_each(|admin| set_admin_no_auth::<T>(env, &admin, true));
|
|
328
|
+
message_libs.iter().for_each(|lib| set_message_lib_no_auth::<T>(env, &lib, true));
|
|
318
329
|
|
|
319
330
|
set_price_feed_no_auth(env, price_feed);
|
|
320
331
|
set_default_multiplier_bps_no_auth(env, default_multiplier_bps);
|
|
@@ -373,16 +384,6 @@ pub fn assert_supported_message_lib<T: Worker>(env: &Env, message_lib: &Address)
|
|
|
373
384
|
// Admin Setter Functions with authentication
|
|
374
385
|
// ============================================================================================
|
|
375
386
|
|
|
376
|
-
/// Sets admin status for an address by authorizer (owner/multisig).
|
|
377
|
-
///
|
|
378
|
-
/// # Arguments
|
|
379
|
-
/// * `admin` - The address to set admin status for
|
|
380
|
-
/// * `active` - `true` to add admin, `false` to remove
|
|
381
|
-
pub fn set_admin_by_owner<T: Worker>(env: &Env, admin: &Address, active: bool) {
|
|
382
|
-
require_auth::<T>(env);
|
|
383
|
-
set_admin_no_auth::<T>(env, admin, active);
|
|
384
|
-
}
|
|
385
|
-
|
|
386
387
|
/// Sets admin status for an address by admin.
|
|
387
388
|
///
|
|
388
389
|
/// # Arguments
|
|
@@ -414,7 +415,6 @@ fn set_admin_no_auth<T: Worker>(env: &Env, admin: &Address, active: bool) {
|
|
|
414
415
|
admins.push_back(admin.clone());
|
|
415
416
|
} else {
|
|
416
417
|
// Remove admin - ensure present
|
|
417
|
-
assert_with_error!(env, admins.len() > 1, WorkerError::AttemptingToRemoveOnlyAdmin);
|
|
418
418
|
let Some(index) = admins.first_index_of(admin) else {
|
|
419
419
|
panic_with_error!(env, WorkerError::AdminNotFound);
|
|
420
420
|
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Stellar LayerZero Protocol - Error Code Specification
|
|
2
|
+
|
|
3
|
+
This document defines the error code allocation strategy for the Stellar LayerZero contracts.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
Each library has a unique error code range to:
|
|
8
|
+
|
|
9
|
+
- **Prevent collisions**: Avoid error code conflicts between different libraries
|
|
10
|
+
- **Enable traceability**: Quickly identify which library an error originated from based on its code
|
|
11
|
+
- **Simplify debugging**: Error codes are globally unique, making it easier to track and diagnose issues
|
|
12
|
+
|
|
13
|
+
## Allocation Rules
|
|
14
|
+
|
|
15
|
+
- **Contract-specific errors**: Each contract uses auto-incrementing error codes starting from 1. These are local to the contract and do not need global uniqueness since the contract address provides context.
|
|
16
|
+
- **Library errors**: Libraries that are shared across multiple contracts use reserved ranges (1000+) to ensure global uniqueness.
|
|
17
|
+
- **Library allocation**: Each library is allocated a 100-unit block (e.g., 1000-1099, 1100-1199). Total errors in one library should not exceed 100.
|
|
18
|
+
- **Sub-range allocation**: Each error type within a library is allocated a 10-unit block. If an error type exceeds 10 errors, it extends into the next block but the following error type should start at the next 10-unit boundary.
|
|
19
|
+
- **Auto-increment**: Within each error enum, values auto-increment from the starting value.
|
|
20
|
+
|
|
21
|
+
## Error Code Ranges
|
|
22
|
+
|
|
23
|
+
### Contract-Specific Errors (1-999)
|
|
24
|
+
|
|
25
|
+
Contract-specific errors auto-increment from 1 and are scoped to each contract.
|
|
26
|
+
|
|
27
|
+
| Contract | Location |
|
|
28
|
+
| ----------------- | ----------------------------------------------- |
|
|
29
|
+
| EndpointV2 | `endpoint-v2/src/errors.rs` |
|
|
30
|
+
| ULN302 | `message-libs/uln-302/src/errors.rs` |
|
|
31
|
+
| Treasury | `message-libs/treasury/src/errors.rs` |
|
|
32
|
+
| SimpleMessageLib | `message-libs/simple-message-lib/src/errors.rs` |
|
|
33
|
+
| DVN | `workers/dvn/src/errors.rs` |
|
|
34
|
+
| Executor | `workers/executor/src/errors.rs` |
|
|
35
|
+
| DVN Fee Lib | `workers/dvn-fee-lib/src/errors.rs` |
|
|
36
|
+
| Executor Fee Lib | `workers/executor-fee-lib/src/errors.rs` |
|
|
37
|
+
| Price Feed | `workers/price-feed/src/errors.rs` |
|
|
38
|
+
| LayerZero Views | `layerzero-views/src/errors.rs` |
|
|
39
|
+
| Counter (example) | `oapps/counter/src/errors.rs` |
|
|
40
|
+
|
|
41
|
+
### Library Errors (1000+)
|
|
42
|
+
|
|
43
|
+
Libraries shared across contracts use reserved ranges for global uniqueness.
|
|
44
|
+
|
|
45
|
+
| Range | Category | Library | Location |
|
|
46
|
+
| --------- | ------------ | ------------------ | ----------------------------------------------- |
|
|
47
|
+
| 1000-1099 | Protocol Lib | utils | `utils/src/errors.rs` |
|
|
48
|
+
| 1100-1199 | Protocol Lib | message-lib-common | `message-libs/message-lib-common/src/errors.rs` |
|
|
49
|
+
| 1200-1299 | Protocol Lib | worker | `workers/worker/src/errors.rs` |
|
|
50
|
+
| 1300-1999 | Protocol Lib | (reserved) | Future protocol libs |
|
|
51
|
+
| 2000-2099 | OApp Lib | oapp | `oapps/oapp/src/errors.rs` |
|
|
52
|
+
| 2100-2999 | OApp Lib | (reserved) | Future OApp libs |
|
|
53
|
+
| 3000-3099 | OFT Lib | oft-core | `oapps/oft-core/src/errors.rs` |
|
|
54
|
+
| 3100-3199 | OFT Lib | oft (extensions) | `oapps/oft/src/extensions/` |
|
|
55
|
+
| 3200-3999 | OFT Lib | (reserved) | Future OFT libs |
|