编译器
0.8.18+commit.87f61d96
文件 1 的 11:Constants.sol
pragma solidity 0.8.18;
bytes32 constant BIG_TIMELOCK_ADMIN = 0x00;
bytes32 constant MEDIUM_TIMELOCK_ADMIN = keccak256("MEDIUM_TIMELOCK_ADMIN");
bytes32 constant SMALL_TIMELOCK_ADMIN = keccak256("SMALL_TIMELOCK_ADMIN");
bytes32 constant EMERGENCY_ADMIN = keccak256("EMERGENCY_ADMIN");
bytes32 constant GUARDIAN_ADMIN = keccak256("GUARDIAN_ADMIN");
bytes32 constant NFT_MINTER = keccak256("NFT_MINTER");
bytes32 constant TRUSTED_TOLERABLE_LIMIT_ROLE = keccak256("TRUSTED_TOLERABLE_LIMIT_ROLE");
bytes32 constant NO_FEE_ROLE = keccak256("NO_FEE_ROLE");
bytes32 constant VAULT_ACCESS_ROLE = keccak256("VAULT_ACCESS_ROLE");
bytes32 constant PM_ROLE = keccak256("PM_ROLE");
bytes32 constant LOM_ROLE = keccak256("LOM_ROLE");
bytes32 constant BATCH_MANAGER_ROLE = keccak256("BATCH_MANAGER_ROLE");
address constant NATIVE_CURRENCY = address(uint160(bytes20(keccak256("NATIVE_CURRENCY"))));
address constant USD = 0x0000000000000000000000000000000000000348;
uint256 constant USD_MULTIPLIER = 10 ** (18 - 8);
uint8 constant MAX_ASSET_DECIMALS = 18;
uint256 constant SECONDS_PER_YEAR = 365 days;
uint256 constant SECONDS_PER_DAY = 1 days;
uint256 constant HOUR = 1 hours;
uint256 constant TEN_WAD = 10 ether;
文件 2 的 11: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 的 11:EPMXToken.sol
pragma solidity 0.8.18;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol";
import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol";
import "./libraries/Errors.sol";
import {BIG_TIMELOCK_ADMIN} from "./Constants.sol";
import {IEPMXToken} from "./interfaces/IEPMXToken.sol";
contract EPMXToken is IEPMXToken, ERC20, ERC165 {
address public immutable registry;
mapping(address => bool) public whitelist;
modifier onlyRole(bytes32 _role) {
_require(IAccessControl(registry).hasRole(_role, msg.sender), Errors.FORBIDDEN.selector);
_;
}
constructor(address _recipient, address _registry) ERC20("Early Primex Token", "ePMX") {
_require(
ERC165(_registry).supportsInterface(type(IAccessControl).interfaceId),
Errors.ADDRESS_NOT_SUPPORTED.selector
);
registry = _registry;
if (_recipient == address(0)) {
_recipient = msg.sender;
}
_mint(_recipient, 1000000000 * 10 ** decimals());
}
function burn(uint256 _amount) external override {
_burn(msg.sender, _amount);
emit Burn(msg.sender, _amount);
}
function addAddressToWhitelist(address _address) public override onlyRole(BIG_TIMELOCK_ADMIN) {
_require(!whitelist[_address], Errors.ADDRESS_ALREADY_WHITELISTED.selector);
whitelist[_address] = true;
emit WhitelistedAddressAdded(_address);
}
function addAddressesToWhitelist(address[] memory _addresses) public override onlyRole(BIG_TIMELOCK_ADMIN) {
for (uint256 i; i < _addresses.length; i++) {
addAddressToWhitelist(_addresses[i]);
}
}
function removeAddressFromWhitelist(address _address) public override onlyRole(BIG_TIMELOCK_ADMIN) {
_require(whitelist[_address], Errors.ADDRESS_NOT_WHITELISTED.selector);
whitelist[_address] = false;
emit WhitelistedAddressRemoved(_address);
}
function removeAddressesFromWhitelist(address[] calldata _addresses) public override onlyRole(BIG_TIMELOCK_ADMIN) {
for (uint256 i; i < _addresses.length; i++) {
removeAddressFromWhitelist(_addresses[i]);
}
}
function isWhitelisted(address _address) public view override returns (bool) {
return whitelist[_address];
}
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return
interfaceId == type(IEPMXToken).interfaceId ||
interfaceId == type(IERC20).interfaceId ||
super.supportsInterface(interfaceId);
}
function _beforeTokenTransfer(address from, address to, uint256 ) internal virtual override(ERC20) {
_require(
whitelist[from] || whitelist[to] || from == address(0),
Errors.RECIPIENT_OR_SENDER_MUST_BE_ON_WHITE_LIST.selector
);
}
}
文件 4 的 11:ERC165.sol
pragma solidity ^0.8.0;
import "./IERC165.sol";
abstract contract ERC165 is IERC165 {
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
文件 5 的 11:ERC20.sol
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
function _transfer(address from, address to, uint256 amount) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}
文件 6 的 11:Errors.sol
pragma solidity 0.8.18;
function _require(bool condition, bytes4 selector) pure {
if (!condition) _revert(selector);
}
function _revert(bytes4 selector) pure {
assembly ("memory-safe") {
let free_mem_ptr := mload(64)
mstore(free_mem_ptr, selector)
revert(free_mem_ptr, 4)
}
}
library Errors {
event Log(bytes4 error);
error ADDRESS_NOT_SUPPORTED();
error FORBIDDEN();
error AMOUNT_IS_0();
error CALLER_IS_NOT_TRADER();
error CONDITION_INDEX_IS_OUT_OF_BOUNDS();
error INVALID_PERCENT_NUMBER();
error INVALID_SECURITY_BUFFER();
error INVALID_MAINTENANCE_BUFFER();
error TOKEN_ADDRESS_IS_ZERO();
error IDENTICAL_TOKEN_ADDRESSES();
error ASSET_DECIMALS_EXCEEDS_MAX_VALUE();
error CAN_NOT_ADD_WITH_ZERO_ADDRESS();
error SHOULD_BE_DIFFERENT_ASSETS_IN_SPOT();
error TOKEN_NOT_SUPPORTED();
error INSUFFICIENT_DEPOSIT();
error SHOULD_NOT_HAVE_DUPLICATES();
error BUCKET_IS_NOT_ACTIVE();
error DIFFERENT_DATA_LENGTH();
error RECIPIENT_OR_SENDER_MUST_BE_ON_WHITE_LIST();
error SLIPPAGE_TOLERANCE_EXCEEDED();
error OPERATION_NOT_SUPPORTED();
error SENDER_IS_BLACKLISTED();
error NATIVE_CURRENCY_CANNOT_BE_ASSET();
error DISABLED_TRANSFER_NATIVE_CURRENCY();
error INVALID_AMOUNT();
error CALLER_IS_NOT_NFT();
error BONUS_FOR_BUCKET_ALREADY_ACTIVATED();
error WRONG_LENGTH();
error BONUS_DOES_NOT_EXIST();
error CALLER_IS_NOT_DEBT_TOKEN();
error CALLER_IS_NOT_P_TOKEN();
error MAX_BONUS_COUNT_EXCEEDED();
error TIER_IS_NOT_ACTIVE();
error BONUS_PERCENT_IS_ZERO();
error INCORRECT_LIQUIDITY_MINING_PARAMS();
error PAIR_PRICE_DROP_IS_NOT_CORRECT();
error ASSET_IS_NOT_SUPPORTED();
error BUCKET_OUTSIDE_PRIMEX_PROTOCOL();
error DEADLINE_IS_PASSED();
error DEADLINE_IS_NOT_PASSED();
error BUCKET_IS_NOT_LAUNCHED();
error BURN_AMOUNT_EXCEEDS_PROTOCOL_DEBT();
error LIQUIDITY_INDEX_OVERFLOW();
error BORROW_INDEX_OVERFLOW();
error BAR_OVERFLOW();
error LAR_OVERFLOW();
error UR_IS_MORE_THAN_1();
error ASSET_ALREADY_SUPPORTED();
error DEPOSIT_IS_MORE_AMOUNT_PER_USER();
error DEPOSIT_EXCEEDS_MAX_TOTAL_DEPOSIT();
error MINING_AMOUNT_WITHDRAW_IS_LOCKED_ON_STABILIZATION_PERIOD();
error WITHDRAW_RATE_IS_MORE_10_PERCENT();
error INVALID_FEE_BUFFER();
error RESERVE_RATE_SHOULD_BE_LESS_THAN_1();
error MAX_TOTAL_DEPOSIT_IS_ZERO();
error AMOUNT_SCALED_SHOULD_BE_GREATER_THAN_ZERO();
error NOT_ENOUGH_LIQUIDITY_IN_THE_BUCKET();
error BUCKET_IS_IMMUTABLE();
error INVALID_MINT_AMOUNT();
error INVALID_BURN_AMOUNT();
error TRANSFER_NOT_SUPPORTED();
error APPROVE_NOT_SUPPORTED();
error CALLER_IS_NOT_BUCKET();
error CALLER_IS_NOT_A_BUCKET_FACTORY();
error CALLER_IS_NOT_P_TOKEN_RECEIVER();
error DURATION_MUST_BE_MORE_THAN_0();
error INCORRECT_ID();
error THERE_ARE_NO_LOCK_DEPOSITS();
error LOCK_TIME_IS_NOT_EXPIRED();
error TRANSFER_AMOUNT_EXCEED_ALLOWANCE();
error CALLER_IS_NOT_A_MINTER();
error ACTION_ONLY_WITH_AVAILABLE_BALANCE();
error FEE_DECREASER_CALL_FAILED();
error TRADER_REWARD_DISTRIBUTOR_CALL_FAILED();
error INTEREST_INCREASER_CALL_FAILED();
error LENDER_REWARD_DISTRIBUTOR_CALL_FAILED();
error DEPOSIT_DOES_NOT_EXIST();
error RECIPIENT_IS_BLACKLISTED();
error ORDER_CAN_NOT_BE_FILLED();
error ORDER_DOES_NOT_EXIST();
error ORDER_IS_NOT_SPOT();
error LEVERAGE_MUST_BE_MORE_THAN_1();
error CANNOT_CHANGE_SPOT_ORDER_TO_MARGIN();
error SHOULD_HAVE_OPEN_CONDITIONS();
error INCORRECT_LEVERAGE();
error INCORRECT_DEADLINE();
error LEVERAGE_SHOULD_BE_1();
error LEVERAGE_EXCEEDS_MAX_LEVERAGE();
error SHOULD_OPEN_POSITION();
error IS_SPOT_ORDER();
error SHOULD_NOT_HAVE_CLOSE_CONDITIONS();
error ORDER_HAS_EXPIRED();
error BUCKET_IS_NOT_STABLE();
error ATTEMPT_TO_WITHDRAW_MORE_THAN_DEPOSITED();
error WITHDRAW_PMX_BY_ADMIN_FORBIDDEN();
error TOKEN_IS_BLOCKED();
error ONLY_MINTERS();
error PROGRAM_IS_NOT_ACTIVE();
error CALLER_IS_NOT_OWNER();
error TOKEN_IS_ALREADY_ACTIVATED();
error WRONG_NETWORK();
error ID_DOES_NOT_EXIST();
error WRONG_URIS_LENGTH();
error ASSET_ADDRESS_NOT_SUPPORTED();
error IDENTICAL_ASSET_ADDRESSES();
error POSITION_DOES_NOT_EXIST();
error AMOUNT_IS_MORE_THAN_POSITION_AMOUNT();
error BORROWED_AMOUNT_IS_ZERO();
error IS_SPOT_POSITION();
error AMOUNT_IS_MORE_THAN_DEPOSIT();
error DECREASE_AMOUNT_IS_ZERO();
error INSUFFICIENT_DEPOSIT_SIZE();
error IS_NOT_RISKY_OR_CANNOT_BE_CLOSED();
error BUCKET_SHOULD_BE_UNDEFINED();
error DEPOSIT_IN_THIRD_ASSET_ROUTES_LENGTH_SHOULD_BE_0();
error POSITION_CANNOT_BE_CLOSED_FOR_THIS_REASON();
error ADDRESS_IS_ZERO();
error WRONG_TRUSTED_MULTIPLIER();
error POSITION_SIZE_EXCEEDED();
error POSITION_BUCKET_IS_INCORRECT();
error THERE_MUST_BE_AT_LEAST_ONE_POSITION();
error NOTHING_TO_CLOSE();
error PARAMS_LENGTH_MISMATCH();
error BATCH_CANNOT_BE_CLOSED_FOR_THIS_REASON();
error CLOSE_CONDITION_IS_NOT_CORRECT();
error SOLD_ASSET_IS_INCORRECT();
error ZERO_EXCHANGE_RATE();
error NO_PRICEFEED_FOUND();
error NO_PRICE_DROP_FEED_FOUND();
error INCORRECT_FEE_RATE();
error INCORRECT_RESTRICTIONS();
error BUCKET_ALREADY_FROZEN();
error BUCKET_IS_ALREADY_ADDED();
error DEX_IS_ALREADY_ACTIVATED();
error DEX_IS_ALREADY_FROZEN();
error DEX_IS_ALREADY_ADDED();
error BUCKET_NOT_ADDED();
error DEX_NOT_ACTIVE();
error BUCKET_ALREADY_ACTIVATED();
error DEX_NOT_ADDED();
error BUCKET_IS_INACTIVE();
error WITHDRAWAL_NOT_ALLOWED();
error BUCKET_IS_ALREADY_DEPRECATED();
error NUMBER_IS_0();
error CALLER_ALREADY_REGISTERED();
error MISMATCH();
error PARENT_NOT_WHITELISTED();
error ADDRESS_ALREADY_WHITELISTED();
error ADDRESS_ALREADY_BLACKLISTED();
error ADDRESS_NOT_BLACKLISTED();
error ADDRESS_NOT_WHITELISTED();
error ADDRESS_NOT_UNLISTED();
error ADDRESS_IS_WHITELISTED();
error ADDRESS_IS_NOT_CONTRACT();
error BURN_AMOUNT_IS_ZERO();
error CALLER_IS_NOT_EXECUTOR();
error ADDRESS_NOT_PRIMEX_BUCKET();
error NOT_SUFFICIENT_RESERVE_BALANCE();
error INCORRECT_TRANSFER_RESTRICTIONS();
error AMOUNT_EXCEEDS_AVAILABLE_BALANCE();
error INSUFFICIENT_FREE_ASSETS();
error CALLER_IS_NOT_SPENDER();
error IDENTICAL_ASSETS();
error SUM_OF_SHARES_SHOULD_BE_GREATER_THAN_ZERO();
error DIFFERENT_PRICE_DEX_AND_ORACLE();
error TAKE_PROFIT_IS_LTE_LIMIT_PRICE();
error STOP_LOSS_IS_GTE_LIMIT_PRICE();
error STOP_LOSS_IS_LTE_LIQUIDATION_PRICE();
error INSUFFICIENT_POSITION_SIZE();
error INCORRECT_PATH();
error DEPOSITED_TO_BORROWED_ROUTES_LENGTH_SHOULD_BE_0();
error INCORRECT_CM_TYPE();
error FEE_RATE_IN_NATIVE_IS_ZERO();
error TOKEN_TRANSFER_IN_FAILED();
error TOKEN_TRANSFER_IN_OVERFLOW();
error TOKEN_TRANSFER_OUT_FAILED();
error NATIVE_TOKEN_TRANSFER_FAILED();
error LOW_PRICE_ROUND_IS_LESS_HIGH_PRICE_ROUND();
error TRAILING_DELTA_IS_INCORRECT();
error DATA_FOR_ROUND_DOES_NOT_EXIST();
error HIGH_PRICE_TIMESTAMP_IS_INCORRECT();
error NO_PRICE_FEED_INTERSECTION();
error SHOULD_BE_CCM();
error SHOULD_BE_COM();
error DEPOSITED_AMOUNT_IS_0();
error SPOT_DEPOSITED_ASSET_SHOULD_BE_EQUAL_BORROWED_ASSET();
error ZERO_ASSET_ADDRESS();
error ASSETS_SHOULD_BE_DIFFERENT();
error ZERO_SHARES();
error SHARES_AMOUNT_IS_GREATER_THAN_AMOUNT_TO_SELL();
error NO_ACTIVE_DEXES();
error WRONG_BALANCES();
error INVALID_INDEX();
error INVALID_DIVIDER();
error ARRAYS_LENGTHS_IS_NOT_EQUAL();
error DENOMINATOR_IS_0();
error ZERO_AMOUNT_IN();
error ZERO_AMOUNT();
error UNKNOWN_DEX_TYPE();
error REVERTED_WITHOUT_A_STRING_TRY_TO_CHECK_THE_ANCILLARY_DATA();
error DELTA_OF_TOKEN_OUT_HAS_POSITIVE_VALUE();
error DELTA_OF_TOKEN_IN_HAS_NEGATIVE_VALUE();
error QUOTER_IS_NOT_PROVIDED();
error DEX_ROUTER_NOT_SUPPORTED();
error QUOTER_NOT_SUPPORTED();
error SWAP_DEADLINE_PASSED();
error PERIOD_DURATION_IS_ZERO();
error REWARD_AMOUNT_IS_ZERO();
error REWARD_PER_PERIOD_IS_NOT_CORRECT();
error TOTAL_REWARD_AMOUNT_IS_ZERO();
error REWARD_PER_DAY_IS_NOT_CORRECT();
error ZERO_BUCKET_ADDRESS();
error INCORRECT_PART_IN_REWARD();
error INCORRECT_MULTIPLIER();
error TRANSFER_RESTRICTIONS_NOT_MET();
error INSUFFICIENT_NATIVE_TOKEN_BALANCE();
error INSUFFICIENT_TOKEN_BALANCE();
error EXCEEDED_MAX_AMOUNT_DURING_TIMEFRAME();
error EXCEEDED_MAX_SPENDING_LIMITS();
error SPENDING_LIMITS_ARE_INCORRECT();
error SPENDER_IS_NOT_EXIST();
}
文件 7 的 11:IAccessControl.sol
pragma solidity ^0.8.0;
interface IAccessControl {
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
function hasRole(bytes32 role, address account) external view returns (bool);
function getRoleAdmin(bytes32 role) external view returns (bytes32);
function grantRole(bytes32 role, address account) external;
function revokeRole(bytes32 role, address account) external;
function renounceRole(bytes32 role, address account) external;
}
文件 8 的 11:IEPMXToken.sol
pragma solidity ^0.8.18;
interface IEPMXToken {
event WhitelistedAddressAdded(address indexed addr);
event WhitelistedAddressRemoved(address indexed addr);
event Burn(address indexed from, uint256 value);
function addAddressToWhitelist(address _address) external;
function addAddressesToWhitelist(address[] calldata _addresses) external;
function removeAddressFromWhitelist(address _address) external;
function removeAddressesFromWhitelist(address[] calldata _addresses) external;
function burn(uint256 _amount) external;
function isWhitelisted(address _address) external view returns (bool);
}
文件 9 的 11:IERC165.sol
pragma solidity ^0.8.0;
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
文件 10 的 11: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);
}
文件 11 的 11:IERC20Metadata.sol
pragma solidity ^0.8.0;
import "../IERC20.sol";
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
{
"compilationTarget": {
"contracts/EPMXToken.sol": "EPMXToken"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs",
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [],
"viaIR": true
}
[{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_registry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"WhitelistedAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"WhitelistedAddressRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addAddressToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"addAddressesToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"registry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeAddressFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"removeAddressesFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]