@layerzerolabs/protocol-stellar-v2 0.2.15 → 0.2.18
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 +350 -309
- package/.turbo/turbo-lint.log +146 -108
- package/.turbo/turbo-test.log +1423 -1238
- package/Cargo.lock +12 -0
- package/Cargo.toml +3 -0
- 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 +23 -3
- 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/integration-tests/setup.rs +25 -7
- package/contracts/oapps/oft/src/errors.rs +6 -1
- package/contracts/oapps/oft/src/extensions/oft_fee.rs +8 -8
- 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 +4 -2
- package/contracts/oapps/oft/src/oft.rs +24 -64
- package/contracts/oapps/oft/src/oft_impl.rs +201 -0
- package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +1 -3
- package/contracts/oapps/oft/src/oft_types/mint_burn.rs +1 -4
- package/contracts/oapps/oft/src/storage.rs +2 -0
- package/contracts/oapps/oft/src/tests/extensions/setup.rs +36 -22
- package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +5 -3
- package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +5 -3
- package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +5 -3
- package/contracts/oapps/oft/src/tests/test_decimals.rs +2 -2
- package/contracts/oapps/oft/src/tests/test_oft_msg_codec.rs +1 -2
- package/contracts/oapps/oft/src/tests/test_utils.rs +45 -23
- package/contracts/oapps/oft/src/types.rs +20 -0
- package/contracts/oapps/oft-std/integration-tests/setup.rs +4 -2
- package/contracts/oapps/oft-std/src/oft.rs +24 -6
- package/contracts/upgrader/src/lib.rs +4 -4
- package/contracts/utils/src/auth.rs +44 -0
- package/contracts/utils/src/errors.rs +27 -5
- package/contracts/utils/src/lib.rs +3 -0
- package/contracts/utils/src/multisig.rs +211 -0
- package/contracts/utils/src/ownable.rs +12 -10
- 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 +16 -5
- 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 +8 -5
- package/sdk/.turbo/turbo-build.log +1 -0
- package/sdk/.turbo/turbo-test.log +1009 -0
- package/sdk/dist/generated/bml.d.ts +65 -8
- package/sdk/dist/generated/bml.js +70 -34
- package/sdk/dist/generated/counter.d.ts +167 -42
- package/sdk/dist/generated/counter.js +86 -45
- package/sdk/dist/generated/dvn.d.ts +282 -229
- package/sdk/dist/generated/dvn.js +119 -81
- package/sdk/dist/generated/dvn_fee_lib.d.ts +142 -67
- package/sdk/dist/generated/dvn_fee_lib.js +64 -24
- package/sdk/dist/generated/endpoint.d.ts +97 -22
- package/sdk/dist/generated/endpoint.js +75 -37
- package/sdk/dist/generated/executor.d.ts +117 -85
- package/sdk/dist/generated/executor.js +102 -59
- package/sdk/dist/generated/executor_fee_lib.d.ts +162 -78
- package/sdk/dist/generated/executor_fee_lib.js +104 -57
- package/sdk/dist/generated/executor_helper.d.ts +133 -21
- package/sdk/dist/generated/executor_helper.js +99 -50
- package/sdk/dist/generated/oft_std.d.ts +233 -55
- package/sdk/dist/generated/oft_std.js +99 -54
- package/sdk/dist/generated/price_feed.d.ts +142 -67
- package/sdk/dist/generated/price_feed.js +64 -24
- package/sdk/dist/generated/sml.d.ts +113 -32
- package/sdk/dist/generated/sml.js +93 -49
- package/sdk/dist/generated/treasury.d.ts +896 -0
- package/sdk/dist/generated/treasury.js +219 -0
- package/sdk/dist/generated/uln302.d.ts +113 -32
- package/sdk/dist/generated/uln302.js +93 -49
- package/sdk/dist/generated/upgrader.d.ts +2 -2
- package/sdk/dist/generated/upgrader.js +1 -1
- package/sdk/dist/index.d.ts +2 -0
- package/sdk/dist/index.js +3 -0
- package/sdk/dist/wasm/blocked-message-lib.d.ts +1 -0
- package/sdk/dist/wasm/blocked-message-lib.js +2 -0
- package/sdk/dist/wasm/counter.d.ts +1 -0
- package/sdk/dist/wasm/counter.js +2 -0
- package/sdk/dist/wasm/dvn-fee-lib.d.ts +1 -0
- package/sdk/dist/wasm/dvn-fee-lib.js +2 -0
- package/sdk/dist/wasm/dvn.d.ts +1 -0
- package/sdk/dist/wasm/dvn.js +2 -0
- package/sdk/dist/wasm/endpoint-v2.d.ts +1 -0
- package/sdk/dist/wasm/endpoint-v2.js +2 -0
- package/sdk/dist/wasm/executor-fee-lib.d.ts +1 -0
- package/sdk/dist/wasm/executor-fee-lib.js +2 -0
- package/sdk/dist/wasm/executor-helper.d.ts +1 -0
- package/sdk/dist/wasm/executor-helper.js +2 -0
- package/sdk/dist/wasm/executor.d.ts +1 -0
- package/sdk/dist/wasm/executor.js +2 -0
- package/sdk/dist/wasm/layerzero-views.d.ts +1 -0
- package/sdk/dist/wasm/layerzero-views.js +2 -0
- package/sdk/dist/wasm/oft-std.d.ts +1 -0
- package/sdk/dist/wasm/oft-std.js +2 -0
- package/sdk/dist/wasm/price-feed.d.ts +1 -0
- package/sdk/dist/wasm/price-feed.js +2 -0
- package/sdk/dist/wasm/simple-message-lib.d.ts +1 -0
- package/sdk/dist/wasm/simple-message-lib.js +2 -0
- package/sdk/dist/wasm/treasury.d.ts +1 -0
- package/sdk/dist/wasm/treasury.js +2 -0
- package/sdk/dist/wasm/uln302.d.ts +1 -0
- package/sdk/dist/wasm/uln302.js +2 -0
- package/sdk/dist/wasm/upgrader.d.ts +1 -0
- package/sdk/dist/wasm/upgrader.js +2 -0
- package/sdk/dist/wasm.d.ts +15 -0
- package/sdk/dist/wasm.js +15 -0
- package/sdk/package.json +4 -2
- package/sdk/src/index.ts +4 -0
- 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} +185 -310
- 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/vitest.config.ts +21 -0
- package/tools/ts-bindings-gen/src/main.rs +1 -0
- package/turbo.json +2 -0
- 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/workers/dvn/src/interfaces/multisig.rs +0 -56
- package/contracts/workers/dvn/src/multisig.rs +0 -157
- package/sdk/test/index.test.ts +0 -375
- /package/sdk/test/suites/{testUpgradeable.ts → dummyContractClient.ts} +0 -0
|
@@ -0,0 +1,493 @@
|
|
|
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 ExecutorHelperClient } from '../src/generated/executor_helper';
|
|
10
|
+
import { Client as Uln302Client } from '../src/generated/uln302';
|
|
11
|
+
import {
|
|
12
|
+
DEFAULT_DEPLOYER,
|
|
13
|
+
DVN_SIGNER,
|
|
14
|
+
DVN_VID,
|
|
15
|
+
EID,
|
|
16
|
+
EXECUTOR_ADMIN,
|
|
17
|
+
MSG_TYPE_COMPOSED_ABA,
|
|
18
|
+
MSG_TYPE_VANILLA,
|
|
19
|
+
NETWORK_PASSPHRASE,
|
|
20
|
+
} from './suites/constants';
|
|
21
|
+
import { deployContract } from './suites/deploy';
|
|
22
|
+
import { PacketSentEvent, scanPacketSentEvents } from './suites/scan';
|
|
23
|
+
import {
|
|
24
|
+
assertTransactionSucceeded,
|
|
25
|
+
createClient,
|
|
26
|
+
getNativeBalance,
|
|
27
|
+
signAndSendWithExecutorAuth,
|
|
28
|
+
signDvnAuthEntries,
|
|
29
|
+
} from './utils';
|
|
30
|
+
|
|
31
|
+
// Protocol addresses (will be injected from globalSetup in beforeAll)
|
|
32
|
+
let protocolAddresses: ReturnType<typeof inject<'protocolAddresses'>>;
|
|
33
|
+
|
|
34
|
+
// Counter-specific address
|
|
35
|
+
let counterAddress = '';
|
|
36
|
+
|
|
37
|
+
// Clients
|
|
38
|
+
let uln302Client: Uln302Client;
|
|
39
|
+
let counterClient: CounterClient;
|
|
40
|
+
let executorHelperClient: ExecutorHelperClient;
|
|
41
|
+
|
|
42
|
+
// NOTE: run `stellar contract build --features sandbox` before running the test
|
|
43
|
+
|
|
44
|
+
describe('Counter with ULN302 testing', async () => {
|
|
45
|
+
const repoRoot = await getFullyQualifiedRepoRootPath();
|
|
46
|
+
const wasmDir = path.join(
|
|
47
|
+
repoRoot,
|
|
48
|
+
'contracts',
|
|
49
|
+
'protocol',
|
|
50
|
+
'stellar',
|
|
51
|
+
'target',
|
|
52
|
+
'wasm32v1-none',
|
|
53
|
+
'release',
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
const COUNTER_WASM_PATH = path.join(wasmDir, 'counter.wasm');
|
|
57
|
+
|
|
58
|
+
beforeAll(async () => {
|
|
59
|
+
// Inject protocol addresses from globalSetup
|
|
60
|
+
protocolAddresses = inject('protocolAddresses');
|
|
61
|
+
|
|
62
|
+
console.log('\n📋 Protocol addresses injected from globalSetup');
|
|
63
|
+
console.log(' Endpoint:', protocolAddresses.endpointV2);
|
|
64
|
+
console.log(' ULN302:', protocolAddresses.uln302);
|
|
65
|
+
console.log(' DVN:', protocolAddresses.dvn);
|
|
66
|
+
console.log(' Executor:', protocolAddresses.executor);
|
|
67
|
+
console.log(' Executor Helper:', protocolAddresses.executorHelper);
|
|
68
|
+
|
|
69
|
+
// Create clients for protocol contracts
|
|
70
|
+
uln302Client = createClient(Uln302Client, protocolAddresses.uln302);
|
|
71
|
+
executorHelperClient = createClient(ExecutorHelperClient, protocolAddresses.executorHelper);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
describe('Deploy Counter', () => {
|
|
75
|
+
it('Deploy Counter', async () => {
|
|
76
|
+
counterClient = await deployContract<CounterClient>(
|
|
77
|
+
CounterClient,
|
|
78
|
+
COUNTER_WASM_PATH,
|
|
79
|
+
{
|
|
80
|
+
owner: DEFAULT_DEPLOYER.publicKey(),
|
|
81
|
+
endpoint: protocolAddresses.endpointV2,
|
|
82
|
+
delegate: DEFAULT_DEPLOYER.publicKey(),
|
|
83
|
+
},
|
|
84
|
+
DEFAULT_DEPLOYER,
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
counterAddress = counterClient.options.contractId;
|
|
88
|
+
console.log('✅ Counter deployed:', counterAddress);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('Set Counter Peer', async () => {
|
|
92
|
+
const peerBytes = StrKey.decodeContract(counterAddress);
|
|
93
|
+
|
|
94
|
+
const assembledTx = await counterClient.set_peer({
|
|
95
|
+
eid: EID,
|
|
96
|
+
peer: Buffer.from(peerBytes),
|
|
97
|
+
});
|
|
98
|
+
await assembledTx.signAndSend();
|
|
99
|
+
|
|
100
|
+
const { result: peer } = await counterClient.peer({
|
|
101
|
+
eid: EID,
|
|
102
|
+
});
|
|
103
|
+
expect(peer?.toString()).toBe(Buffer.from(peerBytes).toString());
|
|
104
|
+
console.log('✅ Counter peer set for EID', EID);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
describe('Counter Increment with Composed ABA and Native Drop', async () => {
|
|
109
|
+
let incrementLedger = 0;
|
|
110
|
+
let packetSentEvent: PacketSentEvent;
|
|
111
|
+
let guid: Buffer;
|
|
112
|
+
let message: Buffer;
|
|
113
|
+
let packetHeader: Buffer;
|
|
114
|
+
let payloadHash: Buffer;
|
|
115
|
+
let composeValue: bigint;
|
|
116
|
+
|
|
117
|
+
// Native drop receiver - use DEFAULT_DEPLOYER as the receiver
|
|
118
|
+
const NATIVE_DROP_AMOUNT = 1000000n; // 0.1 XLM (in stroops)
|
|
119
|
+
let nativeDropReceiver: Buffer;
|
|
120
|
+
|
|
121
|
+
it('Counter Increment (Composed ABA with Native Drop)', async () => {
|
|
122
|
+
// Get the native drop receiver address (32 bytes)
|
|
123
|
+
nativeDropReceiver = Buffer.from(
|
|
124
|
+
StrKey.decodeEd25519PublicKey(DEFAULT_DEPLOYER.publicKey()),
|
|
125
|
+
);
|
|
126
|
+
const nativeDropReceiverHex = '0x' + nativeDropReceiver.toString('hex');
|
|
127
|
+
|
|
128
|
+
// First quote the return fee (for the lz_compose to send back a message)
|
|
129
|
+
// Return message uses vanilla type with lzReceive option
|
|
130
|
+
const returnOptions = Options.newOptions().addExecutorLzReceiveOption(200000n, 0n);
|
|
131
|
+
|
|
132
|
+
const { result: returnFee } = await counterClient.quote({
|
|
133
|
+
dst_eid: EID,
|
|
134
|
+
msg_type: MSG_TYPE_VANILLA,
|
|
135
|
+
options: Buffer.from(returnOptions.toBytes()),
|
|
136
|
+
pay_in_zro: false,
|
|
137
|
+
});
|
|
138
|
+
console.log('✅ Return fee for ComposedABA:', returnFee);
|
|
139
|
+
|
|
140
|
+
// Add 1% buffer to the return fee
|
|
141
|
+
const returnFeeWithBuffer = (returnFee.native_fee * 101n) / 100n;
|
|
142
|
+
composeValue = returnFeeWithBuffer;
|
|
143
|
+
|
|
144
|
+
// Build type 3 options with:
|
|
145
|
+
// 1. lz_receive option (gas only, no value)
|
|
146
|
+
// 2. native_drop option (amount + receiver)
|
|
147
|
+
// 3. lz_compose option (index + gas + value for return message)
|
|
148
|
+
const composedAbaOptions = Options.newOptions()
|
|
149
|
+
.addExecutorLzReceiveOption(200000n, 0n)
|
|
150
|
+
.addExecutorNativeDropOption(NATIVE_DROP_AMOUNT, nativeDropReceiverHex)
|
|
151
|
+
.addExecutorComposeOption(0, 200000n, returnFeeWithBuffer);
|
|
152
|
+
|
|
153
|
+
const optionsBuffer = Buffer.from(composedAbaOptions.toBytes());
|
|
154
|
+
|
|
155
|
+
const { result: fee } = await counterClient.quote({
|
|
156
|
+
dst_eid: EID,
|
|
157
|
+
msg_type: MSG_TYPE_COMPOSED_ABA,
|
|
158
|
+
options: optionsBuffer,
|
|
159
|
+
pay_in_zro: false,
|
|
160
|
+
});
|
|
161
|
+
console.log('✅ ComposedABA Fee:', fee);
|
|
162
|
+
|
|
163
|
+
const assembledTx = await counterClient.increment({
|
|
164
|
+
caller: DEFAULT_DEPLOYER.publicKey(),
|
|
165
|
+
dst_eid: EID,
|
|
166
|
+
msg_type: MSG_TYPE_COMPOSED_ABA,
|
|
167
|
+
options: optionsBuffer,
|
|
168
|
+
fee: fee,
|
|
169
|
+
});
|
|
170
|
+
const sentTx = await assembledTx.signAndSend();
|
|
171
|
+
|
|
172
|
+
// Extract ledger number from transaction response
|
|
173
|
+
const txResponse = sentTx.getTransactionResponse;
|
|
174
|
+
if (txResponse && 'ledger' in txResponse) {
|
|
175
|
+
incrementLedger = txResponse.ledger;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const { result: outboundCount } = await counterClient.outbound_count({
|
|
179
|
+
eid: EID,
|
|
180
|
+
});
|
|
181
|
+
expect(outboundCount).toBe(1n);
|
|
182
|
+
console.log('✅ Counter incremented (Composed ABA), outbound count:', outboundCount);
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
it('Scan PacketSent Events (Composed ABA)', async () => {
|
|
186
|
+
const packetSentEvents = await scanPacketSentEvents(
|
|
187
|
+
protocolAddresses.endpointV2,
|
|
188
|
+
incrementLedger,
|
|
189
|
+
);
|
|
190
|
+
expect(packetSentEvents.length).toBeGreaterThan(0);
|
|
191
|
+
packetSentEvent = packetSentEvents[0];
|
|
192
|
+
console.log(
|
|
193
|
+
`✅ PacketSent events scanned successfully. Found ${packetSentEvents.length} events`,
|
|
194
|
+
);
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
it('Extract Packet Header and Payload Hash (Composed ABA)', async () => {
|
|
198
|
+
const packet = PacketSerializer.deserialize(packetSentEvent.encoded_packet);
|
|
199
|
+
guid = Buffer.from(packet.guid.replace('0x', ''), 'hex');
|
|
200
|
+
message = Buffer.from(packet.message.replace('0x', ''), 'hex');
|
|
201
|
+
|
|
202
|
+
const codec = PacketV1Codec.from(packet);
|
|
203
|
+
packetHeader = Buffer.from(codec.header().replace('0x', ''), 'hex');
|
|
204
|
+
payloadHash = Buffer.from(codec.payloadHash().replace('0x', ''), 'hex');
|
|
205
|
+
|
|
206
|
+
console.log('✅ Packet header extracted, length:', packetHeader.length);
|
|
207
|
+
console.log(
|
|
208
|
+
'✅ Payload hash extracted:',
|
|
209
|
+
payloadHash.toString('hex').slice(0, 16) + '...',
|
|
210
|
+
);
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
it('DVN Verifies Message (Composed ABA)', async () => {
|
|
214
|
+
const verifyTx = await uln302Client.verify({
|
|
215
|
+
dvn: protocolAddresses.dvn,
|
|
216
|
+
packet_header: packetHeader,
|
|
217
|
+
payload_hash: payloadHash,
|
|
218
|
+
confirmations: 1n,
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
await signDvnAuthEntries(
|
|
222
|
+
protocolAddresses.dvn,
|
|
223
|
+
DVN_VID,
|
|
224
|
+
DEFAULT_DEPLOYER,
|
|
225
|
+
[DVN_SIGNER],
|
|
226
|
+
verifyTx,
|
|
227
|
+
NETWORK_PASSPHRASE,
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
await verifyTx.signAndSend();
|
|
231
|
+
console.log('✅ DVN verified message (Composed ABA)');
|
|
232
|
+
|
|
233
|
+
const { result: isVerifiable } = await uln302Client.verifiable({
|
|
234
|
+
packet_header: packetHeader,
|
|
235
|
+
payload_hash: payloadHash,
|
|
236
|
+
});
|
|
237
|
+
expect(isVerifiable).toBe(true);
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
it('Commit Verification (Composed ABA)', async () => {
|
|
241
|
+
const commitTx = await uln302Client.commit_verification({
|
|
242
|
+
packet_header: packetHeader,
|
|
243
|
+
payload_hash: payloadHash,
|
|
244
|
+
});
|
|
245
|
+
await commitTx.signAndSend();
|
|
246
|
+
console.log('✅ Verification committed to endpoint (Composed ABA)');
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
it('Execute native_drop_and_execute (Composed ABA)', async () => {
|
|
250
|
+
// Execute native_drop + lz_receive together
|
|
251
|
+
// For ComposedABA, lz_receive will queue a compose message via send_compose
|
|
252
|
+
const origin = {
|
|
253
|
+
nonce: 1n, // First message
|
|
254
|
+
sender: Buffer.from(StrKey.decodeContract(counterAddress)),
|
|
255
|
+
src_eid: EID,
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
// Get the balance before native drop
|
|
259
|
+
const balanceBefore = await getNativeBalance(DEFAULT_DEPLOYER.publicKey());
|
|
260
|
+
console.log('💰 Balance before native drop:', balanceBefore);
|
|
261
|
+
|
|
262
|
+
const assembledTx = await executorHelperClient.native_drop_and_execute(
|
|
263
|
+
{
|
|
264
|
+
executor: protocolAddresses.executor,
|
|
265
|
+
admin: EXECUTOR_ADMIN.publicKey(),
|
|
266
|
+
origin,
|
|
267
|
+
dst_eid: EID,
|
|
268
|
+
oapp: counterAddress,
|
|
269
|
+
native_drop_params: [
|
|
270
|
+
{
|
|
271
|
+
receiver: DEFAULT_DEPLOYER.publicKey(),
|
|
272
|
+
amount: NATIVE_DROP_AMOUNT,
|
|
273
|
+
},
|
|
274
|
+
],
|
|
275
|
+
execute_params: {
|
|
276
|
+
extra_data: Buffer.from([]),
|
|
277
|
+
gas_limit: 0n,
|
|
278
|
+
guid,
|
|
279
|
+
message,
|
|
280
|
+
origin,
|
|
281
|
+
receiver: counterAddress,
|
|
282
|
+
value: 0n, // No value for lz_receive, value is for lz_compose
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
simulate: false,
|
|
287
|
+
},
|
|
288
|
+
);
|
|
289
|
+
|
|
290
|
+
const txResult = await signAndSendWithExecutorAuth(
|
|
291
|
+
protocolAddresses.executor,
|
|
292
|
+
EXECUTOR_ADMIN,
|
|
293
|
+
assembledTx,
|
|
294
|
+
NETWORK_PASSPHRASE,
|
|
295
|
+
);
|
|
296
|
+
|
|
297
|
+
assertTransactionSucceeded(txResult, 'native_drop_and_execute (Composed ABA)');
|
|
298
|
+
|
|
299
|
+
// Verify native drop was received
|
|
300
|
+
const balanceAfter = await getNativeBalance(DEFAULT_DEPLOYER.publicKey());
|
|
301
|
+
console.log('💰 Balance after native drop:', balanceAfter);
|
|
302
|
+
const balanceIncrease = balanceAfter - balanceBefore;
|
|
303
|
+
expect(balanceIncrease).toBe(NATIVE_DROP_AMOUNT);
|
|
304
|
+
console.log('✅ Native drop received:', NATIVE_DROP_AMOUNT, 'stroops');
|
|
305
|
+
|
|
306
|
+
// Verify the counter state
|
|
307
|
+
const { result: inboundCount } = await counterClient.inbound_count({
|
|
308
|
+
eid: EID,
|
|
309
|
+
});
|
|
310
|
+
expect(inboundCount).toBe(1n);
|
|
311
|
+
console.log('✅ Inbound count from EID', EID, ':', inboundCount);
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
// Variables for tracking the return message
|
|
315
|
+
let composeLedger = 0;
|
|
316
|
+
let returnPacketSentEvent: PacketSentEvent;
|
|
317
|
+
let returnGuid: Buffer;
|
|
318
|
+
let returnMessage: Buffer;
|
|
319
|
+
let returnPacketHeader: Buffer;
|
|
320
|
+
let returnPayloadHash: Buffer;
|
|
321
|
+
|
|
322
|
+
it('Execute lz_compose (Composed ABA)', async () => {
|
|
323
|
+
// Now execute the compose message that was queued by lz_receive
|
|
324
|
+
// For ComposedABA, this will send a return message back to source
|
|
325
|
+
const assembledTx = await executorHelperClient.compose(
|
|
326
|
+
{
|
|
327
|
+
executor: protocolAddresses.executor,
|
|
328
|
+
params: {
|
|
329
|
+
from: counterAddress, // Compose message is from the counter
|
|
330
|
+
to: counterAddress, // And to the counter (self-compose)
|
|
331
|
+
guid,
|
|
332
|
+
index: 0,
|
|
333
|
+
message,
|
|
334
|
+
extra_data: Buffer.from([]),
|
|
335
|
+
value: composeValue,
|
|
336
|
+
gas_limit: 0n,
|
|
337
|
+
},
|
|
338
|
+
value_payer: EXECUTOR_ADMIN.publicKey(),
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
simulate: false,
|
|
342
|
+
},
|
|
343
|
+
);
|
|
344
|
+
|
|
345
|
+
const txResult = await signAndSendWithExecutorAuth(
|
|
346
|
+
protocolAddresses.executor,
|
|
347
|
+
EXECUTOR_ADMIN,
|
|
348
|
+
assembledTx,
|
|
349
|
+
NETWORK_PASSPHRASE,
|
|
350
|
+
);
|
|
351
|
+
|
|
352
|
+
assertTransactionSucceeded(txResult, 'lz_compose (Composed ABA)');
|
|
353
|
+
|
|
354
|
+
// Extract ledger number for scanning return packet
|
|
355
|
+
if ('ledger' in txResult) {
|
|
356
|
+
composeLedger = txResult.ledger;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// Verify composed count increased
|
|
360
|
+
const { result: composedCount } = await counterClient.composed_count();
|
|
361
|
+
expect(composedCount).toBe(1n);
|
|
362
|
+
console.log('✅ Composed count:', composedCount);
|
|
363
|
+
|
|
364
|
+
// Verify outbound count increased (return message was sent)
|
|
365
|
+
const { result: outboundCount } = await counterClient.outbound_count({
|
|
366
|
+
eid: EID,
|
|
367
|
+
});
|
|
368
|
+
expect(outboundCount).toBe(2n); // 1 original + 1 return message
|
|
369
|
+
console.log('✅ Outbound count (including return message):', outboundCount);
|
|
370
|
+
});
|
|
371
|
+
|
|
372
|
+
it('Scan Return PacketSent Events', async () => {
|
|
373
|
+
// Scan for the return packet sent by lz_compose
|
|
374
|
+
const packetSentEvents = await scanPacketSentEvents(
|
|
375
|
+
protocolAddresses.endpointV2,
|
|
376
|
+
composeLedger,
|
|
377
|
+
);
|
|
378
|
+
expect(packetSentEvents.length).toBeGreaterThan(0);
|
|
379
|
+
returnPacketSentEvent = packetSentEvents[0];
|
|
380
|
+
console.log(
|
|
381
|
+
`✅ Return PacketSent events scanned. Found ${packetSentEvents.length} events`,
|
|
382
|
+
);
|
|
383
|
+
});
|
|
384
|
+
|
|
385
|
+
it('Extract Return Packet Header and Payload Hash', async () => {
|
|
386
|
+
const packet = PacketSerializer.deserialize(returnPacketSentEvent.encoded_packet);
|
|
387
|
+
returnGuid = Buffer.from(packet.guid.replace('0x', ''), 'hex');
|
|
388
|
+
returnMessage = Buffer.from(packet.message.replace('0x', ''), 'hex');
|
|
389
|
+
|
|
390
|
+
const codec = PacketV1Codec.from(packet);
|
|
391
|
+
returnPacketHeader = Buffer.from(codec.header().replace('0x', ''), 'hex');
|
|
392
|
+
returnPayloadHash = Buffer.from(codec.payloadHash().replace('0x', ''), 'hex');
|
|
393
|
+
|
|
394
|
+
console.log('✅ Return packet header extracted, length:', returnPacketHeader.length);
|
|
395
|
+
console.log(
|
|
396
|
+
'✅ Return payload hash extracted:',
|
|
397
|
+
returnPayloadHash.toString('hex').slice(0, 16) + '...',
|
|
398
|
+
);
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
it('DVN Verifies Return Message', async () => {
|
|
402
|
+
const verifyTx = await uln302Client.verify({
|
|
403
|
+
dvn: protocolAddresses.dvn,
|
|
404
|
+
packet_header: returnPacketHeader,
|
|
405
|
+
payload_hash: returnPayloadHash,
|
|
406
|
+
confirmations: 1n,
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
await signDvnAuthEntries(
|
|
410
|
+
protocolAddresses.dvn,
|
|
411
|
+
DVN_VID,
|
|
412
|
+
DEFAULT_DEPLOYER,
|
|
413
|
+
[DVN_SIGNER],
|
|
414
|
+
verifyTx,
|
|
415
|
+
NETWORK_PASSPHRASE,
|
|
416
|
+
);
|
|
417
|
+
|
|
418
|
+
await verifyTx.signAndSend();
|
|
419
|
+
console.log('✅ DVN verified return message');
|
|
420
|
+
|
|
421
|
+
const { result: isVerifiable } = await uln302Client.verifiable({
|
|
422
|
+
packet_header: returnPacketHeader,
|
|
423
|
+
payload_hash: returnPayloadHash,
|
|
424
|
+
});
|
|
425
|
+
expect(isVerifiable).toBe(true);
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
it('Commit Verification (Return Message)', async () => {
|
|
429
|
+
const commitTx = await uln302Client.commit_verification({
|
|
430
|
+
packet_header: returnPacketHeader,
|
|
431
|
+
payload_hash: returnPayloadHash,
|
|
432
|
+
});
|
|
433
|
+
await commitTx.signAndSend();
|
|
434
|
+
console.log('✅ Verification committed for return message');
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
it('Receive Return Message (lz_receive)', async () => {
|
|
438
|
+
// Execute lz_receive for the return message (Vanilla type)
|
|
439
|
+
const origin = {
|
|
440
|
+
nonce: 2n, // Second message (return from ComposedABA)
|
|
441
|
+
sender: Buffer.from(StrKey.decodeContract(counterAddress)),
|
|
442
|
+
src_eid: EID,
|
|
443
|
+
};
|
|
444
|
+
|
|
445
|
+
const assembledTx = await executorHelperClient.execute(
|
|
446
|
+
{
|
|
447
|
+
executor: protocolAddresses.executor,
|
|
448
|
+
params: {
|
|
449
|
+
extra_data: Buffer.from([]),
|
|
450
|
+
gas_limit: 0n,
|
|
451
|
+
guid: returnGuid,
|
|
452
|
+
message: returnMessage,
|
|
453
|
+
origin,
|
|
454
|
+
receiver: counterAddress,
|
|
455
|
+
value: 0n,
|
|
456
|
+
},
|
|
457
|
+
value_payer: EXECUTOR_ADMIN.publicKey(),
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
simulate: false,
|
|
461
|
+
},
|
|
462
|
+
);
|
|
463
|
+
|
|
464
|
+
const txResult = await signAndSendWithExecutorAuth(
|
|
465
|
+
protocolAddresses.executor,
|
|
466
|
+
EXECUTOR_ADMIN,
|
|
467
|
+
assembledTx,
|
|
468
|
+
NETWORK_PASSPHRASE,
|
|
469
|
+
);
|
|
470
|
+
|
|
471
|
+
assertTransactionSucceeded(txResult, 'lz_receive (Return Message)');
|
|
472
|
+
|
|
473
|
+
// Verify final counter state
|
|
474
|
+
const { result: count } = await counterClient.count();
|
|
475
|
+
expect(count).toBe(2n);
|
|
476
|
+
console.log('✅ Final counter count:', count);
|
|
477
|
+
|
|
478
|
+
const { result: inboundCount } = await counterClient.inbound_count({
|
|
479
|
+
eid: EID,
|
|
480
|
+
});
|
|
481
|
+
expect(inboundCount).toBe(2n); // 1 composed ABA + 1 return
|
|
482
|
+
console.log('✅ Final inbound count from EID', EID, ':', inboundCount);
|
|
483
|
+
|
|
484
|
+
console.log('\n🎉 Counter Composed ABA with Native Drop - Full Round Trip completed!');
|
|
485
|
+
console.log(
|
|
486
|
+
' Workflow: Send ComposedABA → DVN Verify → Commit → native_drop_and_execute',
|
|
487
|
+
);
|
|
488
|
+
console.log(
|
|
489
|
+
' → lz_compose (sends return) → DVN Verify → Commit → lz_receive',
|
|
490
|
+
);
|
|
491
|
+
});
|
|
492
|
+
});
|
|
493
|
+
});
|