编译器
0.8.17+commit.8df45f5f
文件 1 的 4:ComboMapping.sol
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract ComboMapping is Ownable {
address public combo;
address public cocos;
address public burnAddress;
mapping(address => bool) public blackAccountMaps;
event UpdateComboToken(address notWorkingCombo, address combo);
event Mapping(address account, address burnAddress, uint256 amount);
event UpdateBurnAddress(address burnAddress);
event AddBlackAccount(address blackAccount);
event DelBlackAccount(address blackAccount);
event EmergencyWithdraw(address account, uint256 banlance);
constructor(address combo_, address cocos_, address burnAddress_) {
combo = combo_;
cocos = cocos_;
burnAddress = burnAddress_;
}
function updateComboToken(address comboToken) external onlyOwner {
address notWorkingCombo = combo;
combo = comboToken;
emit UpdateComboToken(notWorkingCombo, combo);
}
function mappingToken(uint256 amount) external {
address account = msg.sender;
require(!blackAccountMaps[account], "in black list");
require(
IERC20(cocos).transferFrom(account, burnAddress, amount),
"COCOS transfer failed."
);
require(
IERC20(combo).transfer(account, amount),
"COMBO transfer failed."
);
emit Mapping(account, burnAddress, amount);
}
function emergencyWithdraw(
IERC20 token,
address withdrawAddr
) external onlyOwner {
uint256 balance = token.balanceOf(address(this));
token.transfer(withdrawAddr, balance);
emit EmergencyWithdraw(withdrawAddr, balance);
}
function addBlackAccount(address _blackAccount) external onlyOwner {
require(!blackAccountMaps[_blackAccount], "has in black list");
blackAccountMaps[_blackAccount] = true;
emit AddBlackAccount(_blackAccount);
}
function delBlackAccount(address _blackAccount) external onlyOwner {
require(blackAccountMaps[_blackAccount], "not in black list");
blackAccountMaps[_blackAccount] = false;
emit DelBlackAccount(_blackAccount);
}
function updateBurnAddress(address _burnAddress) external onlyOwner {
burnAddress = _burnAddress;
emit UpdateBurnAddress(_burnAddress);
}
}
文件 2 的 4:Context.sol
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
文件 3 的 4:IERC20.sol
pragma solidity ^0.8.0;
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
文件 4 的 4:Ownable.sol
pragma solidity ^0.8.0;
import "../utils/Context.sol";
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
{
"compilationTarget": {
"contracts/ComboMapping.sol": "ComboMapping"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"combo_","type":"address"},{"internalType":"address","name":"cocos_","type":"address"},{"internalType":"address","name":"burnAddress_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"blackAccount","type":"address"}],"name":"AddBlackAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"blackAccount","type":"address"}],"name":"DelBlackAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"banlance","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"burnAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mapping","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"burnAddress","type":"address"}],"name":"UpdateBurnAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"notWorkingCombo","type":"address"},{"indexed":false,"internalType":"address","name":"combo","type":"address"}],"name":"UpdateComboToken","type":"event"},{"inputs":[{"internalType":"address","name":"_blackAccount","type":"address"}],"name":"addBlackAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blackAccountMaps","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cocos","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"combo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_blackAccount","type":"address"}],"name":"delBlackAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"withdrawAddr","type":"address"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mappingToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_burnAddress","type":"address"}],"name":"updateBurnAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"comboToken","type":"address"}],"name":"updateComboToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]