账户
0xb6...f890
0xB6...f890

0xB6...f890

$500
此合同的源代码已经过验证!
合同元数据
编译器
0.5.17+commit.d19bba13
语言
Solidity
合同源代码
文件 1 的 1:UMIChrismas.sol
pragma solidity >=0.4.23 <0.6.0;

interface UmiTokenInterface {
    function putIntoBlacklist(address _addr) external;

    function removeFromBlacklist(address _addr) external;

    function inBlacklist(address _addr) external view returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function mint(address account, uint256 amount) external returns (bool);

    function balanceOf(address account) external view returns (uint256);
}

interface UniSageInterface {
    function isUserExists(address user) external view returns (bool);
}

contract UMIChrismas {
    address owner;

    //mainnet
    address public umiTokenAddr = 0xf61DdA9A827cff208b6242FCF72AD1bB2006A995;
    //goerli
    // address public umiTokenAddr = 0x3B4005397f57804BEbFAf5B0aFA3B2DD13CD7F0F; 
    UmiTokenInterface public umiToken = UmiTokenInterface(umiTokenAddr);

    //mainnet
    address public unisageAddr = 0xd4845cBc79acE2cc6E48C8671a5860FfAB920bC2;
    //goerli
    // address public unisageAddr = 0xf61DdA9A827cff208b6242FCF72AD1bB2006A995;
    
    UniSageInterface public unisage = UniSageInterface(unisageAddr);

    //switch
    bool public open = true;

    //total airdrop
    uint256 public totalAirdropAmount = 100000000000000000000000;
    //single address can receive amount
    uint256 public singleAirdropAmount = 100000000000000000000;
    //referrer address can receive amount
    uint256 public singleAirdropAmountForReferrer = 0;

    //statics
    uint256 public hasAirdropAmount = 0;

    //
    mapping(address => bool) public successList;

    //event list
    event chrismasAirdropEvent(address indexed userAddr, uint256 airdropAmount);

    constructor() public {
        owner = msg.sender;
    }

    ////////////////////////////////////////////////////////////////////////////////
    //user operation

    function isUserJoined(address user) public view returns (bool) {
        return successList[user];
    }

    function getChrismasAirdrop() external {
        //condition 1, switch is open
        require(open, "umi chrismas has been closed");

        //condition 2, not in umi blacklist
        bool isInblacklist = umiToken.inBlacklist(msg.sender);
        require(!isInblacklist, "address is in blacklist");

        //condition 3 , not registered
        bool isRegisterd = unisage.isUserExists(msg.sender);
        require(!isRegisterd, "address is exsits");

        //condition 4, not joined before
        bool isJoined = isUserJoined(msg.sender);
        require(!isJoined, "address has been join already");

        //condition 5, the remain airdrop amount is enough
        require(
            hasAirdropAmount + singleAirdropAmount <= totalAirdropAmount,
            "the remain airdrop amount is not enough"
        );

        //transfer
        umiToken.transfer(msg.sender,singleAirdropAmount);
        umiToken.putIntoBlacklist(msg.sender);

        hasAirdropAmount = hasAirdropAmount + singleAirdropAmount;

        //record
        successList[msg.sender] = true;

        emit chrismasAirdropEvent(msg.sender, singleAirdropAmount);
    }

    ////////////////////////////////////////////////////////////////////////////////
    // owner operation
    function refreshOpen(bool _open) external {
        require(msg.sender == owner, "only owner can do this operation");
        open = _open;
    }

    function changeTotalAirdropAmount(uint256 amount) external {
        require(msg.sender == owner, "only owner can do this operation");
        totalAirdropAmount = amount;
    }

    function changeSingleAirdropAmount(uint256 amount) external {
        require(msg.sender == owner, "only owner can do this operation");
        singleAirdropAmount = amount;
    }

    function changeSingleAirdropAmountForReferrer(uint256 amount) external {
        require(msg.sender == owner, "only owner can do this operation");
        singleAirdropAmountForReferrer = amount;
    }

    function changeUmiTokenAddr(address _addr) external {
        require(msg.sender == owner, "only owner can do this operation");
        umiTokenAddr = _addr;
        umiToken = UmiTokenInterface(umiTokenAddr);
    }

    function changeUnisageAddr(address _addr) external {
        require(msg.sender == owner, "only owner can do this operation");
        unisageAddr = _addr;
        unisage = UniSageInterface(unisageAddr);
    }
}
设置
{
  "compilationTarget": {
    "UMIChrismas.sol": "UMIChrismas"
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": []
}
ABI
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"airdropAmount","type":"uint256"}],"name":"chrismasAirdropEvent","type":"event"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"changeSingleAirdropAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"changeSingleAirdropAmountForReferrer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"changeTotalAirdropAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"changeUmiTokenAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"changeUnisageAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getChrismasAirdrop","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hasAirdropAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isUserJoined","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_open","type":"bool"}],"name":"refreshOpen","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"singleAirdropAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"singleAirdropAmountForReferrer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"successList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalAirdropAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"umiToken","outputs":[{"internalType":"contract UmiTokenInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"umiTokenAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"unisage","outputs":[{"internalType":"contract UniSageInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"unisageAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]