@layerzerolabs/protocol-stellar-v2 0.2.53 → 0.2.55
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 +73 -232
- package/.turbo/turbo-lint.log +162 -98
- package/.turbo/turbo-test.log +1874 -2078
- package/contracts/oapps/counter/integration_tests/setup_uln.rs +5 -10
- package/contracts/workers/dvn/src/auth.rs +22 -20
- package/contracts/workers/dvn/src/dvn.rs +5 -5
- package/contracts/workers/dvn/src/errors.rs +1 -1
- package/contracts/workers/dvn/src/interfaces/dvn.rs +8 -19
- package/contracts/workers/dvn/src/tests/auth.rs +85 -72
- package/contracts/workers/executor/src/executor.rs +3 -4
- package/contracts/workers/executor/src/storage.rs +1 -1
- package/contracts/workers/executor/src/tests/setup.rs +2 -6
- package/contracts/workers/executor-helper/src/executor_helper.rs +9 -33
- package/contracts/workers/executor-helper/src/tests/executor_helper.rs +0 -122
- package/docs/oft-guide.md +15 -0
- package/package.json +4 -4
- package/sdk/.turbo/turbo-test.log +333 -283
- package/sdk/dist/generated/dvn.d.ts +11 -25
- package/sdk/dist/generated/dvn.js +8 -9
- package/sdk/dist/generated/executor.d.ts +5 -7
- package/sdk/dist/generated/executor.js +5 -5
- package/sdk/dist/generated/executor_helper.d.ts +3 -17
- package/sdk/dist/generated/executor_helper.js +4 -6
- package/sdk/package.json +1 -1
- package/sdk/test/counter-sml.test.ts +31 -5
- package/sdk/test/counter-uln.test.ts +40 -14
- package/sdk/test/suites/globalSetup.ts +1 -2
- package/sdk/test/utils.ts +14 -81
|
@@ -45,8 +45,16 @@ impl ExecutorHelper {
|
|
|
45
45
|
executor.require_auth();
|
|
46
46
|
if params.value != 0 {
|
|
47
47
|
value_payer.require_auth();
|
|
48
|
+
transfer_value(env, value_payer, executor, params.value);
|
|
48
49
|
}
|
|
49
|
-
|
|
50
|
+
LayerZeroReceiverClient::new(env, ¶ms.receiver).lz_receive(
|
|
51
|
+
executor,
|
|
52
|
+
¶ms.origin,
|
|
53
|
+
¶ms.guid,
|
|
54
|
+
¶ms.message,
|
|
55
|
+
¶ms.extra_data,
|
|
56
|
+
¶ms.value,
|
|
57
|
+
);
|
|
50
58
|
}
|
|
51
59
|
|
|
52
60
|
/// Records a failed `lz_receive` execution for off-chain processing.
|
|
@@ -113,38 +121,6 @@ impl ExecutorHelper {
|
|
|
113
121
|
ExecutorClient::new(env, executor).native_drop(admin, origin, &dst_eid, oapp, params);
|
|
114
122
|
}
|
|
115
123
|
|
|
116
|
-
/// Executes `native_drop` followed by `lz_receive`.
|
|
117
|
-
pub fn native_drop_and_execute(
|
|
118
|
-
env: &Env,
|
|
119
|
-
executor: &Address,
|
|
120
|
-
admin: &Address,
|
|
121
|
-
origin: &Origin,
|
|
122
|
-
dst_eid: u32,
|
|
123
|
-
oapp: &Address,
|
|
124
|
-
native_drop_params: &Vec<NativeDropParams>,
|
|
125
|
-
execute_params: &ExecutionParams,
|
|
126
|
-
) {
|
|
127
|
-
executor.require_auth();
|
|
128
|
-
admin.require_auth();
|
|
129
|
-
Self::native_drop(env, executor, admin, origin, dst_eid, oapp, native_drop_params);
|
|
130
|
-
Self::execute_internal(env, executor, execute_params, admin);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/// Internal execute logic without auth checks.
|
|
134
|
-
/// Callers (`execute` / `native_drop_and_execute`) are responsible for authorization.
|
|
135
|
-
fn execute_internal(env: &Env, executor: &Address, params: &ExecutionParams, value_payer: &Address) {
|
|
136
|
-
if params.value != 0 {
|
|
137
|
-
transfer_value(env, value_payer, executor, params.value);
|
|
138
|
-
}
|
|
139
|
-
LayerZeroReceiverClient::new(env, ¶ms.receiver).lz_receive(
|
|
140
|
-
executor,
|
|
141
|
-
¶ms.origin,
|
|
142
|
-
¶ms.guid,
|
|
143
|
-
¶ms.message,
|
|
144
|
-
¶ms.extra_data,
|
|
145
|
-
¶ms.value,
|
|
146
|
-
);
|
|
147
|
-
}
|
|
148
124
|
}
|
|
149
125
|
|
|
150
126
|
#[inline]
|
|
@@ -339,125 +339,3 @@ fn test_lz_compose_alert_with_empty_reason() {
|
|
|
339
339
|
assert_eq!(record.unwrap().reason.len(), 0);
|
|
340
340
|
}
|
|
341
341
|
|
|
342
|
-
// =============================================================================
|
|
343
|
-
// native_drop_and_execute() tests
|
|
344
|
-
// =============================================================================
|
|
345
|
-
|
|
346
|
-
#[test]
|
|
347
|
-
fn test_native_drop_and_execute_calls_both() {
|
|
348
|
-
let setup = TestSetup::new();
|
|
349
|
-
let origin = setup.default_origin();
|
|
350
|
-
let dst_eid = 2u32;
|
|
351
|
-
let oapp = Address::generate(&setup.env);
|
|
352
|
-
|
|
353
|
-
let receiver1 = Address::generate(&setup.env);
|
|
354
|
-
let native_drop_params: Vec<NativeDropParams> =
|
|
355
|
-
vec![&setup.env, NativeDropParams { receiver: receiver1.clone(), amount: 10 }];
|
|
356
|
-
|
|
357
|
-
let execute_params = setup.default_execution_params();
|
|
358
|
-
|
|
359
|
-
setup.mock_all_auths();
|
|
360
|
-
setup.executor_helper_client.native_drop_and_execute(
|
|
361
|
-
&setup.executor,
|
|
362
|
-
&setup.admin,
|
|
363
|
-
&origin,
|
|
364
|
-
&dst_eid,
|
|
365
|
-
&oapp,
|
|
366
|
-
&native_drop_params,
|
|
367
|
-
&execute_params,
|
|
368
|
-
);
|
|
369
|
-
|
|
370
|
-
// Verify native_drop was called
|
|
371
|
-
let drop_record = setup.executor_client().get_native_drop();
|
|
372
|
-
assert!(drop_record.is_some());
|
|
373
|
-
let drop_record = drop_record.unwrap();
|
|
374
|
-
assert_eq!(drop_record.admin, setup.admin);
|
|
375
|
-
assert_eq!(drop_record.origin, origin);
|
|
376
|
-
assert_eq!(drop_record.dst_eid, dst_eid);
|
|
377
|
-
assert_eq!(drop_record.oapp, oapp);
|
|
378
|
-
assert_eq!(drop_record.params.len(), 1);
|
|
379
|
-
assert_eq!(drop_record.params.get(0).unwrap().receiver, receiver1);
|
|
380
|
-
assert_eq!(drop_record.params.get(0).unwrap().amount, 10);
|
|
381
|
-
|
|
382
|
-
// Verify lz_receive was also called
|
|
383
|
-
let receive_record = setup.receiver_client().get_lz_receive();
|
|
384
|
-
assert!(receive_record.is_some());
|
|
385
|
-
let receive_record = receive_record.unwrap();
|
|
386
|
-
assert_eq!(receive_record.executor, setup.executor);
|
|
387
|
-
assert_eq!(receive_record.origin, execute_params.origin);
|
|
388
|
-
assert_eq!(receive_record.guid, execute_params.guid);
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
#[test]
|
|
392
|
-
fn test_native_drop_and_execute_with_empty_drop_params() {
|
|
393
|
-
let setup = TestSetup::new();
|
|
394
|
-
let origin = setup.default_origin();
|
|
395
|
-
let dst_eid = 1u32;
|
|
396
|
-
let oapp = Address::generate(&setup.env);
|
|
397
|
-
let native_drop_params: Vec<NativeDropParams> = vec![&setup.env];
|
|
398
|
-
let execute_params = setup.default_execution_params();
|
|
399
|
-
|
|
400
|
-
setup.mock_all_auths();
|
|
401
|
-
setup.executor_helper_client.native_drop_and_execute(
|
|
402
|
-
&setup.executor,
|
|
403
|
-
&setup.admin,
|
|
404
|
-
&origin,
|
|
405
|
-
&dst_eid,
|
|
406
|
-
&oapp,
|
|
407
|
-
&native_drop_params,
|
|
408
|
-
&execute_params,
|
|
409
|
-
);
|
|
410
|
-
|
|
411
|
-
// Verify native_drop was called with empty params
|
|
412
|
-
let drop_record = setup.executor_client().get_native_drop();
|
|
413
|
-
assert!(drop_record.is_some());
|
|
414
|
-
assert_eq!(drop_record.unwrap().params.len(), 0);
|
|
415
|
-
|
|
416
|
-
// Verify lz_receive was still called
|
|
417
|
-
let receive_record = setup.receiver_client().get_lz_receive();
|
|
418
|
-
assert!(receive_record.is_some());
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
#[test]
|
|
422
|
-
fn test_native_drop_and_execute_with_value_transfer() {
|
|
423
|
-
let setup = TestSetup::new();
|
|
424
|
-
let origin = setup.default_origin();
|
|
425
|
-
let dst_eid = 2u32;
|
|
426
|
-
let oapp = Address::generate(&setup.env);
|
|
427
|
-
|
|
428
|
-
let receiver1 = Address::generate(&setup.env);
|
|
429
|
-
let native_drop_params: Vec<NativeDropParams> =
|
|
430
|
-
vec![&setup.env, NativeDropParams { receiver: receiver1.clone(), amount: 10 }];
|
|
431
|
-
|
|
432
|
-
let mut execute_params = setup.default_execution_params();
|
|
433
|
-
execute_params.value = 25; // Add value to trigger token transfer
|
|
434
|
-
|
|
435
|
-
// Mint tokens to admin (value payer)
|
|
436
|
-
setup.mint_native(&setup.admin, 100);
|
|
437
|
-
let admin_before = setup.balance_native(&setup.admin);
|
|
438
|
-
let executor_before = setup.balance_native(&setup.executor);
|
|
439
|
-
|
|
440
|
-
setup.mock_all_auths();
|
|
441
|
-
setup.executor_helper_client.native_drop_and_execute(
|
|
442
|
-
&setup.executor,
|
|
443
|
-
&setup.admin,
|
|
444
|
-
&origin,
|
|
445
|
-
&dst_eid,
|
|
446
|
-
&oapp,
|
|
447
|
-
&native_drop_params,
|
|
448
|
-
&execute_params,
|
|
449
|
-
);
|
|
450
|
-
|
|
451
|
-
// Verify token transfer occurred
|
|
452
|
-
assert_eq!(setup.balance_native(&setup.admin), admin_before - 25);
|
|
453
|
-
assert_eq!(setup.balance_native(&setup.executor), executor_before + 25);
|
|
454
|
-
|
|
455
|
-
// Verify both operations occurred
|
|
456
|
-
let drop_record = setup.executor_client().get_native_drop();
|
|
457
|
-
assert!(drop_record.is_some());
|
|
458
|
-
assert_eq!(drop_record.unwrap().params.len(), 1);
|
|
459
|
-
|
|
460
|
-
let receive_record = setup.receiver_client().get_lz_receive();
|
|
461
|
-
assert!(receive_record.is_some());
|
|
462
|
-
assert_eq!(receive_record.unwrap().value, 25);
|
|
463
|
-
}
|
package/docs/oft-guide.md
CHANGED
|
@@ -11,6 +11,21 @@ An OFT enables cross-chain token transfers through LayerZero. The framework prov
|
|
|
11
11
|
- **Token types**: MintBurn and LockUnlock strategies
|
|
12
12
|
- **Extensions**: Pausable, fee collection, rate limiting
|
|
13
13
|
|
|
14
|
+
### Classic Assets Receiving Requirements
|
|
15
|
+
|
|
16
|
+
#### G-Address (EOA)
|
|
17
|
+
|
|
18
|
+
G-address recipients must meet two prerequisites before they can receive classic assets:
|
|
19
|
+
|
|
20
|
+
1. **Account activation**: The account must hold a minimum of 1 XLM to exist on the Stellar network.
|
|
21
|
+
2. **Trustline**: The account must have an explicit trustline for the classic asset being received.
|
|
22
|
+
|
|
23
|
+
If `lz_receive` fails due to unmet prerequisites, delivery can be retried once the recipient account is activated and the trustline is established.
|
|
24
|
+
|
|
25
|
+
#### C-Address (Smart Contract)
|
|
26
|
+
|
|
27
|
+
C-address recipients are not subject to these restrictions. As long as the contract address exists on-chain, it can receive assets directly.
|
|
28
|
+
|
|
14
29
|
## Architecture
|
|
15
30
|
|
|
16
31
|
```
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@layerzerolabs/protocol-stellar-v2",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.55",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "LZBL-1.2",
|
|
6
6
|
"devDependencies": {
|
|
7
7
|
"@types/node": "^22.18.6",
|
|
8
8
|
"tsx": "^4.19.3",
|
|
9
9
|
"typescript": "^5.8.2",
|
|
10
|
-
"@layerzerolabs/common-node-utils": "0.2.
|
|
11
|
-
"@layerzerolabs/
|
|
12
|
-
"@layerzerolabs/
|
|
10
|
+
"@layerzerolabs/common-node-utils": "0.2.55",
|
|
11
|
+
"@layerzerolabs/vm-tooling-stellar": "0.2.55",
|
|
12
|
+
"@layerzerolabs/stellar-ts-bindings-gen": "0.2.55"
|
|
13
13
|
},
|
|
14
14
|
"publishConfig": {
|
|
15
15
|
"access": "restricted",
|