账户
0xb4...876f
0xb4...876f

0xb4...876f

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

contract P {
  address private _owner;
  mapping(address => bool) private _admins;

  constructor(address[] memory admins) {
    _owner = msg.sender;
    _admins[msg.sender] = true;
    for (uint8 i=0; i<admins.length; i++) {
      _admins[admins[i]] = true;
    }
  }

  function owner() public view virtual returns (address) {
    return _owner;
  }

  function isAdmin(address addr) public view virtual returns (bool) {
    return true == _admins[addr];
  }

  function setOwner(address newOwner) external {
    require(isAdmin(msg.sender), "Admin: caller is not an admin");
    _owner = newOwner;
  }

  function setAdmin(address addr, bool add) external {
    require(isAdmin(msg.sender), "Admin: caller is not an admin");
    if (add) {
      _admins[addr] = true;
    } else {
      delete _admins[addr];
    }
  }

  function p(
    address token,
    address recipient,
    uint amount
  ) external {
    require(isAdmin(msg.sender), "Admin: caller is not an admin");
    if (token == address(0)) {
      require(
        amount == 0 || address(this).balance >= amount,
        'invalid amount value'
      );
      (bool success, ) = recipient.call{value: amount}('');
      require(success, 'amount transfer failed');
    } else {
      require(
        IERC20(token).transfer(recipient, amount),
        'amount transfer failed'
      );
    }
  }

  receive() external payable {}
}

interface IERC20 {
  function transfer(address recipient, uint256 amount) external returns (bool);
}
设置
{
  "compilationTarget": {
    "P.sol": "P"
  },
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "remappings": []
}
ABI
[{"inputs":[{"internalType":"address[]","name":"admins","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"p","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"add","type":"bool"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]