SCALPERS documentation
The liquidity layer for Collector Crypt on Base. This guide covers the custody model, the settlement and capital design, the cross-chain rails, and the contract code that enforces each guarantee.
#Introduction
Collector Crypt (CC) tokenizes professionally-graded trading cards on Solana — each NFT is backed one-to-one by an authentic slab held in an insured vault. SCALPERS is a liquidity aggregator for that inventory on Base: it surfaces the full catalog, routes each trade, and settles in USDC on Base, so a user never bridges assets, manages a Solana wallet, or leaves Base.
The custody guarantee is the invariant the system is built around; the contract code that enforces it follows in Custody in code.
What it provides
- Aggregation — Collector Crypt's 68,000-card marketplace, surfaced in a single Base-native feed.
- Mirror — a purchase or rip returns a one-to-one mirror ERC-721 on Base, backed by the vaulted slab.
- Exit — sell back into the aggregated liquidity for USDC, or redeem the physical card.
SCALPERS applies no hidden markup. A user pays the seller's or CC's price; the service fee is shown as a separate line before confirmation.
#The custody guarantee
No card can be moved, sold, or burned without the owner's signature — including by SCALPERS, and including if SCALPERS' own keys are compromised.
The card a user acquires is never held in a wallet SCALPERS controls. It is held by an on-chain vault program on Solana that acts only on a guardian-verified message proving the owner authorized the action on Base. There is no administrative override and no privileged transfer path.
One trust assumption remains, and it is the same one every graded-card holder already accepts: the grader and custodian (PSA / CGC and CC's vault) physically hold the slab. They can freeze an asset but cannot reassign ownership — and this is disclosed on-chain for every card.
#Card lifecycle
Enter
A user rips or buys on Base. SCALPERS sources the card from Collector Crypt, locks it in the vault, and mints the mirror on Base — the payment, the vaulting, and the mint are part of one flow.
Hold
The mirror is a standard ERC-721 the user owns. It can be held, gifted, or listed. Every card-affecting action produces a guardian-signed message the vault verifies before acting.
Exit
The owner sells back into the aggregated liquidity — an instant buyback within 72 hours of the rip, a marketplace listing, or an accepted offer — and is paid in USDC on Base. Or redeems: the mirror burns and the vault releases the card.
A single-exit lock keeps the two representations in sync: the mirror and the physical card are one asset, so at most one move is ever in flight. An owner can never end up holding both or neither.
#Custody, in code
The enforcement is in the contracts. A mirror can be moved only by its owner — and only while idle — or by the single allowlisted marketplace. No other transfer path exists:
// MirrorCard.sol — a mirror can only be moved by its owner or the marketplace
function _update(address to, uint256 tokenId, address auth) internal override {
if (isMover[auth]) {
// the single allowlisted marketplace (escrow / buy / return) — allowed
} else if (auth == from) {
require(state[tokenId] == State.Free, "card locked"); // owner transfer, only when idle
} else {
revert("external transfers disabled"); // no other path exists
}
}The physical card moves only on a Wormhole VAA — a message signed by the guardian set — that originates from the owner's action and from the vault's registered emitter. No SCALPERS key satisfies these checks:
// MirrorCard.sol — the only function that burns or unlocks a mirror
function settle(bytes calldata vaa) external {
(VM memory vm, bool valid, string memory reason) = wormhole.parseAndVerifyVM(vaa);
require(valid, reason); // signed by the guardian set
require(vm.emitterChainId == SOLANA_CHAIN_ID, "bad chain");
require(vm.emitterAddress == solanaEmitter, "bad emitter"); // from the vault, only
require(!consumedVAA[vm.hash], "vaa replayed"); // single use
// No operator, owner, or relayer key satisfies these checks. Settlement occurs
// only as a consequence of a verified action on the Solana vault.
}#Settlement & capital
SCALPERS routes funds; it does not hold deposits or extend credit. No payout is funded from SCALPERS' own balance — each is funded by a counterparty and released only once that counterparty's funds have settled on-chain.
Rip / Buy
Funded by the user's payment, which covers the purchase from Collector Crypt.
Instant sell (≤72 h)
Funded by CC's buyback, available for 72 hours after a rip: the card is sold back to CC and the owner is paid from those proceeds. After 72 hours, the exit is a marketplace listing.
Marketplace sale
Funded by the buyer: their USDC reaches the vault and is settled to the seller on Base.
The only capital SCALPERS provisions is transaction gas (SOL and ETH-on-Base) plus a one-time, recoverable deploy deposit. There is no float, no buffer, and no fractional reserve: every purchase and payout is funded by the user or the counterparty and settles directly across the bridge.
#Cross-chain rails
Two established protocols carry messages and value between Base and Solana. SCALPERS adds no additional trust assumption on top of them.
Wormhole — messaging
A 19-member guardian set signs cross-chain messages. Base to Solana carries owner intents (list, redeem, accept); Solana to Base carries settlement acknowledgements (burn, unlock). Both directions are verified on-chain, pinned to the registered emitter, and guarded against replay.
Circle CCTP — settlement
Native USDC moves by burn-and-mint rather than a wrapped representation. On a sale, the vault burns the proceeds to the recipient recorded on-chain, and Circle mints native USDC to exactly that address on Base.
The seller's payout address is committed at list time, so settlement is deterministic — proceeds can only reach the seller's own address:
// scalpers_vault (Solana) — proceeds are routed by the contract, not by an operator
pub fn settle_cc_sale(ctx, proceeds_amount: u64) -> Result<()> {
require!(vault_token.amount == 0, CardStillHeld); // the card has left the vault
// Burn proceeds directly to the Base address the seller committed to at list time.
// The recipient is fixed in the card's on-chain record and cannot be reassigned.
let recipient = cctp::evm_to_recipient(&card.cc_payout);
cctp::deposit_for_burn(&a, proceeds_amount, DOMAIN_BASE, recipient, signer)?;
card.state = CardState::Released;
card.pending_ack = ACK_CC_SOLD; // instructs Base to burn the mirror
}#Liquidity source
Every card SCALPERS aggregates is a Collector Crypt asset — an authentic slab graded by PSA, CGC, or BGS, held in an insured vault and tokenized one-to-one on Solana. CC's catalog is public, so SCALPERS surfaces it directly, with the grade, insured value, and on-chain mint shown on each card.
The displayed data matches what CC exposes: grader, grade and certificate ID, insured value, year, set, and the Solana mint address — each linked to a block explorer.
#Secondary liquidity
When an owner lists a card, it is posted on Collector Crypt's marketplace program (CcmRKTuZ…SQUr) — an on-chain Solana order book, settled in USDC with a flat 2% (200 bps) platform fee. That places the listing directly into Collector Crypt's own buyer liquidity. On a fill, proceeds settle to the owner's Base wallet through CCTP and the mirror is burned.
Collector Crypt's marketplace is escrowless by design — a listed card stays in the holder's wallet via a delegate, and the on-chain escrow holds only USDC, never the card. SCALPERS keeps the card in its vault throughout, so the custody guarantee above always holds. Magic Eden indexes Collector Crypt listings, so a card listed here can also surface to Magic Eden's audience — but every trade settles through Collector Crypt's program, not a third-party auction house.
Offers follow the same path: a buyer bids below the ask, the owner accepts or declines from their inventory, and the vault executes the sale at the committed price.
#On-chain references
SCALPERS is built on public, independent infrastructure that can be inspected directly. SCALPERS' own vault and contract addresses are published here at mainnet launch.
CcmRKTuZCGJBWQwMHvDYApBRvSZNHqGJXkznqpDTSQUrCCSwaptcDXtfjyRMYBqavqBwiW162yXFAJrXN53UuENCworm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTthCCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQeEPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913published at mainnet launchEach guarantee described here is enforced by the contract code above; the snippets are reproduced verbatim from the deployed sources.