@layerzerolabs/protocol-stellar-v2 0.2.8 → 0.2.9
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
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
use common_macros::event;
|
|
2
|
+
use soroban_sdk::{Address, Bytes};
|
|
3
|
+
|
|
4
|
+
#[event]
|
|
5
|
+
pub struct SetAdmin {
|
|
6
|
+
pub admin: Address,
|
|
7
|
+
pub active: bool,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
#[event]
|
|
11
|
+
pub struct SetSupportedMessageLib {
|
|
12
|
+
pub message_lib: Address,
|
|
13
|
+
pub supported: bool,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
#[event]
|
|
17
|
+
pub struct SetAllowlist {
|
|
18
|
+
pub oapp: Address,
|
|
19
|
+
pub allowed: bool,
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
#[event]
|
|
23
|
+
pub struct SetDenylist {
|
|
24
|
+
pub oapp: Address,
|
|
25
|
+
pub denied: bool,
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
#[event]
|
|
29
|
+
pub struct Paused {
|
|
30
|
+
pub pauser: Address,
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
#[event]
|
|
34
|
+
pub struct Unpaused {
|
|
35
|
+
pub unpauser: Address,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
#[event]
|
|
39
|
+
pub struct SetDefaultMultiplierBps {
|
|
40
|
+
pub multiplier_bps: u32,
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
#[event]
|
|
44
|
+
pub struct SetDepositAddress {
|
|
45
|
+
pub deposit_address: Address,
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
#[event]
|
|
49
|
+
pub struct SetPriceFeed {
|
|
50
|
+
pub price_feed: Address,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
#[event]
|
|
54
|
+
pub struct SetSupportedOptionTypes {
|
|
55
|
+
pub dst_eid: u32,
|
|
56
|
+
pub option_types: Bytes,
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
#[event]
|
|
60
|
+
pub struct SetWorkerFeeLib {
|
|
61
|
+
pub fee_lib: Address,
|
|
62
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
use soroban_sdk::{contractclient, contracttype, Address, Bytes, Env};
|
|
2
|
+
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Fee Calculation Types
|
|
5
|
+
// ============================================================================
|
|
6
|
+
|
|
7
|
+
/// Parameters for DVN fee calculation.
|
|
8
|
+
///
|
|
9
|
+
/// Contains all inputs needed by the fee library to calculate verification fees
|
|
10
|
+
/// for cross-chain messages. Includes message parameters, common configuration,
|
|
11
|
+
/// and destination-specific settings.
|
|
12
|
+
#[contracttype]
|
|
13
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
14
|
+
pub struct DvnFeeParams {
|
|
15
|
+
/// ============================================================================================
|
|
16
|
+
/// Message Parameters
|
|
17
|
+
/// ============================================================================================
|
|
18
|
+
|
|
19
|
+
/// The OApp sender address.
|
|
20
|
+
pub sender: Address,
|
|
21
|
+
/// Destination endpoint ID (chain identifier).
|
|
22
|
+
pub dst_eid: u32,
|
|
23
|
+
/// Number of block confirmations required.
|
|
24
|
+
pub confirmations: u64,
|
|
25
|
+
/// DVN options
|
|
26
|
+
pub options: Bytes,
|
|
27
|
+
|
|
28
|
+
/// ============================================================================================
|
|
29
|
+
/// Common Configuration
|
|
30
|
+
/// ============================================================================================
|
|
31
|
+
|
|
32
|
+
/// Price feed contract address for gas price and exchange rate data.
|
|
33
|
+
pub price_feed: Address,
|
|
34
|
+
/// Default fee multiplier in basis points (used if no dst-specific multiplier).
|
|
35
|
+
pub default_multiplier_bps: u32,
|
|
36
|
+
/// Number of required signatures (quorum).
|
|
37
|
+
pub quorum: u32,
|
|
38
|
+
|
|
39
|
+
/// ============================================================================================
|
|
40
|
+
/// Destination-Specific Configuration
|
|
41
|
+
/// ============================================================================================
|
|
42
|
+
|
|
43
|
+
/// Gas estimate for verification on destination chain.
|
|
44
|
+
pub gas: u128,
|
|
45
|
+
/// Destination-specific fee multiplier in basis points (0 = use default).
|
|
46
|
+
pub multiplier_bps: u32,
|
|
47
|
+
/// Minimum fee margin in USD (scaled).
|
|
48
|
+
pub floor_margin_usd: u128,
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// ============================================================================
|
|
52
|
+
// IDvnFeeLib Trait
|
|
53
|
+
// ============================================================================
|
|
54
|
+
|
|
55
|
+
/// Interface for DVN fee calculation.
|
|
56
|
+
///
|
|
57
|
+
/// Called by the DVN contract to calculate fees for verification jobs.
|
|
58
|
+
/// Uses the PriceFeed interface to obtain gas prices and exchange rates.
|
|
59
|
+
#[contractclient(name = "DvnFeeLibClient")]
|
|
60
|
+
pub trait IDvnFeeLib {
|
|
61
|
+
/// Calculates the DVN fee for a verification job.
|
|
62
|
+
///
|
|
63
|
+
/// The fee calculation considers:
|
|
64
|
+
/// - Gas costs for verification on destination chain
|
|
65
|
+
/// - Quorum size (number of required signatures)
|
|
66
|
+
/// - Configured multipliers and floor margins
|
|
67
|
+
/// - Price ratios between source and destination chains
|
|
68
|
+
///
|
|
69
|
+
/// # Arguments
|
|
70
|
+
/// * `params` - Fee calculation parameters
|
|
71
|
+
///
|
|
72
|
+
/// # Returns
|
|
73
|
+
/// The calculated fee in native token units (stroops for Stellar).
|
|
74
|
+
fn get_fee(env: &Env, params: &DvnFeeParams) -> i128;
|
|
75
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
use soroban_sdk::{contractclient, contracttype, Address, Bytes, Env};
|
|
2
|
+
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Fee Calculation Types
|
|
5
|
+
// ============================================================================
|
|
6
|
+
|
|
7
|
+
/// Parameters for executor fee calculation.
|
|
8
|
+
///
|
|
9
|
+
/// Contains all inputs needed by the fee library to calculate execution fees
|
|
10
|
+
/// for cross-chain messages. Includes message parameters, common configuration,
|
|
11
|
+
/// and destination-specific settings.
|
|
12
|
+
#[contracttype]
|
|
13
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
14
|
+
pub struct FeeParams {
|
|
15
|
+
/// ============================================================================================
|
|
16
|
+
/// Message Parameters
|
|
17
|
+
/// ============================================================================================
|
|
18
|
+
|
|
19
|
+
/// The OApp sender address.
|
|
20
|
+
pub sender: Address,
|
|
21
|
+
/// Destination endpoint ID (chain identifier).
|
|
22
|
+
pub dst_eid: u32,
|
|
23
|
+
/// Size of the message calldata in bytes.
|
|
24
|
+
pub calldata_size: u32,
|
|
25
|
+
/// Encoded executor options (lzReceive gas, lzCompose, nativeDrop, etc.).
|
|
26
|
+
pub options: Bytes,
|
|
27
|
+
|
|
28
|
+
/// ============================================================================================
|
|
29
|
+
/// Common Configuration
|
|
30
|
+
/// ============================================================================================
|
|
31
|
+
|
|
32
|
+
/// Price feed contract address for gas price and exchange rate data.
|
|
33
|
+
pub price_feed: Address,
|
|
34
|
+
/// Default fee multiplier in basis points (used if no dst-specific multiplier).
|
|
35
|
+
pub default_multiplier_bps: u32,
|
|
36
|
+
|
|
37
|
+
/// ============================================================================================
|
|
38
|
+
/// Destination-Specific Configuration
|
|
39
|
+
/// ============================================================================================
|
|
40
|
+
|
|
41
|
+
/// Base gas for lzReceive execution on destination chain.
|
|
42
|
+
pub lz_receive_base_gas: u64,
|
|
43
|
+
/// Base gas for each lzCompose call on destination chain.
|
|
44
|
+
pub lz_compose_base_gas: u64,
|
|
45
|
+
/// Minimum fee margin in USD (scaled).
|
|
46
|
+
pub floor_margin_usd: u128,
|
|
47
|
+
/// Maximum native token value that can be sent.
|
|
48
|
+
pub native_cap: u128,
|
|
49
|
+
/// Destination-specific fee multiplier in basis points (0 = use default).
|
|
50
|
+
pub multiplier_bps: u32,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// ============================================================================
|
|
54
|
+
// IExecutorFeeLib Trait
|
|
55
|
+
// ============================================================================
|
|
56
|
+
|
|
57
|
+
/// Interface for executor fee calculation.
|
|
58
|
+
///
|
|
59
|
+
/// Called by the Executor contract to calculate fees for message execution.
|
|
60
|
+
/// Uses the PriceFeed interface to obtain gas prices and exchange rates.
|
|
61
|
+
#[contractclient(name = "ExecutorFeeLibClient")]
|
|
62
|
+
pub trait IExecutorFeeLib {
|
|
63
|
+
/// Calculates the executor fee for a cross-chain message.
|
|
64
|
+
///
|
|
65
|
+
/// The fee calculation considers:
|
|
66
|
+
/// - Gas costs for lzReceive and lzCompose operations
|
|
67
|
+
/// - Native token value transfers
|
|
68
|
+
/// - Price ratios between source and destination chains
|
|
69
|
+
/// - Configured multipliers and floor margins
|
|
70
|
+
///
|
|
71
|
+
/// # Arguments
|
|
72
|
+
/// * `executor` - The executor contract address
|
|
73
|
+
/// * `params` - Fee calculation parameters
|
|
74
|
+
///
|
|
75
|
+
/// # Returns
|
|
76
|
+
/// The calculated fee in native token units (stroops for Stellar).
|
|
77
|
+
fn get_fee(env: &Env, executor: &Address, params: &FeeParams) -> i128;
|
|
78
|
+
|
|
79
|
+
/// Returns the fee library contract version.
|
|
80
|
+
///
|
|
81
|
+
/// # Returns
|
|
82
|
+
/// Tuple of (major version, minor version).
|
|
83
|
+
fn version(env: &Env) -> (u64, u32);
|
|
84
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
use soroban_sdk::{contractclient, contracttype, Address, Env};
|
|
2
|
+
|
|
3
|
+
// ================================================
|
|
4
|
+
// Price Feed Types
|
|
5
|
+
// ================================================
|
|
6
|
+
|
|
7
|
+
/// Gas price information for a destination endpoint.
|
|
8
|
+
///
|
|
9
|
+
/// Contains the exchange rate and gas costs needed for cross-chain fee calculations.
|
|
10
|
+
#[contracttype]
|
|
11
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
12
|
+
pub struct Price {
|
|
13
|
+
/// Price ratio = (remote native token price / local native token price) * PRICE_RATIO_DENOMINATOR.
|
|
14
|
+
/// Used to convert destination chain gas costs to source chain native token.
|
|
15
|
+
pub price_ratio: u128,
|
|
16
|
+
/// Gas price in the smallest unit (wei for EVM, stroops for Stellar).
|
|
17
|
+
pub gas_price_in_unit: u64,
|
|
18
|
+
/// Gas cost per byte of calldata on the destination chain.
|
|
19
|
+
pub gas_per_byte: u32,
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/// Fee estimation result with detailed breakdown.
|
|
23
|
+
///
|
|
24
|
+
/// Contains the calculated fee and all intermediate values used in the calculation.
|
|
25
|
+
#[contracttype]
|
|
26
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
27
|
+
pub struct FeeEstimate {
|
|
28
|
+
/// Total gas fee in source chain native token units.
|
|
29
|
+
pub total_gas_fee: i128,
|
|
30
|
+
/// Price ratio used for the calculation.
|
|
31
|
+
pub price_ratio: u128,
|
|
32
|
+
/// Denominator for the price ratio (typically 10^20).
|
|
33
|
+
pub price_ratio_denominator: u128,
|
|
34
|
+
/// Source chain native token price in USD (scaled).
|
|
35
|
+
pub native_price_usd: u128,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// ================================================
|
|
39
|
+
// ILayerZeroPriceFeed Trait
|
|
40
|
+
// ================================================
|
|
41
|
+
|
|
42
|
+
/// Price feed interface for cross-chain fee calculations.
|
|
43
|
+
///
|
|
44
|
+
/// Provides gas prices, exchange rates, and fee estimation for destination chains.
|
|
45
|
+
/// Called by ExecutorFeeLib to calculate execution fees. The price feed aggregates
|
|
46
|
+
/// data from multiple sources to provide accurate cross-chain pricing information.
|
|
47
|
+
#[contractclient(name = "LayerZeroPriceFeedClient")]
|
|
48
|
+
pub trait ILayerZeroPriceFeed {
|
|
49
|
+
/// Returns the USD price of the source chain native token.
|
|
50
|
+
///
|
|
51
|
+
/// # Returns
|
|
52
|
+
/// Native token price in USD (scaled by appropriate decimals).
|
|
53
|
+
fn native_token_price_usd(env: &Env) -> u128;
|
|
54
|
+
|
|
55
|
+
/// Returns gas price information for a destination endpoint.
|
|
56
|
+
///
|
|
57
|
+
/// # Arguments
|
|
58
|
+
/// * `dst_eid` - Destination endpoint ID (chain identifier)
|
|
59
|
+
///
|
|
60
|
+
/// # Returns
|
|
61
|
+
/// `Price` containing price_ratio, gas_price_in_unit, and gas_per_byte.
|
|
62
|
+
fn get_price(env: &Env, dst_eid: u32) -> Price;
|
|
63
|
+
|
|
64
|
+
/// Returns the denominator used for price ratio calculations.
|
|
65
|
+
///
|
|
66
|
+
/// # Returns
|
|
67
|
+
/// Price ratio denominator (typically 10^20 for precision).
|
|
68
|
+
fn get_price_ratio_denominator(env: &Env) -> u128;
|
|
69
|
+
|
|
70
|
+
/// Estimates the fee for executing on a destination chain.
|
|
71
|
+
///
|
|
72
|
+
/// This is the primary function called by ExecutorFeeLib for fee calculations.
|
|
73
|
+
/// It combines gas costs, calldata costs, and exchange rates to estimate the
|
|
74
|
+
/// total fee in source chain native token.
|
|
75
|
+
///
|
|
76
|
+
/// # Arguments
|
|
77
|
+
/// * `fee_lib` - The fee library contract address (for caller identification)
|
|
78
|
+
/// * `dst_eid` - Destination endpoint ID (chain identifier)
|
|
79
|
+
/// * `calldata_size` - Size of the message calldata in bytes
|
|
80
|
+
/// * `gas` - Gas amount needed for execution on destination
|
|
81
|
+
///
|
|
82
|
+
/// # Returns
|
|
83
|
+
/// `FeeEstimate` with total_gas_fee, price_ratio, price_ratio_denominator, and native_price_usd.
|
|
84
|
+
fn estimate_fee_by_eid(env: &Env, fee_lib: &Address, dst_eid: u32, calldata_size: u32, gas: u128) -> FeeEstimate;
|
|
85
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
use common_macros::storage;
|
|
2
|
+
use soroban_sdk::{Address, Bytes, Vec};
|
|
3
|
+
|
|
4
|
+
/// Storage keys for the Worker contract.
|
|
5
|
+
#[storage]
|
|
6
|
+
pub enum WorkerStorage {
|
|
7
|
+
/// Whether the worker is paused (prevents new job assignments).
|
|
8
|
+
#[instance(bool)]
|
|
9
|
+
#[default(false)]
|
|
10
|
+
Paused,
|
|
11
|
+
|
|
12
|
+
/// Address where worker fees are collected.
|
|
13
|
+
#[instance(Address)]
|
|
14
|
+
DepositAddress,
|
|
15
|
+
|
|
16
|
+
/// Price feed contract address for cross-chain fee calculations.
|
|
17
|
+
#[instance(Address)]
|
|
18
|
+
PriceFeed,
|
|
19
|
+
|
|
20
|
+
/// Worker fee library contract address for fee calculation logic.
|
|
21
|
+
#[instance(Address)]
|
|
22
|
+
WorkerFeeLib,
|
|
23
|
+
|
|
24
|
+
/// Default fee multiplier in basis points (10000 = 1x).
|
|
25
|
+
#[instance(u32)]
|
|
26
|
+
DefaultMultiplierBps,
|
|
27
|
+
|
|
28
|
+
/// Supported executor option types for a destination endpoint.
|
|
29
|
+
///
|
|
30
|
+
/// Encoded bytes defining which option types (lzReceive, lzCompose, nativeDrop, etc.)
|
|
31
|
+
/// are supported for a specific destination chain.
|
|
32
|
+
#[persistent(Bytes)]
|
|
33
|
+
SupportedOptionTypes { eid: u32 },
|
|
34
|
+
|
|
35
|
+
/// List of supported message library addresses (e.g., ULN302).
|
|
36
|
+
#[persistent(Vec<Address>)]
|
|
37
|
+
MessageLibs,
|
|
38
|
+
|
|
39
|
+
/// Allowlist status for an OApp address.
|
|
40
|
+
///
|
|
41
|
+
/// When allowlist is empty, all non-denylisted OApps are allowed.
|
|
42
|
+
#[persistent(bool)]
|
|
43
|
+
Allowlist { oapp: Address },
|
|
44
|
+
|
|
45
|
+
/// Denylist status for an OApp address.
|
|
46
|
+
///
|
|
47
|
+
/// Denylisted OApps are blocked regardless of allowlist status.
|
|
48
|
+
#[persistent(bool)]
|
|
49
|
+
Denylist { oapp: Address },
|
|
50
|
+
|
|
51
|
+
/// Counter for the number of addresses on the allowlist.
|
|
52
|
+
///
|
|
53
|
+
/// Used to efficiently check if allowlist is empty (empty = allow all non-denylisted).
|
|
54
|
+
#[instance(u32)]
|
|
55
|
+
#[default(0)]
|
|
56
|
+
AllowlistSize,
|
|
57
|
+
|
|
58
|
+
/// Admin addresses with configuration permissions.
|
|
59
|
+
///
|
|
60
|
+
/// Admins can modify worker settings but cannot change ownership.
|
|
61
|
+
#[persistent(Vec<Address>)]
|
|
62
|
+
Admins,
|
|
63
|
+
}
|