@layerzerolabs/protocol-stellar-v2 0.2.8
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 +727 -0
- package/.turbo/turbo-lint.log +158 -0
- package/.turbo/turbo-test.log +796 -0
- package/Cargo.lock +2237 -0
- package/Cargo.toml +63 -0
- package/clippy.toml +7 -0
- package/contracts/common-macros/Cargo.toml +20 -0
- package/contracts/common-macros/src/error.rs +53 -0
- package/contracts/common-macros/src/event.rs +16 -0
- package/contracts/common-macros/src/lib.rs +255 -0
- package/contracts/common-macros/src/ownable.rs +63 -0
- package/contracts/common-macros/src/snapshots/common_macros__tests__tests__snapshot_generated_storage_code.snap +310 -0
- package/contracts/common-macros/src/storage.rs +439 -0
- package/contracts/common-macros/src/tests.rs +287 -0
- package/contracts/common-macros/src/ttl_configurable.rs +60 -0
- package/contracts/endpoint-v2/ARCHITECTURE.md +233 -0
- package/contracts/endpoint-v2/Cargo.toml +30 -0
- package/contracts/endpoint-v2/src/constants.rs +52 -0
- package/contracts/endpoint-v2/src/endpoint_v2.rs +305 -0
- package/contracts/endpoint-v2/src/errors.rs +29 -0
- package/contracts/endpoint-v2/src/events.rs +207 -0
- package/contracts/endpoint-v2/src/interfaces/layerzero_composer.rs +26 -0
- package/contracts/endpoint-v2/src/interfaces/layerzero_endpoint_v2.rs +170 -0
- package/contracts/endpoint-v2/src/interfaces/layerzero_receiver.rs +43 -0
- package/contracts/endpoint-v2/src/interfaces/message_lib.rs +62 -0
- package/contracts/endpoint-v2/src/interfaces/message_lib_manager.rs +220 -0
- package/contracts/endpoint-v2/src/interfaces/messaging_channel.rs +121 -0
- package/contracts/endpoint-v2/src/interfaces/messaging_composer.rs +63 -0
- package/contracts/endpoint-v2/src/interfaces/mod.rs +17 -0
- package/contracts/endpoint-v2/src/interfaces/send_lib.rs +70 -0
- package/contracts/endpoint-v2/src/lib.rs +22 -0
- package/contracts/endpoint-v2/src/message_lib_manager.rs +315 -0
- package/contracts/endpoint-v2/src/messaging_channel.rs +218 -0
- package/contracts/endpoint-v2/src/messaging_composer.rs +76 -0
- package/contracts/endpoint-v2/src/storage.rs +78 -0
- package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +131 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +237 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/delegate.rs +42 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +76 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +211 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/mod.rs +18 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/native_token.rs +10 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/owner.rs +10 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +424 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +144 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/recover_token.rs +72 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +29 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +513 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +43 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +27 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/transfer_ownership.rs +30 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +202 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +59 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +172 -0
- package/contracts/endpoint-v2/src/tests/endpoint_v2/zro.rs +23 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/mod.rs +10 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +131 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +35 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +28 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_config.rs +79 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +246 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +285 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +180 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +405 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +80 -0
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +131 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +358 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/clear.rs +316 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_nonce.rs +288 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +316 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/internal.rs +388 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/lazy_inbound_nonce.rs +307 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +10 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/next_guid.rs +239 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +324 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/outbound_nonce.rs +242 -0
- package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +232 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +212 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/compose_queue.rs +213 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +269 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/mod.rs +4 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +173 -0
- package/contracts/endpoint-v2/src/tests/mock.rs +132 -0
- package/contracts/endpoint-v2/src/tests/mod.rs +12 -0
- package/contracts/endpoint-v2/src/tests/util/build_payload.rs +126 -0
- package/contracts/endpoint-v2/src/tests/util/compute_guid.rs +82 -0
- package/contracts/endpoint-v2/src/tests/util/keccak256.rs +115 -0
- package/contracts/endpoint-v2/src/tests/util/mod.rs +3 -0
- package/contracts/endpoint-v2/src/util.rs +52 -0
- package/contracts/message-libs/Cargo.toml +12 -0
- package/contracts/message-libs/block-message-lib/Cargo.toml +19 -0
- package/contracts/message-libs/block-message-lib/src/lib.rs +70 -0
- package/contracts/message-libs/lib.rs +2 -0
- package/contracts/message-libs/message-lib-common/Cargo.toml +24 -0
- package/contracts/message-libs/message-lib-common/src/errors.rs +20 -0
- package/contracts/message-libs/message-lib-common/src/interfaces/dvn.rs +55 -0
- package/contracts/message-libs/message-lib-common/src/interfaces/executor.rs +46 -0
- package/contracts/message-libs/message-lib-common/src/interfaces/mod.rs +7 -0
- package/contracts/message-libs/message-lib-common/src/interfaces/treasury.rs +17 -0
- package/contracts/message-libs/message-lib-common/src/lib.rs +14 -0
- package/contracts/message-libs/message-lib-common/src/packet_codec_v1.rs +99 -0
- package/contracts/message-libs/message-lib-common/src/testing_utils.rs +27 -0
- package/contracts/message-libs/message-lib-common/src/tests/mod.rs +2 -0
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +162 -0
- package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +319 -0
- package/contracts/message-libs/message-lib-common/src/worker_options.rs +190 -0
- package/contracts/message-libs/simple-message-lib/Cargo.toml +26 -0
- package/contracts/message-libs/simple-message-lib/src/errors.rs +11 -0
- package/contracts/message-libs/simple-message-lib/src/lib.rs +14 -0
- package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +136 -0
- package/contracts/message-libs/simple-message-lib/src/storage.rs +27 -0
- package/contracts/message-libs/simple-message-lib/src/test.rs +280 -0
- package/contracts/message-libs/treasury/Cargo.toml +27 -0
- package/contracts/message-libs/treasury/src/errors.rs +10 -0
- package/contracts/message-libs/treasury/src/events.rs +28 -0
- package/contracts/message-libs/treasury/src/interfaces/mod.rs +3 -0
- package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +20 -0
- package/contracts/message-libs/treasury/src/lib.rs +20 -0
- package/contracts/message-libs/treasury/src/storage.rs +18 -0
- package/contracts/message-libs/treasury/src/tests/mod.rs +2 -0
- package/contracts/message-libs/treasury/src/tests/setup.rs +112 -0
- package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +562 -0
- package/contracts/message-libs/treasury/src/treasury.rs +140 -0
- package/contracts/message-libs/uln-302/Cargo.toml +28 -0
- package/contracts/message-libs/uln-302/src/config_validation.rs +173 -0
- package/contracts/message-libs/uln-302/src/errors.rs +29 -0
- package/contracts/message-libs/uln-302/src/events.rs +72 -0
- package/contracts/message-libs/uln-302/src/interfaces/mod.rs +5 -0
- package/contracts/message-libs/uln-302/src/interfaces/receive.rs +82 -0
- package/contracts/message-libs/uln-302/src/interfaces/send.rs +159 -0
- package/contracts/message-libs/uln-302/src/lib.rs +20 -0
- package/contracts/message-libs/uln-302/src/receive.rs +199 -0
- package/contracts/message-libs/uln-302/src/send.rs +349 -0
- package/contracts/message-libs/uln-302/src/storage.rs +47 -0
- package/contracts/message-libs/uln-302/src/tests/config/mod.rs +2 -0
- package/contracts/message-libs/uln-302/src/tests/config/oapp_uln_config.rs +291 -0
- package/contracts/message-libs/uln-302/src/tests/config/uln_config.rs +163 -0
- package/contracts/message-libs/uln-302/src/tests/mod.rs +7 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/commit_verification.rs +183 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/confirmations.rs +128 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +104 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/mod.rs +66 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +79 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/verifiable.rs +463 -0
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/verify.rs +173 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_executor_config.rs +132 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +117 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/mod.rs +6 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/quote.rs +586 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/send.rs +834 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +95 -0
- package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +80 -0
- package/contracts/message-libs/uln-302/src/tests/setup.rs +268 -0
- package/contracts/message-libs/uln-302/src/tests/testing_utils.rs +47 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/get_app_receive_uln_config.rs +51 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/get_app_send_uln_config.rs +51 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/get_oapp_executor_config.rs +48 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/mod.rs +4 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +998 -0
- package/contracts/message-libs/uln-302/src/uln302.rs +117 -0
- package/contracts/oapp-macros/Cargo.toml +21 -0
- package/contracts/oapp-macros/src/lib.rs +408 -0
- package/contracts/oapp-macros/src/oapp_core.rs +49 -0
- package/contracts/oapp-macros/src/oapp_full.rs +15 -0
- package/contracts/oapp-macros/src/oapp_options_type3.rs +46 -0
- package/contracts/oapp-macros/src/oapp_receiver.rs +67 -0
- package/contracts/oapp-macros/src/oapp_sender.rs +23 -0
- package/contracts/oapp-macros/src/util.rs +103 -0
- package/contracts/oapp-macros/tests/test_macros.rs +522 -0
- package/contracts/oapps/Cargo.toml +12 -0
- package/contracts/oapps/counter/Cargo.toml +24 -0
- package/contracts/oapps/counter/integration_tests/mod.rs +3 -0
- package/contracts/oapps/counter/integration_tests/setup.rs +201 -0
- package/contracts/oapps/counter/integration_tests/test_with_sml.rs +166 -0
- package/contracts/oapps/counter/integration_tests/utils.rs +144 -0
- package/contracts/oapps/counter/src/codec.rs +63 -0
- package/contracts/oapps/counter/src/counter.rs +235 -0
- package/contracts/oapps/counter/src/errors.rs +9 -0
- package/contracts/oapps/counter/src/lib.rs +16 -0
- package/contracts/oapps/counter/src/options.rs +30 -0
- package/contracts/oapps/counter/src/storage.rs +33 -0
- package/contracts/oapps/counter/src/tests/mod.rs +37 -0
- package/contracts/oapps/counter/src/tests/test_codec.rs +64 -0
- package/contracts/oapps/counter/src/tests/test_counter.rs +390 -0
- package/contracts/oapps/counter/src/u256_ext.rs +21 -0
- package/contracts/oapps/lib.rs +2 -0
- package/contracts/oapps/oapp/Cargo.toml +21 -0
- package/contracts/oapps/oapp/src/errors.rs +9 -0
- package/contracts/oapps/oapp/src/lib.rs +10 -0
- package/contracts/oapps/oapp/src/oapp_core.rs +92 -0
- package/contracts/oapps/oapp/src/oapp_options_type3.rs +89 -0
- package/contracts/oapps/oapp/src/oapp_receiver.rs +72 -0
- package/contracts/oapps/oapp/src/oapp_sender.rs +66 -0
- package/contracts/oapps/oapp/src/tests/mod.rs +4 -0
- package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +162 -0
- package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +180 -0
- package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +157 -0
- package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +283 -0
- package/contracts/utils/Cargo.toml +21 -0
- package/contracts/utils/src/buffer_reader.rs +143 -0
- package/contracts/utils/src/buffer_writer.rs +117 -0
- package/contracts/utils/src/bytes_ext.rs +19 -0
- package/contracts/utils/src/errors.rs +30 -0
- package/contracts/utils/src/lib.rs +15 -0
- package/contracts/utils/src/option_ext.rs +38 -0
- package/contracts/utils/src/ownable.rs +88 -0
- package/contracts/utils/src/testing_utils.rs +100 -0
- package/contracts/utils/src/tests/buffer_reader.rs +1006 -0
- package/contracts/utils/src/tests/buffer_writer.rs +330 -0
- package/contracts/utils/src/tests/bytes_ext.rs +77 -0
- package/contracts/utils/src/tests/mod.rs +4 -0
- package/contracts/utils/src/tests/ownable.rs +149 -0
- package/contracts/utils/src/ttl.rs +164 -0
- package/contracts/workers/Cargo.toml +13 -0
- package/contracts/workers/executor/Cargo.toml +26 -0
- package/contracts/workers/executor/src/events.rs +22 -0
- package/contracts/workers/executor/src/executor.rs +347 -0
- package/contracts/workers/executor/src/interfaces/executor.rs +40 -0
- package/contracts/workers/executor/src/interfaces/mod.rs +5 -0
- package/contracts/workers/executor/src/interfaces/types.rs +51 -0
- package/contracts/workers/executor/src/lib.rs +10 -0
- package/contracts/workers/executor/src/storage.rs +23 -0
- package/contracts/workers/lib.rs +2 -0
- package/contracts/workers/worker-common/Cargo.toml +18 -0
- package/contracts/workers/worker-common/src/constants.rs +17 -0
- package/contracts/workers/worker-common/src/errors.rs +6 -0
- package/contracts/workers/worker-common/src/events.rs +34 -0
- package/contracts/workers/worker-common/src/interfaces/executor_fee_lib.rs +35 -0
- package/contracts/workers/worker-common/src/interfaces/mod.rs +7 -0
- package/contracts/workers/worker-common/src/interfaces/price_feed.rs +40 -0
- package/contracts/workers/worker-common/src/interfaces/worker.rs +60 -0
- package/contracts/workers/worker-common/src/lib.rs +19 -0
- package/contracts/workers/worker-common/src/storage.rs +32 -0
- package/contracts/workers/worker-common/src/worker_common.rs +166 -0
- package/package.json +25 -0
- package/rust-toolchain.toml +4 -0
- package/rustfmt.toml +17 -0
- package/sdk/.turbo/turbo-build.log +4 -0
- package/sdk/dist/generated/bml.d.ts +452 -0
- package/sdk/dist/generated/bml.js +72 -0
- package/sdk/dist/generated/counter.d.ts +824 -0
- package/sdk/dist/generated/counter.js +125 -0
- package/sdk/dist/generated/endpoint.d.ts +1676 -0
- package/sdk/dist/generated/endpoint.js +216 -0
- package/sdk/dist/generated/sml.d.ts +810 -0
- package/sdk/dist/generated/sml.js +132 -0
- package/sdk/dist/generated/uln302.d.ts +1227 -0
- package/sdk/dist/generated/uln302.js +185 -0
- package/sdk/dist/index.d.ts +5 -0
- package/sdk/dist/index.js +5 -0
- package/sdk/node_modules/.bin/tsc +21 -0
- package/sdk/node_modules/.bin/tsserver +21 -0
- package/sdk/node_modules/.bin/vitest +21 -0
- package/sdk/node_modules/.bin/zx +21 -0
- package/sdk/package.json +40 -0
- package/sdk/src/index.ts +5 -0
- package/sdk/test/index.test.ts +271 -0
- package/sdk/test/suites/constants.ts +13 -0
- package/sdk/test/suites/deploy.ts +277 -0
- package/sdk/test/suites/localnet.ts +42 -0
- package/sdk/test/suites/scan.ts +189 -0
- package/sdk/tsconfig.json +106 -0
- package/tools/ts-bindings-gen/Cargo.toml +14 -0
- package/tools/ts-bindings-gen/src/main.rs +147 -0
- package/turbo.json +12 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
use endpoint_v2::FeeRecipient;
|
|
2
|
+
use soroban_sdk::{contractclient, Address, Bytes, BytesN, Env};
|
|
3
|
+
|
|
4
|
+
/// Interface for Decentralized Verifier Networks (DVNs) that verify cross-chain messages.
|
|
5
|
+
#[allow(clippy::upper_case_acronyms)]
|
|
6
|
+
#[contractclient(name = "LayerZeroDVNClient")]
|
|
7
|
+
pub trait ILayerZeroDVN {
|
|
8
|
+
/// Quotes the fee for verifying a message.
|
|
9
|
+
///
|
|
10
|
+
/// # Arguments
|
|
11
|
+
/// * `send_lib` - The send library address
|
|
12
|
+
/// * `sender` - The sender OApp address
|
|
13
|
+
/// * `dst_eid` - The destination endpoint ID
|
|
14
|
+
/// * `packet_header` - The packet header bytes
|
|
15
|
+
/// * `payload_hash` - The hash of the message payload
|
|
16
|
+
/// * `confirmations` - The number of block confirmations required
|
|
17
|
+
/// * `options` - DVN-specific options
|
|
18
|
+
///
|
|
19
|
+
/// # Returns
|
|
20
|
+
/// The verification fee in native token
|
|
21
|
+
fn get_fee(
|
|
22
|
+
env: &Env,
|
|
23
|
+
send_lib: &Address,
|
|
24
|
+
sender: &Address,
|
|
25
|
+
dst_eid: u32,
|
|
26
|
+
packet_header: &Bytes,
|
|
27
|
+
payload_hash: &BytesN<32>,
|
|
28
|
+
confirmations: u64,
|
|
29
|
+
options: &Bytes,
|
|
30
|
+
) -> i128;
|
|
31
|
+
|
|
32
|
+
/// Assigns a verification job to the DVN.
|
|
33
|
+
///
|
|
34
|
+
/// # Arguments
|
|
35
|
+
/// * `send_lib` - The send library address
|
|
36
|
+
/// * `sender` - The sender OApp address
|
|
37
|
+
/// * `dst_eid` - The destination endpoint ID
|
|
38
|
+
/// * `packet_header` - The packet header bytes
|
|
39
|
+
/// * `payload_hash` - The hash of the message payload
|
|
40
|
+
/// * `confirmations` - The number of block confirmations required
|
|
41
|
+
/// * `options` - DVN-specific options
|
|
42
|
+
///
|
|
43
|
+
/// # Returns
|
|
44
|
+
/// `FeeRecipient` containing the fee recipient address and fee amount
|
|
45
|
+
fn assign_job(
|
|
46
|
+
env: &Env,
|
|
47
|
+
send_lib: &Address,
|
|
48
|
+
sender: &Address,
|
|
49
|
+
dst_eid: u32,
|
|
50
|
+
packet_header: &Bytes,
|
|
51
|
+
payload_hash: &BytesN<32>,
|
|
52
|
+
confirmations: u64,
|
|
53
|
+
options: &Bytes,
|
|
54
|
+
) -> FeeRecipient;
|
|
55
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
use endpoint_v2::FeeRecipient;
|
|
2
|
+
use soroban_sdk::{contractclient, Address, Bytes, Env};
|
|
3
|
+
|
|
4
|
+
/// Interface for executors that handle message delivery on the destination chain.
|
|
5
|
+
#[contractclient(name = "LayerZeroExecutorClient")]
|
|
6
|
+
pub trait ILayerZeroExecutor {
|
|
7
|
+
/// Quotes the fee for executing a message on the destination chain.
|
|
8
|
+
///
|
|
9
|
+
/// # Arguments
|
|
10
|
+
/// * `send_lib` - The send library address
|
|
11
|
+
/// * `sender` - The sender OApp address
|
|
12
|
+
/// * `dst_eid` - The destination endpoint ID
|
|
13
|
+
/// * `calldata_size` - The size of the calldata to execute
|
|
14
|
+
/// * `options` - Execution options (gas limit, airdrop, etc.)
|
|
15
|
+
///
|
|
16
|
+
/// # Returns
|
|
17
|
+
/// The execution fee in native token
|
|
18
|
+
fn get_fee(
|
|
19
|
+
env: &Env,
|
|
20
|
+
send_lib: &Address,
|
|
21
|
+
sender: &Address,
|
|
22
|
+
dst_eid: u32,
|
|
23
|
+
calldata_size: u32,
|
|
24
|
+
options: &Bytes,
|
|
25
|
+
) -> i128;
|
|
26
|
+
|
|
27
|
+
/// Assigns an execution job to the executor.
|
|
28
|
+
///
|
|
29
|
+
/// # Arguments
|
|
30
|
+
/// * `send_lib` - The send library address
|
|
31
|
+
/// * `sender` - The sender OApp address
|
|
32
|
+
/// * `dst_eid` - The destination endpoint ID
|
|
33
|
+
/// * `calldata_size` - The size of the calldata to execute
|
|
34
|
+
/// * `options` - Execution options (gas limit, airdrop, etc.)
|
|
35
|
+
///
|
|
36
|
+
/// # Returns
|
|
37
|
+
/// `FeeRecipient` containing the fee recipient address and fee amount
|
|
38
|
+
fn assign_job(
|
|
39
|
+
env: &Env,
|
|
40
|
+
send_lib: &Address,
|
|
41
|
+
sender: &Address,
|
|
42
|
+
dst_eid: u32,
|
|
43
|
+
calldata_size: u32,
|
|
44
|
+
options: &Bytes,
|
|
45
|
+
) -> FeeRecipient;
|
|
46
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
use soroban_sdk::{contractclient, Address, Env};
|
|
2
|
+
|
|
3
|
+
/// Interface for the treasury that collects protocol fees.
|
|
4
|
+
#[contractclient(name = "LayerZeroTreasuryClient")]
|
|
5
|
+
pub trait ILayerZeroTreasury {
|
|
6
|
+
/// Quotes the treasury fee for a message.
|
|
7
|
+
///
|
|
8
|
+
/// # Arguments
|
|
9
|
+
/// * `sender` - The sender OApp address
|
|
10
|
+
/// * `dst_eid` - The destination endpoint ID
|
|
11
|
+
/// * `total_native_fee` - The total native fee for the message
|
|
12
|
+
/// * `pay_in_zro` - Whether to pay fees in ZRO token
|
|
13
|
+
///
|
|
14
|
+
/// # Returns
|
|
15
|
+
/// The treasury fee amount
|
|
16
|
+
fn get_fee(env: &Env, sender: &Address, dst_eid: u32, total_native_fee: i128, pay_in_zro: bool) -> i128;
|
|
17
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
use endpoint_v2::{
|
|
2
|
+
util::{build_payload, keccak256},
|
|
3
|
+
OutboundPacket,
|
|
4
|
+
};
|
|
5
|
+
use soroban_sdk::{assert_with_error, Bytes, BytesN, Env};
|
|
6
|
+
use utils::{buffer_reader::BufferReader, buffer_writer::BufferWriter};
|
|
7
|
+
|
|
8
|
+
use crate::errors::PacketCodecV1Error;
|
|
9
|
+
|
|
10
|
+
pub const PACKET_VERSION: u8 = 1;
|
|
11
|
+
pub const HEADER_LENGTH: u32 = 81;
|
|
12
|
+
|
|
13
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
14
|
+
pub struct PacketHeader {
|
|
15
|
+
pub version: u8,
|
|
16
|
+
pub nonce: u64,
|
|
17
|
+
pub src_eid: u32,
|
|
18
|
+
pub sender: BytesN<32>,
|
|
19
|
+
pub dst_eid: u32,
|
|
20
|
+
pub receiver: BytesN<32>,
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/// Encodes a complete outbound packet including header, GUID, and message.
|
|
24
|
+
///
|
|
25
|
+
/// Packet layout: [header (81 bytes)] + [guid (32 bytes)] + [message (variable)]
|
|
26
|
+
///
|
|
27
|
+
/// # Arguments
|
|
28
|
+
/// * `packet` - The outbound packet containing routing info and message
|
|
29
|
+
///
|
|
30
|
+
/// # Returns
|
|
31
|
+
/// Encoded packet bytes ready for cross-chain transmission
|
|
32
|
+
pub fn encode_packet(env: &Env, packet: &OutboundPacket) -> Bytes {
|
|
33
|
+
let mut result = encode_packet_header(env, packet);
|
|
34
|
+
result.extend_from_array(&packet.guid.to_array());
|
|
35
|
+
result.append(&packet.message);
|
|
36
|
+
result
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/// Encodes only the packet header from an outbound packet.
|
|
40
|
+
///
|
|
41
|
+
/// Header layout (81 bytes):
|
|
42
|
+
/// - `[0]`: version (1 byte)
|
|
43
|
+
/// - `[1..9]`: nonce (8 bytes, big-endian)
|
|
44
|
+
/// - `[9..13]`: src_eid (4 bytes, big-endian)
|
|
45
|
+
/// - `[13..45]`: sender (32 bytes)
|
|
46
|
+
/// - `[45..49]`: dst_eid (4 bytes, big-endian)
|
|
47
|
+
/// - `[49..81]`: receiver (32 bytes)
|
|
48
|
+
///
|
|
49
|
+
/// # Arguments
|
|
50
|
+
/// * `packet` - The outbound packet to encode header from
|
|
51
|
+
///
|
|
52
|
+
/// # Returns
|
|
53
|
+
/// Encoded 81-byte packet header
|
|
54
|
+
pub fn encode_packet_header(env: &Env, packet: &OutboundPacket) -> Bytes {
|
|
55
|
+
let mut writer = BufferWriter::new(env);
|
|
56
|
+
writer
|
|
57
|
+
.write_u8(PACKET_VERSION)
|
|
58
|
+
.write_u64(packet.nonce)
|
|
59
|
+
.write_u32(packet.src_eid)
|
|
60
|
+
.write_address_payload(&packet.sender)
|
|
61
|
+
.write_u32(packet.dst_eid)
|
|
62
|
+
.write_bytes_n(&packet.receiver);
|
|
63
|
+
writer.to_bytes()
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/// Decodes a byte vector into a packet header and validates the format.
|
|
67
|
+
///
|
|
68
|
+
/// Validates header length (81 bytes) and packet version before decoding.
|
|
69
|
+
///
|
|
70
|
+
/// # Arguments
|
|
71
|
+
/// * `encoded_header` - The raw 81-byte packet header
|
|
72
|
+
///
|
|
73
|
+
/// # Returns
|
|
74
|
+
/// Decoded `PacketHeader` struct with version, nonce, src_eid, sender, dst_eid, receiver
|
|
75
|
+
pub fn decode_packet_header(env: &Env, encoded_header: &Bytes) -> PacketHeader {
|
|
76
|
+
assert_with_error!(env, encoded_header.len() == HEADER_LENGTH, PacketCodecV1Error::InvalidPacketHeader);
|
|
77
|
+
|
|
78
|
+
let mut reader = BufferReader::new(encoded_header);
|
|
79
|
+
let packet_version = reader.read_u8();
|
|
80
|
+
assert_with_error!(env, packet_version == PACKET_VERSION, PacketCodecV1Error::InvalidPacketVersion);
|
|
81
|
+
|
|
82
|
+
let nonce = reader.read_u64();
|
|
83
|
+
let src_eid = reader.read_u32();
|
|
84
|
+
let sender = reader.read_bytes_n();
|
|
85
|
+
let dst_eid = reader.read_u32();
|
|
86
|
+
let receiver = reader.read_bytes_n();
|
|
87
|
+
|
|
88
|
+
PacketHeader { version: PACKET_VERSION, nonce, src_eid, sender, dst_eid, receiver }
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/// Returns the payload (GUID + message) from an outbound packet.
|
|
92
|
+
pub fn payload(env: &Env, packet: &OutboundPacket) -> Bytes {
|
|
93
|
+
build_payload(env, &packet.guid, &packet.message)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/// Returns the keccak256 hash of the packet payload.
|
|
97
|
+
pub fn payload_hash(env: &Env, packet: &OutboundPacket) -> BytesN<32> {
|
|
98
|
+
keccak256(env, &payload(env, packet))
|
|
99
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
use soroban_sdk::{bytes, Address, Bytes, Env, Vec};
|
|
2
|
+
|
|
3
|
+
use crate::worker_options::{DVN_WORKER_ID, EXECUTOR_OPTION_TYPE_LZRECEIVE, EXECUTOR_WORKER_ID, OPTIONS_TYPE_3};
|
|
4
|
+
|
|
5
|
+
pub fn create_type3_options(env: &Env, dvns: &Vec<Address>, enable_executor_option: bool) -> Bytes {
|
|
6
|
+
let mut result = bytes!(env);
|
|
7
|
+
|
|
8
|
+
result.extend_from_array(&OPTIONS_TYPE_3.to_be_bytes());
|
|
9
|
+
|
|
10
|
+
// append executor option
|
|
11
|
+
if enable_executor_option {
|
|
12
|
+
result.extend_from_array(&[EXECUTOR_WORKER_ID]);
|
|
13
|
+
result.extend_from_array(&17u16.to_be_bytes()); // option_size: option_type(1) + data(16) = 17 bytes
|
|
14
|
+
result.extend_from_array(&[EXECUTOR_OPTION_TYPE_LZRECEIVE]); // option_type (1 byte)
|
|
15
|
+
result.extend_from_array(&200000_u128.to_be_bytes()); // execution gas (16 bytes)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// append dvn options
|
|
19
|
+
for (idx, _dvn) in dvns.iter().enumerate() {
|
|
20
|
+
result.extend_from_array(&[DVN_WORKER_ID]);
|
|
21
|
+
result.extend_from_array(&5u16.to_be_bytes()); // idx(1) + data(4) = 5 bytes
|
|
22
|
+
result.extend_from_array(&[idx as u8]); // dvn_idx
|
|
23
|
+
result.extend_from_array(&1000_u32.to_be_bytes()); // custom data (4 bytes)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
result
|
|
27
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
use crate::packet_codec_v1::*;
|
|
2
|
+
use endpoint_v2::{
|
|
3
|
+
util::{compute_guid, keccak256},
|
|
4
|
+
OutboundPacket,
|
|
5
|
+
};
|
|
6
|
+
use hex_literal::hex;
|
|
7
|
+
use soroban_sdk::{address_payload::AddressPayload, Address, Bytes, BytesN, Env};
|
|
8
|
+
use utils::buffer_reader::BufferReader;
|
|
9
|
+
|
|
10
|
+
// Test constants matching Sui's test values
|
|
11
|
+
const TEST_SRC_EID: u32 = 101;
|
|
12
|
+
const TEST_DST_EID: u32 = 102;
|
|
13
|
+
const TEST_NONCE: u64 = 0x123456789abcdef0;
|
|
14
|
+
const TEST_MESSAGE: [u8; 5] = hex!("0102030405");
|
|
15
|
+
// @0x1234567890abcdef1234567890abcdef12345678 padded to 32 bytes
|
|
16
|
+
const TEST_SENDER_BYTES: [u8; 32] = hex!("0000000000000000000000001234567890abcdef1234567890abcdef12345678");
|
|
17
|
+
// @0x9876543210fedcba9876543210fedcba98765432 padded to 32 bytes
|
|
18
|
+
const TEST_RECEIVER_BYTES: [u8; 32] = hex!("0000000000000000000000009876543210fedcba9876543210fedcba98765432");
|
|
19
|
+
|
|
20
|
+
#[test]
|
|
21
|
+
fn test_encode_decode_packet_header() {
|
|
22
|
+
let env = Env::default();
|
|
23
|
+
let packet = create_test_outbound_packet(&env);
|
|
24
|
+
|
|
25
|
+
// Encode the packet header
|
|
26
|
+
let encoded_header = encode_packet_header(&env, &packet);
|
|
27
|
+
|
|
28
|
+
// Verify the encoded header has the correct length
|
|
29
|
+
assert_eq!(encoded_header.len(), HEADER_LENGTH); // HEADER_LENGTH = 81
|
|
30
|
+
|
|
31
|
+
// Decode the header back
|
|
32
|
+
let decoded_header = decode_packet_header(&env, &encoded_header);
|
|
33
|
+
|
|
34
|
+
// Verify all fields match
|
|
35
|
+
assert_eq!(decoded_header.version, PACKET_VERSION);
|
|
36
|
+
assert_eq!(decoded_header.nonce, TEST_NONCE);
|
|
37
|
+
assert_eq!(decoded_header.src_eid, TEST_SRC_EID);
|
|
38
|
+
assert_eq!(decoded_header.dst_eid, TEST_DST_EID);
|
|
39
|
+
assert_eq!(decoded_header.sender, BytesN::from_array(&env, &TEST_SENDER_BYTES));
|
|
40
|
+
assert_eq!(decoded_header.receiver, BytesN::from_array(&env, &TEST_RECEIVER_BYTES));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
#[test]
|
|
44
|
+
fn test_payload_functions() {
|
|
45
|
+
let env = Env::default();
|
|
46
|
+
let packet = create_test_outbound_packet(&env);
|
|
47
|
+
|
|
48
|
+
// Test payload extraction
|
|
49
|
+
let payload_result = payload(&env, &packet);
|
|
50
|
+
|
|
51
|
+
// Expected payload is guid + message
|
|
52
|
+
let mut expected_payload = Bytes::new(&env);
|
|
53
|
+
expected_payload.extend_from_array(&packet.guid.to_array());
|
|
54
|
+
expected_payload.append(&packet.message);
|
|
55
|
+
assert_eq!(payload_result, expected_payload);
|
|
56
|
+
|
|
57
|
+
// Test payload hash
|
|
58
|
+
let hash_result = payload_hash(&env, &packet);
|
|
59
|
+
let expected_hash = keccak256(&env, &payload_result);
|
|
60
|
+
assert_eq!(hash_result, expected_hash);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
#[test]
|
|
64
|
+
#[should_panic(expected = "Error(Contract, #11002)")] // PacketCodecV1Error::InvalidPacketHeader
|
|
65
|
+
fn test_invalid_header_length() {
|
|
66
|
+
let env = Env::default();
|
|
67
|
+
// Create a header with wrong length (too short) - only 3 bytes instead of 81
|
|
68
|
+
let invalid_header = Bytes::from_array(&env, &[0x01, 0x02, 0x03]);
|
|
69
|
+
decode_packet_header(&env, &invalid_header);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
#[test]
|
|
73
|
+
#[should_panic(expected = "Error(Contract, #11001)")] // PacketCodecV1Error::InvalidPacketVersion
|
|
74
|
+
fn test_invalid_packet_version() {
|
|
75
|
+
let env = Env::default();
|
|
76
|
+
// Create a header with correct length but wrong version
|
|
77
|
+
let mut invalid_header_bytes: [u8; 81] = [0u8; HEADER_LENGTH as usize];
|
|
78
|
+
invalid_header_bytes[0] = 2; // Wrong version (should be 1)
|
|
79
|
+
let invalid_header = Bytes::from_array(&env, &invalid_header_bytes);
|
|
80
|
+
decode_packet_header(&env, &invalid_header);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
#[test]
|
|
84
|
+
fn test_header_getters() {
|
|
85
|
+
let env = Env::default();
|
|
86
|
+
let header = create_test_header(&env);
|
|
87
|
+
// Test all getter/field accesses
|
|
88
|
+
assert_eq!(header.version, PACKET_VERSION);
|
|
89
|
+
assert_eq!(header.nonce, TEST_NONCE);
|
|
90
|
+
assert_eq!(header.src_eid, TEST_SRC_EID);
|
|
91
|
+
assert_eq!(header.dst_eid, TEST_DST_EID);
|
|
92
|
+
assert_eq!(header.sender, BytesN::from_array(&env, &TEST_SENDER_BYTES));
|
|
93
|
+
assert_eq!(header.receiver, BytesN::from_array(&env, &TEST_RECEIVER_BYTES));
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
#[test]
|
|
97
|
+
fn test_empty_message() {
|
|
98
|
+
let env = Env::default();
|
|
99
|
+
let empty_message = Bytes::new(&env);
|
|
100
|
+
let packet = create_test_outbound_packet_with_message(&env, empty_message);
|
|
101
|
+
|
|
102
|
+
// Test encoding and decoding with empty message
|
|
103
|
+
let encoded = encode_packet(&env, &packet);
|
|
104
|
+
let (header, decoded_guid, decoded_message) = decode_packet_for_test(&env, &encoded);
|
|
105
|
+
|
|
106
|
+
assert_eq!(header.src_eid, TEST_SRC_EID);
|
|
107
|
+
assert_eq!(decoded_guid, packet.guid);
|
|
108
|
+
assert_eq!(decoded_message.len(), 0);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
#[test]
|
|
112
|
+
fn test_large_message() {
|
|
113
|
+
let env = Env::default();
|
|
114
|
+
|
|
115
|
+
// Create a large message (1024 bytes, matching Sui's 1KB)
|
|
116
|
+
let mut large_msg_array = [0u8; 1024];
|
|
117
|
+
for (i, byte) in large_msg_array.iter_mut().enumerate() {
|
|
118
|
+
*byte = (i % 256) as u8;
|
|
119
|
+
}
|
|
120
|
+
let large_message = Bytes::from_slice(&env, &large_msg_array);
|
|
121
|
+
let packet = create_test_outbound_packet_with_message(&env, large_message.clone());
|
|
122
|
+
|
|
123
|
+
// Test encoding and decoding with large message
|
|
124
|
+
let encoded = encode_packet(&env, &packet);
|
|
125
|
+
let (header, decoded_guid, decoded_message) = decode_packet_for_test(&env, &encoded);
|
|
126
|
+
|
|
127
|
+
assert_eq!(header.src_eid, TEST_SRC_EID);
|
|
128
|
+
assert_eq!(decoded_guid, packet.guid);
|
|
129
|
+
assert_eq!(decoded_message.len(), 1024);
|
|
130
|
+
assert_eq!(decoded_message, large_message);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
fn create_test_header(env: &Env) -> PacketHeader {
|
|
134
|
+
let mut header_bytes = Bytes::new(env);
|
|
135
|
+
header_bytes.extend_from_array(&[PACKET_VERSION]); // version
|
|
136
|
+
header_bytes.extend_from_array(&TEST_NONCE.to_be_bytes()); // nonce
|
|
137
|
+
header_bytes.extend_from_array(&TEST_SRC_EID.to_be_bytes()); // src_eid
|
|
138
|
+
header_bytes.extend_from_array(&TEST_SENDER_BYTES); // sender
|
|
139
|
+
header_bytes.extend_from_array(&TEST_DST_EID.to_be_bytes()); // dst_eid
|
|
140
|
+
header_bytes.extend_from_array(&TEST_RECEIVER_BYTES); // receiver
|
|
141
|
+
decode_packet_header(env, &header_bytes)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
fn create_test_outbound_packet(env: &Env) -> OutboundPacket {
|
|
145
|
+
create_test_outbound_packet_with_message(env, Bytes::from_array(env, &TEST_MESSAGE))
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
fn create_test_outbound_packet_with_message(env: &Env, message: Bytes) -> OutboundPacket {
|
|
149
|
+
let sender =
|
|
150
|
+
Address::from_payload(env, AddressPayload::ContractIdHash(BytesN::from_array(env, &TEST_SENDER_BYTES)));
|
|
151
|
+
let receiver = BytesN::from_array(env, &TEST_RECEIVER_BYTES);
|
|
152
|
+
let guid = compute_guid(env, TEST_NONCE, TEST_SRC_EID, &sender, TEST_DST_EID, &receiver);
|
|
153
|
+
OutboundPacket { nonce: TEST_NONCE, src_eid: TEST_SRC_EID, sender, dst_eid: TEST_DST_EID, receiver, guid, message }
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
fn decode_packet_for_test(env: &Env, encoded: &Bytes) -> (PacketHeader, BytesN<32>, Bytes) {
|
|
157
|
+
let mut reader = BufferReader::new(encoded);
|
|
158
|
+
let header = decode_packet_header(env, &reader.read_bytes(HEADER_LENGTH));
|
|
159
|
+
let guid = reader.read_bytes_n();
|
|
160
|
+
let message = reader.read_bytes_until_end();
|
|
161
|
+
(header, guid, message)
|
|
162
|
+
}
|