Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- StandardPolicyERC721
- Optimization enabled
- true
- Compiler version
- v0.8.17+commit.8df45f5f
- Optimization runs
- 800
- EVM Version
- london
- Verified at
- 2026-05-23T00:43:01.102594Z
contracts/matchingPolicies/StandardPolicyERC721.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
import {Order, AssetType} from "../lib/OrderStructs.sol";
import {IMatchingPolicy} from "../interfaces/IMatchingPolicy.sol";
/**
* @title StandardPolicyERC721
* @dev Policy for matching orders at a fixed price for a specific ERC721 tokenId (requires oracle authorization on both orders)
*/
contract StandardPolicyERC721 is IMatchingPolicy {
function canMatchMakerAsk(Order calldata makerAsk, Order calldata takerBid)
external
pure
override
returns (
bool,
uint256,
uint256,
uint256,
AssetType
)
{
return (
(makerAsk.side != takerBid.side) &&
(makerAsk.paymentToken == takerBid.paymentToken) &&
(makerAsk.collection == takerBid.collection) &&
(makerAsk.tokenId == takerBid.tokenId) &&
(makerAsk.extraParams.length > 0 && makerAsk.extraParams[0] == "\x01") &&
(takerBid.extraParams.length > 0 && takerBid.extraParams[0] == "\x01") &&
(makerAsk.amount == 1) &&
(takerBid.amount == 1) &&
(makerAsk.matchingPolicy == takerBid.matchingPolicy) &&
(makerAsk.price == takerBid.price),
makerAsk.price,
makerAsk.tokenId,
1,
AssetType.ERC721
);
}
function canMatchMakerBid(Order calldata makerBid, Order calldata takerAsk)
external
pure
override
returns (
bool,
uint256,
uint256,
uint256,
AssetType
)
{
return (
(makerBid.side != takerAsk.side) &&
(makerBid.paymentToken == takerAsk.paymentToken) &&
(makerBid.collection == takerAsk.collection) &&
(makerBid.tokenId == takerAsk.tokenId) &&
(makerBid.extraParams.length > 0 && makerBid.extraParams[0] == "\x01") &&
(takerAsk.extraParams.length > 0 && takerAsk.extraParams[0] == "\x01") &&
(makerBid.amount == 1) &&
(takerAsk.amount == 1) &&
(makerBid.matchingPolicy == takerAsk.matchingPolicy) &&
(makerBid.price == takerAsk.price),
makerBid.price,
makerBid.tokenId,
1,
AssetType.ERC721
);
}
}
/OrderStructs.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
enum Side { Buy, Sell }
enum SignatureVersion { Single, Bulk }
enum AssetType { ERC721, ERC1155 }
struct Fee {
uint16 rate;
address payable recipient;
}
struct Order {
address trader;
Side side;
address matchingPolicy;
address collection;
uint256 tokenId;
uint256 amount;
address paymentToken;
uint256 price;
uint256 listingTime;
/* Order expiration timestamp - 0 for oracle cancellations. */
uint256 expirationTime;
Fee[] fees;
uint256 salt;
bytes extraParams;
}
struct Input {
Order order;
uint8 v;
bytes32 r;
bytes32 s;
bytes extraSignature;
SignatureVersion signatureVersion;
uint256 blockNumber;
}
struct Execution {
Input sell;
Input buy;
}
/IMatchingPolicy.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
import {Order, AssetType} from "../lib/OrderStructs.sol";
interface IMatchingPolicy {
function canMatchMakerAsk(Order calldata makerAsk, Order calldata takerBid)
external
view
returns (
bool,
uint256,
uint256,
uint256,
AssetType
);
function canMatchMakerBid(Order calldata makerBid, Order calldata takerAsk)
external
view
returns (
bool,
uint256,
uint256,
uint256,
AssetType
);
}
Compiler Settings
{"remappings":[],"optimizer":{"runs":800,"enabled":true},"metadata":{"bytecodeHash":"none"},"libraries":{},"evmVersion":"london","compilationTarget":{"contracts/matchingPolicies/StandardPolicyERC721.sol":"StandardPolicyERC721"}}
Contract ABI
[{"type":"function","stateMutability":"pure","outputs":[{"type":"bool","name":"","internalType":"bool"},{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint8","name":"","internalType":"enum AssetType"}],"name":"canMatchMakerAsk","inputs":[{"type":"tuple","name":"makerAsk","internalType":"struct Order","components":[{"type":"address","name":"trader","internalType":"address"},{"type":"uint8","name":"side","internalType":"enum Side"},{"type":"address","name":"matchingPolicy","internalType":"address"},{"type":"address","name":"collection","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"},{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"address","name":"paymentToken","internalType":"address"},{"type":"uint256","name":"price","internalType":"uint256"},{"type":"uint256","name":"listingTime","internalType":"uint256"},{"type":"uint256","name":"expirationTime","internalType":"uint256"},{"type":"tuple[]","name":"fees","internalType":"struct Fee[]","components":[{"type":"uint16","name":"rate","internalType":"uint16"},{"type":"address","name":"recipient","internalType":"address payable"}]},{"type":"uint256","name":"salt","internalType":"uint256"},{"type":"bytes","name":"extraParams","internalType":"bytes"}]},{"type":"tuple","name":"takerBid","internalType":"struct Order","components":[{"type":"address","name":"trader","internalType":"address"},{"type":"uint8","name":"side","internalType":"enum Side"},{"type":"address","name":"matchingPolicy","internalType":"address"},{"type":"address","name":"collection","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"},{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"address","name":"paymentToken","internalType":"address"},{"type":"uint256","name":"price","internalType":"uint256"},{"type":"uint256","name":"listingTime","internalType":"uint256"},{"type":"uint256","name":"expirationTime","internalType":"uint256"},{"type":"tuple[]","name":"fees","internalType":"struct Fee[]","components":[{"type":"uint16","name":"rate","internalType":"uint16"},{"type":"address","name":"recipient","internalType":"address payable"}]},{"type":"uint256","name":"salt","internalType":"uint256"},{"type":"bytes","name":"extraParams","internalType":"bytes"}]}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"bool","name":"","internalType":"bool"},{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint8","name":"","internalType":"enum AssetType"}],"name":"canMatchMakerBid","inputs":[{"type":"tuple","name":"makerBid","internalType":"struct Order","components":[{"type":"address","name":"trader","internalType":"address"},{"type":"uint8","name":"side","internalType":"enum Side"},{"type":"address","name":"matchingPolicy","internalType":"address"},{"type":"address","name":"collection","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"},{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"address","name":"paymentToken","internalType":"address"},{"type":"uint256","name":"price","internalType":"uint256"},{"type":"uint256","name":"listingTime","internalType":"uint256"},{"type":"uint256","name":"expirationTime","internalType":"uint256"},{"type":"tuple[]","name":"fees","internalType":"struct Fee[]","components":[{"type":"uint16","name":"rate","internalType":"uint16"},{"type":"address","name":"recipient","internalType":"address payable"}]},{"type":"uint256","name":"salt","internalType":"uint256"},{"type":"bytes","name":"extraParams","internalType":"bytes"}]},{"type":"tuple","name":"takerAsk","internalType":"struct Order","components":[{"type":"address","name":"trader","internalType":"address"},{"type":"uint8","name":"side","internalType":"enum Side"},{"type":"address","name":"matchingPolicy","internalType":"address"},{"type":"address","name":"collection","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"},{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"address","name":"paymentToken","internalType":"address"},{"type":"uint256","name":"price","internalType":"uint256"},{"type":"uint256","name":"listingTime","internalType":"uint256"},{"type":"uint256","name":"expirationTime","internalType":"uint256"},{"type":"tuple[]","name":"fees","internalType":"struct Fee[]","components":[{"type":"uint16","name":"rate","internalType":"uint16"},{"type":"address","name":"recipient","internalType":"address payable"}]},{"type":"uint256","name":"salt","internalType":"uint256"},{"type":"bytes","name":"extraParams","internalType":"bytes"}]}]}]
Contract Creation Code
0x608060405234801561001057600080fd5b5061044c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80630813a7661461003b578063d5ec8c771461003b575b600080fd5b61004e6100493660046102c3565b610068565b60405161005f95949392919061033d565b60405180910390f35b60008080808061007e604087016020880161038a565b600181111561008f5761008f610327565b61009f6040890160208a0161038a565b60018111156100b0576100b0610327565b141580156100ed57506100c960e0870160c088016103b2565b6001600160a01b03166100e260e0890160c08a016103b2565b6001600160a01b0316145b8015610128575061010460808701606088016103b2565b6001600160a01b031661011d6080890160608a016103b2565b6001600160a01b0316145b801561013b575085608001358760800135145b80156101ae575060006101526101808901896103db565b90501180156101ae575061016a6101808801886103db565b600081811061017b5761017b610429565b9050013560f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b145b8015610221575060006101c56101808801886103db565b905011801561022157506101dd6101808701876103db565b60008181106101ee576101ee610429565b9050013560f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b145b801561023157508660a001356001145b801561024157508560a001356001145b801561027c575061025860608701604088016103b2565b6001600160a01b03166102716060890160408a016103b2565b6001600160a01b0316145b801561028f57508560e001358760e00135145b9760e088013597608001359650600195506000945092505050565b60006101a082840312156102bd57600080fd5b50919050565b600080604083850312156102d657600080fd5b823567ffffffffffffffff808211156102ee57600080fd5b6102fa868387016102aa565b9350602085013591508082111561031057600080fd5b5061031d858286016102aa565b9150509250929050565b634e487b7160e01b600052602160045260246000fd5b600060a08201905086151582528560208301528460408301528360608301526002831061037a57634e487b7160e01b600052602160045260246000fd5b8260808301529695505050505050565b60006020828403121561039c57600080fd5b8135600281106103ab57600080fd5b9392505050565b6000602082840312156103c457600080fd5b81356001600160a01b03811681146103ab57600080fd5b6000808335601e198436030181126103f257600080fd5b83018035915067ffffffffffffffff82111561040d57600080fd5b60200191503681900382131561042257600080fd5b9250929050565b634e487b7160e01b600052603260045260246000fdfea164736f6c6343000811000a
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106100365760003560e01c80630813a7661461003b578063d5ec8c771461003b575b600080fd5b61004e6100493660046102c3565b610068565b60405161005f95949392919061033d565b60405180910390f35b60008080808061007e604087016020880161038a565b600181111561008f5761008f610327565b61009f6040890160208a0161038a565b60018111156100b0576100b0610327565b141580156100ed57506100c960e0870160c088016103b2565b6001600160a01b03166100e260e0890160c08a016103b2565b6001600160a01b0316145b8015610128575061010460808701606088016103b2565b6001600160a01b031661011d6080890160608a016103b2565b6001600160a01b0316145b801561013b575085608001358760800135145b80156101ae575060006101526101808901896103db565b90501180156101ae575061016a6101808801886103db565b600081811061017b5761017b610429565b9050013560f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b145b8015610221575060006101c56101808801886103db565b905011801561022157506101dd6101808701876103db565b60008181106101ee576101ee610429565b9050013560f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b145b801561023157508660a001356001145b801561024157508560a001356001145b801561027c575061025860608701604088016103b2565b6001600160a01b03166102716060890160408a016103b2565b6001600160a01b0316145b801561028f57508560e001358760e00135145b9760e088013597608001359650600195506000945092505050565b60006101a082840312156102bd57600080fd5b50919050565b600080604083850312156102d657600080fd5b823567ffffffffffffffff808211156102ee57600080fd5b6102fa868387016102aa565b9350602085013591508082111561031057600080fd5b5061031d858286016102aa565b9150509250929050565b634e487b7160e01b600052602160045260246000fd5b600060a08201905086151582528560208301528460408301528360608301526002831061037a57634e487b7160e01b600052602160045260246000fd5b8260808301529695505050505050565b60006020828403121561039c57600080fd5b8135600281106103ab57600080fd5b9392505050565b6000602082840312156103c457600080fd5b81356001600160a01b03811681146103ab57600080fd5b6000808335601e198436030181126103f257600080fd5b83018035915067ffffffffffffffff82111561040d57600080fd5b60200191503681900382131561042257600080fd5b9250929050565b634e487b7160e01b600052603260045260246000fdfea164736f6c6343000811000a