@layerzerolabs/protocol-stellar-v2 0.2.15 → 0.2.19
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 +365 -297
- package/.turbo/turbo-lint.log +142 -110
- package/.turbo/turbo-test.log +1273 -1222
- package/Cargo.lock +20 -5
- package/Cargo.toml +4 -1
- package/contracts/ERROR_SPEC.md +44 -0
- package/contracts/common-macros/src/auth.rs +113 -0
- package/contracts/common-macros/src/contract_ttl.rs +84 -0
- package/contracts/common-macros/src/lib.rs +181 -30
- package/contracts/common-macros/src/lz_contract.rs +83 -0
- package/contracts/common-macros/src/tests/{ownable.rs → auth.rs} +48 -15
- package/contracts/common-macros/src/tests/contract_ttl.rs +662 -0
- package/contracts/common-macros/src/tests/mod.rs +2 -2
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +20 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +24 -0
- package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__ownable__snapshot_only_owner_preserves_function_signature.snap → common_macros__tests__auth__snapshot_only_auth_preserves_function_signature.snap} +4 -4
- package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap → common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap} +3 -3
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contracttrait_code.snap +69 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +7 -21
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +2 -2
- package/contracts/common-macros/src/ttl_configurable.rs +19 -34
- package/contracts/common-macros/src/ttl_extendable.rs +36 -0
- package/contracts/common-macros/src/upgradeable.rs +5 -5
- package/contracts/common-macros/src/utils.rs +9 -0
- package/contracts/endpoint-v2/src/constants.rs +4 -4
- package/contracts/endpoint-v2/src/endpoint_v2.rs +38 -40
- package/contracts/endpoint-v2/src/errors.rs +4 -3
- package/contracts/endpoint-v2/src/events.rs +1 -1
- package/contracts/endpoint-v2/src/message_lib_manager.rs +18 -5
- package/contracts/endpoint-v2/src/messaging_channel.rs +11 -1
- package/contracts/endpoint-v2/src/messaging_composer.rs +11 -1
- package/contracts/endpoint-v2/src/storage.rs +1 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +3 -3
- package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +1 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +2 -2
- package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +3 -3
- package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +4 -4
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +3 -3
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +1 -1
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +3 -3
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +1 -1
- package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +4 -4
- package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +1 -1
- package/contracts/layerzero-views/src/layerzero_view.rs +3 -6
- package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +2 -2
- package/contracts/macro-integration-tests/tests/runtime/ownable/{only_owner_guard.rs → only_auth_guard.rs} +1 -1
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +1 -1
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +1 -1
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +0 -1
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/{only_owner_missing_env.rs → only_auth_missing_env.rs} +3 -3
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/{only_owner_missing_env.stderr → only_auth_missing_env.stderr} +4 -4
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +2 -3
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/{only_owner_env_param_variants.rs → only_auth_env_param_variants.rs} +9 -9
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +6 -6
- package/contracts/message-libs/message-lib-common/src/errors.rs +7 -2
- package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +3 -3
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +1 -2
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +1 -2
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +9 -9
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +1 -1
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +1 -1
- package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +2 -2
- package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +7 -9
- package/contracts/message-libs/treasury/src/errors.rs +2 -2
- package/contracts/message-libs/treasury/src/events.rs +1 -1
- package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +2 -2
- package/contracts/message-libs/treasury/src/storage.rs +1 -1
- package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +1 -1
- package/contracts/message-libs/treasury/src/treasury.rs +14 -16
- package/contracts/message-libs/uln-302/src/receive_uln.rs +13 -2
- package/contracts/message-libs/uln-302/src/send_uln.rs +24 -4
- package/contracts/message-libs/uln-302/src/uln302.rs +6 -24
- package/contracts/oapps/counter/Cargo.toml +14 -1
- package/contracts/oapps/counter/integration_tests/mod.rs +4 -1
- package/contracts/oapps/counter/integration_tests/{setup.rs → setup_sml.rs} +48 -80
- package/contracts/oapps/counter/integration_tests/setup_uln.rs +997 -0
- package/contracts/oapps/counter/integration_tests/signing.rs +62 -0
- package/contracts/oapps/counter/integration_tests/test_with_sml.rs +24 -55
- package/contracts/oapps/counter/integration_tests/test_with_uln.rs +314 -0
- package/contracts/oapps/counter/integration_tests/utils.rs +196 -53
- package/contracts/oapps/counter/src/counter.rs +67 -43
- package/contracts/oapps/counter/src/tests/mod.rs +0 -13
- package/contracts/oapps/counter/src/tests/test_counter.rs +5 -7
- package/contracts/oapps/oapp/src/errors.rs +5 -1
- package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +93 -78
- package/contracts/oapps/oapp/src/oapp_core.rs +36 -21
- package/contracts/oapps/oapp/src/oapp_options_type3.rs +48 -12
- package/contracts/oapps/oapp/src/oapp_receiver.rs +106 -41
- package/contracts/oapps/oapp/src/oapp_sender.rs +26 -34
- package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +9 -8
- package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +25 -17
- package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +7 -7
- package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +14 -15
- package/contracts/oapps/oapp-macros/src/generators.rs +128 -0
- package/contracts/oapps/oapp-macros/src/lib.rs +113 -56
- package/contracts/oapps/oft/Cargo.toml +10 -7
- package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_oft_fee.rs +3 -4
- package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_pausable.rs +2 -3
- package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_rate_limiter.rs +1 -1
- package/contracts/oapps/oft/integration-tests/mod.rs +1 -1
- package/contracts/oapps/oft/integration-tests/setup.rs +29 -110
- package/contracts/oapps/oft/integration-tests/utils.rs +254 -21
- package/contracts/oapps/oft/src/extensions/oft_fee.rs +13 -14
- package/contracts/oapps/oft/src/extensions/pausable.rs +4 -4
- package/contracts/oapps/oft/src/extensions/rate_limiter.rs +5 -5
- package/contracts/oapps/oft/src/lib.rs +11 -13
- package/contracts/oapps/oft/src/oft.rs +147 -225
- package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +9 -13
- package/contracts/oapps/oft/src/oft_types/mint_burn.rs +31 -14
- package/contracts/oapps/oft/src/oft_types/mod.rs +13 -0
- package/contracts/oapps/{oft-std → oft-core}/Cargo.toml +6 -4
- package/contracts/oapps/{oft-std → oft-core}/integration-tests/mod.rs +1 -1
- package/contracts/oapps/{oft-std → oft-core}/integration-tests/setup.rs +129 -30
- package/contracts/oapps/{oft → oft-core}/integration-tests/test_with_sml.rs +3 -3
- package/contracts/oapps/oft-core/integration-tests/utils.rs +201 -0
- package/contracts/oapps/oft-core/src/errors.rs +13 -0
- package/contracts/oapps/oft-core/src/lib.rs +18 -0
- package/contracts/oapps/oft-core/src/oft_core.rs +439 -0
- package/contracts/oapps/{oft → oft-core}/src/storage.rs +2 -0
- package/contracts/oapps/{oft → oft-core}/src/tests/mod.rs +0 -2
- package/contracts/oapps/{oft → oft-core}/src/tests/test_decimals.rs +2 -2
- package/contracts/oapps/{oft → oft-core}/src/tests/test_lz_receive.rs +7 -7
- package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_msg_codec.rs +4 -5
- package/contracts/oapps/{oft → oft-core}/src/tests/test_resolve_address.rs +3 -3
- package/contracts/oapps/{oft → oft-core}/src/tests/test_utils.rs +78 -37
- package/contracts/oapps/oft-core/src/types.rs +58 -0
- package/contracts/oapps/{oft → oft-core}/src/utils.rs +1 -1
- package/contracts/upgrader/src/lib.rs +4 -4
- package/contracts/utils/src/auth.rs +44 -0
- package/contracts/utils/src/errors.rs +31 -5
- package/contracts/utils/src/lib.rs +3 -0
- package/contracts/utils/src/multisig.rs +211 -0
- package/contracts/utils/src/ownable.rs +137 -13
- package/contracts/utils/src/tests/buffer_reader.rs +6 -6
- package/contracts/utils/src/tests/buffer_writer.rs +6 -6
- package/contracts/utils/src/tests/bytes_ext.rs +2 -4
- package/contracts/utils/src/tests/mod.rs +1 -0
- package/contracts/utils/src/tests/multisig.rs +731 -0
- package/contracts/utils/src/tests/option_ext.rs +2 -5
- package/contracts/utils/src/tests/ownable.rs +456 -7
- package/contracts/utils/src/tests/ttl_configurable.rs +27 -16
- package/contracts/utils/src/tests/upgradeable.rs +4 -2
- package/contracts/utils/src/ttl_configurable.rs +23 -8
- package/contracts/utils/src/ttl_extendable.rs +27 -0
- package/contracts/utils/src/upgradeable.rs +2 -0
- package/contracts/workers/dvn/Cargo.toml +1 -1
- package/contracts/workers/dvn/src/auth.rs +7 -7
- package/contracts/workers/dvn/src/dvn.rs +10 -38
- package/contracts/workers/dvn/src/errors.rs +0 -7
- package/contracts/workers/dvn/src/events.rs +1 -14
- package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
- package/contracts/workers/dvn/src/interfaces/mod.rs +0 -2
- package/contracts/workers/dvn/src/storage.rs +3 -13
- package/contracts/workers/dvn/src/tests/auth.rs +4 -4
- package/contracts/workers/dvn/src/tests/dvn.rs +1 -2
- package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +7 -8
- package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +11 -8
- package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +11 -12
- package/contracts/workers/dvn/src/tests/setup.rs +5 -5
- package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -1
- package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +3 -6
- package/contracts/workers/executor/src/auth.rs +80 -16
- package/contracts/workers/executor/src/executor.rs +5 -31
- package/contracts/workers/executor/src/storage.rs +2 -9
- package/contracts/workers/executor-fee-lib/Cargo.toml +1 -1
- package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +3 -6
- package/contracts/workers/executor-helper/Cargo.toml +1 -1
- package/contracts/workers/executor-helper/src/executor_helper.rs +53 -73
- package/contracts/workers/price-feed/Cargo.toml +1 -1
- package/contracts/workers/price-feed/src/price_feed.rs +7 -10
- package/contracts/workers/worker/src/errors.rs +4 -0
- package/contracts/workers/worker/src/tests/worker.rs +7 -6
- package/contracts/workers/worker/src/worker.rs +20 -16
- package/package.json +7 -5
- package/sdk/.turbo/turbo-build.log +1 -0
- package/sdk/.turbo/turbo-test.log +1019 -0
- package/sdk/dist/generated/bml.d.ts +95 -8
- package/sdk/dist/generated/bml.js +95 -36
- package/sdk/dist/generated/counter.d.ts +289 -44
- package/sdk/dist/generated/counter.js +119 -49
- package/sdk/dist/generated/dvn.d.ts +312 -229
- package/sdk/dist/generated/dvn.js +144 -83
- package/sdk/dist/generated/dvn_fee_lib.d.ts +258 -63
- package/sdk/dist/generated/dvn_fee_lib.js +95 -26
- package/sdk/dist/generated/endpoint.d.ts +219 -24
- package/sdk/dist/generated/endpoint.js +108 -41
- package/sdk/dist/generated/executor.d.ts +239 -87
- package/sdk/dist/generated/executor.js +135 -63
- package/sdk/dist/generated/executor_fee_lib.d.ts +278 -74
- package/sdk/dist/generated/executor_fee_lib.js +135 -59
- package/sdk/dist/generated/executor_helper.d.ts +163 -21
- package/sdk/dist/generated/executor_helper.js +124 -52
- package/sdk/dist/generated/oft.d.ts +1842 -0
- package/sdk/dist/generated/oft.js +345 -0
- package/sdk/dist/generated/price_feed.d.ts +258 -63
- package/sdk/dist/generated/price_feed.js +95 -26
- package/sdk/dist/generated/sml.d.ts +235 -34
- package/sdk/dist/generated/sml.js +126 -53
- package/sdk/dist/generated/treasury.d.ts +1016 -0
- package/sdk/dist/generated/treasury.js +248 -0
- package/sdk/dist/generated/uln302.d.ts +235 -34
- package/sdk/dist/generated/uln302.js +126 -53
- package/sdk/dist/generated/upgrader.d.ts +17 -2
- package/sdk/dist/generated/upgrader.js +19 -1
- package/sdk/dist/index.d.ts +2 -1
- package/sdk/dist/index.js +2 -1
- package/sdk/package.json +6 -3
- package/sdk/src/index.ts +2 -1
- package/sdk/test/counter-sml.test.ts +376 -0
- package/sdk/test/counter-uln.test.ts +493 -0
- package/sdk/test/{oft.test.ts → oft-sml.test.ts} +196 -321
- package/sdk/test/suites/constants.ts +22 -2
- package/sdk/test/suites/globalSetup.ts +450 -0
- package/sdk/test/suites/localnet.ts +23 -6
- package/sdk/test/upgrader.test.ts +7 -16
- package/sdk/test/utils.ts +558 -85
- package/sdk/turbo.json +8 -0
- package/sdk/vitest.config.ts +21 -0
- package/tools/ts-bindings-gen/Cargo.toml +2 -0
- package/tools/ts-bindings-gen/src/main.rs +52 -4
- package/contracts/common-macros/src/contract_impl.rs +0 -52
- package/contracts/common-macros/src/ownable.rs +0 -41
- package/contracts/common-macros/src/tests/contract_impl.rs +0 -386
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +0 -12
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/extend_instance_ttl.rs +0 -50
- package/contracts/oapps/oapp-macros/src/oapp_core.rs +0 -41
- package/contracts/oapps/oapp-macros/src/oapp_full.rs +0 -21
- package/contracts/oapps/oapp-macros/src/oapp_options_type3.rs +0 -31
- package/contracts/oapps/oapp-macros/src/oapp_receiver.rs +0 -48
- package/contracts/oapps/oapp-macros/src/oapp_sender.rs +0 -21
- package/contracts/oapps/oapp-macros/src/util.rs +0 -107
- package/contracts/oapps/oft/src/constants.rs +0 -5
- package/contracts/oapps/oft/src/default_oft_impl.rs +0 -152
- package/contracts/oapps/oft/src/errors.rs +0 -8
- package/contracts/oapps/oft/src/interfaces/mint_burn_token.rs +0 -23
- package/contracts/oapps/oft/src/interfaces/mod.rs +0 -3
- package/contracts/oapps/oft/src/tests/extensions/mod.rs +0 -11
- package/contracts/oapps/oft/src/tests/extensions/setup.rs +0 -903
- package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +0 -749
- package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +0 -432
- package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +0 -1078
- package/contracts/oapps/oft/src/types.rs +0 -38
- package/contracts/oapps/oft-std/integration-tests/utils.rs +0 -427
- package/contracts/oapps/oft-std/src/lib.rs +0 -16
- package/contracts/oapps/oft-std/src/oft.rs +0 -156
- package/contracts/workers/dvn/src/interfaces/multisig.rs +0 -56
- package/contracts/workers/dvn/src/multisig.rs +0 -157
- package/sdk/dist/generated/oft_std.d.ts +0 -1544
- package/sdk/dist/generated/oft_std.js +0 -271
- package/sdk/test/index.test.ts +0 -375
- /package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/mod.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/codec/mod.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/codec/oft_compose_msg_codec.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/codec/oft_msg_codec.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/events.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_compose_msg_codec.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_version.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/tests/test_quote_oft.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/tests/test_quote_send.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/tests/test_send.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/tests/test_token.rs +0 -0
- /package/sdk/test/suites/{testUpgradeable.ts → dummyContractClient.ts} +0 -0
|
@@ -1,37 +1,139 @@
|
|
|
1
|
-
//! Integration test setup for OFT
|
|
1
|
+
//! Integration test setup for OFT.
|
|
2
2
|
//!
|
|
3
|
-
//! This file contains test setup utilities
|
|
3
|
+
//! This file contains TestOFT contract and test setup utilities.
|
|
4
4
|
|
|
5
|
-
extern crate self as oft_std;
|
|
6
5
|
extern crate std;
|
|
7
6
|
|
|
8
|
-
use crate::
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
use crate::{
|
|
8
|
+
self as oft_core,
|
|
9
|
+
integration_tests::utils::{address_to_peer_bytes32, peer_bytes32_to_address},
|
|
10
|
+
oft_core::{initialize_oft, lz_receive, OFTClient, OFTCore, OFTInternal},
|
|
11
|
+
storage::OFTStorage,
|
|
12
|
+
types::OFTReceipt,
|
|
13
|
+
};
|
|
14
|
+
use common_macros::contract_impl;
|
|
15
|
+
use endpoint_v2::{EndpointV2, EndpointV2Client, ILayerZeroComposer, Origin};
|
|
16
|
+
use oapp::oapp_receiver::LzReceiveInternal;
|
|
11
17
|
use simple_message_lib::{SimpleMessageLib, SimpleMessageLibClient};
|
|
12
18
|
use soroban_sdk::{
|
|
13
|
-
contract, contractimpl, log,
|
|
19
|
+
contract, contractimpl, contracttype, log, symbol_short,
|
|
14
20
|
testutils::{Address as _, MockAuth, MockAuthInvoke},
|
|
15
|
-
token::TokenClient,
|
|
16
|
-
Address, BytesN, Env, IntoVal,
|
|
21
|
+
token::{StellarAssetClient, TokenClient},
|
|
22
|
+
Address, Bytes, BytesN, Env, IntoVal,
|
|
17
23
|
};
|
|
18
24
|
|
|
19
25
|
// ============================================================================
|
|
20
|
-
//
|
|
26
|
+
// Test OFT Contract
|
|
27
|
+
// ============================================================================
|
|
28
|
+
|
|
29
|
+
#[oapp_macros::oapp]
|
|
30
|
+
pub struct TestOFT;
|
|
31
|
+
|
|
32
|
+
impl LzReceiveInternal for TestOFT {
|
|
33
|
+
fn __lz_receive(
|
|
34
|
+
env: &Env,
|
|
35
|
+
origin: &Origin,
|
|
36
|
+
guid: &BytesN<32>,
|
|
37
|
+
message: &Bytes,
|
|
38
|
+
extra_data: &Bytes,
|
|
39
|
+
executor: &Address,
|
|
40
|
+
value: i128,
|
|
41
|
+
) {
|
|
42
|
+
lz_receive::<Self>(env, executor, origin, guid, message, extra_data, value)
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
#[contract_impl]
|
|
47
|
+
impl TestOFT {
|
|
48
|
+
pub fn __constructor(
|
|
49
|
+
env: &Env,
|
|
50
|
+
token: &Address,
|
|
51
|
+
owner: &Address,
|
|
52
|
+
endpoint: &Address,
|
|
53
|
+
delegate: &Option<Address>,
|
|
54
|
+
shared_decimals: u32,
|
|
55
|
+
) {
|
|
56
|
+
initialize_oft::<Self>(env, owner, token, endpoint, delegate, shared_decimals)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
#[contractimpl(contracttrait)]
|
|
61
|
+
impl OFTCore for TestOFT {}
|
|
62
|
+
|
|
63
|
+
impl OFTInternal for TestOFT {
|
|
64
|
+
fn __debit(env: &Env, sender: &Address, amount_ld: i128, min_amount_ld: i128, dst_eid: u32) -> OFTReceipt {
|
|
65
|
+
// Get the receipt (handles decimal conversion, fees, etc.)
|
|
66
|
+
let receipt = Self::__debit_view(env, amount_ld, min_amount_ld, dst_eid);
|
|
67
|
+
// Actually burn tokens from sender
|
|
68
|
+
StellarAssetClient::new(env, &OFTStorage::token(env).unwrap()).burn(sender, &receipt.amount_sent_ld);
|
|
69
|
+
receipt
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
fn __credit(env: &Env, to: &Address, amount_ld: i128, _src_eid: u32) -> i128 {
|
|
73
|
+
// Actually mint tokens to recipient
|
|
74
|
+
StellarAssetClient::new(env, &OFTStorage::token(env).unwrap()).mint(to, &amount_ld);
|
|
75
|
+
amount_ld
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// ============================================================================
|
|
80
|
+
// Dummy Composer for testing compose messages
|
|
21
81
|
// ============================================================================
|
|
22
82
|
|
|
83
|
+
#[contracttype]
|
|
84
|
+
pub struct ComposeMessage {
|
|
85
|
+
pub executor: Address,
|
|
86
|
+
pub from: Address,
|
|
87
|
+
pub guid: BytesN<32>,
|
|
88
|
+
pub index: u32,
|
|
89
|
+
pub message: Bytes,
|
|
90
|
+
pub extra_data: Bytes,
|
|
91
|
+
pub value: i128,
|
|
92
|
+
}
|
|
93
|
+
|
|
23
94
|
#[contract]
|
|
24
|
-
pub struct
|
|
95
|
+
pub struct DummyComposer;
|
|
25
96
|
|
|
26
|
-
#[
|
|
27
|
-
impl
|
|
28
|
-
pub fn __constructor(
|
|
97
|
+
#[contract_impl]
|
|
98
|
+
impl DummyComposer {
|
|
99
|
+
pub fn __constructor(env: &Env, endpoint: &Address) {
|
|
100
|
+
env.storage().instance().set(&symbol_short!("endpoint"), endpoint);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
pub fn compose_message(env: &Env) -> Option<ComposeMessage> {
|
|
104
|
+
env.storage().instance().get(&symbol_short!("msg"))
|
|
105
|
+
}
|
|
29
106
|
}
|
|
30
107
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
108
|
+
#[contract_impl]
|
|
109
|
+
impl ILayerZeroComposer for DummyComposer {
|
|
110
|
+
fn lz_compose(
|
|
111
|
+
env: &Env,
|
|
112
|
+
executor: &Address,
|
|
113
|
+
from: &Address,
|
|
114
|
+
guid: &BytesN<32>,
|
|
115
|
+
index: u32,
|
|
116
|
+
message: &Bytes,
|
|
117
|
+
extra_data: &Bytes,
|
|
118
|
+
value: i128,
|
|
119
|
+
) {
|
|
120
|
+
let endpoint_address: Address = env.storage().instance().get(&symbol_short!("endpoint")).unwrap();
|
|
121
|
+
let endpoint = endpoint_v2::MessagingComposerClient::new(env, &endpoint_address);
|
|
122
|
+
endpoint.clear_compose(&env.current_contract_address(), from, guid, &index, message);
|
|
123
|
+
|
|
124
|
+
env.storage().instance().set(
|
|
125
|
+
&symbol_short!("msg"),
|
|
126
|
+
&ComposeMessage {
|
|
127
|
+
executor: executor.clone(),
|
|
128
|
+
from: from.clone(),
|
|
129
|
+
guid: guid.clone(),
|
|
130
|
+
index,
|
|
131
|
+
message: message.clone(),
|
|
132
|
+
extra_data: extra_data.clone(),
|
|
133
|
+
value,
|
|
134
|
+
},
|
|
135
|
+
);
|
|
136
|
+
}
|
|
35
137
|
}
|
|
36
138
|
|
|
37
139
|
// ============================================================================
|
|
@@ -42,16 +144,16 @@ pub struct ChainSetup<'a> {
|
|
|
42
144
|
pub eid: u32,
|
|
43
145
|
pub owner: Address,
|
|
44
146
|
pub native_token: Address,
|
|
45
|
-
pub zro_token: Address,
|
|
46
147
|
pub oft_token: Address,
|
|
47
148
|
pub endpoint: EndpointV2Client<'a>,
|
|
48
149
|
pub sml: SimpleMessageLibClient<'a>,
|
|
49
|
-
pub oft:
|
|
50
|
-
pub
|
|
150
|
+
pub oft: OFTClient<'a>,
|
|
151
|
+
pub composer: DummyComposerClient<'a>,
|
|
51
152
|
}
|
|
52
153
|
|
|
53
154
|
pub struct TestSetup<'a> {
|
|
54
155
|
pub env: Env,
|
|
156
|
+
|
|
55
157
|
pub chain_a: ChainSetup<'a>,
|
|
56
158
|
pub chain_b: ChainSetup<'a>,
|
|
57
159
|
}
|
|
@@ -59,13 +161,9 @@ pub struct TestSetup<'a> {
|
|
|
59
161
|
fn setup_chain<'a>(env: &Env) -> ChainSetup<'a> {
|
|
60
162
|
let owner = Address::generate(env);
|
|
61
163
|
|
|
62
|
-
// Create native token FIRST - this must match the endpoint's NATIVE_TOKEN constant
|
|
63
164
|
let sac = env.register_stellar_asset_contract_v2(owner.clone());
|
|
64
165
|
let native_token = sac.address();
|
|
65
166
|
|
|
66
|
-
// Generate fee_collector AFTER native_token to not affect the address derivation
|
|
67
|
-
let fee_collector = Address::generate(env);
|
|
68
|
-
|
|
69
167
|
// Create ZRO token
|
|
70
168
|
let zro_sac = env.register_stellar_asset_contract_v2(owner.clone());
|
|
71
169
|
let zro_token = zro_sac.address();
|
|
@@ -79,12 +177,13 @@ fn setup_chain<'a>(env: &Env) -> ChainSetup<'a> {
|
|
|
79
177
|
let sml_address = env.register(SimpleMessageLib, (&owner, &endpoint_address, &fee_recipient));
|
|
80
178
|
let delegate: Option<Address> = Some(owner.clone());
|
|
81
179
|
let shared_decimals: u32 = 6; // Default shared decimals
|
|
82
|
-
let
|
|
83
|
-
let
|
|
180
|
+
let oft_address = env.register(TestOFT, (&oft_token, &owner, &endpoint_address, &delegate, &shared_decimals));
|
|
181
|
+
let composer_address = env.register(DummyComposer, (&endpoint_address,));
|
|
84
182
|
|
|
85
183
|
let endpoint = EndpointV2Client::new(env, &endpoint_address);
|
|
86
184
|
let sml = SimpleMessageLibClient::new(env, &sml_address);
|
|
87
|
-
let oft =
|
|
185
|
+
let oft = OFTClient::new(env, &oft_address);
|
|
186
|
+
let composer = DummyComposerClient::new(env, &composer_address);
|
|
88
187
|
|
|
89
188
|
// Set ZRO token in endpoint
|
|
90
189
|
env.mock_auths(&[MockAuth {
|
|
@@ -101,7 +200,7 @@ fn setup_chain<'a>(env: &Env) -> ChainSetup<'a> {
|
|
|
101
200
|
register_library(env, &owner, &endpoint, &sml.address);
|
|
102
201
|
|
|
103
202
|
let eid = endpoint.eid();
|
|
104
|
-
ChainSetup { eid, owner, native_token,
|
|
203
|
+
ChainSetup { eid, owner, native_token, oft_token, endpoint, sml, oft, composer }
|
|
105
204
|
}
|
|
106
205
|
|
|
107
206
|
pub fn setup<'a>() -> TestSetup<'a> {
|
|
@@ -158,7 +257,7 @@ pub fn wire_oft(env: &Env, chains: &[&ChainSetup<'_>]) {
|
|
|
158
257
|
}
|
|
159
258
|
}
|
|
160
259
|
|
|
161
|
-
pub fn set_peer(env: &Env, owner: &Address, oft: &
|
|
260
|
+
pub fn set_peer(env: &Env, owner: &Address, oft: &OFTClient<'_>, dst_eid: u32, peer: &BytesN<32>) {
|
|
162
261
|
env.mock_auths(&[MockAuth {
|
|
163
262
|
address: owner,
|
|
164
263
|
invoke: &MockAuthInvoke {
|
|
@@ -13,7 +13,7 @@ use crate::{
|
|
|
13
13
|
},
|
|
14
14
|
tests::test_utils::create_recipient_address,
|
|
15
15
|
types::SendParam,
|
|
16
|
-
utils::
|
|
16
|
+
utils::address_payload,
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
#[test]
|
|
@@ -43,7 +43,7 @@ fn test_send_vanilla() {
|
|
|
43
43
|
|
|
44
44
|
let send_param = SendParam {
|
|
45
45
|
dst_eid: chain_b.eid,
|
|
46
|
-
to:
|
|
46
|
+
to: address_payload(&receiver),
|
|
47
47
|
amount_ld: 10e7 as i128,
|
|
48
48
|
min_amount_ld: 10e7 as i128,
|
|
49
49
|
extra_options: bytes!(&env),
|
|
@@ -99,7 +99,7 @@ fn test_send_composed() {
|
|
|
99
99
|
|
|
100
100
|
let send_param = SendParam {
|
|
101
101
|
dst_eid: chain_b.eid,
|
|
102
|
-
to:
|
|
102
|
+
to: address_payload(&receiver),
|
|
103
103
|
amount_ld: 10e7 as i128,
|
|
104
104
|
min_amount_ld: 10e7 as i128,
|
|
105
105
|
extra_options: bytes!(&env),
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
use core::ops::Mul;
|
|
2
|
+
|
|
3
|
+
use crate::{
|
|
4
|
+
codec::{oft_compose_msg_codec::OFTComposeMsg, oft_msg_codec},
|
|
5
|
+
integration_tests::setup::{decode_packet, ChainSetup},
|
|
6
|
+
types::{OFTFeeDetail, OFTLimit, OFTReceipt, SendParam},
|
|
7
|
+
};
|
|
8
|
+
use endpoint_v2::{MessagingFee, Origin, OutboundPacket};
|
|
9
|
+
use message_lib_common::packet_codec_v1;
|
|
10
|
+
use soroban_sdk::{
|
|
11
|
+
address_payload::AddressPayload,
|
|
12
|
+
testutils::{Events, MockAuth, MockAuthInvoke},
|
|
13
|
+
token::StellarAssetClient,
|
|
14
|
+
xdr::ToXdr,
|
|
15
|
+
Address, Bytes, BytesN, Env, IntoVal, Map, Symbol, Val, Vec,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
pub fn address_to_peer_bytes32(address: &Address) -> BytesN<32> {
|
|
19
|
+
match address.to_payload().unwrap() {
|
|
20
|
+
AddressPayload::ContractIdHash(payload) => payload,
|
|
21
|
+
AddressPayload::AccountIdPublicKeyEd25519(_) => panic!("peer must be a contract"),
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
pub fn peer_bytes32_to_address(env: &Env, bytes32: &BytesN<32>) -> Address {
|
|
26
|
+
AddressPayload::ContractIdHash(bytes32.clone()).to_address(env)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
pub fn quote_oft(chain: &ChainSetup<'_>, send_param: &SendParam) -> (OFTLimit, Vec<OFTFeeDetail>, OFTReceipt) {
|
|
30
|
+
chain.oft.quote_oft(send_param)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
pub fn quote_send(
|
|
34
|
+
env: &Env,
|
|
35
|
+
chain: &ChainSetup<'_>,
|
|
36
|
+
sender: &Address,
|
|
37
|
+
send_param: &SendParam,
|
|
38
|
+
pay_in_zro: bool,
|
|
39
|
+
) -> MessagingFee {
|
|
40
|
+
env.mock_auths(&[MockAuth {
|
|
41
|
+
address: sender,
|
|
42
|
+
invoke: &MockAuthInvoke {
|
|
43
|
+
contract: &chain.oft.address,
|
|
44
|
+
fn_name: "quote_send",
|
|
45
|
+
args: (sender, send_param, &pay_in_zro).into_val(env),
|
|
46
|
+
sub_invokes: &[],
|
|
47
|
+
},
|
|
48
|
+
}]);
|
|
49
|
+
chain.oft.quote_send(sender, send_param, &pay_in_zro)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
pub fn send(
|
|
53
|
+
env: &Env,
|
|
54
|
+
chain: &ChainSetup<'_>,
|
|
55
|
+
sender: &Address,
|
|
56
|
+
send_param: &SendParam,
|
|
57
|
+
fee: &MessagingFee,
|
|
58
|
+
refund_address: &Address,
|
|
59
|
+
oft_receipt: &OFTReceipt,
|
|
60
|
+
) {
|
|
61
|
+
env.mock_auths(&[MockAuth {
|
|
62
|
+
address: sender,
|
|
63
|
+
invoke: &MockAuthInvoke {
|
|
64
|
+
contract: &chain.oft.address,
|
|
65
|
+
fn_name: "send",
|
|
66
|
+
args: (sender, send_param, fee, refund_address).into_val(env),
|
|
67
|
+
sub_invokes: &[
|
|
68
|
+
MockAuthInvoke {
|
|
69
|
+
contract: &chain.native_token,
|
|
70
|
+
fn_name: "transfer",
|
|
71
|
+
args: (sender, &chain.endpoint.address, &fee.native_fee).into_val(env),
|
|
72
|
+
sub_invokes: &[],
|
|
73
|
+
},
|
|
74
|
+
MockAuthInvoke {
|
|
75
|
+
contract: &chain.oft_token,
|
|
76
|
+
fn_name: "burn",
|
|
77
|
+
args: (sender, &oft_receipt.amount_received_ld).into_val(env),
|
|
78
|
+
sub_invokes: &[],
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
}]);
|
|
83
|
+
chain.oft.send(sender, send_param, fee, refund_address);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
pub fn validate_packet(env: &Env, chain: &ChainSetup<'_>, packet_event: &(Bytes, Bytes, Address)) {
|
|
87
|
+
let packet = decode_packet(env, &packet_event.0);
|
|
88
|
+
let encoded_header = packet_codec_v1::encode_packet_header(env, &packet);
|
|
89
|
+
let payload_hash = packet_codec_v1::payload_hash(env, &packet);
|
|
90
|
+
|
|
91
|
+
env.mock_auths(&[MockAuth {
|
|
92
|
+
address: &chain.owner,
|
|
93
|
+
invoke: &MockAuthInvoke {
|
|
94
|
+
contract: &chain.sml.address,
|
|
95
|
+
fn_name: "validate_packet",
|
|
96
|
+
args: (&encoded_header, &payload_hash).into_val(env),
|
|
97
|
+
sub_invokes: &[],
|
|
98
|
+
},
|
|
99
|
+
}]);
|
|
100
|
+
chain.sml.validate_packet(&encoded_header, &payload_hash);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
pub fn lz_receive(
|
|
104
|
+
env: &Env,
|
|
105
|
+
chain: &ChainSetup<'_>,
|
|
106
|
+
executor: &Address,
|
|
107
|
+
packet: &OutboundPacket,
|
|
108
|
+
recipient: &Address,
|
|
109
|
+
value: i128,
|
|
110
|
+
) {
|
|
111
|
+
let origin =
|
|
112
|
+
Origin { src_eid: packet.src_eid, sender: address_to_peer_bytes32(&packet.sender), nonce: packet.nonce };
|
|
113
|
+
let extra_options = recipient.to_xdr(env);
|
|
114
|
+
|
|
115
|
+
env.mock_auths(&[MockAuth {
|
|
116
|
+
address: executor,
|
|
117
|
+
invoke: &MockAuthInvoke {
|
|
118
|
+
contract: &chain.oft.address,
|
|
119
|
+
fn_name: "lz_receive",
|
|
120
|
+
args: (executor, &origin, &packet.guid, &packet.message, &extra_options, &value).into_val(env),
|
|
121
|
+
sub_invokes: &[],
|
|
122
|
+
},
|
|
123
|
+
}]);
|
|
124
|
+
endpoint_v2::LayerZeroReceiverClient::new(env, &chain.oft.address).lz_receive(
|
|
125
|
+
executor,
|
|
126
|
+
&origin,
|
|
127
|
+
&packet.guid,
|
|
128
|
+
&packet.message,
|
|
129
|
+
&extra_options,
|
|
130
|
+
&value,
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
pub fn lz_compose(
|
|
135
|
+
env: &Env,
|
|
136
|
+
chain: &ChainSetup<'_>,
|
|
137
|
+
executor: &Address,
|
|
138
|
+
packet: &OutboundPacket,
|
|
139
|
+
index: u32,
|
|
140
|
+
extra_data: &Bytes,
|
|
141
|
+
value: i128,
|
|
142
|
+
) {
|
|
143
|
+
let oft_msg = oft_msg_codec::OFTMessage::decode(&packet.message);
|
|
144
|
+
let oft_compose_msg = OFTComposeMsg {
|
|
145
|
+
nonce: packet.nonce,
|
|
146
|
+
src_eid: packet.src_eid,
|
|
147
|
+
amount_ld: (oft_msg.amount_sd as i128).mul(chain.oft.decimal_conversion_rate()),
|
|
148
|
+
compose_from: oft_msg.compose_from.unwrap(),
|
|
149
|
+
compose_msg: oft_msg.compose_msg.unwrap(),
|
|
150
|
+
}
|
|
151
|
+
.encode(&env);
|
|
152
|
+
|
|
153
|
+
chain.composer.lz_compose(executor, &chain.oft.address, &packet.guid, &index, &oft_compose_msg, extra_data, &value);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// returns (encoded_payload, options, send_library)
|
|
157
|
+
pub fn scan_packet_sent_event(env: &Env, endpoint: &Address) -> Option<(Bytes, Bytes, Address)> {
|
|
158
|
+
let mut packet = None;
|
|
159
|
+
for (emitter, topics, data) in env.events().all() {
|
|
160
|
+
let packet_sent_symbol = Symbol::new(env, "packet_sent").to_val();
|
|
161
|
+
if emitter == *endpoint && topics.contains(packet_sent_symbol) {
|
|
162
|
+
let map: Map<Symbol, Val> = data.into_val(env);
|
|
163
|
+
|
|
164
|
+
let encoded_payload: Bytes = map.get(Symbol::new(env, "encoded_packet")).unwrap().into_val(env);
|
|
165
|
+
let options: Bytes = map.get(Symbol::new(env, "options")).unwrap().into_val(env);
|
|
166
|
+
let send_library: Address = map.get(Symbol::new(env, "send_library")).unwrap().into_val(env);
|
|
167
|
+
|
|
168
|
+
packet = Some((encoded_payload, options, send_library));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
packet
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
pub fn mint_to(env: &Env, owner: &Address, token: &Address, to: &Address, amount: i128) {
|
|
176
|
+
env.mock_auths(&[MockAuth {
|
|
177
|
+
address: owner,
|
|
178
|
+
invoke: &MockAuthInvoke {
|
|
179
|
+
contract: token,
|
|
180
|
+
fn_name: "mint",
|
|
181
|
+
args: (to, amount).into_val(env),
|
|
182
|
+
sub_invokes: &[],
|
|
183
|
+
},
|
|
184
|
+
}]);
|
|
185
|
+
|
|
186
|
+
let sac = StellarAssetClient::new(env, token);
|
|
187
|
+
sac.mint(to, &amount);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
pub fn transfer_sac_admin(env: &Env, owner: &Address, token: &Address, new_admin: &Address) {
|
|
191
|
+
env.mock_auths(&[MockAuth {
|
|
192
|
+
address: owner,
|
|
193
|
+
invoke: &MockAuthInvoke {
|
|
194
|
+
contract: token,
|
|
195
|
+
fn_name: "set_admin",
|
|
196
|
+
args: (new_admin,).into_val(env),
|
|
197
|
+
sub_invokes: &[],
|
|
198
|
+
},
|
|
199
|
+
}]);
|
|
200
|
+
StellarAssetClient::new(env, token).set_admin(new_admin);
|
|
201
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
use common_macros::contract_error;
|
|
2
|
+
|
|
3
|
+
// OFT library error codes: 3000-3099
|
|
4
|
+
// See ERROR_SPEC.md for allocation rules
|
|
5
|
+
|
|
6
|
+
/// OFTError: 3000-3099
|
|
7
|
+
#[contract_error]
|
|
8
|
+
pub enum OFTError {
|
|
9
|
+
InvalidLocalDecimals = 3000,
|
|
10
|
+
NotInitialized,
|
|
11
|
+
Overflow,
|
|
12
|
+
SlippageExceeded,
|
|
13
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#![no_std]
|
|
2
|
+
|
|
3
|
+
pub mod codec;
|
|
4
|
+
pub mod errors;
|
|
5
|
+
pub mod events;
|
|
6
|
+
pub mod oft_core;
|
|
7
|
+
pub mod storage;
|
|
8
|
+
pub mod types;
|
|
9
|
+
pub mod utils;
|
|
10
|
+
|
|
11
|
+
pub use oft_core::*;
|
|
12
|
+
|
|
13
|
+
#[cfg(test)]
|
|
14
|
+
#[path = "../integration-tests/mod.rs"]
|
|
15
|
+
pub mod integration_tests;
|
|
16
|
+
|
|
17
|
+
#[cfg(test)]
|
|
18
|
+
pub mod tests;
|