Security
Escrow contract (production)
| Address | 0x4c0c041d624237cc84a391CB2F62B9688Cd27537 |
| Network | Base Mainnet |
| Verified source | Basescan — Contract tab |
The deployed bytecode matches the Solidity in contracts/contracts/OtcEscrow.sol (also verifiable via Sourcify on Basescan).
Design guarantees
What the contract can do
- Hold seller tokens in escrow
- Transfer tokens and ETH on purchase (
buyListing,buyPartial) - Return unsold tokens on
cancelListing - Send 1% fees to the immutable
feeRecipient
What it cannot do
- No
owner,onlyOwner, or proxy upgrade - No changing fee rate or fee wallet after deployment
- No withdrawing tokens from someone else’s active listing
- No pausing or freezing the contract
Listing type enforcement
- Standard (
listingType = 0):buyPartialonly acceptstokenAmount == amountRemaining(full buy). - Crowdfunding (
listingType = 1): Any positive amount up toamountRemaining.
Fee recipient
Set in the constructor at deploy time. It cannot be updated. Current recipient is visible on Basescan as feeRecipient.
Paragon’s role
Paragon is a frontend and indexer only:
- It does not custody keys or funds.
- It cannot modify on-chain listings.
- Approved-token rules and price data are off-chain conveniences; settlement is always via your wallet → escrow.
Verify yourself
- Open the verified contract on Basescan.
- Read
createListing,_buyPartial, andcancelListing. - Compare with
contracts/contracts/OtcEscrow.solin this repo. - Run tests:
cd contracts && npm test
Tests
Hardhat tests cover:
- Creating listings (standard and crowdfunding)
- Full and partial purchases
- Fee distribution
- Cancel with remaining tokens
- Rejecting over-buy and wrong listing-type behavior
- Immutable fee recipient
Disclaimer
This documentation and the Paragon UI are not a formal security audit. For large trades, do your own due diligence or engage a professional auditor. Never share your private key or seed phrase.
