编译器
0.8.19+commit.7dd6d404
文件 1 的 17:Address.sol
pragma solidity ^0.8.0;
library Address {
function isContract(address account) internal view returns (bool) {
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
文件 2 的 17: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 的 17:FeeCollector.sol
pragma solidity ^0.8.0;
import { IFeeCollector } from "./IFeeCollector.sol";
import { Address } from "../library/Address.sol";
import { IFees } from "./IFees.sol";
import { OwnableV2 } from "../Control/OwnableV2.sol";
abstract contract FeeCollector is IFeeCollector, OwnableV2 {
using Address for address payable;
IFees internal _fees;
uint256 internal _feePercentDenominator = 10 ** 18;
modifier takeFee(string memory feeType) {
bool exempt = _fees.isAddressExemptFromFees(_msgSender());
require(exempt || _fees.getFeeAmountForType(feeType) == msg.value, "Incorrect fee");
if (!exempt)
payable(address(_fees)).sendValue(msg.value);
_;
}
function feesContract() external view override returns (address) {
return address(_fees);
}
function _setFeesContract(address contractAddress) internal virtual {
_fees = IFees(contractAddress);
}
function setFeesContract(address contractAddress) external override onlyOwner {
_setFeesContract(contractAddress);
}
function feePercentDenominator() external view override returns (uint256) {
return _feePercentDenominator;
}
function setFeePercentDenominator(uint256 value) external virtual override onlyOwner {
_feePercentDenominator = value;
}
function _getFeePercentInRange(
string memory minFeeType,
string memory maxFeeType,
uint256 input,
uint256 percent
) internal virtual view returns (uint256) {
uint256 feeMin = _fees.getFeeAmountForType(minFeeType);
uint256 feeMax = _fees.getFeeAmountForType(maxFeeType);
uint256 feeAmount = feeMin;
feeAmount += (feeMax - feeMin) * percent / _feePercentDenominator;
return input * feeAmount / _feePercentDenominator;
}
function getFeePercentInRange(
string memory minFeeType,
string memory maxFeeType,
uint256 input,
uint256 percent
) external view override returns (uint256) {
return _getFeePercentInRange(minFeeType, maxFeeType, input, percent);
}
function _takeFeePercentInRange(
string memory minFeeType,
string memory maxFeeType,
uint256 amount,
uint256 percent
) internal virtual {
require(
_getFeePercentInRange(minFeeType, maxFeeType, amount, percent) == msg.value,
"Incorrect fee"
);
if (!_fees.isAddressExemptFromFees(_msgSender()))
payable(address(_fees)).sendValue(msg.value);
}
}
文件 4 的 17:Governable.sol
pragma solidity ^0.8.0;
import { IGovernable } from "./IGovernable.sol";
import { OwnableV2 } from "../Control/OwnableV2.sol";
abstract contract Governable is IGovernable, OwnableV2 {
constructor(address owner_, address governor_) OwnableV2(owner_) {
_governor_ = governor_;
emit GovernorshipTransferred(address(0), _governor());
}
address internal _governor_;
function _governor() internal view returns (address) {
return _governor_;
}
function governor() external view override returns (address) {
return _governor();
}
modifier onlyGovernor() {
require(_governor() == _msgSender(), "Only the governor can execute this function");
_;
}
function _transferGovernorship(address newGovernor) internal virtual {
address oldGovernor = _governor();
_governor_ = newGovernor;
emit GovernorshipTransferred(oldGovernor, _governor());
}
function transferGovernorship(address newGovernor) external override onlyOwner {
_transferGovernorship(newGovernor);
}
}
文件 5 的 17:IDCounter.sol
pragma solidity ^0.8.0;
import { IIDCounter } from "./IIDCounter.sol";
abstract contract IDCounter is IIDCounter {
uint256 internal _count;
function count() external view override returns (uint256) {
return _count;
}
function _next() internal virtual returns (uint256) {
return _count++;
}
}
文件 6 的 17:IFeeCollector.sol
pragma solidity ^0.8.0;
import { IOwnableV2 } from "../Control/IOwnableV2.sol";
interface IFeeCollector is IOwnableV2 {
function feesContract() external view returns (address);
function setFeesContract(address contractAddress_) external;
function feePercentDenominator() external view returns (uint256);
function setFeePercentDenominator(uint256 value) external;
function getFeePercentInRange(
string memory minFeeType,
string memory maxFeeType,
uint256 input,
uint256 percent
) external view returns (uint256 output);
}
文件 7 的 17:IFees.sol
pragma solidity ^0.8.0;
import { IGovernable } from "../Governance/IGovernable.sol";
import { IPausable } from "../Control/IPausable.sol";
interface IFees is IGovernable, IPausable {
function getFeeAmountForType(string memory feeType) external view returns (uint256);
function setFeeAmountForType(string memory feeType, uint256 amount) external;
function setAddressExemptFromFees(address account, bool value) external;
function isAddressExemptFromFees(address account) external view returns (bool);
function feesDistributed() external view returns (uint256 total, uint256 treasury, uint256 staking);
function treasuryFeeAddress() external view returns (address);
function setTreasuryFeeAddress(address payable value) external;
function stakingFeeAddress() external view returns (address);
function setStakingFeeAddress(address payable value) external;
function getFees() external view returns (uint16 treasuryFee, uint16 stakingFee);
function setFees(uint16 treasuryFee, uint16 stakingFee) external;
}
文件 8 的 17:IGovernable.sol
pragma solidity ^0.8.0;
import { IOwnableV2 } from "../Control/IOwnableV2.sol";
interface IGovernable is IOwnableV2 {
event GovernorshipTransferred(address indexed oldGovernor, address indexed newGovernor);
function governor() external view returns (address);
function transferGovernorship(address newGovernor) external;
}
文件 9 的 17:IIDCounter.sol
pragma solidity ^0.8.0;
interface IIDCounter {
function count() external view returns (uint256);
}
文件 10 的 17:IOwnableV2.sol
pragma solidity ^0.8.0;
interface IOwnableV2 {
event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);
function owner() external view returns (address);
function transferOwnership(address newOwner_) external;
}
文件 11 的 17:IPausable.sol
pragma solidity ^0.8.0;
import { IOwnableV2 } from "./IOwnableV2.sol";
interface IPausable is IOwnableV2 {
function paused() external view returns (bool);
function setPaused(bool value) external;
}
文件 12 的 17:ITradingTokenFactoryV1.sol
pragma solidity ^0.8.0;
interface ITradingTokenFactoryV1 {
function createToken(
string memory name_,
string memory symbol_,
uint8 decimals_,
uint256 totalSupply_,
address owner_,
uint256[] memory tokenData) external returns(address);
}
文件 13 的 17:ITradingTokenManagerV1.sol
pragma solidity ^0.8.0;
import { IGovernable } from "../Governance/IGovernable.sol";
import { IPausable } from "../Control/IPausable.sol";
import { IIDCounter } from "../IIDCounter.sol";
import { IFeeCollector } from "../Fees/IFeeCollector.sol";
interface ITradingTokenManagerV1 is IGovernable, IPausable, IIDCounter, IFeeCollector {
event CreatedToken(uint40 indexed id, address tokenAddress);
function factory() external view returns (address);
function setFactory(address value) external;
function createToken(
string memory name_,
string memory symbol_,
uint8 decimals_,
uint256 totalSupply_,
uint256[] memory tokenData
) external payable;
function getTokenDataByAddress(address address_) external view returns (
address tokenAddress_,
string memory name_,
string memory symbol_,
uint8 decimals_,
uint256 totalSupply_,
uint256 totalBalance_,
uint256 launchedAt_,
address owner_,
address dexPair_
);
function getTokenDataById(uint40 id) external view returns (
address tokenAddress_,
string memory name_,
string memory symbol_,
uint8 decimals_,
uint256 totalSupply_,
uint256 totalBalance_,
uint256 launchedAt_,
address owner_,
address dexPair_
);
}
文件 14 的 17:ITradingTokenV1.sol
pragma solidity ^0.8.0;
interface ITradingTokenV1 {
event SwapTokensForETH(
uint256 amountIn,
address[] path
);
function launch() external payable;
function getTokenData() external view returns (
string memory name_,
string memory symbol_,
uint8 decimals_,
uint256 totalSupply_,
uint256 totalBalance_,
uint256 launchedAt,
address owner_,
address dexPair
);
}
文件 15 的 17:OwnableV2.sol
pragma solidity ^0.8.0;
import { Context } from "../library/Context.sol";
import { IOwnableV2 } from "./IOwnableV2.sol";
abstract contract OwnableV2 is IOwnableV2, Context {
constructor(address owner_) {
_owner_ = owner_;
emit OwnershipTransferred(address(0), _owner());
}
address internal _owner_;
function _owner() internal virtual view returns (address) {
return _owner_;
}
function owner() external virtual override view returns (address) {
return _owner();
}
modifier onlyOwner() {
require(_owner() == _msgSender(), "Only the owner can execute this function");
_;
}
function _transferOwnership(address newOwner_) internal virtual onlyOwner {
address oldOwner = _owner();
_owner_ = newOwner_;
emit OwnershipTransferred(oldOwner, _owner());
}
function transferOwnership(address newOwner_) external virtual override onlyOwner {
_transferOwnership(newOwner_);
}
}
文件 16 的 17:Pausable.sol
pragma solidity ^0.8.0;
import { IPausable } from "./IPausable.sol";
import { OwnableV2 } from "./OwnableV2.sol";
abstract contract Pausable is IPausable, OwnableV2 {
bool internal _paused;
modifier onlyNotPaused() {
require(!_paused, "Contract is paused");
_;
}
function paused() external view override returns (bool) {
return _paused;
}
function _setPaused(bool value) internal virtual {
_paused = value;
}
function setPaused(bool value) external override onlyOwner {
_setPaused(value);
}
}
文件 17 的 17:TradingTokenManagerV1..sol
pragma solidity ^0.8.0;
import { ITradingTokenManagerV1 } from "./ITradingTokenManagerV1.sol";
import { Address } from "../library/Address.sol";
import { Governable } from "../Governance/Governable.sol";
import { Pausable } from "../Control/Pausable.sol";
import { IDCounter } from "../IDCounter.sol";
import { FeeCollector } from "../Fees/FeeCollector.sol";
import { ITradingTokenV1 } from "./ITradingTokenV1.sol";
import { ITradingTokenFactoryV1 } from "./ITradingTokenFactoryV1.sol";
contract TradingTokenManagerV1 is ITradingTokenManagerV1, Governable, Pausable, IDCounter, FeeCollector {
using Address for address payable;
constructor(address factoryAddress, address feesAddress) Governable(_msgSender(), _msgSender()) {
_factory = ITradingTokenFactoryV1(factoryAddress);
_setFeesContract(feesAddress);
}
ITradingTokenFactoryV1 internal _factory;
mapping(uint40 => ITradingTokenV1) private _tokens;
mapping(address => uint40) private _tokenAddressMap;
function factory() external view override returns (address) {
return address(_factory);
}
function setFactory(address value) external virtual override onlyOwner {
_factory = ITradingTokenFactoryV1(value);
}
function createToken(
string memory name_,
string memory symbol_,
uint8 decimals_,
uint256 totalSupply_,
uint256[] memory tokenData
) external payable virtual override onlyNotPaused takeFee("DeployStandardToken") {
uint40 id = uint40(_next());
_tokens[id] = ITradingTokenV1(
_factory.createToken(
name_,
symbol_,
decimals_,
totalSupply_,
_msgSender(),
tokenData
)
);
address tokenAddress = address(_tokens[id]);
_tokenAddressMap[tokenAddress] = id;
emit CreatedToken(id, tokenAddress);
}
function _getTokenDataById(uint40 id) internal virtual view returns (
address tokenAddress_,
string memory name_,
string memory symbol_,
uint8 decimals_,
uint256 totalSupply_,
uint256 totalBalance_,
uint256 launchedAt_,
address owner_,
address dexPair_
){
(
name_,
symbol_,
decimals_,
totalSupply_,
totalBalance_,
launchedAt_,
owner_,
dexPair_
) = _tokens[id].getTokenData();
tokenAddress_ = address(_tokens[id]);
}
function getTokenDataById(uint40 id) external override view returns (
address tokenAddress_,
string memory name_,
string memory symbol_,
uint8 decimals_,
uint256 totalSupply_,
uint256 totalBalance_,
uint256 launchedAt_,
address owner_,
address dexPair_
){
return _getTokenDataById(id);
}
function getTokenDataByAddress(address address_) external override view returns (
address tokenAddress_,
string memory name_,
string memory symbol_,
uint8 decimals_,
uint256 totalSupply_,
uint256 totalBalance_,
uint256 launchedAt_,
address owner_,
address dexPair_
){
return _getTokenDataById(_tokenAddressMap[address_]);
}
receive() external payable {}
}
{
"compilationTarget": {
"src/Tokens/TradingTokenManagerV1..sol": "TradingTokenManagerV1"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs",
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"factoryAddress","type":"address"},{"internalType":"address","name":"feesAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint40","name":"id","type":"uint40"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"CreatedToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"GovernorshipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"totalSupply_","type":"uint256"},{"internalType":"uint256[]","name":"tokenData","type":"uint256[]"}],"name":"createToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercentDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"minFeeType","type":"string"},{"internalType":"string","name":"maxFeeType","type":"string"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"getFeePercentInRange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"getTokenDataByAddress","outputs":[{"internalType":"address","name":"tokenAddress_","type":"address"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"totalSupply_","type":"uint256"},{"internalType":"uint256","name":"totalBalance_","type":"uint256"},{"internalType":"uint256","name":"launchedAt_","type":"uint256"},{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"dexPair_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint40","name":"id","type":"uint40"}],"name":"getTokenDataById","outputs":[{"internalType":"address","name":"tokenAddress_","type":"address"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"totalSupply_","type":"uint256"},{"internalType":"uint256","name":"totalBalance_","type":"uint256"},{"internalType":"uint256","name":"launchedAt_","type":"uint256"},{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"dexPair_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"value","type":"address"}],"name":"setFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setFeePercentDenominator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"setFeesContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newGovernor","type":"address"}],"name":"transferGovernorship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]