@layerzerolabs/common-utils-macros-stellar-contracts 0.2.122 → 0.2.124
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/package.json +5 -3
- package/rustfmt.toml +8 -11
- package/src/tests/contract_ttl.rs +2 -0
- package/src/tests/rbac.rs +42 -21
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@layerzerolabs/common-utils-macros-stellar-contracts",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.124",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Stellar common-utils procedural macros",
|
|
6
6
|
"license": "MIT",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"clippy.toml"
|
|
14
14
|
],
|
|
15
15
|
"devDependencies": {
|
|
16
|
-
"@layerzerolabs/vm-tooling-stellar": "0.2.
|
|
16
|
+
"@layerzerolabs/vm-tooling-stellar": "0.2.124"
|
|
17
17
|
},
|
|
18
18
|
"publishConfig": {
|
|
19
19
|
"access": "public",
|
|
@@ -31,7 +31,9 @@
|
|
|
31
31
|
"build": "pnpm exec lz-tool --script \"cargo build\" stellar",
|
|
32
32
|
"clean": "rm -rf ./target ./node_modules",
|
|
33
33
|
"format": "pnpm exec lz-tool --script \"cargo fmt\" stellar",
|
|
34
|
-
"
|
|
34
|
+
"format:check": "pnpm exec lz-tool --script \"cargo fmt -- --check\" stellar",
|
|
35
|
+
"lint": "pnpm exec lz-tool --script \"cargo fmt -- --check && cargo clippy --all-targets -- -D warnings\" stellar",
|
|
36
|
+
"lint:fix": "pnpm exec lz-tool --script \"cargo clippy --all-targets --fix --allow-dirty --allow-staged && cargo fmt\" stellar",
|
|
35
37
|
"test": "pnpm exec lz-tool --script \"cargo nextest run\" stellar"
|
|
36
38
|
}
|
|
37
39
|
}
|
package/rustfmt.toml
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
# Only stable rustfmt options are kept here: the Stellar docker toolchain runs
|
|
2
|
+
# rustfmt on the stable channel (rust 1.90.0), which silently drops unstable
|
|
3
|
+
# options (they only apply on nightly). Do not re-add unstable options unless the
|
|
4
|
+
# tooling is switched to a pinned nightly (see the Solana packages for that setup).
|
|
2
5
|
max_width = 120
|
|
3
|
-
format_macro_matchers = true
|
|
4
|
-
format_strings = true
|
|
5
|
-
imports_granularity = "Crate"
|
|
6
|
-
match_arm_blocks = false
|
|
7
|
-
reorder_impl_items = true
|
|
8
|
-
group_imports = "StdExternalCrate"
|
|
9
6
|
use_field_init_shorthand = true
|
|
10
7
|
use_small_heuristics = "Max"
|
|
11
|
-
wrap_comments = true
|
|
12
|
-
format_code_in_doc_comments = true
|
|
13
8
|
|
|
14
|
-
#
|
|
15
|
-
|
|
9
|
+
# style_edition is a stable option honored by the docker toolchain. Pin it to
|
|
10
|
+
# 2021 to match every crate's `edition = "2021"` so formatting stays stable
|
|
11
|
+
# across rustfmt versions (setting it to 2024 would reformat the code).
|
|
12
|
+
style_edition = "2021"
|
|
@@ -213,6 +213,7 @@ fn test_contracttrait_with_ttl_rejects_non_trait_input() {
|
|
|
213
213
|
// ============================================================================
|
|
214
214
|
|
|
215
215
|
#[test]
|
|
216
|
+
#[allow(clippy::type_complexity)]
|
|
216
217
|
fn test_contractimpl_with_ttl_adds_contractimpl_attribute_table_driven() {
|
|
217
218
|
// (name, attr, input, expected_substrings, forbidden_substrings)
|
|
218
219
|
let cases: Vec<(&str, TokenStream, TokenStream, Vec<&str>, Vec<&str>)> = vec![
|
|
@@ -254,6 +255,7 @@ fn test_contractimpl_with_ttl_adds_contractimpl_attribute_table_driven() {
|
|
|
254
255
|
}
|
|
255
256
|
|
|
256
257
|
#[test]
|
|
258
|
+
#[allow(clippy::type_complexity)]
|
|
257
259
|
fn test_contracttrait_with_ttl_adds_contracttrait_attribute_table_driven() {
|
|
258
260
|
// (name, attr, input, expected_substrings, forbidden_substrings)
|
|
259
261
|
let cases: Vec<(&str, TokenStream, TokenStream, Vec<&str>, Vec<&str>)> = vec![
|
package/src/tests/rbac.rs
CHANGED
|
@@ -91,7 +91,8 @@ fn test_role_check_inserts_expected_statements_table_driven() {
|
|
|
91
91
|
args: quote! { caller, "minter" },
|
|
92
92
|
input: quote! { pub fn mint(env: &Env, caller: Address, amount: i128) {} },
|
|
93
93
|
require_auth: false,
|
|
94
|
-
expected_ensure_stmt:
|
|
94
|
+
expected_ensure_stmt:
|
|
95
|
+
"utils::rbac::ensure_role::<Self>(env,&soroban_sdk::Symbol::new(env,\"minter\"),&caller);",
|
|
95
96
|
expected_auth_stmt: None,
|
|
96
97
|
expected_stmt_count: 1,
|
|
97
98
|
},
|
|
@@ -100,7 +101,8 @@ fn test_role_check_inserts_expected_statements_table_driven() {
|
|
|
100
101
|
args: quote! { caller, "minter" },
|
|
101
102
|
input: quote! { pub fn mint(env: Env, caller: Address, amount: i128) {} },
|
|
102
103
|
require_auth: true,
|
|
103
|
-
expected_ensure_stmt:
|
|
104
|
+
expected_ensure_stmt:
|
|
105
|
+
"utils::rbac::ensure_role::<Self>(&env,&soroban_sdk::Symbol::new(&env,\"minter\"),&caller);",
|
|
104
106
|
expected_auth_stmt: Some("caller.require_auth();"),
|
|
105
107
|
expected_stmt_count: 2,
|
|
106
108
|
},
|
|
@@ -109,7 +111,8 @@ fn test_role_check_inserts_expected_statements_table_driven() {
|
|
|
109
111
|
args: quote! { caller, "minter" },
|
|
110
112
|
input: quote! { pub fn mint(env: &Env, caller: Address, amount: i128) {} },
|
|
111
113
|
require_auth: true,
|
|
112
|
-
expected_ensure_stmt:
|
|
114
|
+
expected_ensure_stmt:
|
|
115
|
+
"utils::rbac::ensure_role::<Self>(env,&soroban_sdk::Symbol::new(env,\"minter\"),&caller);",
|
|
113
116
|
expected_auth_stmt: Some("caller.require_auth();"),
|
|
114
117
|
expected_stmt_count: 2,
|
|
115
118
|
},
|
|
@@ -118,7 +121,8 @@ fn test_role_check_inserts_expected_statements_table_driven() {
|
|
|
118
121
|
args: quote! { account, "admin" },
|
|
119
122
|
input: quote! { pub fn admin_action(env: Env, account: &Address) {} },
|
|
120
123
|
require_auth: false,
|
|
121
|
-
expected_ensure_stmt:
|
|
124
|
+
expected_ensure_stmt:
|
|
125
|
+
"utils::rbac::ensure_role::<Self>(&env,&soroban_sdk::Symbol::new(&env,\"admin\"),account);",
|
|
122
126
|
expected_auth_stmt: None,
|
|
123
127
|
expected_stmt_count: 1,
|
|
124
128
|
},
|
|
@@ -151,19 +155,22 @@ fn test_has_role_role_arg_variants_generate_expected_symbol_new_table_driven() {
|
|
|
151
155
|
name: "role string literal passed to Symbol::new (Env ref)",
|
|
152
156
|
args: quote! { caller, "minter" },
|
|
153
157
|
input: quote! { pub fn mint(env: &Env, caller: Address) {} },
|
|
154
|
-
expected_ensure_stmt:
|
|
158
|
+
expected_ensure_stmt:
|
|
159
|
+
"utils::rbac::ensure_role::<Self>(env,&soroban_sdk::Symbol::new(env,\"minter\"),&caller);",
|
|
155
160
|
},
|
|
156
161
|
Case {
|
|
157
162
|
name: "role const expr passed to Symbol::new (Env ref)",
|
|
158
163
|
args: quote! { caller, MINTER_ROLE },
|
|
159
164
|
input: quote! { pub fn mint(env: &Env, caller: Address) {} },
|
|
160
|
-
expected_ensure_stmt:
|
|
165
|
+
expected_ensure_stmt:
|
|
166
|
+
"utils::rbac::ensure_role::<Self>(env,&soroban_sdk::Symbol::new(env,MINTER_ROLE),&caller);",
|
|
161
167
|
},
|
|
162
168
|
Case {
|
|
163
169
|
name: "role const expr passed to Symbol::new (Env owned)",
|
|
164
170
|
args: quote! { caller, MINTER_ROLE },
|
|
165
171
|
input: quote! { pub fn mint(env: Env, caller: Address) {} },
|
|
166
|
-
expected_ensure_stmt:
|
|
172
|
+
expected_ensure_stmt:
|
|
173
|
+
"utils::rbac::ensure_role::<Self>(&env,&soroban_sdk::Symbol::new(&env,MINTER_ROLE),&caller);",
|
|
167
174
|
},
|
|
168
175
|
Case {
|
|
169
176
|
name: "role path expr passed to Symbol::new",
|
|
@@ -316,32 +323,38 @@ fn test_has_role_env_variants_generate_correct_env_ref_in_ensure_role() {
|
|
|
316
323
|
Case {
|
|
317
324
|
name: "owned Env",
|
|
318
325
|
input: quote! { pub fn mint(env: Env, caller: Address) {} },
|
|
319
|
-
expected_ensure_stmt:
|
|
326
|
+
expected_ensure_stmt:
|
|
327
|
+
"utils::rbac::ensure_role::<Self>(&env,&soroban_sdk::Symbol::new(&env,\"minter\"),&caller);",
|
|
320
328
|
},
|
|
321
329
|
Case {
|
|
322
330
|
name: "ref Env",
|
|
323
331
|
input: quote! { pub fn mint(env: &Env, caller: Address) {} },
|
|
324
|
-
expected_ensure_stmt:
|
|
332
|
+
expected_ensure_stmt:
|
|
333
|
+
"utils::rbac::ensure_role::<Self>(env,&soroban_sdk::Symbol::new(env,\"minter\"),&caller);",
|
|
325
334
|
},
|
|
326
335
|
Case {
|
|
327
336
|
name: "mut ref Env",
|
|
328
337
|
input: quote! { pub fn mint(env: &mut Env, caller: Address) {} },
|
|
329
|
-
expected_ensure_stmt:
|
|
338
|
+
expected_ensure_stmt:
|
|
339
|
+
"utils::rbac::ensure_role::<Self>(env,&soroban_sdk::Symbol::new(env,\"minter\"),&caller);",
|
|
330
340
|
},
|
|
331
341
|
Case {
|
|
332
342
|
name: "qualified owned Env",
|
|
333
343
|
input: quote! { pub fn mint(env: soroban_sdk::Env, caller: Address) {} },
|
|
334
|
-
expected_ensure_stmt:
|
|
344
|
+
expected_ensure_stmt:
|
|
345
|
+
"utils::rbac::ensure_role::<Self>(&env,&soroban_sdk::Symbol::new(&env,\"minter\"),&caller);",
|
|
335
346
|
},
|
|
336
347
|
Case {
|
|
337
348
|
name: "qualified ref Env",
|
|
338
349
|
input: quote! { pub fn mint(env: &soroban_sdk::Env, caller: Address) {} },
|
|
339
|
-
expected_ensure_stmt:
|
|
350
|
+
expected_ensure_stmt:
|
|
351
|
+
"utils::rbac::ensure_role::<Self>(env,&soroban_sdk::Symbol::new(env,\"minter\"),&caller);",
|
|
340
352
|
},
|
|
341
353
|
Case {
|
|
342
354
|
name: "leading :: qualified owned Env",
|
|
343
355
|
input: quote! { pub fn mint(env: ::soroban_sdk::Env, caller: Address) {} },
|
|
344
|
-
expected_ensure_stmt:
|
|
356
|
+
expected_ensure_stmt:
|
|
357
|
+
"utils::rbac::ensure_role::<Self>(&env,&soroban_sdk::Symbol::new(&env,\"minter\"),&caller);",
|
|
345
358
|
},
|
|
346
359
|
];
|
|
347
360
|
|
|
@@ -364,27 +377,32 @@ fn test_has_role_address_variants_generate_correct_param_reference() {
|
|
|
364
377
|
Case {
|
|
365
378
|
name: "Address by value -> &caller",
|
|
366
379
|
input: quote! { pub fn mint(env: &Env, caller: Address) {} },
|
|
367
|
-
expected_ensure_stmt:
|
|
380
|
+
expected_ensure_stmt:
|
|
381
|
+
"utils::rbac::ensure_role::<Self>(env,&soroban_sdk::Symbol::new(env,\"minter\"),&caller);",
|
|
368
382
|
},
|
|
369
383
|
Case {
|
|
370
384
|
name: "&Address -> caller",
|
|
371
385
|
input: quote! { pub fn mint(env: &Env, caller: &Address) {} },
|
|
372
|
-
expected_ensure_stmt:
|
|
386
|
+
expected_ensure_stmt:
|
|
387
|
+
"utils::rbac::ensure_role::<Self>(env,&soroban_sdk::Symbol::new(env,\"minter\"),caller);",
|
|
373
388
|
},
|
|
374
389
|
Case {
|
|
375
390
|
name: "&mut Address -> caller",
|
|
376
391
|
input: quote! { pub fn mint(env: &Env, caller: &mut Address) {} },
|
|
377
|
-
expected_ensure_stmt:
|
|
392
|
+
expected_ensure_stmt:
|
|
393
|
+
"utils::rbac::ensure_role::<Self>(env,&soroban_sdk::Symbol::new(env,\"minter\"),caller);",
|
|
378
394
|
},
|
|
379
395
|
Case {
|
|
380
396
|
name: "qualified Address by value",
|
|
381
397
|
input: quote! { pub fn mint(env: &Env, caller: soroban_sdk::Address) {} },
|
|
382
|
-
expected_ensure_stmt:
|
|
398
|
+
expected_ensure_stmt:
|
|
399
|
+
"utils::rbac::ensure_role::<Self>(env,&soroban_sdk::Symbol::new(env,\"minter\"),&caller);",
|
|
383
400
|
},
|
|
384
401
|
Case {
|
|
385
402
|
name: "qualified &Address",
|
|
386
403
|
input: quote! { pub fn mint(env: &Env, caller: &soroban_sdk::Address) {} },
|
|
387
|
-
expected_ensure_stmt:
|
|
404
|
+
expected_ensure_stmt:
|
|
405
|
+
"utils::rbac::ensure_role::<Self>(env,&soroban_sdk::Symbol::new(env,\"minter\"),caller);",
|
|
388
406
|
},
|
|
389
407
|
];
|
|
390
408
|
|
|
@@ -470,7 +488,8 @@ fn test_authorizer_role_generates_auth_check_instead_of_ensure_role() {
|
|
|
470
488
|
args: quote! { operator, AUTHORIZER },
|
|
471
489
|
input: quote! { pub fn admin_action(env: &Env, operator: Address) {} },
|
|
472
490
|
require_auth: false,
|
|
473
|
-
expected_ensure_stmt:
|
|
491
|
+
expected_ensure_stmt:
|
|
492
|
+
"utils::rbac::ensure_role::<Self>(env,&soroban_sdk::Symbol::new(env,AUTHORIZER),&operator);",
|
|
474
493
|
expected_auth_stmt: None,
|
|
475
494
|
expected_stmt_count: 1,
|
|
476
495
|
},
|
|
@@ -479,7 +498,8 @@ fn test_authorizer_role_generates_auth_check_instead_of_ensure_role() {
|
|
|
479
498
|
args: quote! { operator, AUTHORIZER },
|
|
480
499
|
input: quote! { pub fn admin_action(env: Env, operator: Address) {} },
|
|
481
500
|
require_auth: true,
|
|
482
|
-
expected_ensure_stmt:
|
|
501
|
+
expected_ensure_stmt:
|
|
502
|
+
"utils::rbac::ensure_role::<Self>(&env,&soroban_sdk::Symbol::new(&env,AUTHORIZER),&operator);",
|
|
483
503
|
expected_auth_stmt: Some("operator.require_auth();"),
|
|
484
504
|
expected_stmt_count: 2,
|
|
485
505
|
},
|
|
@@ -488,7 +508,8 @@ fn test_authorizer_role_generates_auth_check_instead_of_ensure_role() {
|
|
|
488
508
|
args: quote! { operator, AUTHORIZER },
|
|
489
509
|
input: quote! { pub fn admin_action(env: &Env, operator: &Address) {} },
|
|
490
510
|
require_auth: true,
|
|
491
|
-
expected_ensure_stmt:
|
|
511
|
+
expected_ensure_stmt:
|
|
512
|
+
"utils::rbac::ensure_role::<Self>(env,&soroban_sdk::Symbol::new(env,AUTHORIZER),operator);",
|
|
492
513
|
expected_auth_stmt: Some("operator.require_auth();"),
|
|
493
514
|
expected_stmt_count: 2,
|
|
494
515
|
},
|