// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract DevBoneDistributor is Ownable { using SafeMath for uint256; IERC20 public bone; address public devWallet; address public marketingWallet; address public adminWallet; uint256 public devSharePercent; uint256 public marketingSharePercent; uint256 public adminSharePercent; constructor ( IERC20 _bone, address _devWallet, address _marketingWallet, address _adminWallet ) public { bone = _bone; devWallet = _devWallet; marketingWallet = _marketingWallet; adminWallet = _adminWallet; devSharePercent = 64; marketingSharePercent = 16; adminSharePercent = 20; } function boneBalance() external view returns(uint) { return bone.balanceOf(address(this)); } function setDevWallet(address _devWallet) external onlyOwner { devWallet = _devWallet; } function setMarketingWallet(address _marketingWallet) external onlyOwner { marketingWallet = _marketingWallet; } function setAdminWallet(address _adminWallet) external onlyOwner { adminWallet = _adminWallet; } function setWalletDistribution(uint _devSharePercent, uint _marketingSharePercent, uint _adminSharePercent) external onlyOwner { require(_devSharePercent.add(_marketingSharePercent).add(_adminSharePercent) == 100, "distributor: Incorrect percentages"); devSharePercent = _devSharePercent; marketingSharePercent = _marketingSharePercent; adminSharePercent = _adminSharePercent; } function distribute() external onlyOwner { uint total = bone.balanceOf(address(this)); require(total > 0, "No BONE to distribute"); uint devWalletShare = total.mul(devSharePercent).div(100); uint marketingWalletShare = total.mul(marketingSharePercent).div(100); uint adminWalletShare = total.sub(devWalletShare).sub(marketingWalletShare); require(bone.transfer(devWallet, devWalletShare), "transfer: devWallet failed"); require(bone.transfer(marketingWallet, marketingWalletShare), "transfer: marketingWallet failed"); require(bone.transfer(adminWallet, adminWalletShare), "transfer: adminWallet failed"); } }