Skip to content

fix: accept scalar values in v2 visibility rules#290

Closed
Maroutis wants to merge 5 commits intoLedgerHQ:mainfrom
Maroutis:fix/v2-visibility-scalar-rules
Closed

fix: accept scalar values in v2 visibility rules#290
Maroutis wants to merge 5 commits intoLedgerHQ:mainfrom
Maroutis:fix/v2-visibility-scalar-rules

Conversation

@Maroutis
Copy link
Copy Markdown
Collaborator

Summary

  • align the v2 visibility condition models with the published schema so mustBe and ifNotIn accept scalar values, not just strings
  • add regression coverage for numeric and boolean mustBe rules in the existing v2 resolved-conversion fixture
  • unblock valid v2 descriptors that currently fail lint resolution when they use values like 100, true, or false

Test plan

  • uv run --with prettydiff pytest -o addopts='' tests/v2/convert/resolved/test_convert_input_to_resolved.py -k visibility_conditions -q
  • uv run --with prettydiff pytest -o addopts='' tests/model/paths/test_path_schemas.py -q
  • uv run erc7730 lint /tmp/calldata-visibility-scalar.json on a temp v2 descriptor using mustBe: [100] and mustBe: [true] (only ABI-key warning remained)

Made with Cursor

Maroutis and others added 5 commits March 17, 2026 10:27
## Summary

- The Lark grammar for ABI signature parsing only handled dynamic arrays (`[]`) but rejected fixed-size arrays (`[N]`), causing lint failures on valid Solidity types like `address[11]`, `uint256[5][5]`, and `address[5]`.
- Extended the `array` grammar rule to accept both `[]` and `[N]`, updated the `array` transformer to preserve the size, and fixed the `named_tuple` filter to correctly identify fixed-size array suffixes.
- Added 5 test cases covering single-dimension, multi-dimension, mixed fixed/dynamic, tuple, and 3D fixed-size arrays.

## Test plan

- [x] Existing `test_reduce_signature` parametrized tests still pass (no regressions)
- [x] New test cases pass: `address[11]`, `uint256[5][5]`, `uint256[3]`, `bytes32[2][]`, `(uint256,address)[3]`, `uint256[2][3][4]`
- [x] `erc7730 lint calldata-curve.json` no longer errors on the Curve router signature


Made with [Cursor](https://cursor.com)
Align the v2 visibility models with the schema so mustBe/ifNotIn accept numbers and booleans instead of rejecting valid descriptors during lint resolution.

Made-with: Cursor
@Maroutis Maroutis requested a review from a team as a code owner March 26, 2026 15:02
@Maroutis Maroutis closed this Mar 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants