// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "./Valhalla.sol"; import "./GNET.sol"; contract AwardOmzet is Initializable, OwnableUpgradeable { mapping(address => uint) bonusReward; Valhalla public valhalla; GNET public gnet; /// @custom:oz-upgrades-unsafe-allow constructor constructor() { _disableInitializers(); } function initialize(GNET _gnet, Valhalla _valhalla) public initializer { __Ownable_init(); valhalla = _valhalla; gnet = _gnet; } function provideBonus(address _address, uint _bonusValue) public onlyOwner { require(_address != address(0), "can't provide address zero"); gnet.transferFrom(msg.sender, address(this), _bonusValue); bonusReward[_address] += _bonusValue; } function getReward(address _address) public view returns (uint) { return bonusReward[_address]; } function claimBonusOmzet() public { (bool isReg, , , , , , , ) = valhalla.accountMap(msg.sender); uint pool = gnet.balanceOf(address(this)); uint bonusOmzet = bonusReward[msg.sender]; require(pool > 0, "Please Provide Pool"); require(pool >= bonusOmzet, "Pool Not Enought"); require(isReg, "Only Network Can Claim bonus"); require(bonusOmzet > 0, "No Reward Left"); gnet.transfer(msg.sender, bonusOmzet); bonusReward[msg.sender] = 0; } }