Quantstamp reviewed Hinkal (Hinkal Protocol - 2) on 28 Aug 2026: 14 findings, 0 critical; 9 marked fixed, 3 acknowledged, 2 open.
Report hosted on certificate.quantstamp.com.
Trustblock does not review code.
Statuses are the security firm’s own, from its report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 0 |
| High | 0 | 0 | 0 |
| Medium | 0 | 0 | 1 |
| Low | 2 | 3 | 8 |
`EmporiumUpgradeable.runAction()` executes the caller-supplied `stack.ops` as arbitrary calls from the Emporium contract. However, its balance checks only protect the caller-supplied `circomData.erc20TokenAddresses`. An attacker can submit a Min0 proof with no token rows and set `signerAddress` to `address(0)`, which requires no signature in `verifyWallet()`. The attacker can then use `stack.ops` to transfer residual ERC20 tokens or native ETH from Emporium. An empty token array prevents the resulting balance decrease from being checked. This allows anyone to steal assets accidentally transferred, donated, or stranded in Emporium. The attacker may also spend third-party assets through allowances previously granted by Emporium.
The accounting in `transact()` only properly includes `msg.value` into `balanceDif` upon encountering the `erc20TokenAddresses` set to `address(0)`. The circuit's pairwise uniqueness constraint ensures at most one `address(0)` slot. However, there is no checks for the case where the token set contains no native-ETH slot, but there are native tokens send along with the transaction. These would then be lost in the contract.
`0` as a hash could be problematic and short-cut Merkle tree paths.
The report names a repository or files. Open the report to see its scope.
236 projects reviewed · 332 reports · latest Oct 2026
See Quantstamp’s auditsSomething wrong on this page? A missing report, a wrong date, a finding that was fixed since. Tell us and we check it against its source.
Tell us