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
USDG0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
Owner and treasury0x3F745575b764288403b2A079A9e79FaC525F08Cb

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.