Contracts
Both contracts are verified on Sourcify. No proxy: the code at these addresses is the code that runs.
They were deployed before the venue took the name Backroom and keep their on-chain names, DarkOTC and DealEscrow.
| DarkOTC (block auctions) | 0x8a33Ab1Ea5B3f4376227ae10F68c728a9822b2E8 |
| DealEscrow (private deals) | 0xd067280F087cf0473a611709170DC7B67fCb6Ee3 |
| Uniswap v4 PoolManager (price source) | 0x8366a39CC670B4001A1121B8F6A443A643e40951 |
| Pons V2 hook (graduated pools) | 0xE5e702641Ea86F4ae6cC3cDaeD2B886f976Be044 |
| USDG | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 |
| Owner and treasury | 0x3F745575b764288403b2A079A9e79FaC525F08Cb |
What the owner can do
- add markets, enable or disable them, change a market's guard (at most 10%);
- pause new commits (DarkOTC) or new deals (DealEscrow); reveals, settlements, fills, cancels and withdrawals keep working;
- queue a block fee change, applied after 48 hours, capped at 0.5% per side;
- set the staker distributor once.
The owner has no function that moves a trader's vault balance or an escrowed deal.
DarkOTC, main calls
commit(bytes32 commitment, address bondAsset) payable
commitWithDeposits(bytes32 commitment, address bondAsset, address[] tokens, uint256[] amounts) payable
reveal(uint256 index, uint256 market, uint8 side, uint256 amount, uint256 limitPx, bytes32 salt)
revealFor(address trader, uint256 index, uint256 market, uint8 side, uint256 amount, uint256 limitPx, bytes32 salt)
settle(uint256 batch, uint256 market)
poke(uint256 market)
collectForfeits(uint256 batch)
deposit(address token, uint256 amount) payable // ETH = address(0)
withdraw(address token, uint256 amount)
forwardStakers()DealEscrow, main calls
create(address token, uint256 amount, address quote, uint256 price, address taker, uint64 expiry, bytes32 keyHash)
fill(bytes32 key) payable
cancel(bytes32 keyHash)
deals(bytes32 keyHash) view
forwardStakers()
forwardTreasury()Tests
The test suite covers crossing, pro rata, limits, voids, forfeits, the reveal-for-me path, a fuzz test of solvency across both quote assets, fill and cancel races on deals, and a fork test that crosses a block and fills a deal against the real NVDA pool and tokens. Not audited.