TapeFoundry Docs
Docs menu

Markets and wrapping

A raw circuit and a wrapped card are the same asset with different metadata. Two doors, both permissionless.

Raw vs wrapped

Raw circuitWrapped (TFD)
ContractProcessor, ERC-721Wrapper, ERC-721
Token idCircuit idWrapper's global counter
MetadataNone — external marketplaces show a blank cardDrawing, gates, edition, series, processor — all on chain
Sells onTapeOut's marketElement and other ERC-721 marketplaces
Original held byYouThe wrapper contract

TapeOut's market

The protocol runs its own circuit market. Selling there takes two transactions: approve the market, then list. The protocol takes 1% of the sale. Buyers there are already inside TapeOut, which makes it the natural first stop for a raw circuit.

approve(address market, uint256 circuitId)
list(address cpu, uint256 circuitId, uint96 price)
delist(uint256 listingId)

You can change the price or delist at any time. The card stays in your wallet while listed — the market takes approval, not custody.

Wrapping

Wrapping locks the original in the wrapper contract and mints a TFD carrying the card's metadata. It costs gas only.

approve(address wrapper, uint256 circuitId)   // on the processor
wrap(uint16 epoch, uint8 drawingId, address cpu, uint256 circuitId)

The wrapper reads editionOf from the registry, so the wrapped token carries the same number as the raw circuit. The mapping is public in both directions: wrapperOf(cpu, circuitId) and original(tfdId).

Unwrapping

unwrap(uint256 tfdId)

Burning the TFD returns the original circuit to the holder. Token ids are never reused, so the wrapper's numbering develops gaps. A burned TFD can still appear in a marketplace index for a while; settlement reverts because the token no longer exists.

Royalties

Secondary sales of a TFD pay a 5% royalty to the receiver configured on the wrapper. The rate and the receiver are owner settings, recorded on chain.

Which should you use

If you wantUse
The TapeOut-native audienceProtocol market, raw circuit
A card that displays properly on ElementWrap, then list the TFD
To keep the original on chain untouchedLeave it raw