@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,239 @@
|
|
|
1
|
+
use soroban_sdk::{testutils::Address as _, Address, BytesN};
|
|
2
|
+
|
|
3
|
+
use crate::{storage, tests::endpoint_setup::setup, util};
|
|
4
|
+
|
|
5
|
+
#[test]
|
|
6
|
+
fn test_next_guid_basic() {
|
|
7
|
+
let test_setup = setup();
|
|
8
|
+
let env = &test_setup.env;
|
|
9
|
+
let endpoint_client = &test_setup.endpoint_client;
|
|
10
|
+
|
|
11
|
+
let sender = Address::generate(env);
|
|
12
|
+
let dst_eid = 2;
|
|
13
|
+
let receiver = BytesN::from_array(env, &[1u8; 32]);
|
|
14
|
+
|
|
15
|
+
// Initially outbound nonce should be 0, so next_guid should use nonce 1
|
|
16
|
+
let initial_outbound_nonce = endpoint_client.outbound_nonce(&sender, &dst_eid, &receiver);
|
|
17
|
+
assert_eq!(initial_outbound_nonce, 0);
|
|
18
|
+
|
|
19
|
+
// Get next GUID
|
|
20
|
+
let guid = endpoint_client.next_guid(&sender, &dst_eid, &receiver);
|
|
21
|
+
|
|
22
|
+
// Verify GUID is computed correctly using nonce 1
|
|
23
|
+
let expected_guid = env.as_contract(&endpoint_client.address, || {
|
|
24
|
+
util::compute_guid(env, 1, test_setup.eid, &sender, dst_eid, &receiver)
|
|
25
|
+
});
|
|
26
|
+
assert_eq!(guid, expected_guid);
|
|
27
|
+
|
|
28
|
+
// Verify outbound nonce hasn't changed (next_guid is a view function)
|
|
29
|
+
let after_outbound_nonce = endpoint_client.outbound_nonce(&sender, &dst_eid, &receiver);
|
|
30
|
+
assert_eq!(after_outbound_nonce, 0);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
#[test]
|
|
34
|
+
fn test_next_guid_with_existing_nonce() {
|
|
35
|
+
let test_setup = setup();
|
|
36
|
+
let env = &test_setup.env;
|
|
37
|
+
let endpoint_client = &test_setup.endpoint_client;
|
|
38
|
+
|
|
39
|
+
let sender = Address::generate(env);
|
|
40
|
+
let dst_eid = 2;
|
|
41
|
+
let receiver = BytesN::from_array(env, &[1u8; 32]);
|
|
42
|
+
|
|
43
|
+
// Set outbound nonce to 5
|
|
44
|
+
env.as_contract(&endpoint_client.address, || {
|
|
45
|
+
storage::EndpointStorage::set_outbound_nonce(env, &sender, dst_eid, &receiver, &5)
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// Verify outbound nonce is 5
|
|
49
|
+
let current_outbound_nonce = endpoint_client.outbound_nonce(&sender, &dst_eid, &receiver);
|
|
50
|
+
assert_eq!(current_outbound_nonce, 5);
|
|
51
|
+
|
|
52
|
+
// Get next GUID (should use nonce 6)
|
|
53
|
+
let guid = endpoint_client.next_guid(&sender, &dst_eid, &receiver);
|
|
54
|
+
|
|
55
|
+
// Verify GUID is computed correctly using nonce 6
|
|
56
|
+
let expected_guid = env.as_contract(&endpoint_client.address, || {
|
|
57
|
+
util::compute_guid(env, 6, test_setup.eid, &sender, dst_eid, &receiver)
|
|
58
|
+
});
|
|
59
|
+
assert_eq!(guid, expected_guid);
|
|
60
|
+
|
|
61
|
+
// Verify outbound nonce hasn't changed
|
|
62
|
+
let after_outbound_nonce = endpoint_client.outbound_nonce(&sender, &dst_eid, &receiver);
|
|
63
|
+
assert_eq!(after_outbound_nonce, 5);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
#[test]
|
|
67
|
+
fn test_next_guid_different_senders() {
|
|
68
|
+
let test_setup = setup();
|
|
69
|
+
let env = &test_setup.env;
|
|
70
|
+
let endpoint_client = &test_setup.endpoint_client;
|
|
71
|
+
|
|
72
|
+
let sender1 = Address::generate(env);
|
|
73
|
+
let sender2 = Address::generate(env);
|
|
74
|
+
let dst_eid = 2;
|
|
75
|
+
let receiver = BytesN::from_array(env, &[1u8; 32]);
|
|
76
|
+
|
|
77
|
+
// Get GUIDs for different senders
|
|
78
|
+
let guid1 = endpoint_client.next_guid(&sender1, &dst_eid, &receiver);
|
|
79
|
+
let guid2 = endpoint_client.next_guid(&sender2, &dst_eid, &receiver);
|
|
80
|
+
|
|
81
|
+
// Verify GUIDs are different (different senders should produce different GUIDs)
|
|
82
|
+
assert_ne!(guid1, guid2);
|
|
83
|
+
|
|
84
|
+
// Verify both use nonce 1 (independent nonce counters)
|
|
85
|
+
let expected_guid1 = env.as_contract(&endpoint_client.address, || {
|
|
86
|
+
util::compute_guid(env, 1, test_setup.eid, &sender1, dst_eid, &receiver)
|
|
87
|
+
});
|
|
88
|
+
let expected_guid2 = env.as_contract(&endpoint_client.address, || {
|
|
89
|
+
util::compute_guid(env, 1, test_setup.eid, &sender2, dst_eid, &receiver)
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
assert_eq!(guid1, expected_guid1);
|
|
93
|
+
assert_eq!(guid2, expected_guid2);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
#[test]
|
|
97
|
+
fn test_next_guid_different_dst_eids() {
|
|
98
|
+
let test_setup = setup();
|
|
99
|
+
let env = &test_setup.env;
|
|
100
|
+
let endpoint_client = &test_setup.endpoint_client;
|
|
101
|
+
|
|
102
|
+
let sender = Address::generate(env);
|
|
103
|
+
let dst_eid1 = 2;
|
|
104
|
+
let dst_eid2 = 3;
|
|
105
|
+
let receiver = BytesN::from_array(env, &[1u8; 32]);
|
|
106
|
+
|
|
107
|
+
// Get GUIDs for different destination EIDs
|
|
108
|
+
let guid1 = endpoint_client.next_guid(&sender, &dst_eid1, &receiver);
|
|
109
|
+
let guid2 = endpoint_client.next_guid(&sender, &dst_eid2, &receiver);
|
|
110
|
+
|
|
111
|
+
// Verify GUIDs are different (different dst_eids should produce different GUIDs)
|
|
112
|
+
assert_ne!(guid1, guid2);
|
|
113
|
+
|
|
114
|
+
// Verify both use nonce 1 (independent nonce counters per dst_eid)
|
|
115
|
+
let expected_guid1 = env.as_contract(&endpoint_client.address, || {
|
|
116
|
+
util::compute_guid(env, 1, test_setup.eid, &sender, dst_eid1, &receiver)
|
|
117
|
+
});
|
|
118
|
+
let expected_guid2 = env.as_contract(&endpoint_client.address, || {
|
|
119
|
+
util::compute_guid(env, 1, test_setup.eid, &sender, dst_eid2, &receiver)
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
assert_eq!(guid1, expected_guid1);
|
|
123
|
+
assert_eq!(guid2, expected_guid2);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
#[test]
|
|
127
|
+
fn test_next_guid_different_receivers() {
|
|
128
|
+
let test_setup = setup();
|
|
129
|
+
let env = &test_setup.env;
|
|
130
|
+
let endpoint_client = &test_setup.endpoint_client;
|
|
131
|
+
|
|
132
|
+
let sender = Address::generate(env);
|
|
133
|
+
let dst_eid = 2;
|
|
134
|
+
let receiver1 = BytesN::from_array(env, &[1u8; 32]);
|
|
135
|
+
let receiver2 = BytesN::from_array(env, &[2u8; 32]);
|
|
136
|
+
|
|
137
|
+
// Get GUIDs for different receivers
|
|
138
|
+
let guid1 = endpoint_client.next_guid(&sender, &dst_eid, &receiver1);
|
|
139
|
+
let guid2 = endpoint_client.next_guid(&sender, &dst_eid, &receiver2);
|
|
140
|
+
|
|
141
|
+
// Verify GUIDs are different (different receivers should produce different GUIDs)
|
|
142
|
+
assert_ne!(guid1, guid2);
|
|
143
|
+
|
|
144
|
+
// Verify both use nonce 1 (independent nonce counters per receiver)
|
|
145
|
+
let expected_guid1 = env.as_contract(&endpoint_client.address, || {
|
|
146
|
+
util::compute_guid(env, 1, test_setup.eid, &sender, dst_eid, &receiver1)
|
|
147
|
+
});
|
|
148
|
+
let expected_guid2 = env.as_contract(&endpoint_client.address, || {
|
|
149
|
+
util::compute_guid(env, 1, test_setup.eid, &sender, dst_eid, &receiver2)
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
assert_eq!(guid1, expected_guid1);
|
|
153
|
+
assert_eq!(guid2, expected_guid2);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
#[test]
|
|
157
|
+
fn test_next_guid_sequential_calls() {
|
|
158
|
+
let test_setup = setup();
|
|
159
|
+
let env = &test_setup.env;
|
|
160
|
+
let endpoint_client = &test_setup.endpoint_client;
|
|
161
|
+
|
|
162
|
+
let sender = Address::generate(env);
|
|
163
|
+
let dst_eid = 2;
|
|
164
|
+
let receiver = BytesN::from_array(env, &[1u8; 32]);
|
|
165
|
+
|
|
166
|
+
// Multiple calls to next_guid should return the same GUID (view function)
|
|
167
|
+
let guid1 = endpoint_client.next_guid(&sender, &dst_eid, &receiver);
|
|
168
|
+
let guid2 = endpoint_client.next_guid(&sender, &dst_eid, &receiver);
|
|
169
|
+
let guid3 = endpoint_client.next_guid(&sender, &dst_eid, &receiver);
|
|
170
|
+
|
|
171
|
+
// All GUIDs should be the same since outbound nonce hasn't changed
|
|
172
|
+
assert_eq!(guid1, guid2);
|
|
173
|
+
assert_eq!(guid2, guid3);
|
|
174
|
+
|
|
175
|
+
// All should use nonce 1
|
|
176
|
+
let expected_guid = env.as_contract(&endpoint_client.address, || {
|
|
177
|
+
util::compute_guid(env, 1, test_setup.eid, &sender, dst_eid, &receiver)
|
|
178
|
+
});
|
|
179
|
+
assert_eq!(guid1, expected_guid);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
#[test]
|
|
183
|
+
fn test_next_guid_after_outbound_increment() {
|
|
184
|
+
let test_setup = setup();
|
|
185
|
+
let env = &test_setup.env;
|
|
186
|
+
let endpoint_client = &test_setup.endpoint_client;
|
|
187
|
+
|
|
188
|
+
let sender = Address::generate(env);
|
|
189
|
+
let dst_eid = 2;
|
|
190
|
+
let receiver = BytesN::from_array(env, &[1u8; 32]);
|
|
191
|
+
|
|
192
|
+
// Get initial GUID (should use nonce 1)
|
|
193
|
+
let guid1 = endpoint_client.next_guid(&sender, &dst_eid, &receiver);
|
|
194
|
+
let expected_guid1 = env.as_contract(&endpoint_client.address, || {
|
|
195
|
+
util::compute_guid(env, 1, test_setup.eid, &sender, dst_eid, &receiver)
|
|
196
|
+
});
|
|
197
|
+
assert_eq!(guid1, expected_guid1);
|
|
198
|
+
|
|
199
|
+
// Simulate incrementing outbound nonce (as would happen in actual send)
|
|
200
|
+
env.as_contract(&endpoint_client.address, || {
|
|
201
|
+
storage::EndpointStorage::set_outbound_nonce(env, &sender, dst_eid, &receiver, &1)
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
// Get next GUID (should now use nonce 2)
|
|
205
|
+
let guid2 = endpoint_client.next_guid(&sender, &dst_eid, &receiver);
|
|
206
|
+
let expected_guid2 = env.as_contract(&endpoint_client.address, || {
|
|
207
|
+
util::compute_guid(env, 2, test_setup.eid, &sender, dst_eid, &receiver)
|
|
208
|
+
});
|
|
209
|
+
assert_eq!(guid2, expected_guid2);
|
|
210
|
+
|
|
211
|
+
// Verify GUIDs are different
|
|
212
|
+
assert_ne!(guid1, guid2);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
#[test]
|
|
216
|
+
fn test_next_guid_large_nonce() {
|
|
217
|
+
let test_setup = setup();
|
|
218
|
+
let env = &test_setup.env;
|
|
219
|
+
let endpoint_client = &test_setup.endpoint_client;
|
|
220
|
+
|
|
221
|
+
let sender = Address::generate(env);
|
|
222
|
+
let dst_eid = 2;
|
|
223
|
+
let receiver = BytesN::from_array(env, &[1u8; 32]);
|
|
224
|
+
let large_nonce = u64::MAX - 1;
|
|
225
|
+
|
|
226
|
+
// Set outbound nonce to a large value
|
|
227
|
+
env.as_contract(&endpoint_client.address, || {
|
|
228
|
+
storage::EndpointStorage::set_outbound_nonce(env, &sender, dst_eid, &receiver, &large_nonce)
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
// Get next GUID (should use nonce u64::MAX)
|
|
232
|
+
let guid = endpoint_client.next_guid(&sender, &dst_eid, &receiver);
|
|
233
|
+
|
|
234
|
+
// Verify GUID is computed correctly with large nonce
|
|
235
|
+
let expected_guid = env.as_contract(&endpoint_client.address, || {
|
|
236
|
+
util::compute_guid(env, u64::MAX, test_setup.eid, &sender, dst_eid, &receiver)
|
|
237
|
+
});
|
|
238
|
+
assert_eq!(guid, expected_guid);
|
|
239
|
+
}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
use soroban_sdk::{testutils::Address as _, Address, BytesN, IntoVal};
|
|
2
|
+
|
|
3
|
+
use crate::{endpoint_v2::EndpointV2, events::PacketNilified, storage, tests::endpoint_setup::setup};
|
|
4
|
+
use utils::testing_utils::assert_event;
|
|
5
|
+
|
|
6
|
+
#[test]
|
|
7
|
+
fn test_nilify_success_with_stored_payload() {
|
|
8
|
+
let test_setup = setup();
|
|
9
|
+
let env = &test_setup.env;
|
|
10
|
+
let endpoint_client = &test_setup.endpoint_client;
|
|
11
|
+
|
|
12
|
+
let receiver = Address::generate(env);
|
|
13
|
+
let src_eid = 2;
|
|
14
|
+
let sender = BytesN::from_array(env, &[1u8; 32]);
|
|
15
|
+
let nonce = 1;
|
|
16
|
+
let payload_hash = BytesN::from_array(env, &[0xabu8; 32]);
|
|
17
|
+
|
|
18
|
+
// Store a payload hash first
|
|
19
|
+
env.as_contract(&endpoint_client.address, || {
|
|
20
|
+
EndpointV2::inbound(env, &receiver, src_eid, &sender, nonce, &payload_hash)
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
// Verify payload hash is stored
|
|
24
|
+
let stored_hash = env.as_contract(&endpoint_client.address, || {
|
|
25
|
+
storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce)
|
|
26
|
+
});
|
|
27
|
+
assert_eq!(stored_hash, Some(payload_hash.clone()));
|
|
28
|
+
|
|
29
|
+
// Nilify the payload
|
|
30
|
+
endpoint_client
|
|
31
|
+
.mock_auths(&[soroban_sdk::testutils::MockAuth {
|
|
32
|
+
address: &receiver,
|
|
33
|
+
invoke: &soroban_sdk::testutils::MockAuthInvoke {
|
|
34
|
+
contract: &endpoint_client.address,
|
|
35
|
+
fn_name: "nilify",
|
|
36
|
+
args: (&receiver, &receiver, &src_eid, &sender, &nonce, &Some(payload_hash.clone())).into_val(env),
|
|
37
|
+
sub_invokes: &[],
|
|
38
|
+
},
|
|
39
|
+
}])
|
|
40
|
+
.nilify(&receiver, &receiver, &src_eid, &sender, &nonce, &Some(payload_hash.clone()));
|
|
41
|
+
|
|
42
|
+
// Verify PacketNilified event was emitted
|
|
43
|
+
assert_event(
|
|
44
|
+
env,
|
|
45
|
+
&endpoint_client.address,
|
|
46
|
+
PacketNilified {
|
|
47
|
+
src_eid,
|
|
48
|
+
sender: sender.clone(),
|
|
49
|
+
receiver: receiver.clone(),
|
|
50
|
+
nonce,
|
|
51
|
+
payload_hash: Some(payload_hash.clone()),
|
|
52
|
+
},
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
// Verify payload hash was replaced with nil hash
|
|
56
|
+
let nilified_hash = env.as_contract(&endpoint_client.address, || {
|
|
57
|
+
storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce)
|
|
58
|
+
});
|
|
59
|
+
let expected_nil_hash = env.as_contract(&endpoint_client.address, || EndpointV2::nil_payload_hash(env));
|
|
60
|
+
assert_eq!(nilified_hash, Some(expected_nil_hash));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
#[test]
|
|
64
|
+
fn test_nilify_success_with_empty_payload() {
|
|
65
|
+
let test_setup = setup();
|
|
66
|
+
let env = &test_setup.env;
|
|
67
|
+
let endpoint_client = &test_setup.endpoint_client;
|
|
68
|
+
|
|
69
|
+
let receiver = Address::generate(env);
|
|
70
|
+
let src_eid = 2;
|
|
71
|
+
let sender = BytesN::from_array(env, &[1u8; 32]);
|
|
72
|
+
let nonce = 2;
|
|
73
|
+
|
|
74
|
+
// Set lazy nonce to 1 so nonce 2 is greater than lazy nonce
|
|
75
|
+
env.as_contract(&endpoint_client.address, || {
|
|
76
|
+
storage::EndpointStorage::set_lazy_inbound_nonce(env, &receiver, src_eid, &sender, &1)
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// Nilify with None
|
|
80
|
+
endpoint_client
|
|
81
|
+
.mock_auths(&[soroban_sdk::testutils::MockAuth {
|
|
82
|
+
address: &receiver,
|
|
83
|
+
invoke: &soroban_sdk::testutils::MockAuthInvoke {
|
|
84
|
+
contract: &endpoint_client.address,
|
|
85
|
+
fn_name: "nilify",
|
|
86
|
+
args: (&receiver, &receiver, &src_eid, &sender, &nonce, &None::<BytesN<32>>).into_val(env),
|
|
87
|
+
sub_invokes: &[],
|
|
88
|
+
},
|
|
89
|
+
}])
|
|
90
|
+
.nilify(&receiver, &receiver, &src_eid, &sender, &nonce, &None);
|
|
91
|
+
|
|
92
|
+
// Verify PacketNilified event was emitted
|
|
93
|
+
assert_event(
|
|
94
|
+
env,
|
|
95
|
+
&endpoint_client.address,
|
|
96
|
+
PacketNilified { src_eid, sender: sender.clone(), receiver: receiver.clone(), nonce, payload_hash: None },
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
// Verify payload hash was set to nil hash
|
|
100
|
+
let nilified_hash = env.as_contract(&endpoint_client.address, || {
|
|
101
|
+
storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce)
|
|
102
|
+
});
|
|
103
|
+
let expected_nil_hash = env.as_contract(&endpoint_client.address, || EndpointV2::nil_payload_hash(env));
|
|
104
|
+
assert_eq!(nilified_hash, Some(expected_nil_hash));
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
#[test]
|
|
108
|
+
fn test_nilify_with_delegate() {
|
|
109
|
+
let test_setup = setup();
|
|
110
|
+
let env = &test_setup.env;
|
|
111
|
+
let endpoint_client = &test_setup.endpoint_client;
|
|
112
|
+
|
|
113
|
+
let receiver = Address::generate(env);
|
|
114
|
+
let delegate = Address::generate(env);
|
|
115
|
+
let src_eid = 2;
|
|
116
|
+
let sender = BytesN::from_array(env, &[1u8; 32]);
|
|
117
|
+
let nonce = 1;
|
|
118
|
+
let payload_hash = BytesN::from_array(env, &[0xcdu8; 32]);
|
|
119
|
+
|
|
120
|
+
// Set delegate for receiver
|
|
121
|
+
env.as_contract(&endpoint_client.address, || storage::EndpointStorage::set_delegate(env, &receiver, &delegate));
|
|
122
|
+
|
|
123
|
+
// Store a payload hash first
|
|
124
|
+
env.as_contract(&endpoint_client.address, || {
|
|
125
|
+
EndpointV2::inbound(env, &receiver, src_eid, &sender, nonce, &payload_hash)
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// Delegate can nilify on behalf of receiver
|
|
129
|
+
endpoint_client
|
|
130
|
+
.mock_auths(&[soroban_sdk::testutils::MockAuth {
|
|
131
|
+
address: &delegate,
|
|
132
|
+
invoke: &soroban_sdk::testutils::MockAuthInvoke {
|
|
133
|
+
contract: &endpoint_client.address,
|
|
134
|
+
fn_name: "nilify",
|
|
135
|
+
args: (&delegate, &receiver, &src_eid, &sender, &nonce, &Some(payload_hash.clone())).into_val(env),
|
|
136
|
+
sub_invokes: &[],
|
|
137
|
+
},
|
|
138
|
+
}])
|
|
139
|
+
.nilify(&delegate, &receiver, &src_eid, &sender, &nonce, &Some(payload_hash.clone()));
|
|
140
|
+
|
|
141
|
+
// Verify PacketNilified event was emitted
|
|
142
|
+
assert_event(
|
|
143
|
+
env,
|
|
144
|
+
&endpoint_client.address,
|
|
145
|
+
PacketNilified {
|
|
146
|
+
src_eid,
|
|
147
|
+
sender: sender.clone(),
|
|
148
|
+
receiver: receiver.clone(),
|
|
149
|
+
nonce,
|
|
150
|
+
payload_hash: Some(payload_hash.clone()),
|
|
151
|
+
},
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
// Verify payload hash was replaced with nil hash
|
|
155
|
+
let nilified_hash = env.as_contract(&endpoint_client.address, || {
|
|
156
|
+
storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce)
|
|
157
|
+
});
|
|
158
|
+
let expected_nil_hash = env.as_contract(&endpoint_client.address, || EndpointV2::nil_payload_hash(env));
|
|
159
|
+
assert_eq!(nilified_hash, Some(expected_nil_hash));
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
#[test]
|
|
163
|
+
fn test_nilify_multiple_payloads() {
|
|
164
|
+
let test_setup = setup();
|
|
165
|
+
let env = &test_setup.env;
|
|
166
|
+
let endpoint_client = &test_setup.endpoint_client;
|
|
167
|
+
|
|
168
|
+
let receiver = Address::generate(env);
|
|
169
|
+
let src_eid = 2;
|
|
170
|
+
let sender = BytesN::from_array(env, &[1u8; 32]);
|
|
171
|
+
let payload_hash1 = BytesN::from_array(env, &[0xabu8; 32]);
|
|
172
|
+
let payload_hash2 = BytesN::from_array(env, &[0xcdu8; 32]);
|
|
173
|
+
let nonce1 = 1;
|
|
174
|
+
let nonce2 = 2;
|
|
175
|
+
|
|
176
|
+
// Store multiple payload hashes
|
|
177
|
+
env.as_contract(&endpoint_client.address, || {
|
|
178
|
+
EndpointV2::inbound(env, &receiver, src_eid, &sender, nonce1, &payload_hash1)
|
|
179
|
+
});
|
|
180
|
+
env.as_contract(&endpoint_client.address, || {
|
|
181
|
+
EndpointV2::inbound(env, &receiver, src_eid, &sender, nonce2, &payload_hash2)
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
// Nilify first payload
|
|
185
|
+
endpoint_client
|
|
186
|
+
.mock_auths(&[soroban_sdk::testutils::MockAuth {
|
|
187
|
+
address: &receiver,
|
|
188
|
+
invoke: &soroban_sdk::testutils::MockAuthInvoke {
|
|
189
|
+
contract: &endpoint_client.address,
|
|
190
|
+
fn_name: "nilify",
|
|
191
|
+
args: (&receiver, &receiver, &src_eid, &sender, &nonce1, &Some(payload_hash1.clone())).into_val(env),
|
|
192
|
+
sub_invokes: &[],
|
|
193
|
+
},
|
|
194
|
+
}])
|
|
195
|
+
.nilify(&receiver, &receiver, &src_eid, &sender, &nonce1, &Some(payload_hash1.clone()));
|
|
196
|
+
|
|
197
|
+
// Nilify second payload
|
|
198
|
+
endpoint_client
|
|
199
|
+
.mock_auths(&[soroban_sdk::testutils::MockAuth {
|
|
200
|
+
address: &receiver,
|
|
201
|
+
invoke: &soroban_sdk::testutils::MockAuthInvoke {
|
|
202
|
+
contract: &endpoint_client.address,
|
|
203
|
+
fn_name: "nilify",
|
|
204
|
+
args: (&receiver, &receiver, &src_eid, &sender, &nonce2, &Some(payload_hash2.clone())).into_val(env),
|
|
205
|
+
sub_invokes: &[],
|
|
206
|
+
},
|
|
207
|
+
}])
|
|
208
|
+
.nilify(&receiver, &receiver, &src_eid, &sender, &nonce2, &Some(payload_hash2.clone()));
|
|
209
|
+
|
|
210
|
+
// Verify both payload hashes were replaced with nil hash
|
|
211
|
+
let expected_nil_hash = env.as_contract(&endpoint_client.address, || EndpointV2::nil_payload_hash(env));
|
|
212
|
+
|
|
213
|
+
let nilified_hash1 = env.as_contract(&endpoint_client.address, || {
|
|
214
|
+
storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce1)
|
|
215
|
+
});
|
|
216
|
+
let nilified_hash2 = env.as_contract(&endpoint_client.address, || {
|
|
217
|
+
storage::EndpointStorage::inbound_payload_hash(env, &receiver, src_eid, &sender, nonce2)
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
assert_eq!(nilified_hash1, Some(expected_nil_hash.clone()));
|
|
221
|
+
assert_eq!(nilified_hash2, Some(expected_nil_hash));
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
#[test]
|
|
225
|
+
fn test_nilify_different_paths() {
|
|
226
|
+
let test_setup = setup();
|
|
227
|
+
let env = &test_setup.env;
|
|
228
|
+
let endpoint_client = &test_setup.endpoint_client;
|
|
229
|
+
|
|
230
|
+
let receiver1 = Address::generate(env);
|
|
231
|
+
let receiver2 = Address::generate(env);
|
|
232
|
+
let src_eid1 = 2;
|
|
233
|
+
let src_eid2 = 3;
|
|
234
|
+
let sender1 = BytesN::from_array(env, &[1u8; 32]);
|
|
235
|
+
let sender2 = BytesN::from_array(env, &[2u8; 32]);
|
|
236
|
+
let nonce = 1;
|
|
237
|
+
let payload_hash = BytesN::from_array(env, &[0xefu8; 32]);
|
|
238
|
+
|
|
239
|
+
// Store payload hashes for different paths
|
|
240
|
+
env.as_contract(&endpoint_client.address, || {
|
|
241
|
+
EndpointV2::inbound(env, &receiver1, src_eid1, &sender1, nonce, &payload_hash)
|
|
242
|
+
});
|
|
243
|
+
env.as_contract(&endpoint_client.address, || {
|
|
244
|
+
EndpointV2::inbound(env, &receiver2, src_eid1, &sender1, nonce, &payload_hash)
|
|
245
|
+
});
|
|
246
|
+
env.as_contract(&endpoint_client.address, || {
|
|
247
|
+
EndpointV2::inbound(env, &receiver1, src_eid2, &sender1, nonce, &payload_hash)
|
|
248
|
+
});
|
|
249
|
+
env.as_contract(&endpoint_client.address, || {
|
|
250
|
+
EndpointV2::inbound(env, &receiver1, src_eid1, &sender2, nonce, &payload_hash)
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
// Nilify for different receivers
|
|
254
|
+
endpoint_client
|
|
255
|
+
.mock_auths(&[soroban_sdk::testutils::MockAuth {
|
|
256
|
+
address: &receiver1,
|
|
257
|
+
invoke: &soroban_sdk::testutils::MockAuthInvoke {
|
|
258
|
+
contract: &endpoint_client.address,
|
|
259
|
+
fn_name: "nilify",
|
|
260
|
+
args: (&receiver1, &receiver1, &src_eid1, &sender1, &nonce, &Some(payload_hash.clone())).into_val(env),
|
|
261
|
+
sub_invokes: &[],
|
|
262
|
+
},
|
|
263
|
+
}])
|
|
264
|
+
.nilify(&receiver1, &receiver1, &src_eid1, &sender1, &nonce, &Some(payload_hash.clone()));
|
|
265
|
+
|
|
266
|
+
endpoint_client
|
|
267
|
+
.mock_auths(&[soroban_sdk::testutils::MockAuth {
|
|
268
|
+
address: &receiver2,
|
|
269
|
+
invoke: &soroban_sdk::testutils::MockAuthInvoke {
|
|
270
|
+
contract: &endpoint_client.address,
|
|
271
|
+
fn_name: "nilify",
|
|
272
|
+
args: (&receiver2, &receiver2, &src_eid1, &sender1, &nonce, &Some(payload_hash.clone())).into_val(env),
|
|
273
|
+
sub_invokes: &[],
|
|
274
|
+
},
|
|
275
|
+
}])
|
|
276
|
+
.nilify(&receiver2, &receiver2, &src_eid1, &sender1, &nonce, &Some(payload_hash.clone()));
|
|
277
|
+
|
|
278
|
+
// Nilify for different src_eids
|
|
279
|
+
endpoint_client
|
|
280
|
+
.mock_auths(&[soroban_sdk::testutils::MockAuth {
|
|
281
|
+
address: &receiver1,
|
|
282
|
+
invoke: &soroban_sdk::testutils::MockAuthInvoke {
|
|
283
|
+
contract: &endpoint_client.address,
|
|
284
|
+
fn_name: "nilify",
|
|
285
|
+
args: (&receiver1, &receiver1, &src_eid2, &sender1, &nonce, &Some(payload_hash.clone())).into_val(env),
|
|
286
|
+
sub_invokes: &[],
|
|
287
|
+
},
|
|
288
|
+
}])
|
|
289
|
+
.nilify(&receiver1, &receiver1, &src_eid2, &sender1, &nonce, &Some(payload_hash.clone()));
|
|
290
|
+
|
|
291
|
+
// Nilify for different senders
|
|
292
|
+
endpoint_client
|
|
293
|
+
.mock_auths(&[soroban_sdk::testutils::MockAuth {
|
|
294
|
+
address: &receiver1,
|
|
295
|
+
invoke: &soroban_sdk::testutils::MockAuthInvoke {
|
|
296
|
+
contract: &endpoint_client.address,
|
|
297
|
+
fn_name: "nilify",
|
|
298
|
+
args: (&receiver1, &receiver1, &src_eid1, &sender2, &nonce, &Some(payload_hash.clone())).into_val(env),
|
|
299
|
+
sub_invokes: &[],
|
|
300
|
+
},
|
|
301
|
+
}])
|
|
302
|
+
.nilify(&receiver1, &receiver1, &src_eid1, &sender2, &nonce, &Some(payload_hash.clone()));
|
|
303
|
+
|
|
304
|
+
// Verify all paths have been nilified independently
|
|
305
|
+
let expected_nil_hash = env.as_contract(&endpoint_client.address, || EndpointV2::nil_payload_hash(env));
|
|
306
|
+
|
|
307
|
+
let nilified_hash1 = env.as_contract(&endpoint_client.address, || {
|
|
308
|
+
storage::EndpointStorage::inbound_payload_hash(env, &receiver1, src_eid1, &sender1, nonce)
|
|
309
|
+
});
|
|
310
|
+
let nilified_hash2 = env.as_contract(&endpoint_client.address, || {
|
|
311
|
+
storage::EndpointStorage::inbound_payload_hash(env, &receiver2, src_eid1, &sender1, nonce)
|
|
312
|
+
});
|
|
313
|
+
let nilified_hash3 = env.as_contract(&endpoint_client.address, || {
|
|
314
|
+
storage::EndpointStorage::inbound_payload_hash(env, &receiver1, src_eid2, &sender1, nonce)
|
|
315
|
+
});
|
|
316
|
+
let nilified_hash4 = env.as_contract(&endpoint_client.address, || {
|
|
317
|
+
storage::EndpointStorage::inbound_payload_hash(env, &receiver1, src_eid1, &sender2, nonce)
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
assert_eq!(nilified_hash1, Some(expected_nil_hash.clone()));
|
|
321
|
+
assert_eq!(nilified_hash2, Some(expected_nil_hash.clone()));
|
|
322
|
+
assert_eq!(nilified_hash3, Some(expected_nil_hash.clone()));
|
|
323
|
+
assert_eq!(nilified_hash4, Some(expected_nil_hash));
|
|
324
|
+
}
|