← back to the pits

terms & conditions

last updated: 2026-05-20 · version 2

The short, sarcastic version is on the about page. Below is the boring-but-actually-load-bearing version. Read it before you click anything that costs ADA.

use at your own risk

Shithole is experimental open-source software running on the Cardano mainnet. Interacting with it means signing transactions that move real assets — NFTs and ADA — out of your wallet under rules enforced by Plutus scripts. You alone are responsible for what you sign, and for the consequences.

funds can be lost or permanently locked

Smart-contract bugs, malicious metadata, indexer failure, wallet misbehaviour, or simple user error can all result in losses you cannot recover.

Cardano UTxOs governed by validator scripts can become permanently locked if the validator's spending conditions stop being satisfiable. There is no admin override, no customer support, and no chargeback. If a bug locks your assets, they are gone.

The contracts have been reviewed and tested, but no review eliminates risk. Do not interact with funds you cannot afford to lose.

listing = authorising a swap

When you list an NFT in a pit, you authorise any other user to swap that NFT out for a different NFT from the same collection.

You will not get your original NFT back unless somebody else later swaps it back into the same pit. This may never happen.

Do not list any NFT you are unwilling to part with permanently.

The lister fee that accrues on your listing is your compensation for that authorisation. The protocol does not, and cannot, return a specific NFT to its original lister.

peer-to-peer offers (the "p2p" pages)

Alongside the random-swap pits, Shithole exposes a peer-to-peer flow at /p2p where a buyer locks one of their NFTs together with an ADA deposit at a Plutus script, declaring that they will accept any NFT whose asset name is in a curated merkle tree (a list of NFTs delegating to a specific Cardano stake pool). A separate party — a seller— can then provide a matching NFT plus a merkle proof; the contract atomically delivers the buyer's NFT to the seller and the seller's NFT to the buyer, and routes the ADA according to its rules.

When you create a p2p listing you are signing a transaction that locks both an NFT andADA at a script address. Anyone in the world holding a qualifying NFT can spend that UTxO at any time without further consent from you. Do not lock NFTs or ADA you are not prepared to part with on a stranger's schedule.

You can reclaim an unfilled listing — getting your NFT and the full locked ADA back — at any time, by signing a reclaim transaction. Reclaim is your responsibility: nothing happens automatically and there is no expiry timer. If you abandon a listing it stays locked at the script address indefinitely.

your counterparty could be anyone — human or automated

The contract is permissionless: anyone in the world holding a qualifying NFT can fill your listing at any time. That includes humans, scripts, market-making bots, automated arbitrage processes — anything able to sign a Cardano transaction. The on-chain validator does not distinguish between them; you cannot tell up front who will take your offer, and the same rules apply to all of them.

Automated counterparties of any kind may come and go without notice. Do not assume that, because a similar listing was recently filled, yours will be too. Liquidity on a permissionless contract is not a service we provide.

the deposit isn't what you spend

The "deposit" on a p2p listing is the total ADA you lock — not the amount it costs you.

When the listing is filled, only part of that ADA flows to third parties. A non-trivial slice (around 1.4 ADA at current protocol parameters) is the minimum-UTxO that returns to your walletattached to the NFT being delivered to you; another slice pays the network transaction fee; the remainder (minus the protocol fee) is the seller's incentive for taking the offer.

The create-listing flow shows you the live breakdown — read the "estimated swap cost to you" line before confirming. The contract enforces a minimum deposit; below that floor the listing cannot be filled by anyone, and you would need to reclaim and re-list.

not a marketplace · no price discovery

Shithole does not match orders by price, run an order book, set a floor, or hold custody of any assets. The deposit amount on a p2p listing is set by the buyer alone; whether anyone takes it is up to other users (and the bot). We do not provide escrow, dispute resolution, or buyer/seller protection of any kind. The smart contract is the only intermediary, and it does exactly what its code says — no more.

curated pool list · merkle roots

p2p listings reference Cardano stake pools by way of a merkle root committing to the set of NFTs whose stake addresses delegate to that pool. The set of pools shown in the UI, and the contents of their trees, are curated and computed server-side by the project. The admin can add, remove, or re-snapshot pools at any time; the on-chain validator does not police the pool list.

Once a listing is created against a given merkle root, that root is baked into the listing's datum and remains redeemable forever against any NFT whose membership proof still validates — even if we later snapshot the pool or drop it from the catalog. Stale proofs against a stale root are still proofs.

Listing a pool in the UI is not an endorsement of its operator, its delegators, or its on-chain behaviour. We don't vet stake pools beyond mechanical inclusion in the catalog.

fees are non-refundable

Once a swap (pit) or a fulfill (p2p) lands on chain, the protocol fee paid to the treasury is final. The Cardano network fee paid to whoever produces the block is final. There is no refund flow on either path, even if you regret the swap ten seconds later. Reclaim is only available on a p2p listing that has not yet been filled.

uptime is best-effort

The website and the indexer that renders the pits and the open p2p listings are run on best-effort by a small team. They may be unavailable, lag, or stop entirely. The contracts on chain do not depend on us: even if every part of our infrastructure disappears, you can still reclaim, swap, or cancel by interacting directly with the validators (the script hashes are in the site footer and on GitHub).

Events beyond our reasonable control — Cardano network forks or outages, mempool stalls, third-party provider failures (Blockfrost, Ogmios, Vercel, our cluster host, etc.), regulatory action, force majeure — may impair or prevent any of these services from operating. We disclaim liability for any loss arising from such events. Your on-chain remedies remain available through the validators regardless.

no tracking

We do not run analytics, set tracking cookies, or store IP addresses or wallet addresses on our servers beyond what is strictly necessary to serve the page. The only durable record of your swap is the swap transaction itself, which is recorded on the Cardano blockchain — public by design, with or without us.

Our backend indexer reads on-chain data to render pit state and history. That data is the same data anyone can query from a Cardano node. We don't correlate it with off-chain identity, because we don't collect any.

What we dostore server-side: the indexer's decoded view of public on-chain events (listings, swaps, spends, treasury outputs) and the operational logs needed to keep the service running. Logs are kept best-effort for short-term debugging and are not exported to third parties. On-chain history is permanent by design and outside our control — you cannot ask us to "delete" a swap that has landed, because we did not write it and we cannot unwrite it. If your jurisdiction grants you a right to deletion of off-chain personal data we hold about you, contact us; the most likely outcome is that we hold none.

fees can change

Each curated collection has its own protocol fee and lister fee, set by the collection's admin in the on-chain config UTxO. The admin can update those values at any time. The fees shown on a pit's swap page are the live values at render time; you should review them before submitting a transaction.

no warranty

Shithole is provided as is, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and non-infringement. In no event shall the authors, contributors, or operators be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the software or the use or other dealings in the software.

not financial advice

Nothing on this site constitutes financial, investment, legal, or tax advice. The NFTs traded here are typically illiquid and statistically worthless. Do not interpret the existence of a marketplace as an endorsement of value.

your responsibility

  • You confirm you have authority to transact with the NFTs and ADA you list, swap, or deposit.
  • You are responsible for compliance with the laws of your jurisdiction, including tax reporting on any gains or losses, and including any applicable sanctions, securities, or anti-money-laundering rules. We do not perform KYC, we do not screen counterparties, and we do not record off-chain identity. If your jurisdiction requires those things of you, using Shithole does not relieve you of them.
  • You are responsible for the contents of NFTs you list. Do not list anything that infringes a third party's rights, is illegal in your jurisdiction, or that you do not lawfully own.
  • You are responsible for reclaiming any open p2p listing you no longer want filled. There is no automatic expiry.
  • You are responsible for protecting the seed phrase and keys that control your wallet. We never see them, and we cannot help you recover them.

changes

These terms may be updated as the protocol evolves. The authoritative version is whichever is currently published at shithole.app/terms. Continued use after an update means you accept the updated terms.

contact

For bug reports, curation requests, or anything else, find us on X (@Shithole_App) or open an issue on GitHub.