Docs

How Deckbots is built, what it can and cannot do, and the addresses to verify any of it yourself.

Architecture

Deckbots is two pieces. On-chain, a vault contract per user holds funds and cards. Off-chain, a bot decides what to trade and asks the vault to execute it. The vault does not trust the bot; it verifies.

Your vault

Created by the factory, one per wallet, numbered in the order they are created. You are the owner, written into the contract at deployment and immutable afterwards.

// owner — you. always available, cannot be blocked.
withdraw(amount) · withdrawAll()
sweepCards(tokenIds)
setOperator(address) · setPaused(bool)
// operator — the bot. this is the entire surface.
buy(seaportCalldata, maxSpend, tokenId)
list(tokenId, price, expiry, fees)

What the contract enforces

These are properties of the code, not promises. Each has a test written as an attack that must fail:

Operator withdrawing fundsReverts
Operator transferring a card outReverts
Listing a card below its floorReverts
Routing sale proceeds anywhere but the vaultImpossible
Overspending the stated maximumReverts
Paying while giving away a held cardReverts
Owner withdrawing mid-tradeSucceeds

When the bot lists a card it chooses only the price. The vault builds the order itself and writes the proceeds recipient — always the vault. The bot decides how much; it never decides who gets paid.

How pricing works

Fair value for a card comes from completed sales of the same card: same category, set, card number, variant and language, then matched on grader and grade. A CGC 9 and a PSA 10 of one print are different assets and are priced separately.

The model is deliberately hard to convince:

Median is trimmedone grail cannot move it
Comps decay with age30-day half-life
Cross-grade compsborrowed downward only
Thin or scattered datano trade

Cross-grade matters: valuing a PSA 9 from PSA 10 sales would make the bot overpay, while the reverse only makes it miss a deal. It only ever errs in the direction that costs you nothing.

Buying and selling

Trades settle on OpenSea's Seaport contract, the only permissionless venue for these cards. Courtyard's own marketplace matches orders off-chain and relays them, so no bot can reach it.

When the bot relists, it undercuts fair value rather than matching it. Close to half of all priceable cards show every recent sale at one identical price — a seller with inventory at a fixed ask. Matching that price means queueing behind them indefinitely.

Addresses

Polygon mainnet, chain ID 137. Verify any of this yourself:

Vault factory0x12215E1feC3701
Payment token (USDC.e)0x2791Bca1…Aa84174
Courtyard cards0x251BE3A1…D889dcAD
Seaport 1.60x00000000…3eB395

Risk

Cards can lose value. The bot estimates worth from past sales. Past sales are evidence, not a guarantee.

Cards sell slowly. Capital can sit in inventory for a long time. Withdrawing while the bot holds cards returns those cards, not their cash value.

Smart contracts can have bugs. These are tested and the guarantees above are enforced in code, but no contract is beyond error. Deposit only what you can afford to lose.

Nothing here is financial advice.