Multiple critical mismatches exist between the IStratax interface and the Stratax implementation. These are not minor documentation issues — they result in different function selectors, meaning any contract using IStratax to call Stratax will revert.
Mismatch 1 — unwindPosition: Different parameter count (5 vs 6), different selector:
Mismatch 2 — calculateParams vs calculateOpenParams: Different function names:
Mismatch 3 — TradeDetails struct: Different fields:
Mismatch 4 — UnwindParams struct: Different field count:
Mismatch 5 — BASIS_POINTS(): Does not exist in implementation:
Likelihood:
Any developer or integrator who uses the published IStratax interface will encounter these mismatches immediately
Automated integration tools (e.g., ethers.js with IStratax ABI) will generate incorrect calldata
The mismatches are deterministic — they will always cause failures
Impact:
Complete integration failure: Any smart contract calling IStratax(stratax).unwindPosition(...) will target a non-existent function selector and revert
Broken composability: Multi-sig wallets (e.g., Gnosis Safe), automation bots (e.g., Gelato, Chainlink Keepers), and other protocols cannot use the interface
Frontend breakage: Frontend SDKs generating transactions from the IStratax ABI will produce invalid transactions
Trust erosion: Publishing an incorrect interface signals a lack of testing rigor and may deter integrations
How the issue manifests:
A multi-sig wallet owner wants to unwind a position using IStratax
They encode the call as IStratax(strataxProxy).unwindPosition(collateralToken, debtToken, debtAmount, swapData, minReturn) — 5 parameters as per the interface
The encoded calldata targets the function selector keccak256("unwindPosition(address,address,uint256,bytes,uint256)") — a 5-param signature
The actual Stratax contract only recognizes keccak256("unwindPosition(address,uint256,address,uint256,bytes,uint256)") — a 6-param signature
The selectors are different → the call reverts with no matching function
The multi-sig cannot unwind the position using the published interface
PoC code:
Expected outcome: The function selectors differ, confirming that any call made through the IStratax interface will target a non-existent function on the implementation and revert.
The root cause is that the interface was written independently and never synchronized after the implementation was modified. The fix must align all function signatures, struct definitions, and constant names.
Primary fix — Synchronize the interface with the implementation:
Why this works:
Aligns function selectors between interface and implementation so calls through IStratax target the correct functions
Aligns struct layouts so ABI encoding/decoding produces correct data
Renames mismatched constants to match the implementation
Additional recommendation: Consider auto-generating the interface from the implementation contract to prevent future drift. Tools like forge inspect Stratax abi can produce the canonical ABI.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.