Immutable on Ethereum

Trustless Auctions for Tokens & NFTs

Sell ERC-20 tokens or ERC-721 NFTs through permissionless English auctions. Anti-snipe protection. Pull-payment refunds — no griefing possible. 1% fee on winning bid.

Auctions Created
Volume Settled
1%
Protocol Fee
10m
Anti-Snipe
0
Admin Keys
🔒
Zero Owner
🧊
Fully Immutable
💧
Pull-Payment
⛓️
On-Chain Forever
🛡️
No Proxy / No Pause
Auction Deploy pending — update config.js after deployment
No admin keys.· No griefing.· Pull-payment.· No proxy.· No pause.· No upgrade.· No owner.· Anti-snipe.· Reserve price.· ERC-20 + ERC-721.· Immutable auctions on Ethereum, running forever.· No admin keys.· No griefing.· Pull-payment.· No proxy.· No pause.· No upgrade.· No owner.· Anti-snipe.· Reserve price.· ERC-20 + ERC-721.· Immutable auctions on Ethereum, running forever.·

Pull-Payment Refunds

V2 eliminates all griefing vectors. Outbid refunds, seller proceeds, and protocol fees are credited to claimable balances. A non-payable bidder can never block other bids or settlement. Withdraw whenever you want.

Anti-Snipe Protection

If a bid is placed within the last 10 minutes, the auction extends by 10 minutes. Snipers can't steal auctions at the last second. Fair price discovery for sellers.

1% Protocol Fee

Charged only on the winning bid at settlement. No fee on cancelled auctions or reserve-not-met outcomes. Fee recipient is immutable — set once at deployment, never changeable.

How It Works
English auctions for tokens and NFTs. No middleman.

For Sellers

  1. Deposit your ERC-20 tokens or ERC-721 NFT into the auction contract
  2. Set starting price, reserve price (optional), minimum bid increment, and duration
  3. Bidders compete. Anti-snipe prevents last-second sniping.
  4. After auction ends, anyone settles. You withdraw your proceeds. 1% fee.

For Bidders

  1. Browse active auctions. See asset, current bid, time remaining.
  2. Place a bid in ETH. Must beat current highest by minimum increment.
  3. If outbid, your ETH is credited to your withdraw balance instantly. No stuck funds.
  4. Win the auction? Asset is transferred to you at settlement. Lost? Withdraw your refund anytime.
Frequently Asked Questions
In V1, outbid refunds were sent directly to the previous bidder. If that bidder was a contract that rejects ETH, all future bids would fail — a griefing attack. V2 uses pull-payment: outbid ETH is credited to a claimable balance. You withdraw it yourself. No one can block your bids or settlement.
If a bid is placed within the last 10 minutes of an auction, the end time extends by 10 minutes. This prevents last-second sniping and ensures fair price discovery.
Any ERC-20 token (including fee-on-transfer tokens) and any ERC-721 NFT. Bidding is always in ETH.
The minimum acceptable final bid. If the highest bid is below the reserve, the asset returns to the seller and the bidder gets a refund (via pull-payment). Set to 0 for no reserve.
1% of the winning bid at settlement. No fee on cancelled auctions or reserve-not-met outcomes.
Nobody. No owner, no admin keys, no pause, no upgrade proxy. Deployed ownerless by design. Runs autonomously forever.
Auction
Create, browse, and bid on trustless auctions. 1% fee on winning bid. Pull-payment refunds.
Connect wallet to interact
Pending balance: 0.000000 ETH
Auctions
🔨

Click "Load Recent" to browse auctions.

Whitepaper
Technical specification of the Onchain Auction protocol.

1. Overview

Onchain Auction is a fully immutable, decentralized smart contract protocol for trustless English auctions of ERC-20 tokens and ERC-721 NFTs on Ethereum. V2 uses pull-payment for all ETH disbursements — refunds, seller proceeds, and protocol fees are credited to claimable balances. A non-payable bidder or seller can never grief other participants or block settlement.

2. Pull-Payment Architecture

Every ETH disbursement (outbid refunds, seller proceeds, protocol fees) is credited to a pendingWithdrawals mapping. Recipients call withdraw() to claim their balance. This eliminates all push-payment griefing vectors identified in the V1 audit.

3. Auction Flow

Creating

Seller deposits ERC-20 tokens or ERC-721 NFT, sets starting price, reserve price (optional), minimum bid increment, and duration. Auction goes live immediately.

Bidding

Bidders send ETH. Must beat current highest by at least the minimum increment. Previous bidder's ETH credited to their pull-payment balance. Anti-snipe: bids in the last 10 minutes extend the auction by 10 minutes.

Settlement

Anyone can call settle() after end time. If reserve met: asset goes to winner, seller proceeds + fee credited via pull-payment. If reserve not met: asset returns to seller, bidder credited. If no bids: asset returns to seller.

4. Fee Structure

Settlement (reserve met): 1% of winning bid Reserve not met: No fee No bids: No fee Cancelled: No fee Fee Recipient: Immutable, set at deployment

5. Immutability Guarantees

Owner: None Admin functions: None Proxy/Upgrade: None Pause mechanism: None Fee rate: 1%, hardcoded constant Fee recipient: Set at deployment, immutable Anti-snipe: 10 minutes, hardcoded constant

6. Contract Address

Onchain Auction: Deploy pending Chain: Ethereum Mainnet (Chain ID: 1)

— Otoshi

Deployed on Ethereum. Immutable forever. Pull-payment. No griefing. No keys to lose.