Overview
CRO Balance
CRO Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
StrategyStandardSaleForFixedPrice
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/** .... .... .... #@@@? ^@@@@ :@@@@ P&&&! :@@@@ :@@@@ .... .... .... ..................... .... ............ ...!@@@@:... ............ ........!@@@@ !@@@& @@@@: G@@@Y .@@@@@@@@@@@@@@@@@@@@@. #@@@? !@@@@@@@@@@@@~ J@@@@@@@@@@@@^ P@@@@@@@@@@@@. B@@@@@@@@@@@@ !@@@& @@@@: G@@@5 .@@@@&&&&@@@@@&&&&@@@@. #@@@? !@@@@&&&&@@@@~ 7&&&&@@@@&&&&: P@@@@#&&&@@@@. B@@@@&&&&@@@@ ~&&&G #&&&. G@@@5 .@@@@. G@@@5 .@@@@. #@@@? !@@@& &@@@~ ^@@@@ P@@@G...~@@@@. B@@@Y ^@@@@ G@@@5 .@@@@. G@@@5 .@@@@. #@@@? !@@@& &@@@~ ^@@@@ P@@@@@@@@@@@@. B@@@J :@@@@ G@@@5 .@@@@. G@@@5 .@@@@. #@@@? !@@@& &@@@~ ^@@@@ P@@@@#&&&##&#. B@@@J :@@@@ ............B@@@5 .@@@@. G@@@5 .@@@@. #@@@? !@@@& &@@@~ ^@@@@ P@@@G........ B@@@5...!@@@@ !@@@@@@@@@@@@@@@@5 .@@@@. G@@@5 .@@@@. #@@@? 7@@@& &@@@~ ^@@@@ P@@@@@@@@@@@@. B@@@@@@@@@@@@ ~&&&&&&&&&&&&&&&&? .&&&# Y&&&? .&&&#. P&&&! ~&&&G B&&&^ :&&&# J&&&&&&&&&&&&. 5&&&&&&&&&&&# */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {OrderTypes} from "../libraries/OrderTypes.sol"; import {IExecutionStrategy} from "../interfaces/IExecutionStrategy.sol"; /** * @title StrategyStandardSaleForFixedPrice * @notice Strategy that executes an order at a fixed price that * can be taken either by a bid or an ask. */ contract StrategyStandardSaleForFixedPrice is IExecutionStrategy { uint256 public immutable PROTOCOL_FEE; /** * @notice Constructor * @param _protocolFee protocol fee (200 --> 2%, 400 --> 4%) */ constructor(uint256 _protocolFee) { PROTOCOL_FEE = _protocolFee; } /** * @notice Check whether a taker ask order can be executed against a maker bid * @param takerAsk taker ask order * @param makerBid maker bid order * @return (whether strategy can be executed, tokenId to execute, amount of tokens to execute) */ function canExecuteTakerAsk( OrderTypes.TakerOrder calldata takerAsk, OrderTypes.MakerOrder calldata makerBid ) external view override returns ( bool, uint256, uint256 ) { return ( ((makerBid.price == takerAsk.price) && (makerBid.tokenId == takerAsk.tokenId) && (makerBid.startTime <= block.timestamp) && (makerBid.endTime >= block.timestamp)), makerBid.tokenId, makerBid.amount ); } /** * @notice Check whether a taker bid order can be executed against a maker ask * @param takerBid taker bid order * @param makerAsk maker ask order * @return (whether strategy can be executed, tokenId to execute, amount of tokens to execute) */ function canExecuteTakerBid( OrderTypes.TakerOrder calldata takerBid, OrderTypes.MakerOrder calldata makerAsk ) external view override returns ( bool, uint256, uint256 ) { return ( ((makerAsk.price == takerBid.price) && (makerAsk.tokenId == takerBid.tokenId) && (makerAsk.startTime <= block.timestamp) && (makerAsk.endTime >= block.timestamp)), makerAsk.tokenId, makerAsk.amount ); } /** * @notice Check whether a maker bid order can be executed against a maker ask * @return (whether strategy can be executed, tokenId to execute, amount of tokens to execute) */ function canExecuteMakerOrder( OrderTypes.MakerOrder calldata makerBid, OrderTypes.MakerOrder calldata makerAsk ) external view override returns ( bool, uint256, uint256 ) { return ( ((makerAsk.price == makerBid.price) && (makerAsk.collection == makerBid.collection) && (makerAsk.tokenId == makerBid.tokenId) && (makerAsk.amount == makerBid.amount) && (makerAsk.startTime <= block.timestamp) && (makerBid.startTime <= block.timestamp) && (makerAsk.endTime >= block.timestamp) && (makerBid.endTime >= block.timestamp)), makerAsk.tokenId, makerAsk.amount ); } /** * @notice Return protocol fee for this strategy * @return protocol fee */ function viewProtocolFee() external view override returns (uint256) { return PROTOCOL_FEE; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title OrderTypes * @notice This library contains order types for the Minted exchange. */ library OrderTypes { // keccak256("MakerOrder(bool isOrderAsk,address signer,address collection,uint256 price,uint256 tokenId,uint256 amount,address strategy,address currency,uint256 nonce,uint256 startTime,uint256 endTime,uint256 minPercentageToAsk,bytes params)") bytes32 internal constant MAKER_ORDER_HASH = 0x40261ade532fa1d2c7293df30aaadb9b3c616fae525a0b56d3d411c841a85028; struct MakerOrder { bool isOrderAsk; // true --> ask / false --> bid address signer; // signer of the maker order address collection; // collection address uint256 price; // price (used as ) uint256 tokenId; // id of the token uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155) address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice) address currency; // currency (e.g., WETH) uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price) uint256 startTime; // startTime in timestamp uint256 endTime; // endTime in timestamp uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask) bytes params; // additional parameters uint8 v; // v: parameter (27 or 28) bytes32 r; // r: parameter bytes32 s; // s: parameter } struct TakerOrder { bool isOrderAsk; // true --> ask / false --> bid address taker; // msg.sender uint256 price; // final price for the purchase uint256 tokenId; uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask) bytes params; // other params (e.g., tokenId) } function hash(MakerOrder memory makerOrder) internal pure returns (bytes32) { return keccak256( abi.encode( MAKER_ORDER_HASH, makerOrder.isOrderAsk, makerOrder.signer, makerOrder.collection, makerOrder.price, makerOrder.tokenId, makerOrder.amount, makerOrder.strategy, makerOrder.currency, makerOrder.nonce, makerOrder.startTime, makerOrder.endTime, makerOrder.minPercentageToAsk, keccak256(makerOrder.params) ) ); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {OrderTypes} from "../libraries/OrderTypes.sol"; interface IExecutionStrategy { function canExecuteTakerAsk( OrderTypes.TakerOrder calldata takerAsk, OrderTypes.MakerOrder calldata makerBid ) external view returns ( bool, uint256, uint256 ); function canExecuteTakerBid( OrderTypes.TakerOrder calldata takerBid, OrderTypes.MakerOrder calldata makerAsk ) external view returns ( bool, uint256, uint256 ); function canExecuteMakerOrder( OrderTypes.MakerOrder calldata makerBid, OrderTypes.MakerOrder calldata makerAsk ) external view returns ( bool, uint256, uint256 ); function viewProtocolFee() external view returns (uint256); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"_protocolFee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"PROTOCOL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bool","name":"isOrderAsk","type":"bool"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"strategy","type":"address"},{"internalType":"address","name":"currency","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"minPercentageToAsk","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct OrderTypes.MakerOrder","name":"makerBid","type":"tuple"},{"components":[{"internalType":"bool","name":"isOrderAsk","type":"bool"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"strategy","type":"address"},{"internalType":"address","name":"currency","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"minPercentageToAsk","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct OrderTypes.MakerOrder","name":"makerAsk","type":"tuple"}],"name":"canExecuteMakerOrder","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bool","name":"isOrderAsk","type":"bool"},{"internalType":"address","name":"taker","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"minPercentageToAsk","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct OrderTypes.TakerOrder","name":"takerAsk","type":"tuple"},{"components":[{"internalType":"bool","name":"isOrderAsk","type":"bool"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"strategy","type":"address"},{"internalType":"address","name":"currency","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"minPercentageToAsk","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct OrderTypes.MakerOrder","name":"makerBid","type":"tuple"}],"name":"canExecuteTakerAsk","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bool","name":"isOrderAsk","type":"bool"},{"internalType":"address","name":"taker","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"minPercentageToAsk","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct OrderTypes.TakerOrder","name":"takerBid","type":"tuple"},{"components":[{"internalType":"bool","name":"isOrderAsk","type":"bool"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"strategy","type":"address"},{"internalType":"address","name":"currency","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"minPercentageToAsk","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct OrderTypes.MakerOrder","name":"makerAsk","type":"tuple"}],"name":"canExecuteTakerBid","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewProtocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a060405234801561001057600080fd5b506040516103bf3803806103bf83398101604081905261002f91610037565b60805261004f565b600060208284031215610048578081fd5b5051919050565b60805161035061006f600039600081816061015260c801526103506000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630b4501fd1461005c578063865781ca146100965780639dd1cda6146100c6578063ad2390ac14610096578063fb9c39ec146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100a96100a43660046102c9565b6100ff565b60408051931515845260208401929092529082015260600161008d565b7f0000000000000000000000000000000000000000000000000000000000000000610083565b6100a96100fa366004610268565b610159565b600080600084604001358460600135148015610122575084606001358460800135145b801561013357504284610120013511155b801561014457504284610140013510155b92505050608082013560a08301359250925092565b6000806000846060013584606001351480156101a45750610180606086016040870161023a565b6001600160a01b0316610199606086016040870161023a565b6001600160a01b0316145b80156101b7575084608001358460800135145b80156101ca57508460a001358460a00135145b80156101db57504284610120013511155b80156101ec57504285610120013511155b80156101fd57504284610140013510155b8015610144575042856101400135101592505050608082013560a08301359250925092565b60006102008284031215610234578081fd5b50919050565b60006020828403121561024b578081fd5b81356001600160a01b0381168114610261578182fd5b9392505050565b6000806040838503121561027a578081fd5b823567ffffffffffffffff80821115610291578283fd5b61029d86838701610222565b935060208501359150808211156102b2578283fd5b506102bf85828601610222565b9150509250929050565b600080604083850312156102db578182fd5b823567ffffffffffffffff808211156102f2578384fd5b9084019060c08287031215610305578384fd5b909250602084013590808211156102b2578283fdfea26469706673582212208edcf389b899aca4acd3c6bd3c2292c4abfe73a5d95570d234891310d6d8a38764736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000c8
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100575760003560e01c80630b4501fd1461005c578063865781ca146100965780639dd1cda6146100c6578063ad2390ac14610096578063fb9c39ec146100ec575b600080fd5b6100837f00000000000000000000000000000000000000000000000000000000000000c881565b6040519081526020015b60405180910390f35b6100a96100a43660046102c9565b6100ff565b60408051931515845260208401929092529082015260600161008d565b7f00000000000000000000000000000000000000000000000000000000000000c8610083565b6100a96100fa366004610268565b610159565b600080600084604001358460600135148015610122575084606001358460800135145b801561013357504284610120013511155b801561014457504284610140013510155b92505050608082013560a08301359250925092565b6000806000846060013584606001351480156101a45750610180606086016040870161023a565b6001600160a01b0316610199606086016040870161023a565b6001600160a01b0316145b80156101b7575084608001358460800135145b80156101ca57508460a001358460a00135145b80156101db57504284610120013511155b80156101ec57504285610120013511155b80156101fd57504284610140013510155b8015610144575042856101400135101592505050608082013560a08301359250925092565b60006102008284031215610234578081fd5b50919050565b60006020828403121561024b578081fd5b81356001600160a01b0381168114610261578182fd5b9392505050565b6000806040838503121561027a578081fd5b823567ffffffffffffffff80821115610291578283fd5b61029d86838701610222565b935060208501359150808211156102b2578283fd5b506102bf85828601610222565b9150509250929050565b600080604083850312156102db578182fd5b823567ffffffffffffffff808211156102f2578384fd5b9084019060c08287031215610305578384fd5b909250602084013590808211156102b2578283fdfea26469706673582212208edcf389b899aca4acd3c6bd3c2292c4abfe73a5d95570d234891310d6d8a38764736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c8
-----Decoded View---------------
Arg [0] : _protocolFee (uint256): 200
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c8
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.