Security review · 2 October 2026
Every live contract behind these four projects was read line by line, run through automated analysis, tested with attacks, and matched against its published source on chain. No critical or high-severity issues were found.
"Matched on chain" means the code at the address is exactly what the published source compiles to, ignoring only the compiler's metadata stamp and values fixed at deployment.
| Project | Contract | Address | On chain |
|---|---|---|---|
| Reef | Factory | 0x9603042044b6B1A1637c508F731ba01219142239 | Matched |
| Reef | Router | 0xbd6fbA41Ab84292163A599510a12d6Bf8B7CCc76 | Matched |
| Reef | WBDAG | 0x62ba5c4F067989a7f6644488C875bEa69Bfa1FBA | Matched |
| Reef | TWAP price oracle | 0xa461aAe6Ba4bDb68192D2a53e60640053a35FF7b | Matched |
| All | Admin multisig (2-of-2) | 0x4E2401bFD24c66166fABF9Cc5cD5B6B2c5c860fc | Matched |
| Nodal | NodalRouter | 0xA06f8a856896aA1836f04F758C1E5Ac5dbe24672 | Matched |
| Nodal | Reef adapter | 0x4b60D344eDA7E3D859739B5AbC1176d756E22d56 | Matched |
| Handshake | OTC escrow | 0xD907701A2D96f7D0E7596b02737C9F36446cf5CA | Matched |
| $COOKED | Bonding curve | 0xD8a25883dd2576cB7eE7803e23f0309F56bAbA2B | Matched |
| $COOKED | Token | 0xd95C548B144682f4EF49728944505D8506861B1B | Matched |
| NOCAP | LP lock | 0x5520cC4E80E86E99c5A6A748C506d80f0d274bB1 | Settings match |
The LP lock's functions and settings match its source, but its bytecode didn't rebuild exactly from the file. On 2 October it held 99.99% of the NOCAP/BDAG pool's LP tokens, locked until 25 March 2027.
Medium: a real risk under specific conditions. Low: no way to steal funds, but value can be lost or stuck in an edge case. Note: worth knowing.
| ID | Contract | Severity | Finding | Status |
|---|---|---|---|---|
| M-1 | Admin multisig | Medium | A removed owner's earlier approvals still count, so a pending transaction could pass with fewer current owners than required. | No exposure today: a 2-of-2 can't remove an owner and nothing is pending. Fixed version ready for the move to 2-of-3. |
| L-1 | Handshake | Low | If the fee wallet couldn't receive BDAG, fills would fail. Cancels still work. | The fee wallet is a plain wallet. |
| L-2 | Handshake | Low | Asking for a token with a transfer tax pays the maker less than asked. | Warning in the Handshake FAQ. |
| L-3 | Handshake | Low | A token that blocks or pauses the escrow freezes its offers until it unblocks. | Warning in the Handshake FAQ. |
| L-4 | Reef router | Low | Tokens with a transfer tax can be bought but not sold through Reef. | Explained in the Reef docs. |
| L-5 | NodalRouter | Low | The owner can point a liquidity source at any contract; users are protected by their minimum-output check. | Accepted. The app always sets a minimum, and the owner is the multisig. |
| L-6 | Admin multisig | Low | A transaction whose inner call failed stays executable by anyone until revoked. | Policy: revoke any failed transaction straight away. |
| O-1 | TWAP oracle | Note | Returns 0 before its first update and doesn't report how old its average is. | Nothing relies on it on chain. |
| N-1 | Handshake | Note | Offers never expire, so a forgotten offer can fill at an old price. | Cancel offers you no longer want. |
Reef's contracts are Uniswap V2 ported to Solidity 0.8 with the names changed; the logic was compared line by line with the original. Nobody, including the developer, can pause Reef, freeze a pool or move funds out of one. On Handshake, the owner has no function that touches a live offer's funds.
Not covered: the $REEF token and presale contracts, the NOCAP token, the websites (except where they set a swap's minimum output), the BlockDAG chain itself, and anything deployed after 2 October 2026.