@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,305 @@
|
|
|
1
|
+
use crate::{
|
|
2
|
+
constants::{
|
|
3
|
+
EMPTY_PAYLOAD_HASH_BYTES, MAX_COMPOSE_INDEX, NATIVE_TOKEN, NIL_PAYLOAD_HASH_BYTES, RECEIVED_MESSAGE_HASH_BYTES,
|
|
4
|
+
STELLAR_EID,
|
|
5
|
+
},
|
|
6
|
+
errors::EndpointError,
|
|
7
|
+
events::{
|
|
8
|
+
ComposeDelivered, ComposeSent, DefaultReceiveLibrarySet, DefaultReceiveLibraryTimeoutSet,
|
|
9
|
+
DefaultSendLibrarySet, DelegateSet, InboundNonceSkipped, LibraryRegistered, LzComposeAlert, LzReceiveAlert,
|
|
10
|
+
PacketBurnt, PacketDelivered, PacketNilified, PacketSent, PacketVerified, ReceiveLibrarySet,
|
|
11
|
+
ReceiveLibraryTimeoutSet, SendLibrarySet, ZROSet,
|
|
12
|
+
},
|
|
13
|
+
interfaces::{ILayerZeroEndpointV2, IMessageLibManager, IMessagingChannel, MessagingFee, MessagingReceipt, Origin},
|
|
14
|
+
storage::EndpointStorage,
|
|
15
|
+
util::{build_payload, compute_guid, keccak256},
|
|
16
|
+
FeeRecipient, FeesAndPacket, IMessagingComposer, LayerZeroReceiverClient, MessageLibClient, MessageLibType,
|
|
17
|
+
MessagingParams, OutboundPacket, ResolvedLibrary, SendLibClient, SetConfigParam, Timeout,
|
|
18
|
+
};
|
|
19
|
+
use common_macros::{only_owner, ttl_configurable};
|
|
20
|
+
use soroban_sdk::{
|
|
21
|
+
assert_with_error, contract, contractimpl, token::TokenClient, vec, Address, Bytes, BytesN, Env, Vec,
|
|
22
|
+
};
|
|
23
|
+
use utils::option_ext::OptionExt;
|
|
24
|
+
|
|
25
|
+
#[contract]
|
|
26
|
+
#[ttl_configurable]
|
|
27
|
+
pub struct EndpointV2;
|
|
28
|
+
|
|
29
|
+
#[contractimpl]
|
|
30
|
+
impl EndpointV2 {
|
|
31
|
+
pub fn __constructor(env: &Env, owner: &Address) {
|
|
32
|
+
Self::__init_owner(env, owner);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/// Recovers tokens sent to this contract by mistake.
|
|
36
|
+
///
|
|
37
|
+
/// # Arguments
|
|
38
|
+
/// * `token` - The token address to recover
|
|
39
|
+
/// * `to` - The address to send the token to
|
|
40
|
+
/// * `amount` - The amount to send
|
|
41
|
+
#[only_owner]
|
|
42
|
+
pub fn recover_token(env: &Env, token: &Address, to: &Address, amount: i128) {
|
|
43
|
+
TokenClient::new(env, token).transfer(&env.current_contract_address(), to, &amount);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// ============================================================================
|
|
48
|
+
// ILayerZeroEndpointV2 Implementation
|
|
49
|
+
// ============================================================================
|
|
50
|
+
|
|
51
|
+
#[contractimpl]
|
|
52
|
+
impl ILayerZeroEndpointV2 for EndpointV2 {
|
|
53
|
+
/// Quotes the messaging fee for sending a cross-chain message.
|
|
54
|
+
fn quote(env: &Env, sender: &Address, params: &MessagingParams) -> MessagingFee {
|
|
55
|
+
assert_with_error!(env, !params.pay_in_zro || EndpointStorage::has_zro(env), EndpointError::ZROUnavailable);
|
|
56
|
+
|
|
57
|
+
let MessagingParams { dst_eid, receiver, message, options, pay_in_zro } = params;
|
|
58
|
+
let ResolvedLibrary { lib: send_lib, .. } = Self::get_send_library(env, sender, *dst_eid);
|
|
59
|
+
|
|
60
|
+
let nonce = Self::outbound_nonce(env, sender, *dst_eid, receiver) + 1;
|
|
61
|
+
let packet = Self::build_outbound_packet(env, sender, *dst_eid, receiver, message, nonce);
|
|
62
|
+
|
|
63
|
+
SendLibClient::new(env, &send_lib).quote(&packet, options, pay_in_zro)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/// Sends a cross-chain message to a destination endpoint.
|
|
67
|
+
///
|
|
68
|
+
/// OApp sender needs to transfer the fees to the endpoint before sending the message
|
|
69
|
+
fn send(env: &Env, sender: &Address, params: &MessagingParams, refund_address: &Address) -> MessagingReceipt {
|
|
70
|
+
sender.require_auth();
|
|
71
|
+
assert_with_error!(env, !params.pay_in_zro || EndpointStorage::has_zro(env), EndpointError::ZROUnavailable);
|
|
72
|
+
|
|
73
|
+
let MessagingParams { dst_eid, receiver, message, options, pay_in_zro } = params;
|
|
74
|
+
let ResolvedLibrary { lib: send_library, .. } = Self::get_send_library(env, sender, *dst_eid);
|
|
75
|
+
|
|
76
|
+
// Send outbound packet
|
|
77
|
+
let nonce = Self::outbound(env, sender, *dst_eid, receiver);
|
|
78
|
+
let packet = Self::build_outbound_packet(env, sender, *dst_eid, receiver, message, nonce);
|
|
79
|
+
|
|
80
|
+
let FeesAndPacket { native_fee_recipients, zro_fee_recipients, encoded_packet } =
|
|
81
|
+
SendLibClient::new(env, &send_library).send(&packet, options, pay_in_zro);
|
|
82
|
+
|
|
83
|
+
// Pay and refund messaging fees
|
|
84
|
+
let fee =
|
|
85
|
+
Self::pay_messaging_fees(env, *pay_in_zro, &native_fee_recipients, &zro_fee_recipients, refund_address);
|
|
86
|
+
|
|
87
|
+
// Publish PacketSent event
|
|
88
|
+
PacketSent { encoded_packet, options: options.clone(), send_library }.publish(env);
|
|
89
|
+
|
|
90
|
+
MessagingReceipt { guid: packet.guid, nonce, fee }
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/// Verifies an inbound cross-chain message from a configured receive library.
|
|
94
|
+
fn verify(env: &Env, receive_lib: &Address, origin: &Origin, receiver: &Address, payload_hash: &BytesN<32>) {
|
|
95
|
+
receive_lib.require_auth();
|
|
96
|
+
assert_with_error!(
|
|
97
|
+
env,
|
|
98
|
+
Self::is_valid_receive_library(env, receiver, origin.src_eid, receive_lib),
|
|
99
|
+
EndpointError::InvalidReceiveLibrary
|
|
100
|
+
);
|
|
101
|
+
assert_with_error!(env, Self::initializable(env, origin, receiver), EndpointError::PathNotInitializable);
|
|
102
|
+
assert_with_error!(env, Self::verifiable(env, origin, receiver), EndpointError::PathNotVerifiable);
|
|
103
|
+
|
|
104
|
+
Self::inbound(env, receiver, origin.src_eid, &origin.sender, origin.nonce, payload_hash);
|
|
105
|
+
PacketVerified { origin: origin.clone(), receiver: receiver.clone(), payload_hash: payload_hash.clone() }
|
|
106
|
+
.publish(env);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/// Clears a verified message from the endpoint.
|
|
110
|
+
///
|
|
111
|
+
/// This is a PULL mode versus the PUSH mode of `lz_receive`.
|
|
112
|
+
fn clear(env: &Env, caller: &Address, origin: &Origin, receiver: &Address, guid: &BytesN<32>, message: &Bytes) {
|
|
113
|
+
Self::require_oapp_auth(env, caller, receiver);
|
|
114
|
+
|
|
115
|
+
let payload = build_payload(env, guid, message);
|
|
116
|
+
Self::clear_payload(env, receiver, origin.src_eid, &origin.sender, origin.nonce, &payload);
|
|
117
|
+
PacketDelivered { origin: origin.clone(), receiver: receiver.clone() }.publish(env);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/// Emits an alert event when `lz_receive` execution fails.
|
|
121
|
+
///
|
|
122
|
+
/// Called by the executor to notify about failed message delivery attempts.
|
|
123
|
+
fn lz_receive_alert(
|
|
124
|
+
env: &Env,
|
|
125
|
+
executor: &Address,
|
|
126
|
+
origin: &Origin,
|
|
127
|
+
receiver: &Address,
|
|
128
|
+
guid: &BytesN<32>,
|
|
129
|
+
gas: i128,
|
|
130
|
+
value: i128,
|
|
131
|
+
message: &Bytes,
|
|
132
|
+
extra_data: &Bytes,
|
|
133
|
+
reason: &Bytes,
|
|
134
|
+
) {
|
|
135
|
+
executor.require_auth();
|
|
136
|
+
LzReceiveAlert {
|
|
137
|
+
receiver: receiver.clone(),
|
|
138
|
+
executor: executor.clone(),
|
|
139
|
+
origin: origin.clone(),
|
|
140
|
+
guid: guid.clone(),
|
|
141
|
+
gas,
|
|
142
|
+
value,
|
|
143
|
+
message: message.clone(),
|
|
144
|
+
extra_data: extra_data.clone(),
|
|
145
|
+
reason: reason.clone(),
|
|
146
|
+
}
|
|
147
|
+
.publish(env);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/// Sets the ZRO token address for fee payments.
|
|
151
|
+
#[only_owner]
|
|
152
|
+
fn set_zro(env: &Env, zro: &Address) {
|
|
153
|
+
EndpointStorage::set_zro(env, zro);
|
|
154
|
+
ZROSet { zro: zro.clone() }.publish(env);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/// Sets or removes a delegate address that can act on behalf of the OApp.
|
|
158
|
+
fn set_delegate(env: &Env, oapp: &Address, new_delegate: &Option<Address>) {
|
|
159
|
+
oapp.require_auth();
|
|
160
|
+
EndpointStorage::set_or_remove_delegate(env, oapp, new_delegate);
|
|
161
|
+
DelegateSet { oapp: oapp.clone(), delegate: new_delegate.clone() }.publish(env);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// === View Functions ===
|
|
165
|
+
|
|
166
|
+
/// Returns the endpoint ID.
|
|
167
|
+
fn eid(_env: &Env) -> u32 {
|
|
168
|
+
STELLAR_EID
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/// Checks if a messaging path can be/has been initialized for the given origin and receiver.
|
|
172
|
+
fn initializable(env: &Env, origin: &Origin, receiver: &Address) -> bool {
|
|
173
|
+
let lazy_inbound_nonce = Self::lazy_inbound_nonce(env, receiver, origin.src_eid, &origin.sender);
|
|
174
|
+
lazy_inbound_nonce > 0 || LayerZeroReceiverClient::new(env, receiver).allow_initialize_path(origin)
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/// Checks if a message can be verified for the given origin and receiver.
|
|
178
|
+
fn verifiable(env: &Env, origin: &Origin, receiver: &Address) -> bool {
|
|
179
|
+
let lazy_inbound_nonce = Self::lazy_inbound_nonce(env, receiver, origin.src_eid, &origin.sender);
|
|
180
|
+
origin.nonce > lazy_inbound_nonce
|
|
181
|
+
|| EndpointStorage::has_inbound_payload_hash(env, receiver, origin.src_eid, &origin.sender, origin.nonce)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/// Returns the native token address used for fee payments.
|
|
185
|
+
fn native_token(env: &Env) -> Address {
|
|
186
|
+
Address::from_str(env, NATIVE_TOKEN)
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/// Returns the ZRO token address if set.
|
|
190
|
+
fn zro(env: &Env) -> Option<Address> {
|
|
191
|
+
EndpointStorage::zro(env)
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/// Returns the delegate address for an OApp if set.
|
|
195
|
+
fn delegate(env: &Env, oapp: &Address) -> Option<Address> {
|
|
196
|
+
EndpointStorage::delegate(env, oapp)
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// ============================================================================
|
|
201
|
+
// Internal Functions
|
|
202
|
+
// ============================================================================
|
|
203
|
+
|
|
204
|
+
impl EndpointV2 {
|
|
205
|
+
/// Builds an outbound packet with the given parameters.
|
|
206
|
+
fn build_outbound_packet(
|
|
207
|
+
env: &Env,
|
|
208
|
+
sender: &Address,
|
|
209
|
+
dst_eid: u32,
|
|
210
|
+
receiver: &BytesN<32>,
|
|
211
|
+
message: &Bytes,
|
|
212
|
+
nonce: u64,
|
|
213
|
+
) -> OutboundPacket {
|
|
214
|
+
let src_eid = Self::eid(env);
|
|
215
|
+
let guid = compute_guid(env, nonce, src_eid, sender, dst_eid, receiver);
|
|
216
|
+
OutboundPacket {
|
|
217
|
+
nonce,
|
|
218
|
+
src_eid,
|
|
219
|
+
sender: sender.clone(),
|
|
220
|
+
dst_eid,
|
|
221
|
+
receiver: receiver.clone(),
|
|
222
|
+
guid,
|
|
223
|
+
message: message.clone(),
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/// Requires authorization from either the OApp itself or its delegate.
|
|
228
|
+
pub(crate) fn require_oapp_auth(env: &Env, caller: &Address, oapp: &Address) {
|
|
229
|
+
assert_with_error!(
|
|
230
|
+
env,
|
|
231
|
+
caller == oapp || Self::delegate(env, oapp).as_ref() == Some(caller),
|
|
232
|
+
EndpointError::Unauthorized
|
|
233
|
+
);
|
|
234
|
+
caller.require_auth();
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/// Distributes messaging fees to recipients and refunds any excess to the refund address.
|
|
238
|
+
///
|
|
239
|
+
/// # Arguments
|
|
240
|
+
/// * `pay_in_zro` - Whether to pay in ZRO token
|
|
241
|
+
/// * `native_fee_recipients` - The recipients addresses and amounts of the native fees
|
|
242
|
+
/// * `zro_fee_recipients` - The recipients addresses and amounts of the ZRO fees
|
|
243
|
+
/// * `refund_address` - The address to receive any excess fee refunds
|
|
244
|
+
///
|
|
245
|
+
/// # Returns
|
|
246
|
+
/// The total `MessagingFee` paid (native_fee + zro_fee)
|
|
247
|
+
pub(crate) fn pay_messaging_fees(
|
|
248
|
+
env: &Env,
|
|
249
|
+
pay_in_zro: bool,
|
|
250
|
+
native_fee_recipients: &Vec<FeeRecipient>,
|
|
251
|
+
zro_fee_recipients: &Vec<FeeRecipient>,
|
|
252
|
+
refund_address: &Address,
|
|
253
|
+
) -> MessagingFee {
|
|
254
|
+
let this_contract = env.current_contract_address();
|
|
255
|
+
let mut fee_paid = MessagingFee { native_fee: 0, zro_fee: 0 };
|
|
256
|
+
|
|
257
|
+
// Pay native fees
|
|
258
|
+
let native_token_client = TokenClient::new(env, &Self::native_token(env));
|
|
259
|
+
let mut native_fee_supplied = native_token_client.balance(&this_contract);
|
|
260
|
+
native_fee_recipients.iter().filter(|r| r.amount > 0).for_each(|r| {
|
|
261
|
+
assert_with_error!(env, native_fee_supplied >= r.amount, EndpointError::InsufficientNativeFee);
|
|
262
|
+
native_token_client.transfer(&this_contract, &r.address, &r.amount);
|
|
263
|
+
native_fee_supplied -= r.amount;
|
|
264
|
+
fee_paid.native_fee += r.amount;
|
|
265
|
+
});
|
|
266
|
+
// Refund remaining native fees
|
|
267
|
+
if native_fee_supplied > 0 {
|
|
268
|
+
native_token_client.transfer(&this_contract, refund_address, &native_fee_supplied);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Pay ZRO fees
|
|
272
|
+
if pay_in_zro {
|
|
273
|
+
let zro_addr = Self::zro(env).unwrap_or_panic(env, EndpointError::ZROUnavailable);
|
|
274
|
+
let zro_client = TokenClient::new(env, &zro_addr);
|
|
275
|
+
|
|
276
|
+
// If pay_in_zro is true, the supplied fee must be greater than 0 to prevent a race condition
|
|
277
|
+
// in which an OApp sending a message with ZRO token and the ZRO token is set to a new token between the tx
|
|
278
|
+
// being sent and the tx being mined. if the required zro fee is 0 and the old zro token would be
|
|
279
|
+
// locked in the contract instead of being refunded
|
|
280
|
+
let mut zro_fee_supplied = zro_client.balance(&this_contract);
|
|
281
|
+
assert_with_error!(env, zro_fee_supplied > 0, EndpointError::ZeroZROFee);
|
|
282
|
+
|
|
283
|
+
zro_fee_recipients.iter().filter(|r| r.amount > 0).for_each(|r| {
|
|
284
|
+
assert_with_error!(env, zro_fee_supplied >= r.amount, EndpointError::InsufficientZROFee);
|
|
285
|
+
zro_client.transfer(&this_contract, &r.address, &r.amount);
|
|
286
|
+
zro_fee_supplied -= r.amount;
|
|
287
|
+
fee_paid.zro_fee += r.amount;
|
|
288
|
+
});
|
|
289
|
+
// Refund remaining ZRO fees
|
|
290
|
+
if zro_fee_supplied > 0 {
|
|
291
|
+
zro_client.transfer(&this_contract, refund_address, &zro_fee_supplied);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
fee_paid
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// ============================================================================
|
|
300
|
+
// Include Modules
|
|
301
|
+
// ============================================================================
|
|
302
|
+
|
|
303
|
+
include!("message_lib_manager.rs");
|
|
304
|
+
include!("messaging_channel.rs");
|
|
305
|
+
include!("messaging_composer.rs");
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
use common_macros::contract_error;
|
|
2
|
+
|
|
3
|
+
#[contract_error]
|
|
4
|
+
pub enum EndpointError {
|
|
5
|
+
AlreadyRegistered,
|
|
6
|
+
ComposeExists,
|
|
7
|
+
ComposeNotFound,
|
|
8
|
+
DefaultReceiveLibUnavailable,
|
|
9
|
+
DefaultSendLibUnavailable,
|
|
10
|
+
InsufficientNativeFee,
|
|
11
|
+
InsufficientZROFee,
|
|
12
|
+
InvalidExpiry,
|
|
13
|
+
InvalidIndex,
|
|
14
|
+
InvalidNonce,
|
|
15
|
+
InvalidPayloadHash,
|
|
16
|
+
InvalidReceiveLibrary,
|
|
17
|
+
OnlyNonDefaultLib,
|
|
18
|
+
OnlyReceiveLib,
|
|
19
|
+
OnlyRegisteredLib,
|
|
20
|
+
OnlySendLib,
|
|
21
|
+
PathNotInitializable,
|
|
22
|
+
PathNotVerifiable,
|
|
23
|
+
PayloadHashNotFound,
|
|
24
|
+
SameValue,
|
|
25
|
+
Unauthorized,
|
|
26
|
+
UnsupportedEid,
|
|
27
|
+
ZeroZROFee,
|
|
28
|
+
ZROUnavailable,
|
|
29
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
use crate::{Origin, Timeout};
|
|
2
|
+
use common_macros::event;
|
|
3
|
+
use soroban_sdk::{Address, Bytes, BytesN};
|
|
4
|
+
|
|
5
|
+
// ============================================================================
|
|
6
|
+
// EndpointV2 Events
|
|
7
|
+
// ============================================================================
|
|
8
|
+
|
|
9
|
+
#[event]
|
|
10
|
+
pub struct PacketSent {
|
|
11
|
+
pub encoded_packet: Bytes,
|
|
12
|
+
pub options: Bytes,
|
|
13
|
+
pub send_library: Address,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
#[event]
|
|
17
|
+
pub struct PacketVerified {
|
|
18
|
+
#[topic]
|
|
19
|
+
pub origin: Origin,
|
|
20
|
+
#[topic]
|
|
21
|
+
pub receiver: Address,
|
|
22
|
+
pub payload_hash: BytesN<32>,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
#[event]
|
|
26
|
+
pub struct PacketDelivered {
|
|
27
|
+
#[topic]
|
|
28
|
+
pub origin: Origin,
|
|
29
|
+
#[topic]
|
|
30
|
+
pub receiver: Address,
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
#[event]
|
|
34
|
+
pub struct LzReceiveAlert {
|
|
35
|
+
#[topic]
|
|
36
|
+
pub receiver: Address,
|
|
37
|
+
#[topic]
|
|
38
|
+
pub executor: Address,
|
|
39
|
+
#[topic]
|
|
40
|
+
pub origin: Origin,
|
|
41
|
+
#[topic]
|
|
42
|
+
pub guid: BytesN<32>,
|
|
43
|
+
pub gas: i128,
|
|
44
|
+
pub value: i128,
|
|
45
|
+
pub message: Bytes,
|
|
46
|
+
pub extra_data: Bytes,
|
|
47
|
+
pub reason: Bytes,
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
#[event]
|
|
51
|
+
pub struct ZROSet {
|
|
52
|
+
pub zro: Address,
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#[event]
|
|
56
|
+
pub struct DelegateSet {
|
|
57
|
+
#[topic]
|
|
58
|
+
pub oapp: Address,
|
|
59
|
+
pub delegate: Option<Address>,
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// ============================================================================
|
|
63
|
+
// Messaging Channel Events
|
|
64
|
+
// ============================================================================
|
|
65
|
+
|
|
66
|
+
#[event]
|
|
67
|
+
pub struct InboundNonceSkipped {
|
|
68
|
+
#[topic]
|
|
69
|
+
pub src_eid: u32,
|
|
70
|
+
#[topic]
|
|
71
|
+
pub sender: BytesN<32>,
|
|
72
|
+
#[topic]
|
|
73
|
+
pub receiver: Address,
|
|
74
|
+
#[topic]
|
|
75
|
+
pub nonce: u64,
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
#[event]
|
|
79
|
+
pub struct PacketNilified {
|
|
80
|
+
#[topic]
|
|
81
|
+
pub src_eid: u32,
|
|
82
|
+
#[topic]
|
|
83
|
+
pub sender: BytesN<32>,
|
|
84
|
+
#[topic]
|
|
85
|
+
pub receiver: Address,
|
|
86
|
+
#[topic]
|
|
87
|
+
pub nonce: u64,
|
|
88
|
+
pub payload_hash: Option<BytesN<32>>,
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
#[event]
|
|
92
|
+
pub struct PacketBurnt {
|
|
93
|
+
#[topic]
|
|
94
|
+
pub src_eid: u32,
|
|
95
|
+
#[topic]
|
|
96
|
+
pub sender: BytesN<32>,
|
|
97
|
+
#[topic]
|
|
98
|
+
pub receiver: Address,
|
|
99
|
+
#[topic]
|
|
100
|
+
pub nonce: u64,
|
|
101
|
+
pub payload_hash: BytesN<32>,
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// ============================================================================
|
|
105
|
+
// Message Lib Manager Events
|
|
106
|
+
// ============================================================================
|
|
107
|
+
|
|
108
|
+
#[event]
|
|
109
|
+
pub struct LibraryRegistered {
|
|
110
|
+
pub new_lib: Address,
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
#[event]
|
|
114
|
+
pub struct DefaultSendLibrarySet {
|
|
115
|
+
#[topic]
|
|
116
|
+
pub dst_eid: u32,
|
|
117
|
+
pub new_lib: Address,
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
#[event]
|
|
121
|
+
pub struct DefaultReceiveLibrarySet {
|
|
122
|
+
#[topic]
|
|
123
|
+
pub src_eid: u32,
|
|
124
|
+
pub new_lib: Address,
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
#[event]
|
|
128
|
+
pub struct DefaultReceiveLibraryTimeoutSet {
|
|
129
|
+
#[topic]
|
|
130
|
+
pub src_eid: u32,
|
|
131
|
+
pub timeout: Option<Timeout>,
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
#[event]
|
|
135
|
+
pub struct SendLibrarySet {
|
|
136
|
+
#[topic]
|
|
137
|
+
pub sender: Address,
|
|
138
|
+
#[topic]
|
|
139
|
+
pub dst_eid: u32,
|
|
140
|
+
pub new_lib: Option<Address>,
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
#[event]
|
|
144
|
+
pub struct ReceiveLibrarySet {
|
|
145
|
+
#[topic]
|
|
146
|
+
pub receiver: Address,
|
|
147
|
+
#[topic]
|
|
148
|
+
pub src_eid: u32,
|
|
149
|
+
pub new_lib: Option<Address>,
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
#[event]
|
|
153
|
+
pub struct ReceiveLibraryTimeoutSet {
|
|
154
|
+
#[topic]
|
|
155
|
+
pub receiver: Address,
|
|
156
|
+
#[topic]
|
|
157
|
+
pub eid: u32,
|
|
158
|
+
pub timeout: Option<Timeout>,
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// ============================================================================
|
|
162
|
+
// Message Composer Events
|
|
163
|
+
// ============================================================================
|
|
164
|
+
|
|
165
|
+
#[event]
|
|
166
|
+
pub struct ComposeSent {
|
|
167
|
+
#[topic]
|
|
168
|
+
pub from: Address,
|
|
169
|
+
#[topic]
|
|
170
|
+
pub to: Address,
|
|
171
|
+
#[topic]
|
|
172
|
+
pub guid: BytesN<32>,
|
|
173
|
+
#[topic]
|
|
174
|
+
pub index: u32,
|
|
175
|
+
pub message: Bytes,
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
#[event]
|
|
179
|
+
pub struct ComposeDelivered {
|
|
180
|
+
#[topic]
|
|
181
|
+
pub from: Address,
|
|
182
|
+
#[topic]
|
|
183
|
+
pub to: Address,
|
|
184
|
+
#[topic]
|
|
185
|
+
pub guid: BytesN<32>,
|
|
186
|
+
#[topic]
|
|
187
|
+
pub index: u32,
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
#[event]
|
|
191
|
+
pub struct LzComposeAlert {
|
|
192
|
+
#[topic]
|
|
193
|
+
pub from: Address,
|
|
194
|
+
#[topic]
|
|
195
|
+
pub to: Address,
|
|
196
|
+
#[topic]
|
|
197
|
+
pub executor: Address,
|
|
198
|
+
#[topic]
|
|
199
|
+
pub guid: BytesN<32>,
|
|
200
|
+
#[topic]
|
|
201
|
+
pub index: u32,
|
|
202
|
+
pub gas: i128,
|
|
203
|
+
pub value: i128,
|
|
204
|
+
pub message: Bytes,
|
|
205
|
+
pub extra_data: Bytes,
|
|
206
|
+
pub reason: Bytes,
|
|
207
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
use soroban_sdk::{contractclient, Address, Bytes, BytesN, Env};
|
|
2
|
+
|
|
3
|
+
/// Interface for contracts that can receive composed messages.
|
|
4
|
+
#[contractclient(name = "LayerZeroComposerClient")]
|
|
5
|
+
pub trait ILayerZeroComposer {
|
|
6
|
+
/// Receives and processes a composed message from an OApp.
|
|
7
|
+
///
|
|
8
|
+
/// # Arguments
|
|
9
|
+
/// * `executor` - The executor address delivering the message
|
|
10
|
+
/// * `from` - The OApp address that sent the composed message
|
|
11
|
+
/// * `guid` - The message GUID
|
|
12
|
+
/// * `index` - The compose message index
|
|
13
|
+
/// * `message` - The composed message content
|
|
14
|
+
/// * `extra_data` - Additional executor-provided data
|
|
15
|
+
/// * `value` - The native token value sent with the message
|
|
16
|
+
fn lz_compose(
|
|
17
|
+
env: &Env,
|
|
18
|
+
executor: &Address,
|
|
19
|
+
from: &Address,
|
|
20
|
+
guid: &BytesN<32>,
|
|
21
|
+
index: u32,
|
|
22
|
+
message: &Bytes,
|
|
23
|
+
extra_data: &Bytes,
|
|
24
|
+
value: i128,
|
|
25
|
+
);
|
|
26
|
+
}
|