Contract Overview
Balance:
0 ETH
ETH Value:
$0.00
My Name Tag:
Not Available
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x99c734870b8d47a0d77c3ac020072c238ce0d749ce179a2b897e4fa8b20cb1a4 | Accept Owner | 11152136 | 694 days 4 hrs ago | 0xbbfd4092feafa7339c1a75f494327806e916c288 | IN | 0xa7b799832b46b51b2b6a156fdce58525de24ac0f | 0 ETH | 0.00021882562 ETH | |
0xe4f9c78b03553926c5810ba305dca19eadac831ea41f70fe57284c52d5e2559c | Set Pending Owne... | 11152088 | 694 days 4 hrs ago | ApeX Protocol: Deployer | IN | 0xa7b799832b46b51b2b6a156fdce58525de24ac0f | 0 ETH | 0.000268076306 ETH | |
0x60fa9161539638d9936321a4402c601ca6e8b0844539ef51041f01c63e6bf85b | Create Pair | 9624480 | 717 days 3 hrs ago | ApeX Protocol: Deployer | IN | 0xa7b799832b46b51b2b6a156fdce58525de24ac0f | 0 ETH | 0.001951434043 ETH | |
0x1b71395c2a84d86e84595cfc88209ec23b72b388aa7a10f368bf78652b851e96 | Init | 9624459 | 717 days 3 hrs ago | ApeX Protocol: Deployer | IN | 0xa7b799832b46b51b2b6a156fdce58525de24ac0f | 0 ETH | 0.000232281864 ETH | |
0xdffee6cc502b38fe11d1318f7632458e7cd916b489c395b3e596019346ae3e00 | 0x60806040 | 9624436 | 717 days 3 hrs ago | ApeX Protocol: Deployer | IN | Contract Creation | 0 ETH | 0.00174554236 ETH |
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x357c471049a5b365e93ccf8c8dd79c69c394424f The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
PairFactory
Compiler Version
v0.8.2+commit.661d1103
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; import "./interfaces/IPairFactory.sol"; import "./interfaces/IAmmFactory.sol"; import "./interfaces/IMarginFactory.sol"; import "./interfaces/IAmm.sol"; import "./interfaces/IMargin.sol"; import "../utils/Ownable.sol"; contract PairFactory is IPairFactory, Ownable { address public override ammFactory; address public override marginFactory; constructor() { owner = msg.sender; } function init(address ammFactory_, address marginFactory_) external onlyOwner { require(ammFactory == address(0) && marginFactory == address(0), "PairFactory: ALREADY_INITED"); require(ammFactory_ != address(0) && marginFactory_ != address(0), "PairFactory: ZERO_ADDRESS"); ammFactory = ammFactory_; marginFactory = marginFactory_; } function createPair(address baseToken, address quoteToken) external override returns (address amm, address margin) { amm = IAmmFactory(ammFactory).createAmm(baseToken, quoteToken); margin = IMarginFactory(marginFactory).createMargin(baseToken, quoteToken); IAmmFactory(ammFactory).initAmm(baseToken, quoteToken, margin); IMarginFactory(marginFactory).initMargin(baseToken, quoteToken, amm); emit NewPair(baseToken, quoteToken, amm, margin); } function getAmm(address baseToken, address quoteToken) external view override returns (address) { return IAmmFactory(ammFactory).getAmm(baseToken, quoteToken); } function getMargin(address baseToken, address quoteToken) external view override returns (address) { return IMarginFactory(marginFactory).getMargin(baseToken, quoteToken); } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; interface IPairFactory { event NewPair(address indexed baseToken, address indexed quoteToken, address amm, address margin); function createPair(address baseToken, address quotoToken) external returns (address amm, address margin); function ammFactory() external view returns (address); function marginFactory() external view returns (address); function getAmm(address baseToken, address quoteToken) external view returns (address); function getMargin(address baseToken, address quoteToken) external view returns (address); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; interface IAmmFactory { event AmmCreated(address indexed baseToken, address indexed quoteToken, address amm); function createAmm(address baseToken, address quoteToken) external returns (address amm); function initAmm( address baseToken, address quoteToken, address margin ) external; function setFeeTo(address) external; function setFeeToSetter(address) external; function upperFactory() external view returns (address); function config() external view returns (address); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getAmm(address baseToken, address quoteToken) external view returns (address amm); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; interface IMarginFactory { event MarginCreated(address indexed baseToken, address indexed quoteToken, address margin); function createMargin(address baseToken, address quoteToken) external returns (address margin); function initMargin( address baseToken, address quoteToken, address amm ) external; function upperFactory() external view returns (address); function config() external view returns (address); function getMargin(address baseToken, address quoteToken) external view returns (address margin); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; interface IAmm { event Mint(address indexed sender, address indexed to, uint256 baseAmount, uint256 quoteAmount, uint256 liquidity); event Burn(address indexed sender, address indexed to, uint256 baseAmount, uint256 quoteAmount, uint256 liquidity); event Swap(address indexed trader, address indexed inputToken, address indexed outputToken, uint256 inputAmount, uint256 outputAmount); event ForceSwap(address indexed trader, address indexed inputToken, address indexed outputToken, uint256 inputAmount, uint256 outputAmount); event Rebase(uint256 quoteReserveBefore, uint256 quoteReserveAfter, uint256 _baseReserve , uint256 quoteReserveFromInternal, uint256 quoteReserveFromExternal ); event Sync(uint112 reserveBase, uint112 reserveQuote); // only factory can call this function function initialize( address baseToken_, address quoteToken_, address margin_ ) external; function mint(address to) external returns ( uint256 baseAmount, uint256 quoteAmount, uint256 liquidity ); function burn(address to) external returns ( uint256 baseAmount, uint256 quoteAmount, uint256 liquidity ); // only binding margin can call this function function swap( address trader, address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount ) external returns (uint256[2] memory amounts); // only binding margin can call this function function forceSwap( address trader, address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount ) external; function rebase() external returns (uint256 quoteReserveAfter); function collectFee() external returns (bool feeOn); function factory() external view returns (address); function config() external view returns (address); function baseToken() external view returns (address); function quoteToken() external view returns (address); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function margin() external view returns (address); function lastPrice() external view returns (uint256); function getReserves() external view returns ( uint112 reserveBase, uint112 reserveQuote, uint32 blockTimestamp ); function estimateSwap( address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount ) external view returns (uint256[2] memory amounts); function MINIMUM_LIQUIDITY() external pure returns (uint256); function getFeeLiquidity() external view returns (uint256); function getTheMaxBurnLiquidity() external view returns (uint256 maxLiquidity); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; interface IMargin { struct Position { int256 quoteSize; //quote amount of position int256 baseSize; //margin + fundingFee + unrealizedPnl + deltaBaseWhenClosePosition uint256 tradeSize; //if quoteSize>0 unrealizedPnl = baseValueOfQuoteSize - tradeSize; if quoteSize<0 unrealizedPnl = tradeSize - baseValueOfQuoteSize; } event AddMargin(address indexed trader, uint256 depositAmount, Position position); event RemoveMargin( address indexed trader, address indexed to, uint256 withdrawAmount, int256 fundingFee, uint256 withdrawAmountFromMargin, Position position ); event OpenPosition( address indexed trader, uint8 side, uint256 baseAmount, uint256 quoteAmount, int256 fundingFee, Position position ); event ClosePosition( address indexed trader, uint256 quoteAmount, uint256 baseAmount, int256 fundingFee, Position position ); event Liquidate( address indexed liquidator, address indexed trader, address indexed to, uint256 quoteAmount, uint256 baseAmount, uint256 bonus, int256 fundingFee, Position position ); event UpdateCPF(uint256 timeStamp, int256 cpf); /// @notice only factory can call this function /// @param baseToken_ margin's baseToken. /// @param quoteToken_ margin's quoteToken. /// @param amm_ amm address. function initialize( address baseToken_, address quoteToken_, address amm_ ) external; /// @notice add margin to trader /// @param trader . /// @param depositAmount base amount to add. function addMargin(address trader, uint256 depositAmount) external; /// @notice remove margin to msg.sender /// @param withdrawAmount base amount to withdraw. function removeMargin( address trader, address to, uint256 withdrawAmount ) external; /// @notice open position with side and quoteAmount by msg.sender /// @param side long or short. /// @param quoteAmount quote amount. function openPosition( address trader, uint8 side, uint256 quoteAmount ) external returns (uint256 baseAmount); /// @notice close msg.sender's position with quoteAmount /// @param quoteAmount quote amount to close. function closePosition(address trader, uint256 quoteAmount) external returns (uint256 baseAmount); /// @notice liquidate trader function liquidate(address trader, address to) external returns ( uint256 quoteAmount, uint256 baseAmount, uint256 bonus ); function updateCPF() external returns (int256); /// @notice get factory address function factory() external view returns (address); /// @notice get config address function config() external view returns (address); /// @notice get base token address function baseToken() external view returns (address); /// @notice get quote token address function quoteToken() external view returns (address); /// @notice get amm address of this margin function amm() external view returns (address); /// @notice get all users' net position of quote function netPosition() external view returns (int256 netQuotePosition); /// @notice get all users' net position of quote function totalPosition() external view returns (uint256 totalQuotePosition); /// @notice get trader's position function getPosition(address trader) external view returns ( int256 baseSize, int256 quoteSize, uint256 tradeSize ); /// @notice get withdrawable margin of trader function getWithdrawable(address trader) external view returns (uint256 amount); /// @notice check if can liquidate this trader's position function canLiquidate(address trader) external view returns (bool); /// @notice calculate the latest funding fee with current position function calFundingFee(address trader) external view returns (int256 fundingFee); /// @notice calculate the latest debt ratio with Pnl and funding fee function calDebtRatio(address trader) external view returns (uint256 debtRatio); function calUnrealizedPnl(address trader) external view returns (int256); function getNewLatestCPF() external view returns (int256); function querySwapBaseWithAmm(bool isLong, uint256 quoteAmount) external view returns (uint256); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; abstract contract Ownable { address public owner; address public pendingOwner; event NewOwner(address indexed oldOwner, address indexed newOwner); event NewPendingOwner(address indexed oldPendingOwner, address indexed newPendingOwner); modifier onlyOwner() { require(msg.sender == owner, "Ownable: REQUIRE_OWNER"); _; } function setPendingOwner(address newPendingOwner) external onlyOwner { require(pendingOwner != newPendingOwner, "Ownable: ALREADY_SET"); emit NewPendingOwner(pendingOwner, newPendingOwner); pendingOwner = newPendingOwner; } function acceptOwner() external { require(msg.sender == pendingOwner, "Ownable: REQUIRE_PENDING_OWNER"); address oldOwner = owner; address oldPendingOwner = pendingOwner; owner = pendingOwner; pendingOwner = address(0); emit NewOwner(oldOwner, owner); emit NewPendingOwner(oldPendingOwner, pendingOwner); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"NewOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"baseToken","type":"address"},{"indexed":true,"internalType":"address","name":"quoteToken","type":"address"},{"indexed":false,"internalType":"address","name":"amm","type":"address"},{"indexed":false,"internalType":"address","name":"margin","type":"address"}],"name":"NewPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldPendingOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newPendingOwner","type":"address"}],"name":"NewPendingOwner","type":"event"},{"inputs":[],"name":"acceptOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ammFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"quoteToken","type":"address"}],"name":"createPair","outputs":[{"internalType":"address","name":"amm","type":"address"},{"internalType":"address","name":"margin","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"quoteToken","type":"address"}],"name":"getAmm","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"quoteToken","type":"address"}],"name":"getMargin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ammFactory_","type":"address"},{"internalType":"address","name":"marginFactory_","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marginFactory","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":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingOwner","type":"address"}],"name":"setPendingOwner","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063c9c6539611610066578063c9c6539614610121578063dacda92f14610154578063e30c397814610167578063ebbc49651461017a578063f09a4016146101825761009e565b80630db58602146100a357806365cc7a1d146100d35780638da5cb5b146100e6578063bacf68ed146100f9578063c42069ec1461010c575b600080fd5b6100b66100b1366004610834565b610195565b6040516001600160a01b0390911681526020015b60405180910390f35b6100b66100e1366004610834565b610223565b6000546100b6906001600160a01b031681565b6003546100b6906001600160a01b031681565b61011f61011a3660046107fc565b61025e565b005b61013461012f366004610834565b610367565b604080516001600160a01b039384168152929091166020830152016100ca565b6002546100b6906001600160a01b031681565b6001546100b6906001600160a01b031681565b61011f6105ad565b61011f610190366004610834565b6106a1565b6003546040516306dac30160e11b81526001600160a01b03848116600483015283811660248301526000921690630db58602906044015b60206040518083038186803b1580156101e457600080fd5b505afa1580156101f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061021c9190610818565b9392505050565b6002546040516365cc7a1d60e01b81526001600160a01b038481166004830152838116602483015260009216906365cc7a1d906044016101cc565b6000546001600160a01b031633146102b65760405162461bcd60e51b815260206004820152601660248201527527bbb730b136329d102922a8aaa4a922afa7aba722a960511b60448201526064015b60405180910390fd5b6001546001600160a01b038281169116141561030b5760405162461bcd60e51b815260206004820152601460248201527313dddb98589b194e881053149150511657d4d15560621b60448201526064016102ad565b6001546040516001600160a01b038084169216907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b600254604051635131c85b60e01b81526001600160a01b03848116600483015283811660248301526000928392911690635131c85b90604401602060405180830381600087803b1580156103ba57600080fd5b505af11580156103ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f29190610818565b600354604051630211406b60e01b81526001600160a01b0387811660048301528681166024830152929450911690630211406b90604401602060405180830381600087803b15801561044357600080fd5b505af1158015610457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047b9190610818565b6002546040516335e30d4160e01b81526001600160a01b038781166004830152868116602483015280841660448301529293509116906335e30d4190606401600060405180830381600087803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b50506003546040516325c0f76560e21b81526001600160a01b038881166004830152878116602483015286811660448301529091169250639703dd949150606401600060405180830381600087803b15801561054357600080fd5b505af1158015610557573d6000803e3d6000fd5b5050604080516001600160a01b03868116825285811660208301528088169450881692507fb231fe977931114284ce64d77cdfe4bcb8121c500a095d281b55216f7e225854910160405180910390a39250929050565b6001546001600160a01b031633146106075760405162461bcd60e51b815260206004820152601e60248201527f4f776e61626c653a20524551554952455f50454e44494e475f4f574e4552000060448201526064016102ad565b60008054600180546001600160a01b038082166001600160a01b03198086168217808855931690935560405193811694929391169184917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b23649190a36001546040516001600160a01b03918216918316907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a35050565b6000546001600160a01b031633146106f45760405162461bcd60e51b815260206004820152601660248201527527bbb730b136329d102922a8aaa4a922afa7aba722a960511b60448201526064016102ad565b6002546001600160a01b031615801561071657506003546001600160a01b0316155b6107625760405162461bcd60e51b815260206004820152601b60248201527f50616972466163746f72793a20414c52454144595f494e49544544000000000060448201526064016102ad565b6001600160a01b0382161580159061078257506001600160a01b03811615155b6107ce5760405162461bcd60e51b815260206004820152601960248201527f50616972466163746f72793a205a45524f5f414444524553530000000000000060448201526064016102ad565b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055565b60006020828403121561080d578081fd5b813561021c8161086c565b600060208284031215610829578081fd5b815161021c8161086c565b60008060408385031215610846578081fd5b82356108518161086c565b915060208301356108618161086c565b809150509250929050565b6001600160a01b038116811461088157600080fd5b5056fea264697066735822122062dca47b12de259323ac9a87b400a47118bedff2a15c9585bf524b29ec63a47264736f6c63430008020033
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.