Web3 · Smart contract audit · Design mock
Northwind Protocol
softstack audited Northwind Protocol's Ethereum lending core in March 2026, identifying 14 findings (0 critical, 2 high, 5 medium, 6 low, 1 informational), of which 13 were resolved before release.
Key facts
- Client
- Northwind Protocol
- Completed
- Type
- Smart contract audit
- Chains
- Ethereum
- Languages
- Solidity
- Commit
a3f21b9c8d7e- Lines of code
- 4,120
- Market cap
- $420M as of 2026-03-12
About the project
Northwind is a fictional Ethereum money market focused on over-collateralised lending for institutional treasuries.
Scope
Source repositorygithub.com/example/northwindComponents reviewed
4 modules · 11 files- Core lending pool contracts
- Interest rate model
- Oracle adapter
- Liquidation module
Findings
13 of 14 findings resolved before final report.
| ID | Title | Severity | Status |
|---|---|---|---|
NW-01 | Missing zero-address check on collateral token setter setCollateralToken accepted address(0), which could brick deposits. | High | fixed |
NW-02 | Interest accrual can underflow on empty markets Empty markets with stale indexes caused underflow on first deposit. | High | fixed |
NW-03 | Oracle staleness window longer than stated SLA Price feed accepted updates up to 4 hours old versus the documented 1 hour. | Medium | fixed |
NW-04 | Liquidation bonus not capped per market Governance can set an unbounded bonus; a soft upper bound was added. | Medium | mitigated |
NW-05 | Event missing on pause toggle pause() emitted no event, hindering off-chain monitoring. | Low | fixed |
Methodology
Review process
Scoping and threat modelling
The commit hash is frozen and the attack surface is mapped: asset flows, trust assumptions, privileged roles and the external systems the code depends on.
Automated analysis
Static analysers sweep the full codebase to surface known weakness patterns, unreachable states and deviations from established conventions.
Manual code review
Independent engineers read the code line by line, concentrating on business logic, access control, arithmetic and the handling of external calls.
Adversarial testing
Property-based fuzzing and invariant tests attack the assumptions the protocol relies on, targeting states that ordinary unit tests never reach.
Reporting
Every finding is documented with a severity rating, its impact, the steps to reproduce it and a concrete remediation the team can act on.
Remediation verification
Submitted fixes are re-reviewed against the original finding, and the final report records the resolved state of each one.
Tooling
- SlitherStatic analysis across the full Solidity source for known weakness patterns.
- FoundryUnit and invariant suites executed against the frozen commit.
- EchidnaProperty-based fuzzing that attacks stated protocol invariants.
- Manual reviewLine-by-line reading of logic, access control and economic assumptions.
Standards and references
- SWC RegistrySmart Contract Weakness Classification
- SCSVSSmart Contract Security Verification Standard
- CWECommon Weakness Enumeration
FAQ
13 of 14 findings were fixed or mitigated before the final report. One informational finding was acknowledged.
The lending pool, interest rate model, oracle adapter, and liquidation module. That covers 11 Solidity files, 4,120 LOC at commit a3f21b9.
This audit covers commit a3f21b9 as of March 2026. Code changed after that commit is outside the reviewed scope.