@layerzerolabs/protocol-stellar-v2 0.2.20 → 0.2.22
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 +783 -802
- package/.turbo/turbo-lint.log +320 -157
- package/.turbo/turbo-test.log +1414 -1457
- package/Cargo.lock +109 -108
- package/Cargo.toml +32 -18
- 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 +2 -2
- package/contracts/common-macros/src/lib.rs +27 -10
- 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/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__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 -9
- 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 +56 -15
- 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/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 +7 -27
- 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 +4 -6
- 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/{test_oapp_core.rs → oapp_core.rs} +4 -4
- package/contracts/oapps/oapp/src/tests/{test_oapp_options_type3.rs → oapp_options_type3.rs} +3 -4
- 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 +136 -74
- package/contracts/oapps/oft/src/extensions/pausable.rs +44 -10
- package/contracts/oapps/oft/src/extensions/rate_limiter.rs +170 -130
- package/contracts/oapps/oft/src/oft.rs +19 -12
- package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +1 -1
- package/contracts/oapps/oft/src/oft_types/mint_burn.rs +1 -1
- package/contracts/oapps/oft-core/Cargo.toml +1 -4
- package/contracts/oapps/oft-core/integration-tests/setup.rs +2 -2
- 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 +115 -60
- 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 +59 -14
- package/contracts/utils/Cargo.toml +0 -1
- package/contracts/utils/src/errors.rs +1 -1
- 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 +1 -1
- package/contracts/utils/src/ttl_configurable.rs +10 -4
- package/contracts/utils/src/upgradeable.rs +5 -5
- package/contracts/workers/dvn/Cargo.toml +5 -6
- package/contracts/workers/dvn/src/dvn.rs +2 -12
- package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -1
- package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +37 -19
- package/contracts/workers/dvn-fee-lib/src/lib.rs +12 -2
- package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +15 -13
- package/contracts/workers/executor/Cargo.toml +3 -0
- package/contracts/workers/executor/src/executor.rs +2 -12
- 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 +5 -0
- package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +1 -12
- package/contracts/workers/executor-fee-lib/src/lib.rs +8 -2
- package/contracts/workers/executor-helper/Cargo.toml +0 -1
- package/contracts/workers/price-feed/Cargo.toml +5 -0
- package/contracts/workers/price-feed/src/lib.rs +9 -4
- package/contracts/workers/price-feed/src/price_feed.rs +1 -11
- package/contracts/workers/worker/src/errors.rs +1 -1
- package/contracts/workers/worker/src/tests/setup.rs +1 -1
- package/contracts/workers/worker/src/tests/worker.rs +55 -41
- package/contracts/workers/worker/src/worker.rs +34 -25
- 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 +260 -257
- package/sdk/dist/generated/bml.d.ts +3 -3
- package/sdk/dist/generated/bml.js +4 -4
- package/sdk/dist/generated/counter.d.ts +295 -295
- package/sdk/dist/generated/counter.js +43 -43
- package/sdk/dist/generated/dvn.d.ts +91 -91
- package/sdk/dist/generated/dvn.js +24 -24
- package/sdk/dist/generated/dvn_fee_lib.d.ts +92 -92
- package/sdk/dist/generated/dvn_fee_lib.js +25 -25
- package/sdk/dist/generated/endpoint.d.ts +99 -99
- package/sdk/dist/generated/endpoint.js +16 -16
- package/sdk/dist/generated/executor.d.ts +91 -91
- package/sdk/dist/generated/executor.js +24 -24
- package/sdk/dist/generated/executor_fee_lib.d.ts +92 -92
- package/sdk/dist/generated/executor_fee_lib.js +25 -25
- package/sdk/dist/generated/executor_helper.d.ts +3 -3
- package/sdk/dist/generated/executor_helper.js +4 -4
- package/sdk/dist/generated/layerzero_view.d.ts +186 -186
- package/sdk/dist/generated/layerzero_view.js +35 -35
- package/sdk/dist/generated/oft.d.ts +366 -352
- package/sdk/dist/generated/oft.js +74 -79
- package/sdk/dist/generated/price_feed.d.ts +198 -198
- package/sdk/dist/generated/price_feed.js +39 -39
- package/sdk/dist/generated/sml.d.ts +99 -99
- package/sdk/dist/generated/sml.js +16 -16
- package/sdk/dist/generated/treasury.d.ts +99 -99
- package/sdk/dist/generated/treasury.js +16 -16
- package/sdk/dist/generated/uln302.d.ts +99 -99
- package/sdk/dist/generated/uln302.js +16 -16
- package/sdk/dist/generated/upgrader.d.ts +3 -3
- package/sdk/dist/generated/upgrader.js +3 -3
- package/sdk/package.json +1 -1
- package/sdk/test/suites/localnet.ts +84 -20
- package/contracts/ERROR_SPEC.md +0 -51
- package/contracts/endpoint-v2/ARCHITECTURE.md +0 -233
- /package/contracts/oapps/oapp/src/tests/{test_oapp_receiver.rs → oapp_receiver.rs} +0 -0
- /package/contracts/oapps/oapp/src/tests/{test_oapp_sender.rs → oapp_sender.rs} +0 -0
|
@@ -2,7 +2,6 @@ use crate::{errors::ExecutorFeeLibError, executor_option};
|
|
|
2
2
|
use common_macros::{contract_impl, lz_contract};
|
|
3
3
|
use fee_lib_interfaces::{FeeParams, IExecutorFeeLib, LayerZeroPriceFeedClient};
|
|
4
4
|
use soroban_sdk::{assert_with_error, Address, Bytes, Env};
|
|
5
|
-
use utils::upgradeable::UpgradeableInternal;
|
|
6
5
|
|
|
7
6
|
// ============================================================================
|
|
8
7
|
// Constants
|
|
@@ -25,7 +24,7 @@ const NATIVE_DECIMALS_RATE: u128 = 10_000_000;
|
|
|
25
24
|
/// Provides fee calculation logic based on executor options, destination configuration,
|
|
26
25
|
/// and current gas prices from the price feed. Handles fee multipliers, margins, and
|
|
27
26
|
/// native token value conversions.
|
|
28
|
-
#[lz_contract(upgradeable)]
|
|
27
|
+
#[lz_contract(upgradeable(no_migration))]
|
|
29
28
|
pub struct ExecutorFeeLib;
|
|
30
29
|
|
|
31
30
|
#[contract_impl]
|
|
@@ -106,16 +105,6 @@ impl IExecutorFeeLib for ExecutorFeeLib {
|
|
|
106
105
|
}
|
|
107
106
|
}
|
|
108
107
|
|
|
109
|
-
// ============================================================================
|
|
110
|
-
// Upgradeable Implementation
|
|
111
|
-
// ============================================================================
|
|
112
|
-
|
|
113
|
-
/// No migration logic needed for initial upgrade capability
|
|
114
|
-
impl UpgradeableInternal for ExecutorFeeLib {
|
|
115
|
-
type MigrationData = ();
|
|
116
|
-
fn __migrate(_env: &Env, _migration_data: &Self::MigrationData) {}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
108
|
// ========================================================================
|
|
120
109
|
// Helper Functions
|
|
121
110
|
// ========================================================================
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
#![no_std]
|
|
2
2
|
|
|
3
3
|
pub mod errors;
|
|
4
|
-
pub mod executor_fee_lib;
|
|
5
4
|
pub mod executor_option;
|
|
6
5
|
|
|
7
|
-
|
|
6
|
+
cfg_if::cfg_if! {
|
|
7
|
+
// Include implementation when NOT in library mode, OR when testutils is enabled (for tests)
|
|
8
|
+
if #[cfg(any(not(feature = "library"), feature = "testutils"))] {
|
|
9
|
+
mod executor_fee_lib;
|
|
10
|
+
// Export the contract and client for testing purposes
|
|
11
|
+
pub use executor_fee_lib::{ExecutorFeeLib, ExecutorFeeLibClient};
|
|
12
|
+
}
|
|
13
|
+
}
|
|
8
14
|
|
|
9
15
|
#[cfg(test)]
|
|
10
16
|
mod tests;
|
|
@@ -14,7 +14,6 @@ soroban-sdk = { workspace = true }
|
|
|
14
14
|
# workspace dependencies
|
|
15
15
|
common-macros = { workspace = true }
|
|
16
16
|
utils = { workspace = true }
|
|
17
|
-
worker = { workspace = true }
|
|
18
17
|
endpoint-v2 = { workspace = true, features = ["library"] }
|
|
19
18
|
executor = { workspace = true, features = ["library"] }
|
|
20
19
|
|
|
@@ -9,7 +9,12 @@ 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 }
|
|
@@ -1,13 +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
|
+
}
|
|
11
16
|
|
|
12
17
|
#[cfg(test)]
|
|
13
18
|
mod tests;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
use common_macros::{contract_impl, lz_contract, only_auth};
|
|
2
2
|
use fee_lib_interfaces::{FeeEstimate, ILayerZeroPriceFeed, Price};
|
|
3
3
|
use soroban_sdk::{assert_with_error, panic_with_error, Address, Env, Vec};
|
|
4
|
-
use utils::upgradeable::UpgradeableInternal;
|
|
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]
|
|
@@ -267,12 +266,3 @@ impl LzPriceFeed {
|
|
|
267
266
|
}
|
|
268
267
|
}
|
|
269
268
|
|
|
270
|
-
// ============================================================================
|
|
271
|
-
// Upgradeable Implementation
|
|
272
|
-
// ============================================================================
|
|
273
|
-
|
|
274
|
-
/// No migration logic needed for initial upgrade capability
|
|
275
|
-
impl UpgradeableInternal for LzPriceFeed {
|
|
276
|
-
type MigrationData = ();
|
|
277
|
-
fn __migrate(_env: &Env, _migration_data: &Self::MigrationData) {}
|
|
278
|
-
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
use super::setup::{bare_worker, TestSetup, WorkerTester};
|
|
2
2
|
use crate::{
|
|
3
|
+
errors::WorkerError,
|
|
3
4
|
events::{
|
|
4
5
|
Paused, SetAdmin, SetAllowlist, SetDefaultMultiplierBps, SetDenylist, SetDepositAddress, SetPriceFeed,
|
|
5
6
|
SetSupportedMessageLib, SetSupportedOptionTypes, SetWorkerFeeLib, Unpaused,
|
|
@@ -7,17 +8,16 @@ use crate::{
|
|
|
7
8
|
init_worker,
|
|
8
9
|
};
|
|
9
10
|
use soroban_sdk::{testutils::Address as _, vec, Address, Bytes, Env, IntoVal};
|
|
10
|
-
use utils::testing_utils::
|
|
11
|
+
use utils::testing_utils::assert_eq_event;
|
|
11
12
|
|
|
12
13
|
// pause
|
|
13
14
|
|
|
14
15
|
#[test]
|
|
15
|
-
#[should_panic(expected = "Error(Contract, #1210)")] // WorkerError::PauseStatusUnchanged
|
|
16
16
|
fn test_set_paused_rejects_unchanged_status() {
|
|
17
17
|
let setup = TestSetup::new();
|
|
18
18
|
|
|
19
19
|
setup.mock_owner_auth("set_paused", (false,));
|
|
20
|
-
setup.client.
|
|
20
|
+
assert_eq!(setup.client.try_set_paused(&false).unwrap_err().unwrap(), WorkerError::PauseStatusUnchanged.into());
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
#[test]
|
|
@@ -26,19 +26,18 @@ fn test_set_paused_toggles_state() {
|
|
|
26
26
|
|
|
27
27
|
setup.mock_owner_auth("set_paused", (true,));
|
|
28
28
|
setup.client.set_paused(&true);
|
|
29
|
-
|
|
29
|
+
assert_eq_event(&setup.env, &setup.contract_id, Paused { pauser: setup.owner.clone() });
|
|
30
30
|
assert_eq!(setup.client.paused(), true);
|
|
31
31
|
|
|
32
32
|
setup.mock_owner_auth("set_paused", (false,));
|
|
33
33
|
setup.client.set_paused(&false);
|
|
34
|
-
|
|
34
|
+
assert_eq_event(&setup.env, &setup.contract_id, Unpaused { unpauser: setup.owner.clone() });
|
|
35
35
|
assert_eq!(setup.client.paused(), false);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
// allowlist
|
|
39
39
|
|
|
40
40
|
#[test]
|
|
41
|
-
#[should_panic(expected = "Error(Contract, #1202)")] // WorkerError::AlreadyOnAllowlist
|
|
42
41
|
fn test_allowlist_rejects_duplicate_add() {
|
|
43
42
|
let setup = TestSetup::new();
|
|
44
43
|
let oapp = Address::generate(&setup.env);
|
|
@@ -47,17 +46,19 @@ fn test_allowlist_rejects_duplicate_add() {
|
|
|
47
46
|
setup.client.set_allowlist(&oapp, &true);
|
|
48
47
|
|
|
49
48
|
setup.mock_owner_auth("set_allowlist", (&oapp, true));
|
|
50
|
-
|
|
49
|
+
assert_eq!(
|
|
50
|
+
setup.client.try_set_allowlist(&oapp, &true).unwrap_err().unwrap(),
|
|
51
|
+
WorkerError::AlreadyOnAllowlist.into()
|
|
52
|
+
);
|
|
51
53
|
}
|
|
52
54
|
|
|
53
55
|
#[test]
|
|
54
|
-
#[should_panic(expected = "Error(Contract, #1208)")] // WorkerError::NotOnAllowlist
|
|
55
56
|
fn test_allowlist_rejects_remove_missing() {
|
|
56
57
|
let setup = TestSetup::new();
|
|
57
58
|
let oapp = Address::generate(&setup.env);
|
|
58
59
|
|
|
59
60
|
setup.mock_owner_auth("set_allowlist", (&oapp, false));
|
|
60
|
-
setup.client.
|
|
61
|
+
assert_eq!(setup.client.try_set_allowlist(&oapp, &false).unwrap_err().unwrap(), WorkerError::NotOnAllowlist.into());
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
#[test]
|
|
@@ -70,7 +71,7 @@ fn test_allowlist_remove_decrements_size_and_restores_default_acl() {
|
|
|
70
71
|
assert_eq!(setup.client.is_on_allowlist(&oapp_a), false);
|
|
71
72
|
setup.mock_owner_auth("set_allowlist", (&oapp_a, true));
|
|
72
73
|
setup.client.set_allowlist(&oapp_a, &true);
|
|
73
|
-
|
|
74
|
+
assert_eq_event(&setup.env, &setup.contract_id, SetAllowlist { oapp: oapp_a.clone(), allowed: true });
|
|
74
75
|
assert_eq!(setup.client.is_on_allowlist(&oapp_a), true);
|
|
75
76
|
assert_eq!(setup.client.allowlist_size(), 1);
|
|
76
77
|
assert_eq!(setup.client.has_acl(&oapp_a), true);
|
|
@@ -79,7 +80,7 @@ fn test_allowlist_remove_decrements_size_and_restores_default_acl() {
|
|
|
79
80
|
// Remove last allowlist entry => allowlist empty; default allows all (unless denylisted)
|
|
80
81
|
setup.mock_owner_auth("set_allowlist", (&oapp_a, false));
|
|
81
82
|
setup.client.set_allowlist(&oapp_a, &false);
|
|
82
|
-
|
|
83
|
+
assert_eq_event(&setup.env, &setup.contract_id, SetAllowlist { oapp: oapp_a.clone(), allowed: false });
|
|
83
84
|
assert_eq!(setup.client.is_on_allowlist(&oapp_a), false);
|
|
84
85
|
assert_eq!(setup.client.allowlist_size(), 0);
|
|
85
86
|
assert_eq!(setup.client.has_acl(&oapp_b), true);
|
|
@@ -88,7 +89,6 @@ fn test_allowlist_remove_decrements_size_and_restores_default_acl() {
|
|
|
88
89
|
// denylist
|
|
89
90
|
|
|
90
91
|
#[test]
|
|
91
|
-
#[should_panic(expected = "Error(Contract, #1203)")] // WorkerError::AlreadyOnDenylist
|
|
92
92
|
fn test_denylist_rejects_duplicate_add() {
|
|
93
93
|
let setup = TestSetup::new();
|
|
94
94
|
let oapp = Address::generate(&setup.env);
|
|
@@ -97,17 +97,19 @@ fn test_denylist_rejects_duplicate_add() {
|
|
|
97
97
|
setup.client.set_denylist(&oapp, &true);
|
|
98
98
|
|
|
99
99
|
setup.mock_owner_auth("set_denylist", (&oapp, true));
|
|
100
|
-
|
|
100
|
+
assert_eq!(
|
|
101
|
+
setup.client.try_set_denylist(&oapp, &true).unwrap_err().unwrap(),
|
|
102
|
+
WorkerError::AlreadyOnDenylist.into()
|
|
103
|
+
);
|
|
101
104
|
}
|
|
102
105
|
|
|
103
106
|
#[test]
|
|
104
|
-
#[should_panic(expected = "Error(Contract, #1209)")] // WorkerError::NotOnDenylist
|
|
105
107
|
fn test_denylist_rejects_remove_missing() {
|
|
106
108
|
let setup = TestSetup::new();
|
|
107
109
|
let oapp = Address::generate(&setup.env);
|
|
108
110
|
|
|
109
111
|
setup.mock_owner_auth("set_denylist", (&oapp, false));
|
|
110
|
-
setup.client.
|
|
112
|
+
assert_eq!(setup.client.try_set_denylist(&oapp, &false).unwrap_err().unwrap(), WorkerError::NotOnDenylist.into());
|
|
111
113
|
}
|
|
112
114
|
|
|
113
115
|
// message_libs
|
|
@@ -122,7 +124,7 @@ fn test_message_lib_add_remove_and_errors() {
|
|
|
122
124
|
// Add new supported lib
|
|
123
125
|
setup.mock_owner_auth("set_supported_message_lib", (&new_lib, true));
|
|
124
126
|
setup.client.set_supported_message_lib(&new_lib, &true);
|
|
125
|
-
|
|
127
|
+
assert_eq_event(
|
|
126
128
|
&setup.env,
|
|
127
129
|
&setup.contract_id,
|
|
128
130
|
SetSupportedMessageLib { message_lib: new_lib.clone(), supported: true },
|
|
@@ -132,7 +134,7 @@ fn test_message_lib_add_remove_and_errors() {
|
|
|
132
134
|
// Remove it
|
|
133
135
|
setup.mock_owner_auth("set_supported_message_lib", (&new_lib, false));
|
|
134
136
|
setup.client.set_supported_message_lib(&new_lib, &false);
|
|
135
|
-
|
|
137
|
+
assert_eq_event(
|
|
136
138
|
&setup.env,
|
|
137
139
|
&setup.contract_id,
|
|
138
140
|
SetSupportedMessageLib { message_lib: new_lib.clone(), supported: false },
|
|
@@ -144,29 +146,32 @@ fn test_message_lib_add_remove_and_errors() {
|
|
|
144
146
|
}
|
|
145
147
|
|
|
146
148
|
#[test]
|
|
147
|
-
#[should_panic(expected = "Error(Contract, #1205)")] // WorkerError::MessageLibAlreadySupported
|
|
148
149
|
fn test_message_lib_rejects_duplicate_add() {
|
|
149
150
|
let setup = TestSetup::new();
|
|
150
151
|
let existing = setup.message_libs.get(0).unwrap();
|
|
151
152
|
|
|
152
153
|
setup.mock_owner_auth("set_supported_message_lib", (&existing, true));
|
|
153
|
-
|
|
154
|
+
assert_eq!(
|
|
155
|
+
setup.client.try_set_supported_message_lib(&existing, &true).unwrap_err().unwrap(),
|
|
156
|
+
WorkerError::MessageLibAlreadySupported.into()
|
|
157
|
+
);
|
|
154
158
|
}
|
|
155
159
|
|
|
156
160
|
#[test]
|
|
157
|
-
#[should_panic(expected = "Error(Contract, #1206)")] // WorkerError::MessageLibNotSupported
|
|
158
161
|
fn test_message_lib_rejects_remove_missing() {
|
|
159
162
|
let setup = TestSetup::new();
|
|
160
163
|
let missing = Address::generate(&setup.env);
|
|
161
164
|
|
|
162
165
|
setup.mock_owner_auth("set_supported_message_lib", (&missing, false));
|
|
163
|
-
|
|
166
|
+
assert_eq!(
|
|
167
|
+
setup.client.try_set_supported_message_lib(&missing, &false).unwrap_err().unwrap(),
|
|
168
|
+
WorkerError::MessageLibNotSupported.into()
|
|
169
|
+
);
|
|
164
170
|
}
|
|
165
171
|
|
|
166
172
|
// admin-only setters
|
|
167
173
|
|
|
168
174
|
#[test]
|
|
169
|
-
#[should_panic(expected = "Error(Contract, #1212)")] // WorkerError::Unauthorized
|
|
170
175
|
fn test_admin_only_set_default_multiplier_requires_admin_membership() {
|
|
171
176
|
let setup = TestSetup::new();
|
|
172
177
|
|
|
@@ -175,7 +180,10 @@ fn test_admin_only_set_default_multiplier_requires_admin_membership() {
|
|
|
175
180
|
|
|
176
181
|
// Auth passes, but address isn't in admins list => Unauthorized
|
|
177
182
|
setup.mock_auth(&non_admin, "set_default_multiplier_bps", (&non_admin, bps));
|
|
178
|
-
|
|
183
|
+
assert_eq!(
|
|
184
|
+
setup.client.try_set_default_multiplier_bps(&non_admin, &bps).unwrap_err().unwrap(),
|
|
185
|
+
WorkerError::Unauthorized.into()
|
|
186
|
+
);
|
|
179
187
|
}
|
|
180
188
|
|
|
181
189
|
#[test]
|
|
@@ -187,14 +195,14 @@ fn test_admin_setters_update_storage_and_events() {
|
|
|
187
195
|
let bps = 12_000u32;
|
|
188
196
|
setup.mock_auth(&admin, "set_default_multiplier_bps", (&admin, bps));
|
|
189
197
|
setup.client.set_default_multiplier_bps(&admin, &bps);
|
|
190
|
-
|
|
198
|
+
assert_eq_event(&setup.env, &setup.contract_id, SetDefaultMultiplierBps { multiplier_bps: bps });
|
|
191
199
|
assert_eq!(setup.client.default_multiplier_bps(), bps);
|
|
192
200
|
|
|
193
201
|
// set_deposit_address
|
|
194
202
|
let new_deposit = Address::generate(&setup.env);
|
|
195
203
|
setup.mock_auth(&admin, "set_deposit_address", (&admin, &new_deposit));
|
|
196
204
|
setup.client.set_deposit_address(&admin, &new_deposit);
|
|
197
|
-
|
|
205
|
+
assert_eq_event(&setup.env, &setup.contract_id, SetDepositAddress { deposit_address: new_deposit.clone() });
|
|
198
206
|
assert_eq!(setup.client.deposit_address(), Some(new_deposit));
|
|
199
207
|
|
|
200
208
|
// set_supported_option_types
|
|
@@ -204,7 +212,7 @@ fn test_admin_setters_update_storage_and_events() {
|
|
|
204
212
|
let option_types = Bytes::from_slice(&setup.env, &[0xAA, 0xBB, 0xCC]);
|
|
205
213
|
setup.mock_auth(&admin, "set_supported_option_types", (&admin, eid_a, option_types.clone()));
|
|
206
214
|
setup.client.set_supported_option_types(&admin, &eid_a, &option_types);
|
|
207
|
-
|
|
215
|
+
assert_eq_event(
|
|
208
216
|
&setup.env,
|
|
209
217
|
&setup.contract_id,
|
|
210
218
|
SetSupportedOptionTypes { dst_eid: eid_a, option_types: option_types.clone() },
|
|
@@ -217,14 +225,14 @@ fn test_admin_setters_update_storage_and_events() {
|
|
|
217
225
|
let new_fee_lib = Address::generate(&setup.env);
|
|
218
226
|
setup.mock_auth(&admin, "set_worker_fee_lib", (&admin, &new_fee_lib));
|
|
219
227
|
setup.client.set_worker_fee_lib(&admin, &new_fee_lib);
|
|
220
|
-
|
|
228
|
+
assert_eq_event(&setup.env, &setup.contract_id, SetWorkerFeeLib { fee_lib: new_fee_lib.clone() });
|
|
221
229
|
assert_eq!(setup.client.worker_fee_lib(), Some(new_fee_lib));
|
|
222
230
|
|
|
223
231
|
// set_price_feed
|
|
224
232
|
let new_price_feed = Address::generate(&setup.env);
|
|
225
233
|
setup.mock_auth(&admin, "set_price_feed", (&admin, &new_price_feed));
|
|
226
234
|
setup.client.set_price_feed(&admin, &new_price_feed);
|
|
227
|
-
|
|
235
|
+
assert_eq_event(&setup.env, &setup.contract_id, SetPriceFeed { price_feed: new_price_feed.clone() });
|
|
228
236
|
assert_eq!(setup.client.price_feed(), Some(new_price_feed));
|
|
229
237
|
}
|
|
230
238
|
|
|
@@ -243,14 +251,14 @@ fn test_acl_allowlist_denylist_precedence() {
|
|
|
243
251
|
assert_eq!(setup.client.is_on_denylist(&oapp_a), false);
|
|
244
252
|
setup.mock_owner_auth("set_denylist", (&oapp_a, true));
|
|
245
253
|
setup.client.set_denylist(&oapp_a, &true);
|
|
246
|
-
|
|
254
|
+
assert_eq_event(&setup.env, &setup.contract_id, SetDenylist { oapp: oapp_a.clone(), denied: true });
|
|
247
255
|
assert_eq!(setup.client.is_on_denylist(&oapp_a), true);
|
|
248
256
|
assert_eq!(setup.client.has_acl(&oapp_a), false);
|
|
249
257
|
|
|
250
258
|
// Remove from denylist => allowed again (since allowlist is empty)
|
|
251
259
|
setup.mock_owner_auth("set_denylist", (&oapp_a, false));
|
|
252
260
|
setup.client.set_denylist(&oapp_a, &false);
|
|
253
|
-
|
|
261
|
+
assert_eq_event(&setup.env, &setup.contract_id, SetDenylist { oapp: oapp_a.clone(), denied: false });
|
|
254
262
|
assert_eq!(setup.client.is_on_denylist(&oapp_a), false);
|
|
255
263
|
assert_eq!(setup.client.has_acl(&oapp_a), true);
|
|
256
264
|
|
|
@@ -264,13 +272,13 @@ fn test_acl_allowlist_denylist_precedence() {
|
|
|
264
272
|
// Denylist must override allowlist even for the same OApp.
|
|
265
273
|
setup.mock_owner_auth("set_denylist", (&oapp_a, true));
|
|
266
274
|
setup.client.set_denylist(&oapp_a, &true);
|
|
267
|
-
|
|
275
|
+
assert_eq_event(&setup.env, &setup.contract_id, SetDenylist { oapp: oapp_a.clone(), denied: true });
|
|
268
276
|
assert_eq!(setup.client.has_acl(&oapp_a), false);
|
|
269
277
|
|
|
270
278
|
// Removing from denylist should restore allowlist effect.
|
|
271
279
|
setup.mock_owner_auth("set_denylist", (&oapp_a, false));
|
|
272
280
|
setup.client.set_denylist(&oapp_a, &false);
|
|
273
|
-
|
|
281
|
+
assert_eq_event(&setup.env, &setup.contract_id, SetDenylist { oapp: oapp_a.clone(), denied: false });
|
|
274
282
|
assert_eq!(setup.client.has_acl(&oapp_a), true);
|
|
275
283
|
}
|
|
276
284
|
|
|
@@ -383,33 +391,37 @@ fn test_admin_management_by_owner_adds_and_removes_admin() {
|
|
|
383
391
|
|
|
384
392
|
setup.mock_owner_auth("set_admin", (&new_admin, true));
|
|
385
393
|
setup.client.set_admin(&new_admin, &true);
|
|
386
|
-
|
|
394
|
+
assert_eq_event(&setup.env, &setup.contract_id, SetAdmin { admin: new_admin.clone(), active: true });
|
|
387
395
|
assert_eq!(setup.client.is_admin(&new_admin), true);
|
|
388
396
|
|
|
389
397
|
setup.mock_owner_auth("set_admin", (&new_admin, false));
|
|
390
398
|
setup.client.set_admin(&new_admin, &false);
|
|
391
|
-
|
|
399
|
+
assert_eq_event(&setup.env, &setup.contract_id, SetAdmin { admin: new_admin.clone(), active: false });
|
|
392
400
|
assert_eq!(setup.client.is_admin(&new_admin), false);
|
|
393
401
|
}
|
|
394
402
|
|
|
395
403
|
#[test]
|
|
396
|
-
#[should_panic(expected = "Error(Contract, #1200)")] // WorkerError::AdminAlreadyExists
|
|
397
404
|
fn test_admin_management_by_owner_rejects_duplicate_add() {
|
|
398
405
|
let setup = TestSetup::new();
|
|
399
406
|
let existing_admin = setup.admins.get(0).unwrap();
|
|
400
407
|
|
|
401
408
|
setup.mock_owner_auth("set_admin", (&existing_admin, true));
|
|
402
|
-
|
|
409
|
+
assert_eq!(
|
|
410
|
+
setup.client.try_set_admin(&existing_admin, &true).unwrap_err().unwrap(),
|
|
411
|
+
WorkerError::AdminAlreadyExists.into()
|
|
412
|
+
);
|
|
403
413
|
}
|
|
404
414
|
|
|
405
415
|
#[test]
|
|
406
|
-
#[should_panic(expected = "Error(Contract, #1201)")] // WorkerError::AdminNotFound
|
|
407
416
|
fn test_admin_management_by_owner_rejects_remove_missing_admin() {
|
|
408
417
|
let setup = TestSetup::new();
|
|
409
418
|
let missing_admin = Address::generate(&setup.env);
|
|
410
419
|
|
|
411
420
|
setup.mock_owner_auth("set_admin", (&missing_admin, false));
|
|
412
|
-
|
|
421
|
+
assert_eq!(
|
|
422
|
+
setup.client.try_set_admin(&missing_admin, &false).unwrap_err().unwrap(),
|
|
423
|
+
WorkerError::AdminNotFound.into()
|
|
424
|
+
);
|
|
413
425
|
}
|
|
414
426
|
|
|
415
427
|
#[test]
|
|
@@ -454,19 +466,21 @@ fn test_admin_management_by_admin_can_add_admin() {
|
|
|
454
466
|
|
|
455
467
|
setup.mock_auth(&caller, "set_admin_by_admin_for_test", (&caller, &new_admin, true));
|
|
456
468
|
setup.client.set_admin_by_admin_for_test(&caller, &new_admin, &true);
|
|
457
|
-
|
|
469
|
+
assert_eq_event(&setup.env, &setup.contract_id, SetAdmin { admin: new_admin.clone(), active: true });
|
|
458
470
|
assert_eq!(setup.client.is_admin(&new_admin), true);
|
|
459
471
|
}
|
|
460
472
|
|
|
461
473
|
#[test]
|
|
462
|
-
#[should_panic(expected = "Error(Contract, #1212)")] // WorkerError::Unauthorized
|
|
463
474
|
fn test_admin_management_by_admin_requires_caller_is_admin() {
|
|
464
475
|
let setup = TestSetup::new();
|
|
465
476
|
let non_admin = Address::generate(&setup.env);
|
|
466
477
|
let new_admin = Address::generate(&setup.env);
|
|
467
478
|
|
|
468
479
|
setup.mock_auth(&non_admin, "set_admin_by_admin_for_test", (&non_admin, &new_admin, true));
|
|
469
|
-
|
|
480
|
+
assert_eq!(
|
|
481
|
+
setup.client.try_set_admin_by_admin_for_test(&non_admin, &new_admin, &true).unwrap_err().unwrap(),
|
|
482
|
+
WorkerError::Unauthorized.into()
|
|
483
|
+
);
|
|
470
484
|
}
|
|
471
485
|
|
|
472
486
|
#[test]
|