@layerzerolabs/protocol-stellar-v2 0.2.19 → 0.2.20
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 +245 -222
- package/.turbo/turbo-lint.log +77 -70
- package/.turbo/turbo-test.log +1385 -1221
- package/Cargo.lock +13 -3
- package/Cargo.toml +2 -0
- package/contracts/ERROR_SPEC.md +8 -1
- package/contracts/common-macros/src/contract_ttl.rs +18 -7
- package/contracts/common-macros/src/lib.rs +4 -4
- package/contracts/common-macros/src/tests/contract_ttl.rs +1 -1
- 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__upgradeable__snapshot_generated_upgradeable_code.snap +7 -12
- package/contracts/common-macros/src/upgradeable.rs +15 -21
- 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/send_uln302/send.rs +38 -64
- package/contracts/oapps/counter/Cargo.toml +1 -0
- package/contracts/oapps/counter/integration_tests/setup_uln.rs +1 -1
- package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +113 -65
- package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +111 -82
- package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +293 -65
- package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +331 -56
- package/contracts/oapps/oft/src/extensions/oft_fee.rs +18 -2
- package/contracts/oapps/oft/src/extensions/pausable.rs +19 -4
- package/contracts/oapps/oft/src/extensions/rate_limiter.rs +52 -28
- package/contracts/oapps/oft/src/oft.rs +29 -41
- package/contracts/oapps/oft/src/oft_types/mint_burn.rs +3 -25
- package/contracts/oapps/oft-core/integration-tests/setup.rs +2 -2
- package/contracts/oapps/oft-core/src/oft_core.rs +247 -207
- package/contracts/oapps/oft-core/src/tests/test_utils.rs +4 -4
- 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/src/buffer_reader.rs +1 -0
- package/contracts/utils/src/errors.rs +3 -1
- package/contracts/utils/src/tests/upgradeable.rs +372 -175
- package/contracts/utils/src/ttl_configurable.rs +3 -3
- package/contracts/utils/src/upgradeable.rs +48 -23
- package/contracts/workers/dvn/Cargo.toml +1 -0
- package/contracts/workers/dvn/src/auth.rs +12 -42
- package/contracts/workers/dvn/src/dvn.rs +16 -31
- 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 +1 -1
- package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +3 -5
- package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +2 -3
- package/contracts/workers/executor/Cargo.toml +1 -0
- package/contracts/workers/executor/src/executor.rs +15 -26
- package/contracts/workers/executor-fee-lib/Cargo.toml +2 -1
- package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +63 -5
- package/contracts/workers/executor-fee-lib/src/executor_option.rs +28 -1
- package/contracts/workers/executor-fee-lib/src/lib.rs +3 -0
- 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/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 +2 -1
- package/contracts/workers/price-feed/src/events.rs +1 -1
- package/contracts/workers/price-feed/src/lib.rs +3 -0
- package/contracts/workers/price-feed/src/price_feed.rs +6 -12
- 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 +0 -3
- 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 +1 -7
- package/contracts/workers/worker/src/tests/worker.rs +50 -42
- package/contracts/workers/worker/src/worker.rs +49 -58
- package/package.json +3 -3
- package/sdk/.turbo/turbo-test.log +220 -218
- package/sdk/dist/generated/bml.d.ts +12 -4
- package/sdk/dist/generated/bml.js +8 -6
- package/sdk/dist/generated/counter.d.ts +12 -4
- package/sdk/dist/generated/counter.js +8 -6
- package/sdk/dist/generated/dvn.d.ts +404 -365
- package/sdk/dist/generated/dvn.js +55 -53
- package/sdk/dist/generated/dvn_fee_lib.d.ts +224 -268
- package/sdk/dist/generated/dvn_fee_lib.js +22 -53
- package/sdk/dist/generated/endpoint.d.ts +12 -4
- package/sdk/dist/generated/endpoint.js +8 -6
- package/sdk/dist/generated/executor.d.ts +370 -326
- package/sdk/dist/generated/executor.js +47 -44
- package/sdk/dist/generated/executor_fee_lib.d.ts +258 -302
- package/sdk/dist/generated/executor_fee_lib.js +21 -52
- package/sdk/dist/generated/executor_helper.d.ts +26 -190
- package/sdk/dist/generated/executor_helper.js +22 -27
- 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 +49 -40
- package/sdk/dist/generated/oft.js +25 -23
- package/sdk/dist/generated/price_feed.d.ts +225 -269
- package/sdk/dist/generated/price_feed.js +22 -53
- package/sdk/dist/generated/sml.d.ts +12 -4
- package/sdk/dist/generated/sml.js +8 -6
- package/sdk/dist/generated/treasury.d.ts +12 -4
- package/sdk/dist/generated/treasury.js +8 -6
- package/sdk/dist/generated/uln302.d.ts +12 -4
- package/sdk/dist/generated/uln302.js +10 -8
- 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/upgrader.test.ts +2 -3
- package/tools/ts-bindings-gen/src/main.rs +2 -1
- /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
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
use crate::dvn_fee_lib::{
|
|
2
2
|
apply_premium, get_call_data_size, DvnFeeLib, BPS_BASE, EXECUTE_FIXED_BYTES, NATIVE_DECIMALS_RATE, VERIFY_BYTES,
|
|
3
3
|
};
|
|
4
|
+
use fee_lib_interfaces::{DvnFeeParams, FeeEstimate, IDvnFeeLib};
|
|
4
5
|
use soroban_sdk::{contract, contractimpl, testutils::Address as _, Address, Bytes, Env};
|
|
5
|
-
use worker::{interfaces::FeeEstimate, DvnFeeParams, IDvnFeeLib};
|
|
6
6
|
|
|
7
7
|
#[test]
|
|
8
8
|
fn get_call_data_size_pads_signatures() {
|
|
@@ -108,8 +108,7 @@ fn get_fee_panics_when_options_not_empty() {
|
|
|
108
108
|
env.mock_all_auths();
|
|
109
109
|
let owner = Address::generate(&env);
|
|
110
110
|
let fee_lib_addr = env.register(DvnFeeLib, (&owner,));
|
|
111
|
-
let
|
|
112
|
-
options.push_back(1u8);
|
|
111
|
+
let options = Bytes::from_slice(&env, &[1u8]);
|
|
113
112
|
|
|
114
113
|
let params = DvnFeeParams {
|
|
115
114
|
sender: Address::generate(&env),
|
|
@@ -19,6 +19,7 @@ soroban-sdk = { workspace = true }
|
|
|
19
19
|
# workspace dependencies
|
|
20
20
|
utils = { workspace = true }
|
|
21
21
|
worker = { workspace = true }
|
|
22
|
+
fee-lib-interfaces = { workspace = true }
|
|
22
23
|
common-macros = { workspace = true }
|
|
23
24
|
message-lib-common = { workspace = true }
|
|
24
25
|
endpoint-v2 = { workspace = true, features = ["library"] }
|
|
@@ -7,12 +7,13 @@ use crate::{
|
|
|
7
7
|
};
|
|
8
8
|
use common_macros::{contract_impl, lz_contract};
|
|
9
9
|
use endpoint_v2::{FeeRecipient, LayerZeroEndpointV2Client, Origin};
|
|
10
|
+
use fee_lib_interfaces::{ExecutorFeeLibClient, FeeParams};
|
|
10
11
|
use message_lib_common::interfaces::ILayerZeroExecutor;
|
|
11
12
|
use soroban_sdk::{token::TokenClient, vec, Address, Bytes, BytesN, Env, Vec};
|
|
12
13
|
use utils::{option_ext::OptionExt, upgradeable::UpgradeableInternal};
|
|
13
14
|
use worker::{
|
|
14
|
-
assert_acl, assert_not_paused, assert_supported_message_lib, init_worker, require_admin_auth,
|
|
15
|
-
|
|
15
|
+
assert_acl, assert_not_paused, assert_supported_message_lib, errors::WorkerError, init_worker, require_admin_auth,
|
|
16
|
+
Worker,
|
|
16
17
|
};
|
|
17
18
|
|
|
18
19
|
/// LayerZero Executor contract for cross-chain message execution.
|
|
@@ -68,17 +69,6 @@ impl LzExecutor {
|
|
|
68
69
|
require_admin_auth::<Self>(env, admin);
|
|
69
70
|
TokenClient::new(env, token).transfer(&env.current_contract_address(), to, &amount);
|
|
70
71
|
}
|
|
71
|
-
|
|
72
|
-
/// Sets admin status for an address. Requires owner authorization.
|
|
73
|
-
///
|
|
74
|
-
/// This is the multisig/quorum path for admin management.
|
|
75
|
-
///
|
|
76
|
-
/// # Arguments
|
|
77
|
-
/// * `admin` - The address to set admin status for
|
|
78
|
-
/// * `active` - Whether the address should be an admin
|
|
79
|
-
pub fn set_admin(env: &Env, admin: &Address, active: bool) {
|
|
80
|
-
set_admin_by_owner::<Self>(env, admin, active);
|
|
81
|
-
}
|
|
82
72
|
}
|
|
83
73
|
|
|
84
74
|
// ============================================================================
|
|
@@ -91,9 +81,7 @@ impl IExecutor for LzExecutor {
|
|
|
91
81
|
fn set_dst_config(env: &Env, admin: &Address, params: &Vec<SetDstConfigParam>) {
|
|
92
82
|
require_admin_auth::<Self>(env, admin);
|
|
93
83
|
|
|
94
|
-
|
|
95
|
-
ExecutorStorage::set_dst_config(env, param.dst_eid, ¶m.dst_config);
|
|
96
|
-
}
|
|
84
|
+
params.iter().for_each(|param| ExecutorStorage::set_dst_config(env, param.dst_eid, ¶m.dst_config));
|
|
97
85
|
DstConfigSet { params: params.clone() }.publish(env);
|
|
98
86
|
}
|
|
99
87
|
|
|
@@ -121,9 +109,9 @@ impl IExecutor for LzExecutor {
|
|
|
121
109
|
|
|
122
110
|
// Transfer native tokens from admin to each receiver and track success/failure
|
|
123
111
|
let mut success = vec![env];
|
|
124
|
-
|
|
125
|
-
success.push_back(token_client.try_transfer(admin, ¶m.receiver, ¶m.amount).is_ok())
|
|
126
|
-
}
|
|
112
|
+
native_drop_params.iter().for_each(|param| {
|
|
113
|
+
success.push_back(token_client.try_transfer(admin, ¶m.receiver, ¶m.amount).is_ok())
|
|
114
|
+
});
|
|
127
115
|
|
|
128
116
|
// Emit event with transfer results
|
|
129
117
|
NativeDropApplied {
|
|
@@ -162,7 +150,8 @@ impl ILayerZeroExecutor for LzExecutor {
|
|
|
162
150
|
// `get_fee` already asserts not_paused and acl, so we don't need to do it here again
|
|
163
151
|
|
|
164
152
|
let fee = Self::get_fee(env, send_lib, sender, dst_eid, calldata_size, options);
|
|
165
|
-
|
|
153
|
+
let deposit_address = Self::deposit_address(env).unwrap_or_panic(env, WorkerError::DepositAddressNotSet);
|
|
154
|
+
FeeRecipient { amount: fee, to: deposit_address }
|
|
166
155
|
}
|
|
167
156
|
|
|
168
157
|
/// Calculates the execution fee for a cross-chain message.
|
|
@@ -178,12 +167,14 @@ impl ILayerZeroExecutor for LzExecutor {
|
|
|
178
167
|
assert_acl::<Self>(env, sender);
|
|
179
168
|
|
|
180
169
|
let dst_config = Self::dst_config(env, dst_eid).unwrap_or_panic(env, ExecutorError::EidNotSupported);
|
|
170
|
+
let price_feed = Self::price_feed(env).unwrap_or_panic(env, WorkerError::PriceFeedNotSet);
|
|
171
|
+
let worker_fee_lib = Self::worker_fee_lib(env).unwrap_or_panic(env, WorkerError::WorkerFeeLibNotSet);
|
|
181
172
|
let fee_params = FeeParams {
|
|
182
173
|
sender: sender.clone(),
|
|
183
174
|
dst_eid,
|
|
184
175
|
calldata_size,
|
|
185
176
|
options: options.clone(),
|
|
186
|
-
price_feed
|
|
177
|
+
price_feed,
|
|
187
178
|
default_multiplier_bps: Self::default_multiplier_bps(env),
|
|
188
179
|
lz_receive_base_gas: dst_config.lz_receive_base_gas,
|
|
189
180
|
lz_compose_base_gas: dst_config.lz_compose_base_gas,
|
|
@@ -192,7 +183,7 @@ impl ILayerZeroExecutor for LzExecutor {
|
|
|
192
183
|
multiplier_bps: dst_config.multiplier_bps,
|
|
193
184
|
};
|
|
194
185
|
|
|
195
|
-
ExecutorFeeLibClient::new(env, &
|
|
186
|
+
ExecutorFeeLibClient::new(env, &worker_fee_lib).get_fee(&env.current_contract_address(), &fee_params)
|
|
196
187
|
}
|
|
197
188
|
}
|
|
198
189
|
|
|
@@ -207,12 +198,10 @@ impl Worker for LzExecutor {}
|
|
|
207
198
|
// Upgradeable Implementation
|
|
208
199
|
// ============================================================================
|
|
209
200
|
|
|
201
|
+
/// No migration logic needed for initial upgrade capability
|
|
210
202
|
impl UpgradeableInternal for LzExecutor {
|
|
211
203
|
type MigrationData = ();
|
|
212
|
-
|
|
213
|
-
fn __migrate(_env: &Env, _migration_data: &Self::MigrationData) {
|
|
214
|
-
// No migration logic needed for initial upgrade capability
|
|
215
|
-
}
|
|
204
|
+
fn __migrate(_env: &Env, _migration_data: &Self::MigrationData) {}
|
|
216
205
|
}
|
|
217
206
|
|
|
218
207
|
// ============================================================================
|
|
@@ -13,10 +13,11 @@ doctest = false
|
|
|
13
13
|
soroban-sdk = { workspace = true }
|
|
14
14
|
# workspace dependencies
|
|
15
15
|
utils = { workspace = true }
|
|
16
|
-
|
|
16
|
+
fee-lib-interfaces = { workspace = true }
|
|
17
17
|
common-macros = { workspace = true }
|
|
18
18
|
message-lib-common = { workspace = true }
|
|
19
19
|
|
|
20
20
|
[dev-dependencies]
|
|
21
21
|
soroban-sdk = { workspace = true, features = ["testutils"] }
|
|
22
|
+
utils = { workspace = true, features = ["testutils"] }
|
|
22
23
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
use crate::{errors::ExecutorFeeLibError, executor_option};
|
|
2
2
|
use common_macros::{contract_impl, lz_contract};
|
|
3
|
+
use fee_lib_interfaces::{FeeParams, IExecutorFeeLib, LayerZeroPriceFeedClient};
|
|
3
4
|
use soroban_sdk::{assert_with_error, Address, Bytes, Env};
|
|
4
5
|
use utils::upgradeable::UpgradeableInternal;
|
|
5
|
-
use worker::{FeeParams, IExecutorFeeLib, LayerZeroPriceFeedClient};
|
|
6
6
|
|
|
7
7
|
// ============================================================================
|
|
8
8
|
// Constants
|
|
@@ -110,12 +110,10 @@ impl IExecutorFeeLib for ExecutorFeeLib {
|
|
|
110
110
|
// Upgradeable Implementation
|
|
111
111
|
// ============================================================================
|
|
112
112
|
|
|
113
|
+
/// No migration logic needed for initial upgrade capability
|
|
113
114
|
impl UpgradeableInternal for ExecutorFeeLib {
|
|
114
115
|
type MigrationData = ();
|
|
115
|
-
|
|
116
|
-
fn __migrate(_env: &Env, _migration_data: &Self::MigrationData) {
|
|
117
|
-
// No migration logic needed for initial upgrade capability
|
|
118
|
-
}
|
|
116
|
+
fn __migrate(_env: &Env, _migration_data: &Self::MigrationData) {}
|
|
119
117
|
}
|
|
120
118
|
|
|
121
119
|
// ========================================================================
|
|
@@ -245,3 +243,63 @@ fn safe_u128_to_i128(env: &Env, value: u128) -> i128 {
|
|
|
245
243
|
assert_with_error!(env, value <= i128::MAX as u128, ExecutorFeeLibError::Overflow);
|
|
246
244
|
value as i128
|
|
247
245
|
}
|
|
246
|
+
|
|
247
|
+
// ============================================================================
|
|
248
|
+
// Test-only Functions
|
|
249
|
+
// ============================================================================
|
|
250
|
+
|
|
251
|
+
#[cfg(test)]
|
|
252
|
+
mod test {
|
|
253
|
+
use super::*;
|
|
254
|
+
|
|
255
|
+
impl ExecutorFeeLib {
|
|
256
|
+
/// Test-only wrapper for `decode_executor_options` to enable unit testing.
|
|
257
|
+
pub fn decode_executor_options_for_test(
|
|
258
|
+
env: &Env,
|
|
259
|
+
options: &Bytes,
|
|
260
|
+
dst_eid: u32,
|
|
261
|
+
lz_receive_base_gas: u64,
|
|
262
|
+
lz_compose_base_gas: u64,
|
|
263
|
+
native_cap: u128,
|
|
264
|
+
) -> (u128, u128) {
|
|
265
|
+
super::decode_executor_options(env, options, dst_eid, lz_receive_base_gas, lz_compose_base_gas, native_cap)
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/// Test-only wrapper for `get_effective_multiplier_bps`.
|
|
269
|
+
pub fn get_effective_multiplier_bps_for_test(_env: &Env, params: &FeeParams) -> u32 {
|
|
270
|
+
super::get_effective_multiplier_bps(params)
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/// Test-only wrapper for `apply_premium_to_gas`.
|
|
274
|
+
pub fn apply_premium_to_gas_for_test(
|
|
275
|
+
env: &Env,
|
|
276
|
+
fee: i128,
|
|
277
|
+
multiplier_bps: u32,
|
|
278
|
+
margin_usd: u128,
|
|
279
|
+
native_price_usd: u128,
|
|
280
|
+
) -> i128 {
|
|
281
|
+
super::apply_premium_to_gas(env, fee, multiplier_bps, margin_usd, native_price_usd)
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/// Test-only wrapper for `convert_and_apply_premium_to_value`.
|
|
285
|
+
pub fn convert_and_apply_premium_to_value_for_test(
|
|
286
|
+
env: &Env,
|
|
287
|
+
value: u128,
|
|
288
|
+
ratio: u128,
|
|
289
|
+
denom: u128,
|
|
290
|
+
multiplier_bps: u32,
|
|
291
|
+
) -> i128 {
|
|
292
|
+
super::convert_and_apply_premium_to_value(env, value, ratio, denom, multiplier_bps)
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/// Test-only wrapper for `is_v1_eid`.
|
|
296
|
+
pub fn is_v1_eid_for_test(_env: &Env, eid: u32) -> bool {
|
|
297
|
+
super::is_v1_eid(eid)
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/// Test-only wrapper for `safe_u128_to_i128`.
|
|
301
|
+
pub fn safe_u128_to_i128_for_test(env: &Env, value: u128) -> i128 {
|
|
302
|
+
super::safe_u128_to_i128(env, value)
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
@@ -80,7 +80,6 @@ pub fn parse_executor_options(env: &Env, options: &Bytes, is_v1_eid: bool, nativ
|
|
|
80
80
|
agg_options.num_lz_compose += 1;
|
|
81
81
|
}
|
|
82
82
|
EXECUTOR_OPTION_TYPE_ORDERED_EXECUTION => {
|
|
83
|
-
assert_with_error!(env, option_data.is_empty(), ExecutorFeeLibError::InvalidExecutorOptions);
|
|
84
83
|
agg_options.ordered = true;
|
|
85
84
|
}
|
|
86
85
|
_ => {
|
|
@@ -201,3 +200,31 @@ fn decode_lz_compose_option(env: &Env, option: &Bytes) -> (u16, u128, u128) {
|
|
|
201
200
|
|
|
202
201
|
(index, gas, value)
|
|
203
202
|
}
|
|
203
|
+
|
|
204
|
+
// ========================================================
|
|
205
|
+
// Test-only wrappers for internal helper functions
|
|
206
|
+
// ========================================================
|
|
207
|
+
//
|
|
208
|
+
// These allow unit tests under `src/tests/...` (a sibling module of `executor_option`)
|
|
209
|
+
// to exercise internal helpers without changing their visibility in production builds.
|
|
210
|
+
#[cfg(test)]
|
|
211
|
+
#[allow(dead_code)]
|
|
212
|
+
pub(crate) mod test {
|
|
213
|
+
use super::*;
|
|
214
|
+
|
|
215
|
+
pub fn next_executor_option_for_test(reader: &mut BufferReader) -> (u8, Bytes) {
|
|
216
|
+
super::next_executor_option(reader)
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
pub fn decode_lz_receive_option_for_test(env: &Env, option: &Bytes) -> (u128, u128) {
|
|
220
|
+
super::decode_lz_receive_option(env, option)
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
pub fn decode_native_drop_option_for_test(env: &Env, option: &Bytes) -> (u128, BytesN<32>) {
|
|
224
|
+
super::decode_native_drop_option(env, option)
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
pub fn decode_lz_compose_option_for_test(env: &Env, option: &Bytes) -> (u16, u128, u128) {
|
|
228
|
+
super::decode_lz_compose_option(env, option)
|
|
229
|
+
}
|
|
230
|
+
}
|