Contract
0xDE3447Eb47EcDf9B5F90E7A6960a14663916CeE8
3
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Pool
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0 <0.9.0; import './IPool.sol'; import './PoolStorage.sol'; contract Pool is PoolStorage { function setImplementation(address newImplementation) external _onlyAdmin_ { require( IPool(newImplementation).nameId() == keccak256(abi.encodePacked('PoolImplementation')), 'Pool.setImplementation: not pool implementation' ); implementation = newImplementation; emit NewImplementation(newImplementation); } function setProtocolFeeCollector(address newProtocolFeeCollector) external _onlyAdmin_ { protocolFeeCollector = newProtocolFeeCollector; emit NewProtocolFeeCollector(newProtocolFeeCollector); } fallback() external payable { _delegate(); } receive() external payable { } function _delegate() internal { address imp = implementation; assembly { calldatacopy(0, 0, calldatasize()) let result := delegatecall(gas(), imp, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch result case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0 <0.9.0; import '../utils/INameVersion.sol'; import '../utils/IAdmin.sol'; interface IPool is INameVersion, IAdmin { function implementation() external view returns (address); function protocolFeeCollector() external view returns (address); function liquidity() external view returns (int256); function lpsPnl() external view returns (int256); function cumulativePnlPerLiquidity() external view returns (int256); function protocolFeeAccrued() external view returns (int256); function setImplementation(address newImplementation) external; function addMarket(address market) external; function approveSwapper(address underlying) external; function collectProtocolFee() external; function claimVenusLp(address account) external; function claimVenusTrader(address account) external; struct OracleSignature { bytes32 oracleSymbolId; uint256 timestamp; uint256 value; uint8 v; bytes32 r; bytes32 s; } function addLiquidity(address underlying, uint256 amount, OracleSignature[] memory oracleSignatures) external payable; function removeLiquidity(address underlying, uint256 amount, OracleSignature[] memory oracleSignatures) external; function addMargin(address underlying, uint256 amount, OracleSignature[] memory oracleSignatures) external payable; function removeMargin(address underlying, uint256 amount, OracleSignature[] memory oracleSignatures) external; function trade(string memory symbolName, int256 tradeVolume, int256 priceLimit, OracleSignature[] memory oracleSignatures) external; function liquidate(uint256 pTokenId, OracleSignature[] memory oracleSignatures) external; struct LpInfo { address vault; int256 amountB0; int256 liquidity; int256 cumulativePnlPerLiquidity; } function lpInfos(uint256) external view returns (LpInfo memory); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0 <0.9.0; import '../utils/Admin.sol'; abstract contract PoolStorage is Admin { // admin will be truned in to Timelock after deployment event NewImplementation(address newImplementation); event NewProtocolFeeCollector(address newProtocolFeeCollector); bool internal _mutex; modifier _reentryLock_() { require(!_mutex, 'Pool: reentry'); _mutex = true; _; _mutex = false; } address public implementation; address public protocolFeeCollector; // underlying => vToken, supported markets mapping (address => address) public markets; struct LpInfo { address vault; int256 amountB0; int256 liquidity; int256 cumulativePnlPerLiquidity; } // lTokenId => LpInfo mapping (uint256 => LpInfo) public lpInfos; struct TdInfo { address vault; int256 amountB0; } // pTokenId => TdInfo mapping (uint256 => TdInfo) public tdInfos; int256 public liquidity; int256 public lpsPnl; int256 public cumulativePnlPerLiquidity; int256 public protocolFeeAccrued; }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0 <0.9.0; interface INameVersion { function nameId() external view returns (bytes32); function versionId() external view returns (bytes32); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0 <0.9.0; interface IAdmin { event NewAdmin(address indexed newAdmin); function admin() external view returns (address); function setAdmin(address newAdmin) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0 <0.9.0; import './IAdmin.sol'; abstract contract Admin is IAdmin { address public admin; modifier _onlyAdmin_() { require(msg.sender == admin, 'Admin: only admin'); _; } constructor () { admin = msg.sender; emit NewAdmin(admin); } function setAdmin(address newAdmin) external _onlyAdmin_ { admin = newAdmin; emit NewAdmin(newAdmin); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"NewImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newProtocolFeeCollector","type":"address"}],"name":"NewProtocolFeeCollector","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cumulativePnlPerLiquidity","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lpInfos","outputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"int256","name":"amountB0","type":"int256"},{"internalType":"int256","name":"liquidity","type":"int256"},{"internalType":"int256","name":"cumulativePnlPerLiquidity","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpsPnl","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"markets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeAccrued","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"setImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newProtocolFeeCollector","type":"address"}],"name":"setProtocolFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tdInfos","outputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"int256","name":"amountB0","type":"int256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50600080546001600160a01b03191633908117825560405190917f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c91a26106888061005c6000396000f3fe6080604052600436106100c65760003560e01c8063aec47b7e1161007f578063d784d42611610059578063d784d426146102b9578063dd19ca1b146102d9578063e9cc0b07146102ef578063f851a44014610305576100cd565b8063aec47b7e14610224578063c58a26bd14610283578063cfca314714610299576100cd565b80631a686502146100d757806328eeb472146101005780635c60da1b14610176578063704b6c02146101ae578063850a1501146101ce5780638e8f294b146101ee576100cd565b366100cd57005b6100d5610325565b005b3480156100e357600080fd5b506100ed60065481565b6040519081526020015b60405180910390f35b34801561010c57600080fd5b5061014c61011b3660046105c5565b60046020526000908152604090208054600182015460028301546003909301546001600160a01b0390921692909184565b604080516001600160a01b03909516855260208501939093529183015260608201526080016100f7565b34801561018257600080fd5b50600154610196906001600160a01b031681565b6040516001600160a01b0390911681526020016100f7565b3480156101ba57600080fd5b506100d56101c93660046105de565b610355565b3480156101da57600080fd5b50600254610196906001600160a01b031681565b3480156101fa57600080fd5b506101966102093660046105de565b6003602052600090815260409020546001600160a01b031681565b34801561023057600080fd5b5061026461023f3660046105c5565b600560205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016100f7565b34801561028f57600080fd5b506100ed60095481565b3480156102a557600080fd5b506100d56102b43660046105de565b6103d0565b3480156102c557600080fd5b506100d56102d43660046105de565b61044f565b3480156102e557600080fd5b506100ed60075481565b3480156102fb57600080fd5b506100ed60085481565b34801561031157600080fd5b50600054610196906001600160a01b031681565b6001546001600160a01b03163660008037600080366000845af43d6000803e808015610350573d6000f35b3d6000fd5b6000546001600160a01b031633146103885760405162461bcd60e51b815260040161037f9061060e565b60405180910390fd5b600080546001600160a01b0319166001600160a01b038316908117825560405190917f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c91a250565b6000546001600160a01b031633146103fa5760405162461bcd60e51b815260040161037f9061060e565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f4edba1d51f30962ec831a164309957e467e44757a3cf297e59a5f77ef367f3c3906020015b60405180910390a150565b6000546001600160a01b031633146104795760405162461bcd60e51b815260040161037f9061060e565b604051712837b7b624b6b83632b6b2b73a30ba34b7b760711b602082015260320160405160208183030381529060405280519060200120816001600160a01b031663c1b0844f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105129190610639565b146105775760405162461bcd60e51b815260206004820152602f60248201527f506f6f6c2e736574496d706c656d656e746174696f6e3a206e6f7420706f6f6c60448201526e1034b6b83632b6b2b73a30ba34b7b760891b606482015260840161037f565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f6b70829fcbe4891157f7a7496f9870927de3c8237adbe9cd39bae09b7382c40990602001610444565b6000602082840312156105d757600080fd5b5035919050565b6000602082840312156105f057600080fd5b81356001600160a01b038116811461060757600080fd5b9392505050565b60208082526011908201527020b236b4b71d1037b7363c9030b236b4b760791b604082015260600190565b60006020828403121561064b57600080fd5b505191905056fea2646970667358221220a3a63e8be9944715671037605f63ff226fc4cb2b4e0c450c0a68355fc23af15964736f6c634300080a0033
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.