// SPDX-License-Identifier: MIT // solhint-disable private-vars-leading-underscore pragma solidity ^0.8.13; import "./SampleWarperWithRentalHookBasedMemory.sol"; import "./SampleWarperWithDistribution.sol"; import "../../../../../warper/mechanics/v1-controller/availability-period/ConfigurableAvailabilityPeriodExtension.sol"; import "../../../../../warper/mechanics/v1-controller/rental-period/ConfigurableRentalPeriodExtension.sol"; import "../../../../../warper/mechanics/v1-controller/rental-fee-premium/IRentalFeePremiumMechanics.sol"; import "../../../../../warper/mechanics/v1-controller/asset-rentability/IAssetRentabilityMechanics.sol"; contract SampleWarperWithAllRentingMechanics is IRentingHookMechanics, IAssetRentabilityMechanics, IRentalFeePremiumMechanics, ConfigurableAvailabilityPeriodExtension, ConfigurableRentalPeriodExtension, SampleWarperWithDistribution, SampleWarperWithRentalHookBasedMemory { mapping(address => bool) private blacklistedRenters; constructor(address original, address metahub) SampleWarperWithDistribution(original, metahub) SampleWarperWithRentalHookBasedMemory(original, metahub) testWarperInitializer { _ConfigurableAvailabilityPeriodExtension_init(); _ConfigurableRentalPeriodExtension_init(); } function setBlacklist(address renter, bool isBlacklisted) external { blacklistedRenters[renter] = isBlacklisted; } function __isRentableAsset( address renter, uint256, uint256 ) external view override returns (bool isRentable, string memory errorMessage) { isRentable = !blacklistedRenters[renter]; errorMessage = "Renter is blacklisted!"; } function __calculatePremiums( address, uint256 tokenId, uint256, uint32, uint256 universeFee, uint256 listerFee ) external view returns (uint256 universePremium, uint256 listerPremium) { if (tokenId % 2 == 0) { // For even ones universePremium = listerFee; } else { // For odd ones listerPremium = universeFee; } } function supportsInterface(bytes4 interfaceId) public view override( ConfigurableAvailabilityPeriodExtension, ConfigurableRentalPeriodExtension, SampleWarperWithRentalHookBasedMemory, ERC721Warper ) returns (bool) { return interfaceId == type(IAssetRentabilityMechanics).interfaceId || interfaceId == type(IRentalFeePremiumMechanics).interfaceId || SampleWarperWithRentalHookBasedMemory.supportsInterface(interfaceId) || ERC721Warper.supportsInterface(interfaceId) || ConfigurableRentalPeriodExtension.supportsInterface(interfaceId) || ConfigurableAvailabilityPeriodExtension.supportsInterface(interfaceId); } function _validateOriginal(address original) internal override(Warper, ERC721Warper) { super._validateOriginal(original); } }