PERMANENT COLLECTIONProtocol Reference

Errors index

Every custom error the protocol can revert with, its contract, and the condition that raises it.

AlreadyFinalized · BuybackBurner
setup was called after the one-shot gate closed.

AlreadyFinalized · Patron
setWiring was called after the one-shot setup gate already closed.

AlreadyFinalized · PermanentCollection
An onlySetup-gated call (i.e. setWiring) landed after the setup gate was already closed.

AlreadyFinalized · VaultBurnPool
setup was called after it already ran once.

AlreadyFrozen · RendererRegistry
setImplementation or freeze was called after freeze().

AlreadyInitialized · Patron
setWiring found permanentCollection already set.

AlreadyInitialized · PermanentCollection
setWiring found patron already set.

AlreadyKickedOff · PunkVaultTitleAuction
kickoff() was called after the auction clock already started.

AlreadyLocked · PunkVault
receivePunk was called for a Punk already registered as vaulted.

AlreadyRecorded · PermanentCollection
recordAcquisition was called for a Punk whose custody is InReturnAuction or Vaulted.

AlreadySettled · PunkVaultTitleAuction
settle() was called after a winning settle.

AlreadySettled · ReturnAuctionModule
The sale for this punkId has already been settled.

AlreadySetup · TokenAdminPoker
setup was called a second time.

AlreadyWired · ReturnAuctionModule
The one-shot wiring setter (setLiveBidAdapter or setVaultBurnPool) was already called.

AuctionEnded · PunkVaultTitleAuction
bid() was called at or after endsAt.

AuctionLive · PunkVaultTitleAuction
settle() was called before endsAt.

AuctionNotLive · PunkVaultTitleAuction
bid() or settle() was called before kickoff(), or bid() after a winning settle.

AuthorizedExtensionAlreadyLocked · PCSwapContext
setAuthorizedExtension or lockAuthorizedExtension was called after the binding was already locked.

BadCategoryId · PermanentCollection
A trait id argument was 111 or higher.

BidBelowMinimum · Patron
acceptListing was called while the accounted live bid is below MIN_BID_FOR_LISTING (0.5 ETH).

BidBelowMinimumIncrease · PunkVaultTitleAuction
The bid beat the current high but by less than 5%.

BidBelowMinIncrement · ReturnAuctionModule
The bid doesn't exceed the current high bid by the required 1% increment.

BidBelowReserve · ReturnAuctionModule
The bid is below the snapshotted reserve.

BidNotHigherThanCurrent · PunkVaultTitleAuction
The bid was less than or equal to the current high.

BidNotHigherThanCurrent · ReturnAuctionModule
The first bid on a sale was zero.

CustodyAlreadySet · PermanentCollection
markCustody was called for a Punk that is not currently InReturnAuction.

DatasetHashMismatch · PermanentCollection
Constructor-only: the supplied PunksData contract's datasetHash did not equal EXPECTED_DATASET_HASH.

EmptyFragment · TraitIconCache
cacheTrait derived an empty fragment for the trait.

EmptySvg · PunkSvgFragmentCache
cachePunk derived an empty fragment, meaning PunksData returned an all-transparent 24x24 tile for the id.

ExcessInputSpent · BuybackBurner
The V4 swap reported more ETH consumed than the exact-input amount requested.

FinderPaymentFailed · Patron
The finder-fee send to the acceptListing caller failed, reverting the whole call.

ForwardFailed · LiveBidAdapter
The ETH forward to Patron failed.

ForwardFailed · ProtocolFeePhaseAdapter
The controller rejected the ETH transfer at the end of sweep.

InsufficientOutput · BuybackBurner
The swap returned fewer tokens than the caller's minOut.

InSwap · BuybackBurner
A decorated function was entered during an authorized extension's swap window (PCSwapContext.inSwap).

InSwap · LiveBidAdapter
The call arrived during an authorized extension's swap window (PCSwapContext.inSwap is set).

InSwap · Patron
A guarded entry point was called during a swap while a bound extension has the PCSwapContext.inSwap flag raised.

InSwap · ProtocolFeePhaseAdapter
A notInSwap-decorated function was entered while PCSwapContext reports a swap in progress.

InSwap · PunkVaultTitleAuction
A decorated entry point was called during an official-pool swap while a swap-context extension is bound.

InSwap · ReturnAuctionModule
A decorated entry point was called during an official-pool swap while a bound extension had the swap-context flag raised.

InSwap · VaultBurnPool
A notInSwap-decorated function was entered while PCSwapContext reports a swap in progress.

InvalidCustodyTransition · PermanentCollection
markCustody received an outcome other than ReturnedToMarket or Vaulted.

InvalidPunkId · Patron
punkId is 10000 or higher.

InvalidPunkId · PunkSvgFragmentCache
cachePunk or buildFragment was called with punkId >= 10000.

InvalidRecipient · PunkVault
mintProofs was called with recipient == address(0).

InvalidTargetTrait · Patron
targetTraitId is out of range (>= 111) or the Punk doesn't carry that trait.

InvalidTraitId · PunkVault
mintProofs was called with traitId >= 111.

InvalidTraitId · TraitIconCache
A function was called with traitId >= 111.

ListingAboveExpected · Patron
The acceptBid listed price exceeds the caller's expectedListingWei cap: the seller raised the price after the caller's read.

ListingExceedsBid · Patron
The required outflow exceeds the accounted live bid.

Locked · ProtocolAdmin
A renewal or rotation (newAdmin != address(0)) was attempted after the timer expired or after a burn.

MaskMismatch · PermanentCollection
The mask supplied to recordAcquisition did not match punksData.traitMaskOf(punkId).

NoEligibleTarget · PermanentCollection
The Punk carries no trait that is both uncollected and not already pending in another return auction, so there is nothing an acquisition could target.

NoSurplus · Patron
skimSurplus found no unaccounted ETH: the raw balance doesn't exceed accountedLiveBidWei.

NotAContract · RendererRegistry
The setImplementation candidate has no contract code (an EOA, a typo, or a destroyed contract).

NotAdapter · Patron
receive() was called by an address other than liveBidAdapter.

NotAdmin · BuybackBurner
A parameter setter was called by an address that fails ProtocolAdmin.checkAdmin, or after the 1-year admin lock.

NotAdmin · LiveBidAdapter
The caller failed the setter's admin gate: checkAdmin for the two throttle setters (admin plus unexpired timer), or the raw admin() for setActivationThreshold.

NotAdmin · Patron
An allowlist setter was called by an address other than the current ProtocolAdmin.admin().

NotAdmin · ProtocolAdmin
transferAdmin was called by an address other than the current admin.

NotAdmin · RendererRegistry
The caller of setImplementation or freeze isn't the active protocol admin, either because it's the wrong address or because the admin timer has expired.

NotAuthorized · TokenAdminPoker
A rate setter (setHookMaxReferralBps / setTokenTaxBps) was called by an address that is neither owner nor the current ProtocolAdmin.admin().

NotAuthorizedExtension · PCSwapContext
enterSwap / exitSwap was called by anything other than the currently authorized extension, or while no extension is authorized (the launch state).

NotCached · PunkSvgFragmentCache
pointerOf, fragmentOf, or svgOf was called for a Punk that has never been baked.

NotCached · TraitIconCache
pointerOf, fragmentOf, or svgOf was called for a trait that has never been baked.

NotCanonicalTarget · Patron
The supplied targetTraitId is not the protocol-derived canonical target (the rarest uncollected, non-pending trait the Punk carries).

NotDeployer · BuybackBurner
setup was called by an address other than the deployer captured at construction.

NotDeployer · Patron
setWiring was called by an address other than the deployer recorded at construction.

NotDeployer · PermanentCollection
An onlySetup-gated call came from an address other than the constructor-time deployer.

NotDeployer · PunkVault
setTitleAuction or setRendererRegistry was called by an address other than the deployer EOA.

NotDeployer · ReturnAuctionModule
A wiring setter was called by an address other than the deploying address.

NotDeployer · VaultBurnPool
setup was called by an address other than the deployer captured at construction.

NothingToBurn · BuybackBurner
executeStep was called with remainingEth == 0.

NothingToClaim · ReferralPayout
claim/claimFor was called for a referrer with a zero balance.

NothingToWithdraw · PunkVaultTitleAuction
withdrawRefund() or withdrawProceeds found a zero balance for the target address.

NothingToWithdraw · ReturnAuctionModule
withdrawRefund was called with a zero pendingRefund balance.

NotModule · ReturnAuctionEscrow
listForSettlement or sweepProceeds was called by an address other than MODULE.

NotOwnedByVault · PunkVault
receivePunk ran before the Punk was actually transferred to the vault on the CryptoPunks market.

NotOwner · PCSwapContext
An owner-only function was called by an address other than owner.

NotOwner · PunkVault
renounceOwnership was called by an address other than the current owner().

NotOwner · TokenAdminPoker
An owner-only function (setup, bindExtension, lockExtension, transferOwnership) was called by an address other than owner.

NotPatron · PermanentCollection
recordAcquisition was called by an address other than the wired patron.

NotPatron · ReturnAuctionModule
startSale was called by an address other than Patron.

NotPoolManager · BuybackBurner
unlockCallback was called by any address other than the V4 PoolManager.

NotRecorded · PermanentCollection
The Punk has never been acquired.

NotReturnAuction · LiveBidAdapter
poolReplenish was called by an address other than the bound returnAuctionModule.

NotReturnAuction · PermanentCollection
markCustody was called by an address other than the wired returnAuctionModule.

NotReturnAuction · PunkVault
receivePunk or mintProofs was called by an address other than the immutable returnAuctionModule.

NotReturnAuctionModule · VaultBurnPool
sweep was called by an address other than the immutable returnAuctionModule.

NotSetup · TokenAdminPoker
A forward was attempted before setup pinned its target: the extension and referral-cap setters check setupDone, the tax setter checks the pinned token.

NotTitleAuction · PunkVault
mintToAuction was called by an address other than the wired titleAuction contract.

OutOfBounds · BuybackBurner
A setter received a value outside its hard bounds.

OutOfBounds · LiveBidAdapter
A setter value fell outside its hard bounds.

ProceedsForwardFailed · ReturnAuctionEscrow
The ETH forward to the module at the end of sweepProceeds failed.

ProofAlreadyMinted · PunkVault
mintProofs was called for a trait whose Proof already exists.

ProofNotMinted · PermanentCollectionProofRenderer
tokenURI was called for an in-range Proof id (0..110) that hasn't been minted.

PunkAlreadyAcquired · Patron
The Punk's custody is InReturnAuction (a return auction is live) or Vaulted (terminal).

PunkNotInCustody · ReturnAuctionModule
startSale was called before the Punk was transferred to this module; the canonical market doesn't show this module as the owner of punkId.

PunkNotListedToHub · Patron
acceptBid found no active listing for the Punk that is exclusive to Patron (onlySellTo == patron).

PunkNotPubliclyListed · Patron
acceptListing found no active PUBLIC listing for the Punk (onlySellTo must be the zero address).

PunkOutOfRange · PermanentCollection
punkId was 10,000 or higher.

PunkTransferFailed · Patron
Post-buyPunk ownership check failed: the 2017 market did not record Patron as the Punk's owner.

Reentrant · LiveBidAdapter
A nonReentrant function was re-entered within the same transaction (for example, by the keeper-reward recipient or a contribution referrer calling back in).

Reentrant · Patron
A nonReentrant entry point was re-entered within the same transaction, for example from a seller's receive() during a payout.

Reentrant · PunkVaultTitleAuction
A nonReentrant entry point was re-entered within the same transaction, typically from a refund or payout call.

Reentrant · ReturnAuctionModule
A nonReentrant entry point was re-entered within the same call.

RendererRegistryAlreadySet · PunkVault
Second call to the one-shot setRendererRegistry.

RendererRegistryNotSet · PunkVault
tokenURI or contractURI was called before the registry was wired.

ReserveOverflow · ReturnAuctionModule
The computed reserve exceeds uint128.

RotationTraitNotCacheable · TraitIconCache
cacheTrait was called for one of the six per-block-rotating trait ids ({0, 1, 4, 5, 6, 15}).

SaleEnded · ReturnAuctionModule
A bid arrived at or after endsAt.

SaleExists · ReturnAuctionModule
startSale was called while a live, unsettled sale is already open for this punkId.

SaleLive · ReturnAuctionModule
settle was called before endsAt.

SaleMissing · ReturnAuctionModule
The punkId has no sale slot at all (never started).

SellerNotAllowed · Patron
The public listing's seller is not on the allowed-sellers allowlist.

SellerNotYetActive · Patron
The seller is allowlisted but still inside the 24-hour activation delay.

SoleCarrierMustTargetTrait · Patron
The acquisition targets Punk #8348 (the unique carrier of trait bit 23, "7 Attributes") with a target other than bit 23 while that trait is uncollected.

SoleCarrierMustTargetTrait · PermanentCollection
An acquisition of Punk #8348 targeted a trait other than bit 23 while bit 23 is uncollected.

StepTooEarly · BuybackBurner
executeStep was called before lastStepBlock + minBlocksBetweenSteps.

SurplusForwardFailed · Patron
The skimSurplus forward to LiveBidAdapter failed.

SweepTooEarly · LiveBidAdapter
A throttled sweep() was called before the cooldown elapsed.

TargetNotCanonical · PermanentCollection
The supplied targetTraitId did not equal canonicalTargetOf(punkId).

TargetTraitAlreadyCollected · Patron
The target trait's bit is already set in collectedMask.

TargetTraitAlreadyCollected · PermanentCollection
The target trait's bit is already set on collectedMask.

TargetTraitAlreadyPending · PermanentCollection
Another in-flight return auction already targets this trait.

TargetTraitNotInMask · PermanentCollection
The target trait bit is not set on the Punk's verified trait mask.

TargetTraitPending · Patron
A return auction is already in flight for the target trait.

ThresholdNotReached · PunkVaultTitleAuction
kickoff() was called with fewer than 22 traits collected.

TitleAlreadyMinted · PunkVault
Second call to mintToAuction.

TitleAuctionAlreadySet · PunkVault
Second call to the one-shot setTitleAuction.

TitleNotMinted · PunkVault
tokenURI(111) was queried before the Title exists.

TraitNotCollected · PermanentCollectionMosaicRenderer
cacheTrait was called for a trait with no first-vaulted Punk yet.

TransferFailed · PunkVaultTitleAuction
An outbound ETH send in withdrawRefund() or withdrawProceeds reverted.

TransferFailed · ReferralPayout
The payout send to the referrer reverted or exceeded the 35,000-gas budget.

TransferFailed · ReturnAuctionModule
An ETH send that must succeed failed: a settle-path transfer to a protocol contract, a withdrawRefund send to the caller, or ETH arriving at receive() from any sender other than the escrow.

Unauthorized · ReferralPayout
notify was called by an address other than the bound hook.

UnexpectedDatasetHash · PunkSvgFragmentCache
Constructor-only: the supplied PunksData address reported a datasetHash() other than EXPECTED_DATASET_HASH.

UnexpectedDatasetHash · TraitIconCache
Constructor-only: the supplied PunksData address reported a datasetHash() other than EXPECTED_DATASET_HASH.

UnexpectedEtherSender · ReturnAuctionEscrow
receive() got ETH from an address other than the Punk market.

UnknownTokenId · PermanentCollectionMosaicRenderer
tokenURI(uint256) was called with an id of 112 or higher.

UnknownTokenId · PermanentCollectionProofRenderer
The id is outside the Proof range: tokenURI with id > 110 or svg with traitId >= 111.

UnknownTokenId · PunkVault
tokenURI(id) was queried for an unminted Proof id (0..110 with its proofsMintedMask bit unset) or any id at or above 112.

ZeroAddress · Patron
A zero address was supplied where a real one is required: constructor references, setWiring arguments, addAllowedSeller, or an unwired adapter in skimSurplus.

ZeroAddress · PCSwapContext
Raised by the constructor for a zero initial owner and by transferOwnership for a zero new owner.

ZeroAddress · PermanentCollection
A required address argument was zero: any of the four setWiring addresses, or originalSeller in recordAcquisition.

ZeroAddress · PermanentCollectionProofRenderer
Constructor-only: raised if any of the four immutable references (vault, PunksData, trait-icon cache, Punk SVG cache) is the zero address.

ZeroAddress · ProtocolFeePhaseAdapter
Constructor-only: raised when the adapter is deployed with a zero controller or escrow address.

ZeroAddress · PunkVault
A constructor argument or one-shot wiring target (setTitleAuction, setRendererRegistry) was address(0).

ZeroAddress · PunkVaultTitleAuction
Constructor guard: collection, vault, and payoutRecipient must all be non-zero at deploy time.

ZeroAddress · ReferralPayout
Constructor-only: raised when the contract is deployed with a zero hook address.

ZeroAddress · RendererRegistry
The zero address was passed where a contract is required: either constructor argument, or the newImpl argument of setImplementation.

ZeroAddress · ReturnAuctionModule
A constructor argument or wiring setter argument was address(0).

ZeroAddress · TokenAdminPoker
Raised by the constructor for a zero owner or admin-contract address, by setup for a zero token or hook, and by transferOwnership for a zero new owner.

ZeroAddress · VaultBurnPool
Raised by the constructor for a zero module or burner address, and by setup for a zero token address.

ZeroBid · PunkVaultTitleAuction
bid() was called with zero msg.value.

ZeroListingPrice · Patron
The listing's price is zero.

ZeroValue · LiveBidAdapter
contribute() was called with msg.value == 0.

Errors index · Permanent Collection