@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
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
import { StrKey } from '@stellar/stellar-sdk';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { beforeAll, describe, expect, inject, it } from 'vitest';
|
|
4
|
+
|
|
5
|
+
import { getFullyQualifiedRepoRootPath } from '@layerzerolabs/common-node-utils';
|
|
6
|
+
import { Options, PacketSerializer, PacketV1Codec } from '@layerzerolabs/lz-v2-utilities';
|
|
7
|
+
|
|
8
|
+
import { Client as CounterClient } from '../src/generated/counter';
|
|
9
|
+
import { Client as EndpointClient } from '../src/generated/endpoint';
|
|
10
|
+
import { Client as ExecutorHelperClient } from '../src/generated/executor_helper';
|
|
11
|
+
import { Client as SMLClient } from '../src/generated/sml';
|
|
12
|
+
import {
|
|
13
|
+
DEFAULT_DEPLOYER,
|
|
14
|
+
EID,
|
|
15
|
+
EXECUTOR_ADMIN,
|
|
16
|
+
MSG_TYPE_ABA,
|
|
17
|
+
MSG_TYPE_VANILLA,
|
|
18
|
+
NETWORK_PASSPHRASE,
|
|
19
|
+
} from './suites/constants';
|
|
20
|
+
import { deployContract } from './suites/deploy';
|
|
21
|
+
import { PacketSentEvent, scanPacketSentEvents } from './suites/scan';
|
|
22
|
+
import { assertTransactionSucceeded, createClient, signAndSendWithExecutorAuth } from './utils';
|
|
23
|
+
|
|
24
|
+
// Protocol addresses (will be injected from globalSetup in beforeAll)
|
|
25
|
+
let protocolAddresses: ReturnType<typeof inject<'protocolAddresses'>>;
|
|
26
|
+
|
|
27
|
+
// Counter-specific address
|
|
28
|
+
let counterAddress = '';
|
|
29
|
+
|
|
30
|
+
// Clients
|
|
31
|
+
let endpointClient: EndpointClient;
|
|
32
|
+
let smlClient: SMLClient;
|
|
33
|
+
let counterClient: CounterClient;
|
|
34
|
+
let executorHelperClient: ExecutorHelperClient;
|
|
35
|
+
|
|
36
|
+
// NOTE: run `stellar contract build --features sandbox` before running the test
|
|
37
|
+
|
|
38
|
+
describe('Counter with SML testing', async () => {
|
|
39
|
+
const repoRoot = await getFullyQualifiedRepoRootPath();
|
|
40
|
+
const wasmDir = path.join(
|
|
41
|
+
repoRoot,
|
|
42
|
+
'contracts',
|
|
43
|
+
'protocol',
|
|
44
|
+
'stellar',
|
|
45
|
+
'target',
|
|
46
|
+
'wasm32v1-none',
|
|
47
|
+
'release',
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
const COUNTER_WASM_PATH = path.join(wasmDir, 'counter.wasm');
|
|
51
|
+
|
|
52
|
+
beforeAll(async () => {
|
|
53
|
+
// Inject protocol addresses from globalSetup
|
|
54
|
+
protocolAddresses = inject('protocolAddresses');
|
|
55
|
+
|
|
56
|
+
console.log('\n📋 Protocol addresses injected from globalSetup');
|
|
57
|
+
console.log(' Endpoint:', protocolAddresses.endpointV2);
|
|
58
|
+
console.log(' SML:', protocolAddresses.sml);
|
|
59
|
+
console.log(' Executor:', protocolAddresses.executor);
|
|
60
|
+
console.log(' Executor Helper:', protocolAddresses.executorHelper);
|
|
61
|
+
|
|
62
|
+
// Create clients for protocol contracts
|
|
63
|
+
endpointClient = createClient(EndpointClient, protocolAddresses.endpointV2);
|
|
64
|
+
smlClient = createClient(SMLClient, protocolAddresses.sml);
|
|
65
|
+
executorHelperClient = createClient(ExecutorHelperClient, protocolAddresses.executorHelper);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
describe('Deploy Counter', () => {
|
|
69
|
+
it('Deploy Counter', async () => {
|
|
70
|
+
counterClient = await deployContract<CounterClient>(
|
|
71
|
+
CounterClient,
|
|
72
|
+
COUNTER_WASM_PATH,
|
|
73
|
+
{
|
|
74
|
+
owner: DEFAULT_DEPLOYER.publicKey(),
|
|
75
|
+
endpoint: protocolAddresses.endpointV2,
|
|
76
|
+
delegate: DEFAULT_DEPLOYER.publicKey(),
|
|
77
|
+
},
|
|
78
|
+
DEFAULT_DEPLOYER,
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
counterAddress = counterClient.options.contractId;
|
|
82
|
+
console.log('✅ Counter deployed:', counterAddress);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
describe('Wire Counter to use SML', () => {
|
|
87
|
+
it('Set Counter Send Library to SML', async () => {
|
|
88
|
+
// Override default library (ULN302) with SML for this Counter
|
|
89
|
+
const assembledTx = await endpointClient.set_send_library({
|
|
90
|
+
caller: DEFAULT_DEPLOYER.publicKey(),
|
|
91
|
+
sender: counterAddress,
|
|
92
|
+
dst_eid: EID,
|
|
93
|
+
new_lib: protocolAddresses.sml,
|
|
94
|
+
});
|
|
95
|
+
await assembledTx.signAndSend();
|
|
96
|
+
|
|
97
|
+
const { result: sendLib } = await endpointClient.get_send_library({
|
|
98
|
+
sender: counterAddress,
|
|
99
|
+
dst_eid: EID,
|
|
100
|
+
});
|
|
101
|
+
expect(sendLib.lib).toBe(protocolAddresses.sml);
|
|
102
|
+
expect(sendLib.is_default).toBe(false); // It's OApp-specific, not default
|
|
103
|
+
console.log('✅ Counter send library set to SML');
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it('Set Counter Receive Library to SML', async () => {
|
|
107
|
+
const assembledTx = await endpointClient.set_receive_library({
|
|
108
|
+
caller: DEFAULT_DEPLOYER.publicKey(),
|
|
109
|
+
receiver: counterAddress,
|
|
110
|
+
src_eid: EID,
|
|
111
|
+
new_lib: protocolAddresses.sml,
|
|
112
|
+
grace_period: 0n,
|
|
113
|
+
});
|
|
114
|
+
await assembledTx.signAndSend();
|
|
115
|
+
|
|
116
|
+
const { result: receiveLib } = await endpointClient.get_receive_library({
|
|
117
|
+
receiver: counterAddress,
|
|
118
|
+
src_eid: EID,
|
|
119
|
+
});
|
|
120
|
+
expect(receiveLib.lib).toBe(protocolAddresses.sml);
|
|
121
|
+
expect(receiveLib.is_default).toBe(false); // It's OApp-specific, not default
|
|
122
|
+
console.log('✅ Counter receive library set to SML');
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('Set Counter Peer', async () => {
|
|
126
|
+
const peerBytes = StrKey.decodeContract(counterAddress);
|
|
127
|
+
|
|
128
|
+
const assembledTx = await counterClient.set_peer({
|
|
129
|
+
eid: EID,
|
|
130
|
+
peer: Buffer.from(peerBytes),
|
|
131
|
+
});
|
|
132
|
+
await assembledTx.signAndSend();
|
|
133
|
+
|
|
134
|
+
const { result: peer } = await counterClient.peer({
|
|
135
|
+
eid: EID,
|
|
136
|
+
});
|
|
137
|
+
expect(peer?.toString()).toBe(Buffer.from(peerBytes).toString());
|
|
138
|
+
console.log('✅ Counter peer set for EID', EID);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
describe('Counter ABA Messaging', async () => {
|
|
143
|
+
let incrementLedger = 0;
|
|
144
|
+
let responseLedger = 0;
|
|
145
|
+
let packetSentEvent: PacketSentEvent;
|
|
146
|
+
let responsePacketSentEvent: PacketSentEvent;
|
|
147
|
+
let guid: Buffer;
|
|
148
|
+
let message: Buffer;
|
|
149
|
+
let responseGuid: Buffer;
|
|
150
|
+
let responseMessage: Buffer;
|
|
151
|
+
let abaReturnFee: bigint;
|
|
152
|
+
|
|
153
|
+
it('Counter Increment (ABA)', async () => {
|
|
154
|
+
// First quote the return fee (for the ABA to send back a response message)
|
|
155
|
+
const returnOptions = Options.newOptions().addExecutorLzReceiveOption(200000n, 0n);
|
|
156
|
+
|
|
157
|
+
const { result: returnFee } = await counterClient.quote({
|
|
158
|
+
dst_eid: EID,
|
|
159
|
+
msg_type: MSG_TYPE_VANILLA,
|
|
160
|
+
options: Buffer.from(returnOptions.toBytes()),
|
|
161
|
+
pay_in_zro: false,
|
|
162
|
+
});
|
|
163
|
+
console.log('✅ Return fee for ABA:', returnFee);
|
|
164
|
+
|
|
165
|
+
// Add 1% buffer to the return fee
|
|
166
|
+
abaReturnFee = (returnFee.native_fee * 101n) / 100n;
|
|
167
|
+
|
|
168
|
+
// Build ABA options with lzReceive gas + value for return message fee
|
|
169
|
+
const abaOptions = Options.newOptions().addExecutorLzReceiveOption(
|
|
170
|
+
200000n,
|
|
171
|
+
abaReturnFee,
|
|
172
|
+
);
|
|
173
|
+
const optionsBuffer = Buffer.from(abaOptions.toBytes());
|
|
174
|
+
|
|
175
|
+
const { result: fee } = await counterClient.quote({
|
|
176
|
+
dst_eid: EID,
|
|
177
|
+
msg_type: MSG_TYPE_ABA,
|
|
178
|
+
options: optionsBuffer,
|
|
179
|
+
pay_in_zro: true,
|
|
180
|
+
});
|
|
181
|
+
console.log('✅ ABA Fee:', fee);
|
|
182
|
+
|
|
183
|
+
const assembledTx = await counterClient.increment({
|
|
184
|
+
caller: DEFAULT_DEPLOYER.publicKey(),
|
|
185
|
+
dst_eid: EID,
|
|
186
|
+
msg_type: MSG_TYPE_ABA,
|
|
187
|
+
options: optionsBuffer,
|
|
188
|
+
fee: fee,
|
|
189
|
+
});
|
|
190
|
+
const sentTx = await assembledTx.signAndSend();
|
|
191
|
+
|
|
192
|
+
// Extract ledger number from transaction response
|
|
193
|
+
const txResponse = sentTx.getTransactionResponse;
|
|
194
|
+
if (txResponse && 'ledger' in txResponse) {
|
|
195
|
+
incrementLedger = txResponse.ledger;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const { result: outboundCount } = await counterClient.outbound_count({
|
|
199
|
+
eid: EID,
|
|
200
|
+
});
|
|
201
|
+
expect(outboundCount).toBe(1n);
|
|
202
|
+
console.log('✅ Counter incremented (ABA), outbound count:', outboundCount);
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
it('Scan PacketSent Events', async () => {
|
|
206
|
+
const packetSentEvents = await scanPacketSentEvents(
|
|
207
|
+
protocolAddresses.endpointV2,
|
|
208
|
+
incrementLedger,
|
|
209
|
+
);
|
|
210
|
+
expect(packetSentEvents.length).toBeGreaterThan(0);
|
|
211
|
+
packetSentEvent = packetSentEvents[0];
|
|
212
|
+
console.log(
|
|
213
|
+
`✅ PacketSent events scanned successfully. Found ${packetSentEvents.length} events`,
|
|
214
|
+
);
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
it('Verify Counter Message', async () => {
|
|
218
|
+
const packet = PacketSerializer.deserialize(packetSentEvent.encoded_packet);
|
|
219
|
+
guid = Buffer.from(packet.guid.replace('0x', ''), 'hex');
|
|
220
|
+
message = Buffer.from(packet.message.replace('0x', ''), 'hex');
|
|
221
|
+
const codec = PacketV1Codec.from(packet);
|
|
222
|
+
const packetHeader = codec.header();
|
|
223
|
+
const payloadHash = codec.payloadHash();
|
|
224
|
+
const assembledTx = await smlClient.validate_packet({
|
|
225
|
+
header_bytes: Buffer.from(packetHeader.replace('0x', ''), 'hex'),
|
|
226
|
+
payload_hash: Buffer.from(payloadHash.replace('0x', ''), 'hex'),
|
|
227
|
+
});
|
|
228
|
+
await assembledTx.signAndSend();
|
|
229
|
+
console.log('✅ ABA request packet validated');
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
it('Receive Counter Message (ABA - triggers response)', async () => {
|
|
233
|
+
// ABA message: receives message and automatically sends response
|
|
234
|
+
const origin = {
|
|
235
|
+
nonce: 1n,
|
|
236
|
+
sender: Buffer.from(StrKey.decodeContract(counterAddress)),
|
|
237
|
+
src_eid: EID,
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
const assembledTx = await executorHelperClient.native_drop_and_execute(
|
|
241
|
+
{
|
|
242
|
+
executor: protocolAddresses.executor,
|
|
243
|
+
admin: EXECUTOR_ADMIN.publicKey(),
|
|
244
|
+
origin,
|
|
245
|
+
dst_eid: EID,
|
|
246
|
+
oapp: counterAddress,
|
|
247
|
+
// Native drop: send 100 stroops to counter contract
|
|
248
|
+
native_drop_params: [
|
|
249
|
+
{
|
|
250
|
+
receiver: counterAddress,
|
|
251
|
+
amount: 100n,
|
|
252
|
+
},
|
|
253
|
+
],
|
|
254
|
+
execute_params: {
|
|
255
|
+
extra_data: Buffer.from([]),
|
|
256
|
+
gas_limit: 0n,
|
|
257
|
+
guid,
|
|
258
|
+
message,
|
|
259
|
+
origin,
|
|
260
|
+
receiver: counterAddress,
|
|
261
|
+
value: abaReturnFee, // Value that will be used as fee for the ABA response
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
simulate: false, // Don't auto-simulate, we'll do it with record_allow_nonroot
|
|
266
|
+
},
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
// Sign and send using non-root auth flow
|
|
270
|
+
const txResult = await signAndSendWithExecutorAuth(
|
|
271
|
+
protocolAddresses.executor,
|
|
272
|
+
EXECUTOR_ADMIN,
|
|
273
|
+
assembledTx,
|
|
274
|
+
NETWORK_PASSPHRASE,
|
|
275
|
+
);
|
|
276
|
+
|
|
277
|
+
assertTransactionSucceeded(txResult, 'LzReceive (ABA)');
|
|
278
|
+
|
|
279
|
+
if ('ledger' in txResult) {
|
|
280
|
+
responseLedger = txResult.ledger;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// Verify the ABA message was received and inbound count increased
|
|
284
|
+
const { result: inboundCount } = await counterClient.inbound_count({
|
|
285
|
+
eid: EID,
|
|
286
|
+
});
|
|
287
|
+
expect(inboundCount).toBe(1n);
|
|
288
|
+
|
|
289
|
+
// Verify the outbound count increased (ABA response was sent)
|
|
290
|
+
const { result: outboundCount } = await counterClient.outbound_count({
|
|
291
|
+
eid: EID,
|
|
292
|
+
});
|
|
293
|
+
expect(outboundCount).toBe(2n); // 1 from initial increment + 1 from ABA response
|
|
294
|
+
console.log(
|
|
295
|
+
'✅ ABA message received and response sent, outbound count:',
|
|
296
|
+
outboundCount,
|
|
297
|
+
);
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
it('Scan ABA Response PacketSent Events', async () => {
|
|
301
|
+
const packetSentEvents = await scanPacketSentEvents(
|
|
302
|
+
protocolAddresses.endpointV2,
|
|
303
|
+
responseLedger,
|
|
304
|
+
);
|
|
305
|
+
expect(packetSentEvents.length).toBeGreaterThan(0);
|
|
306
|
+
responsePacketSentEvent = packetSentEvents[0];
|
|
307
|
+
console.log(
|
|
308
|
+
`✅ ABA response PacketSent events scanned. Found ${packetSentEvents.length} events`,
|
|
309
|
+
);
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
it('Verify ABA Response Message', async () => {
|
|
313
|
+
const packet = PacketSerializer.deserialize(responsePacketSentEvent.encoded_packet);
|
|
314
|
+
responseGuid = Buffer.from(packet.guid.replace('0x', ''), 'hex');
|
|
315
|
+
responseMessage = Buffer.from(packet.message.replace('0x', ''), 'hex');
|
|
316
|
+
const codec = PacketV1Codec.from(packet);
|
|
317
|
+
const packetHeader = codec.header();
|
|
318
|
+
const payloadHash = codec.payloadHash();
|
|
319
|
+
const assembledTx = await smlClient.validate_packet({
|
|
320
|
+
header_bytes: Buffer.from(packetHeader.replace('0x', ''), 'hex'),
|
|
321
|
+
payload_hash: Buffer.from(payloadHash.replace('0x', ''), 'hex'),
|
|
322
|
+
});
|
|
323
|
+
await assembledTx.signAndSend();
|
|
324
|
+
console.log('✅ ABA response packet validated');
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
it('Receive ABA Response Message', async () => {
|
|
328
|
+
// Receive the response message (vanilla type)
|
|
329
|
+
const origin = {
|
|
330
|
+
nonce: 2n,
|
|
331
|
+
sender: Buffer.from(StrKey.decodeContract(counterAddress)),
|
|
332
|
+
src_eid: EID,
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
const assembledTx = await executorHelperClient.execute(
|
|
336
|
+
{
|
|
337
|
+
executor: protocolAddresses.executor,
|
|
338
|
+
params: {
|
|
339
|
+
extra_data: Buffer.from([]),
|
|
340
|
+
gas_limit: 0n,
|
|
341
|
+
guid: responseGuid,
|
|
342
|
+
message: responseMessage,
|
|
343
|
+
origin,
|
|
344
|
+
receiver: counterAddress,
|
|
345
|
+
value: 10n, // Response message includes value: 10
|
|
346
|
+
},
|
|
347
|
+
value_payer: EXECUTOR_ADMIN.publicKey(),
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
simulate: false, // Don't auto-simulate, we'll do it with record_allow_nonroot
|
|
351
|
+
},
|
|
352
|
+
);
|
|
353
|
+
|
|
354
|
+
// Sign and send using non-root auth flow
|
|
355
|
+
const txResult = await signAndSendWithExecutorAuth(
|
|
356
|
+
protocolAddresses.executor,
|
|
357
|
+
EXECUTOR_ADMIN,
|
|
358
|
+
assembledTx,
|
|
359
|
+
NETWORK_PASSPHRASE,
|
|
360
|
+
);
|
|
361
|
+
|
|
362
|
+
assertTransactionSucceeded(txResult, 'LzReceive (ABA Response)');
|
|
363
|
+
|
|
364
|
+
// Verify the response was received and inbound count increased again
|
|
365
|
+
const { result: inboundCount } = await counterClient.inbound_count({
|
|
366
|
+
eid: EID,
|
|
367
|
+
});
|
|
368
|
+
expect(inboundCount).toBe(2n); // 1 from ABA request + 1 from ABA response
|
|
369
|
+
console.log('✅ ABA response received, total inbound count:', inboundCount);
|
|
370
|
+
|
|
371
|
+
console.log('\n🎉 ABA round-trip completed successfully!');
|
|
372
|
+
console.log(' Request: Counter → Counter (ABA)');
|
|
373
|
+
console.log(' Response: Counter → Counter (Vanilla)');
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
});
|