Skip to content
Lattice

MarketplaceZone

Git Source

Inherits: ZoneInterface, IMarketplaceZone

Title: MarketplaceZone

Authors: David Dada <daveproxy80@gmail.com> (https://github.com/dadadave80), Modified from Seaport (https://github.com/ProjectOpenSea/seaport)

Seaport 1.6 zone facet. The Diamond acts as the zone for RESTRICTED orders trading its tokens, authorizing them only when policy holds: not paused, offerer/fulfiller not blocked, and the ERC-2981 royalty present for opt-in collections.

Stateless delegator — logic/storage live in MarketplaceZoneLib. authorizeOrder enforces pause + blocklist (pre-fulfillment, skippable); validateOrder enforces royalties (post-fulfillment, final amounts). Each returns its own selector as Seaport's magic value, else reverts. v1 of #25 — the ContractOffererInterface (AMM-priced orders) facet is a separate v2 deliverable.

Notes:

  • lattice-version: 0.1.0
  • lattice-source: Seaport

Functions

authorizeOrder

Called before any transfers. Return authorizeOrder.selector (0x01e4d72a) to authorize.

function authorizeOrder(ZoneParameters calldata zoneParameters) external virtual returns (bytes4);

Parameters

NameTypeDescription
zoneParametersZoneParameters

Returns

NameTypeDescription
<none>bytes4

validateOrder

Called after all transfers. Return validateOrder.selector (0x17b1f942) to validate.

function validateOrder(ZoneParameters calldata zoneParameters) external virtual returns (bytes4);

Parameters

NameTypeDescription
zoneParametersZoneParameters

Returns

NameTypeDescription
<none>bytes4

getSeaportMetadata

SIP introspection: the zone's name + supported schemas.

function getSeaportMetadata() external view virtual returns (string memory name, Schema[] memory schemas);

Returns

NameTypeDescription
namestring
schemasSchema[]

zonePaused

Whether the zone is paused. (Named zonePaused to avoid the Pausable facet's paused() selector.)

function zonePaused() external view virtual returns (bool);

Returns

NameTypeDescription
<none>bool

isRoyaltyRequired

Whether collection requires its ERC-2981 royalty to be present in the order's consideration.

function isRoyaltyRequired(address collection) external view virtual returns (bool);

Parameters

NameTypeDescription
collectionaddress

Returns

NameTypeDescription
<none>bool

blockedRole

The role that blocks an address from being an order's offerer or fulfiller.

function blockedRole() external pure virtual returns (bytes32);

Returns

NameTypeDescription
<none>bytes32

setPaused

Sets the global pause flag. Admin only.

function setPaused(bool paused_) external virtual;

Parameters

NameTypeDescription
paused_bool

setRoyaltyRequired

Toggles ERC-2981 royalty enforcement for collection. Admin only.

function setRoyaltyRequired(address collection, bool required) external virtual;

Parameters

NameTypeDescription
collectionaddress
requiredbool

exportSelectors

ERC-8153 selector export: this facet's cuttable selectors, tightly packed (4 bytes each).

Excludes exportSelectors() itself (0x0ef22643) - it is never cut into a diamond. Order matches forge inspect MarketplaceZone methodIdentifiers (alphabetical by signature); kept in exact parity by ExportSelectorsParityTest. Chunks: authorizeOrder((bytes32,address,address,(uint8,address,uint256,uint256)[],(uint8,address,uint256,uint256,address)[],bytes,bytes32[],uint256,uint256,bytes32)) 0x01e4d72a blockedRole() 0x1a5194be getSeaportMetadata() 0x2e778efc isRoyaltyRequired(address) 0x50dacc83 setPaused(bool) 0x16c38b3c setRoyaltyRequired(address,bool) 0xd98a7d79 validateOrder((bytes32,address,address,(uint8,address,uint256,uint256)[],(uint8,address,uint256,uint256,address)[],bytes,bytes32[],uint256,uint256,bytes32)) 0x17b1f942 zonePaused() 0x1a405ea4

function exportSelectors() external pure virtual returns (bytes memory selectors);

Returns

NameTypeDescription
selectorsbytes