You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit dea806c
Browse filesBrowse the repository at this point in the historyBrowse files
`schemaAddress` and `schemaHex` accept mixed-case hexadecimal identities, while several genesis validation checks historically compared the textual representation directly. Hexadecimal casing does not change the represented bytes, so two spellings of the same address or fixed-size public key can bypass string-based uniqueness or role-separation checks.
6
+
7
+
## Affected validation paths
8
+
9
+
- Validator public-key uniqueness
10
+
- Validator-registerer uniqueness
11
+
- Controller uniqueness across validators
12
+
- Operator/role versus proxy-admin separation
13
+
- ValidatorRegistry proxy-address comparison
14
+
- NativeFiatToken minter uniqueness
15
+
16
+
## Impact
17
+
18
+
This is a genesis/configuration integrity issue rather than a standalone permissionless runtime exploit. A malformed configuration could represent the same underlying identity more than once where validation intends uniqueness or role separation.
19
+
20
+
For NativeFiatToken minters, address-keyed storage is derived from the decoded address value. Case variants therefore resolve to the same mapping slots; conflicting allowance entries can overwrite one another during genesis allocation construction instead of being rejected as duplicate minters.
21
+
22
+
## Fix
23
+
24
+
Normalize hexadecimal identities only at comparison boundaries with `toLowerCase()`. Keep the original input unchanged for serialization and diagnostics. The shared proxy-admin helper normalizes both operands, and NativeFiatToken minter uniqueness normalizes the address used as the `Set` key.
25
+
26
+
## Regression coverage
27
+
28
+
Regression tests cover mixed-case collisions for:
29
+
30
+
- Validator public keys
31
+
- Validator-registerer addresses
32
+
- Controllers
33
+
- Operator/proxy-admin role separation
34
+
- NativeFiatToken minters
35
+
36
+
The tests also retain positive cases for valid distinct/compatible configurations.
37
+
38
+
## Validation
39
+
40
+
Focused tests:
41
+
42
+
```bash
43
+
npx hardhat test ./tests/unit/validator-manager-genesis-validation.test.ts ./tests/unit/native-fiat-token-genesis-validation.test.ts --no-compile
44
+
```
45
+
46
+
Repository validation:
47
+
48
+
```bash
49
+
make test-unit-hardhat
50
+
make lint
51
+
```
52
+
53
+
The repository workflow does not currently invoke `make test-unit-hardhat`, and its ESLint command excludes `scripts/` and `tests/`, so local execution of the focused suite remains an explicit validation requirement.
54
+
55
+
## Scope
56
+
57
+
EIP-55 checksum enforcement is intentionally not part of this change. It would be a broader input-validation policy change and should be reviewed independently.
0 commit comments