// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "../../../utils/TestPurposeInitializationContext.sol"; import "../../../../../warper/ERC721/ERC721Warper.sol"; import "../../../../../accounting/distributors/IERC20RewardDistributor.sol"; contract SampleWarperWithDistribution is TestPurposeInitializationContext, ERC721Warper { using SafeERC20Upgradeable for IERC20Upgradeable; // TODO: theoretically it could be possible to inherit from other Warpers, // TODO: but different initialization modifier would be needed. constructor(address original, address metahub) testWarperInitializer { _Warper_init(original, metahub); } function distributeReward( address token, uint256 rewardAmount, uint256 agreementId ) external { IERC20RewardDistributor distributor = IERC20RewardDistributor( IMetahub(_metahub()).getContract(Contracts.ERC20_REWARD_DISTRIBUTOR) ); IERC20Upgradeable(token).safeTransfer(address(distributor), rewardAmount); distributor.distributeExternalReward(agreementId, token, rewardAmount); } }