Skip to main content

FAQ

General

What is SealedIP?

A two-sided sealed-bid auction marketplace for licensing IP registered on Story Protocol. Bidders encrypt their bid amounts AND the seller encrypts the reserve price. Neither side sees the other's number until settlement. The highest bid at or above the revealed reserve wins; the license, payment, and refunds settle in one atomic transaction.

See Welcome to SealedIP for the full overview.

Is this mainnet?

No. SealedIP runs on Story Aeneid testnet only (chain id 1315). There is no mainnet deployment, and there won't be until a professional audit is complete.

What does it cost?

For bidders: Gas for three transactions (approve WIP, allocateBidSlot, submitEncryptedBid) plus one wallet signature. Total typically under the equivalent of $0.50 in test IP.

For sellers: Gas for three transactions in the mint-and-list flow, or two transactions to list an existing IP (createAuction + submitEncryptedReserve). Marketplace fee is 0%.

For settlers: Whoever calls settle() pays gas for the close-out. Scales linearly with bidder count.

Who runs it?

The contracts are open-source MIT-licensed code at github.com/sneg55/SealedIP. The hosted marketplace at sealedip.com is operated by the SealedIP hackathon team. The CDR threshold network is operated by piplabs.

For bidders

Can I see the reserve before I bid?

No. The reserve is sealed in its own CDR vault — a separate ciphertext from the bids. It's revealed for the first time inside the settle() transaction, alongside all the bids. This is deliberate: SealedIP uses two-sided sealing so neither bidders nor sellers can anchor on each other's numbers.

What if the seller never seals a reserve?

If the seller calls createAuction but never calls submitEncryptedReserve, the reserveHasCiphertext flag stays false. At settle, the contract treats the floor as 0 WIP. Any non-zero valid bid wins (assuming it's the highest).

Can I see other bids before placing mine?

No. Bids are sealed under threshold cryptography and only revealed at settlement. You can see:

  • That a wallet bid (their address is on BidSlotAllocated)
  • How much they deposited (an upper bound on their bid amount)

You cannot see:

  • The actual bid amount
  • Whether you'd win at any given price

Can I cancel a bid?

No. Once you submit ciphertext, the bid is committed on-chain until settlement. There's no cancel function.

To effectively raise your bid, allocate another slot with a higher deposit. The contract picks the highest valid bid from your wallet at settle. Lower bids from the same wallet are treated as losers and refunded normally.

What if I lose?

Your full deposit is refunded automatically at settle. No claim action required. Check your WIP balance after the auction settles.

What if no bid clears the revealed reserve?

The auction ends in ExpiredNoWinner state. Every deposit is refunded to every bidder. No license is minted. The seller receives nothing.

You won't know in advance whether this will happen — the reserve is sealed until settle.

What if I win?

The PIL license token is minted to your wallet automatically. Your overpayment (deposit - winningAmount) is also refunded automatically. Check your wallet for the license token NFT and the WIP refund.

Can someone steal my license?

No. The license token mints to your wallet (the address that signed the bid). The contract's settle() makes the mint atomic with all other settlement actions. There's no intermediate state where someone else could intercept.

Once the token is in your wallet, its transferability depends on the PIL terms attached.

For sellers

Can I cancel an auction after I list it?

No. Auctions run to their deadline regardless. There's no cancel function.

If you seal a high reserve and no bids clear it, the auction expires with ExpiredNoWinner and you can relist.

Can I change the deadline?

No. The deadline is immutable from createAuction.

Can I change the reserve after sealing it?

No. submitEncryptedReserve is a one-shot write. Once the ciphertext is written, ReserveAlreadyWritten reverts any attempt to overwrite.

Can I list the same IP twice?

Yes. You can run multiple auctions in parallel for the same IP. Each auction is independent; each settlement mints a separate license token (if one wins).

You can also list the same IP under different PIL presets in different auctions.

What's the marketplace fee?

0% during the CDR Hackathon. You keep the full winning bid.

Post-hackathon fees, if introduced, will be announced before they apply.

What if no one bids?

The auction expires in ExpiredEmpty state. Nothing happens — no deposits to refund, no licenses to mint, no payment. You can relist the same IP.

What if no bid clears my reserve?

The auction expires in ExpiredNoWinner state. Every deposit is refunded to bidders. You receive nothing. No license is minted.

You can relist the same IP with a different reserve.

Privacy

Can the SealedIP team peek at bid amounts?

No. We don't hold a decryption key. The CDR threshold network's validator set holds shares of the key, and decryption requires t-of-n of them to collaborate. We can't decrypt your bid alone any more than you can.

Can the SealedIP team peek at the seller's reserve?

No. The reserve ciphertext is created under the same CDR network public key. The same t-of-n threshold applies. We can only read the reserve after validators publish shares at settlement, same as everyone else.

Can validators peek?

Only with collusion at or above the threshold. A single validator (or fewer than t) sees only their own share, which is mathematically insufficient to decrypt. This is the central trust assumption.

See Validators for the current threshold parameters.

Are deposits private?

No. Your deposit amount is public on-chain. The deposit is an upper bound on your bid, so a savvy observer can infer something about your bid range.

To hide the upper bound, over-deposit: escrow more than you intend to bid. The contract refunds the overpayment at settle.

Is my wallet address private?

No. BidSlotAllocated events include your wallet address. Anyone watching the chain can see that you bid. They just can't see how much.

Technical

How does the reveal condition work?

Each bid vault (and the reserve vault) is registered on the AuctionRevealCondition contract at allocation time. CDR validators call checkReadCondition(uuid, ...) before contributing a decryption share. The condition returns true only when BOTH:

  1. block.timestamp >= auction.deadline, AND
  2. SealedAuction.isTriggered(auctionId) == true

So calling trigger() is the intentional "open the envelope" act — time alone is not enough.

Why is settlement gas linear in bidder count?

Because the contract pays out every bidder atomically — one transfer per loser refund, plus the seller payout, winner overpay refund, and the license mint. For typical auctions (under 100 bidders) this fits comfortably in a single block. See Limitations.

What if the orchestrator goes offline?

trigger() is permissionless — anyone can call it after the deadline. settle() is also permissionless but requires producing a valid BidReveal[] array and a ReserveReveal, which requires reading CDR plaintext for every vault.

In practice, only the orchestrator has the infrastructure to construct reveals quickly. If we go offline, auctions sit in Triggered state with deposits escrowed until we (or someone else) settles.

See orchestrator availability.

What chain is this on?

Story Aeneid testnet, chain id 1315, RPC https://aeneid.storyrpc.io. There is no mainnet.

Where are the contracts?

See Deployed addresses.

How do I integrate SealedIP into my app?

See For developers and the SDK documentation.

Reading deeper