账户
0x29...425c
0x29...425c

0x29...425c

$500
此合同的源代码已经过验证!
合同元数据
编译器
0.8.21+commit.d9974bed
语言
Solidity
合同源代码
文件 1 的 1:BotCompilerRewards.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity >= 0.8.7;

contract BotCompilerRewards {
    address private _owner;

    mapping(address => uint256) public amountsClaimable;
    mapping(address => uint256) public totalRewards;

    constructor() {
        _owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == _owner, "only owner.");
        _;
    }

    function claim() public {
        uint256 amount = amountsClaimable[msg.sender];
        require(amount > 0, "nothing to claim.");
        amountsClaimable[msg.sender] = 0;
        payable(msg.sender).transfer(amount);
    }

    function myTotalRewards() public view returns (uint256) {
        return totalRewards[msg.sender];
    }

    function myClaimableRewards() public view returns (uint256) {
        return amountsClaimable[msg.sender];
    }

    function addRewards(address[] memory recipients, uint256[] memory amounts) public payable onlyOwner {
        require(recipients.length == amounts.length, "invalid input.");
        uint256 total = 0;
        for (uint256 i = 0; i < recipients.length; i++) {
            amountsClaimable[recipients[i]] += amounts[i];
            totalRewards[recipients[i]] += amounts[i];
            total += amounts[i];
        }
        require(msg.value >= total, "not enough funds.");
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _owner = newOwner;
    }

    function recoverFunds() public onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

}
设置
{
  "compilationTarget": {
    "BotCompilerRewards.sol": "BotCompilerRewards"
  },
  "evmVersion": "shanghai",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": []
}
ABI
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"addRewards","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"amountsClaimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"myClaimableRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myTotalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]