TBTL Security
Security through
formal reasoning.
Smart contract and zero-knowledge program audits. Built on formal methods expertise, not pattern libraries.
40+ years formal verification expertise
Visit security.tbtl.com →WHAT WE AUDIT
Two domains, one method
Where conventional audits check code against catalogues of known bugs, we reason from first principles about how a system can fail at all.
Solidity / EVM
Smart contract audit
Comprehensive analysis of Solidity contracts across DeFi protocols, token standards, bridges, and upgradeable systems.
- ·Formalising and analysing requirements
- ·Checking reentrancy, integer overflow, and more
- ·Analysing ERC standard compliance
ZK / Noir
ZK program analysis
In-depth review of Noir programs, built on NAVe, our published open-source formal verifier for Noir programs.
- ·Formalising and analysing requirements
- ·Checking constraint soundness & completeness
- ·Analysing proving system assumptions & setup
THE DIFFERENCE
We ask how systems can fail, not just what has failed before.
HOW MOST FIRMS WORK
- Manual review against known vulnerability patterns
- Pattern-matching against CVE databases
- “Have we seen this bug before?”
HOW WE WORK
- Formal reasoning from first principles
- Systematic analysis of the system's own failure modes
- “How can this system fail?”
Every finding is grounded in practical exploitability. We focus on real-world vulnerabilities, not theoretical ones.
THE METHOD
What formal methods actually do
Testing checks a system against a sample of inputs and hopes the sample is representative. Formal methods build a mathematical model of the system and reason about every state it can reach. That's the difference between recognising a bug that's been seen before and anticipating one that hasn't.
01
Model
Translate the contract or program into a form a solver can reason about, capturing every state it can reach, not a sample of them.
02
Specify
State the properties it must always hold, such as no reentrancy, no double-spend, correct rounding, or sound constraints.
03
Check
Verify the model against the specification, and produce a concrete counterexample when a property doesn't hold.
We've built our own tools for this: Solidifier, a bounded model checker for Solidity, and NAVe, our formal verifier for Noir zero-knowledge programs. Building NAVe led us to find and fix a soundness bug in cvc5, the SMT solver it depends on. It was a defect that could have undermined any ZK program checked against it.
None of this amounts to a proof that a system is correct, and we don't present it as one. A check is only as complete as the properties it's specified against. What it gives you is a systematic account of how a system can fail, in place of a best guess.
TBTL SECURITY
Full engagement scope, methodology, and past reports live on security.tbtl.com.
security.tbtl.com ↗