Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 15 from a total of 15 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Underly... | 17814877 | 707 days ago | IN | 0 ETH | 0.00178249 | ||||
Withdraw Fee | 17814876 | 707 days ago | IN | 0 ETH | 0.0018088 | ||||
Transfer Underly... | 17814874 | 707 days ago | IN | 0 ETH | 0.00162822 | ||||
Withdraw Fee | 17814874 | 707 days ago | IN | 0 ETH | 0.00184342 | ||||
Transfer Underly... | 17814872 | 707 days ago | IN | 0 ETH | 0.00151049 | ||||
Withdraw Fee | 17814871 | 707 days ago | IN | 0 ETH | 0.00172569 | ||||
Transfer Underly... | 17763996 | 714 days ago | IN | 0 ETH | 0.00250175 | ||||
Withdraw Fee | 17763993 | 714 days ago | IN | 0 ETH | 0.00285818 | ||||
Transfer Ownersh... | 17591497 | 739 days ago | IN | 0 ETH | 0.0004982 | ||||
Set Transfer Add... | 17591496 | 739 days ago | IN | 0 ETH | 0.0008584 | ||||
Add To Whitelist | 17591495 | 739 days ago | IN | 0 ETH | 0.00084269 | ||||
Add To Whitelist | 17591494 | 739 days ago | IN | 0 ETH | 0.00084363 | ||||
Add To Whitelist | 17591493 | 739 days ago | IN | 0 ETH | 0.00088486 | ||||
Add To Whitelist | 17591492 | 739 days ago | IN | 0 ETH | 0.00092038 | ||||
Add To Whitelist | 17591491 | 739 days ago | IN | 0 ETH | 0.00089949 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
PerformanceTokenManagerGamma
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-30 */ /** *Submitted for verification at Optimistic.Etherscan.io on 2023-06-30 */ /** *Submitted for verification at polygonscan.com on 2023-06-30 */ /** *Submitted for verification at Arbiscan on 2023-06-23 */ // Sources flattened with hardhat v2.16.0 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); } // File contracts/utils/PerformanceTokenManagerGamma.sol pragma solidity 0.8.11; interface PerformanceToken { function updatePerformanceFee(uint256 _perfFee) external; function withdrawFee() external; function transferOwnership(address newOwner) external; function token() external returns (address); } /** * @title PerformanceTokenManagerGamma * @dev Contract to manage Performance Tokens and act as a 1 out of 2 multisig. */ contract PerformanceTokenManagerGamma is Ownable { mapping(address => bool) public performanceTokenWhitelist; // Whitelist of Performance Tokens mapping(address => uint256) public tokenBalances; // Balances of Performance Tokens address public transferAddress; // Address to transfer tokens event TokenAddedToWhitelist(address indexed perfToken); event TokenRemovedFromWhitelist(address indexed perfToken); event FeeWithdrawn(address indexed perfToken, address indexed recipient, uint256 amount); event TokensEarned(address indexed perfToken, address indexed recipient, uint256 amount); event TransferAddressUpdated(address indexed previousAddress, address indexed newAddress); /** * @dev Adds a Performance Token to the whitelist. * @param perfToken The address of the Performance Token contract. */ function addToWhitelist(address perfToken) external onlyOwner { performanceTokenWhitelist[perfToken] = true; emit TokenAddedToWhitelist(perfToken); } /** * @dev Removes a Performance Token from the whitelist. * @param perfToken The address of the Performance Token contract. */ function removeFromWhitelist(address perfToken) external onlyOwner { performanceTokenWhitelist[perfToken] = false; emit TokenRemovedFromWhitelist(perfToken); } /** * @dev Checks if a Performance Token is whitelisted. * @param perfToken The address of the Performance Token contract. * @return A boolean indicating if the Performance Token is whitelisted. */ function isWhitelisted(address perfToken) external view returns (bool) { return performanceTokenWhitelist[perfToken]; } /** * @dev Sets the address to transfer tokens. * @param newAddress The new address to transfer tokens. */ function setTransferAddress(address newAddress) external onlyOwner { emit TransferAddressUpdated(transferAddress, newAddress); transferAddress = newAddress; } /** * @dev Withdraws the performance fee from a Performance Token contract. * @param perfToken The address of the Performance Token contract. */ function withdrawFee(address perfToken) external { require(performanceTokenWhitelist[perfToken], "Token not whitelisted"); PerformanceToken(perfToken).withdrawFee(); emit FeeWithdrawn(perfToken, msg.sender, 0); } /** * @dev Transfers the entire balance of ERC20 tokens held by the contract to the transfer address. * @param perfToken The address of the ERC20 token contract. * @return The amount of tokens transferred. */ function transferUnderlying(address perfToken) external returns (uint256) { require(performanceTokenWhitelist[perfToken], "Token not whitelisted"); IERC20 token = IERC20(PerformanceToken(perfToken).token()); uint256 balance = token.balanceOf(address(this)); token.transfer(transferAddress, balance); tokenBalances[perfToken] += balance; emit TokensEarned(perfToken, transferAddress, balance); return balance; } /** * @dev Allows the owner to call a target contract with specific data. * @param target The address of the target contract to call. * @param data The data to be sent to the target contract. * @return The result of the target contract call. */ function ownerCall(address target, bytes memory data) external onlyOwner returns (bytes memory) { (bool success, bytes memory result) = target.call(data); require(success, "CallFailed"); return result; } /** * @dev Updates the performance fee of a Performance Token contract. * @param perfToken The address of the Performance Token contract. * @param newFee The new performance fee to be set. */ function updatePerformanceFee(address perfToken, uint256 newFee) external onlyOwner { require(performanceTokenWhitelist[perfToken], "Token not whitelisted"); PerformanceToken(perfToken).updatePerformanceFee(newFee); } /** * @dev Transfers ownership of a Performance Token contract. * @param perfToken The address of the Performance Token contract. * @param newOwner The address of the new owner. */ function transferTokenOwnership(address perfToken, address newOwner) external onlyOwner { require(performanceTokenWhitelist[perfToken], "Token not whitelisted"); PerformanceToken(perfToken).transferOwnership(newOwner); } /** * @dev Allows the owner to remove any ETH stored in the contract. */ function removeEth() external onlyOwner { payable(owner()).transfer(address(this).balance); } /** * @dev Transfers any ERC20 token held by the contract to a specified address. * @param _token The address of the Performance Token contract. * @return The amount of tokens transferred. */ function transferAnyERC20(address _token) external onlyOwner returns (uint256) { IERC20 token = IERC20(_token); uint256 balance = token.balanceOf(address(this)); token.transfer(owner(), balance); return balance; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"perfToken","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FeeWithdrawn","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":true,"internalType":"address","name":"perfToken","type":"address"}],"name":"TokenAddedToWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"perfToken","type":"address"}],"name":"TokenRemovedFromWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"perfToken","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensEarned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"TransferAddressUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"perfToken","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"perfToken","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"ownerCall","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"performanceTokenWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"perfToken","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setTransferAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"transferAnyERC20","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"perfToken","type":"address"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferTokenOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"perfToken","type":"address"}],"name":"transferUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"perfToken","type":"address"},{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updatePerformanceFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"perfToken","type":"address"}],"name":"withdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610dba8061007e6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638da5cb5b116100a2578063e1373b2711610071578063e1373b271461024b578063e43252d71461025e578063eb66dbcf14610271578063f2fde38b14610291578063f444fdd8146102a457600080fd5b80638da5cb5b146101dd578063ac4e658014610202578063cd774b9714610215578063d4b4084e1461023857600080fd5b80633af32abf116100de5780633af32abf14610153578063523fba7f14610194578063715018a6146101c25780638ab1d681146101ca57600080fd5b8063185a5671146101105780631ac3ddeb146101255780631f4a6d3214610138578063383fe46714610140575b600080fd5b61012361011e366004610af5565b6102b7565b005b610123610133366004610af5565b61031b565b6101236103f2565b61012361014e366004610b19565b610437565b61017f610161366004610af5565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6101b46101a2366004610af5565b60026020526000908152604090205481565b60405190815260200161018b565b6101236104d7565b6101236101d8366004610af5565b6104eb565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161018b565b610123610210366004610b52565b61053c565b61017f610223366004610af5565b60016020526000908152604090205460ff1681565b6101b4610246366004610af5565b6105a9565b6101b4610259366004610af5565b6106bc565b61012361026c366004610af5565b6108bb565b61028461027f366004610b94565b610912565b60405161018b9190610c88565b61012361029f366004610af5565b6109c0565b6003546101ea906001600160a01b031681565b6102bf610a36565b6003546040516001600160a01b038084169216907f0c752b9b11fd9a446c76e6b4cec603d51f2dc603428e800999192409062cbabe90600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526001602052604090205460ff1661035c5760405162461bcd60e51b815260040161035390610cbb565b60405180910390fd5b806001600160a01b031663e941fa786040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561039757600080fd5b505af11580156103ab573d6000803e3d6000fd5b5050604051600081523392506001600160a01b03841691507eed5939179dc194223f0edd1517ecee2210b22da7f82c8e4b1795e93b9f06aa9060200160405180910390a350565b6103fa610a36565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610434573d6000803e3d6000fd5b50565b61043f610a36565b6001600160a01b03821660009081526001602052604090205460ff166104775760405162461bcd60e51b815260040161035390610cbb565b60405163f2fde38b60e01b81526001600160a01b03828116600483015283169063f2fde38b906024015b600060405180830381600087803b1580156104bb57600080fd5b505af11580156104cf573d6000803e3d6000fd5b505050505050565b6104df610a36565b6104e96000610a90565b565b6104f3610a36565b6001600160a01b038116600081815260016020526040808220805460ff19169055517fdd2e6d9f52cbe8f695939d018b7d4a216dc613a669876163ac548b916489d9179190a250565b610544610a36565b6001600160a01b03821660009081526001602052604090205460ff1661057c5760405162461bcd60e51b815260040161035390610cbb565b604051630e89813360e41b8152600481018290526001600160a01b0383169063e8981330906024016104a1565b60006105b3610a36565b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156105fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106209190610cea565b9050816001600160a01b031663a9059cbb6106436000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b49190610d03565b509392505050565b6001600160a01b03811660009081526001602052604081205460ff166106f45760405162461bcd60e51b815260040161035390610cbb565b6000826001600160a01b031663fc0c546a6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610736573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075a9190610d25565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156107a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c89190610cea565b60035460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044016020604051808303816000875af115801561081d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108419190610d03565b506001600160a01b0384166000908152600260205260408120805483929061086a908490610d42565b90915550506003546040518281526001600160a01b03918216918616907f7750c36249a9e8cdc4a6fb8a68035d55429ff67a4db8b110026b1375dd9d380c9060200160405180910390a39392505050565b6108c3610a36565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517fa718ddb71589521cab00fa313e3bd14e75ca7204d57a12ff3a5aa40796f342769190a250565b606061091c610a36565b600080846001600160a01b0316846040516109379190610d68565b6000604051808303816000865af19150503d8060008114610974576040519150601f19603f3d011682016040523d82523d6000602084013e610979565b606091505b5091509150816109b85760405162461bcd60e51b815260206004820152600a60248201526910d85b1b11985a5b195960b21b6044820152606401610353565b949350505050565b6109c8610a36565b6001600160a01b038116610a2d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610353565b61043481610a90565b6000546001600160a01b031633146104e95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610353565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461043457600080fd5b600060208284031215610b0757600080fd5b8135610b1281610ae0565b9392505050565b60008060408385031215610b2c57600080fd5b8235610b3781610ae0565b91506020830135610b4781610ae0565b809150509250929050565b60008060408385031215610b6557600080fd5b8235610b7081610ae0565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610ba757600080fd5b8235610bb281610ae0565b9150602083013567ffffffffffffffff80821115610bcf57600080fd5b818501915085601f830112610be357600080fd5b813581811115610bf557610bf5610b7e565b604051601f8201601f19908116603f01168101908382118183101715610c1d57610c1d610b7e565b81604052828152886020848701011115610c3657600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610c73578181015183820152602001610c5b565b83811115610c82576000848401525b50505050565b6020815260008251806020840152610ca7816040850160208701610c58565b601f01601f19169190910160400192915050565b602080825260159082015274151bdad95b881b9bdd081dda1a5d195b1a5cdd1959605a1b604082015260600190565b600060208284031215610cfc57600080fd5b5051919050565b600060208284031215610d1557600080fd5b81518015158114610b1257600080fd5b600060208284031215610d3757600080fd5b8151610b1281610ae0565b60008219821115610d6357634e487b7160e01b600052601160045260246000fd5b500190565b60008251610d7a818460208701610c58565b919091019291505056fea26469706673582212200d90a25af915a90a18523ab979647ceb3bd688574989c71d17b9786a28659f5564736f6c634300080b0033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80638da5cb5b116100a2578063e1373b2711610071578063e1373b271461024b578063e43252d71461025e578063eb66dbcf14610271578063f2fde38b14610291578063f444fdd8146102a457600080fd5b80638da5cb5b146101dd578063ac4e658014610202578063cd774b9714610215578063d4b4084e1461023857600080fd5b80633af32abf116100de5780633af32abf14610153578063523fba7f14610194578063715018a6146101c25780638ab1d681146101ca57600080fd5b8063185a5671146101105780631ac3ddeb146101255780631f4a6d3214610138578063383fe46714610140575b600080fd5b61012361011e366004610af5565b6102b7565b005b610123610133366004610af5565b61031b565b6101236103f2565b61012361014e366004610b19565b610437565b61017f610161366004610af5565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6101b46101a2366004610af5565b60026020526000908152604090205481565b60405190815260200161018b565b6101236104d7565b6101236101d8366004610af5565b6104eb565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161018b565b610123610210366004610b52565b61053c565b61017f610223366004610af5565b60016020526000908152604090205460ff1681565b6101b4610246366004610af5565b6105a9565b6101b4610259366004610af5565b6106bc565b61012361026c366004610af5565b6108bb565b61028461027f366004610b94565b610912565b60405161018b9190610c88565b61012361029f366004610af5565b6109c0565b6003546101ea906001600160a01b031681565b6102bf610a36565b6003546040516001600160a01b038084169216907f0c752b9b11fd9a446c76e6b4cec603d51f2dc603428e800999192409062cbabe90600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526001602052604090205460ff1661035c5760405162461bcd60e51b815260040161035390610cbb565b60405180910390fd5b806001600160a01b031663e941fa786040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561039757600080fd5b505af11580156103ab573d6000803e3d6000fd5b5050604051600081523392506001600160a01b03841691507eed5939179dc194223f0edd1517ecee2210b22da7f82c8e4b1795e93b9f06aa9060200160405180910390a350565b6103fa610a36565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610434573d6000803e3d6000fd5b50565b61043f610a36565b6001600160a01b03821660009081526001602052604090205460ff166104775760405162461bcd60e51b815260040161035390610cbb565b60405163f2fde38b60e01b81526001600160a01b03828116600483015283169063f2fde38b906024015b600060405180830381600087803b1580156104bb57600080fd5b505af11580156104cf573d6000803e3d6000fd5b505050505050565b6104df610a36565b6104e96000610a90565b565b6104f3610a36565b6001600160a01b038116600081815260016020526040808220805460ff19169055517fdd2e6d9f52cbe8f695939d018b7d4a216dc613a669876163ac548b916489d9179190a250565b610544610a36565b6001600160a01b03821660009081526001602052604090205460ff1661057c5760405162461bcd60e51b815260040161035390610cbb565b604051630e89813360e41b8152600481018290526001600160a01b0383169063e8981330906024016104a1565b60006105b3610a36565b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156105fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106209190610cea565b9050816001600160a01b031663a9059cbb6106436000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b49190610d03565b509392505050565b6001600160a01b03811660009081526001602052604081205460ff166106f45760405162461bcd60e51b815260040161035390610cbb565b6000826001600160a01b031663fc0c546a6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610736573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075a9190610d25565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156107a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c89190610cea565b60035460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044016020604051808303816000875af115801561081d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108419190610d03565b506001600160a01b0384166000908152600260205260408120805483929061086a908490610d42565b90915550506003546040518281526001600160a01b03918216918616907f7750c36249a9e8cdc4a6fb8a68035d55429ff67a4db8b110026b1375dd9d380c9060200160405180910390a39392505050565b6108c3610a36565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517fa718ddb71589521cab00fa313e3bd14e75ca7204d57a12ff3a5aa40796f342769190a250565b606061091c610a36565b600080846001600160a01b0316846040516109379190610d68565b6000604051808303816000865af19150503d8060008114610974576040519150601f19603f3d011682016040523d82523d6000602084013e610979565b606091505b5091509150816109b85760405162461bcd60e51b815260206004820152600a60248201526910d85b1b11985a5b195960b21b6044820152606401610353565b949350505050565b6109c8610a36565b6001600160a01b038116610a2d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610353565b61043481610a90565b6000546001600160a01b031633146104e95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610353565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461043457600080fd5b600060208284031215610b0757600080fd5b8135610b1281610ae0565b9392505050565b60008060408385031215610b2c57600080fd5b8235610b3781610ae0565b91506020830135610b4781610ae0565b809150509250929050565b60008060408385031215610b6557600080fd5b8235610b7081610ae0565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610ba757600080fd5b8235610bb281610ae0565b9150602083013567ffffffffffffffff80821115610bcf57600080fd5b818501915085601f830112610be357600080fd5b813581811115610bf557610bf5610b7e565b604051601f8201601f19908116603f01168101908382118183101715610c1d57610c1d610b7e565b81604052828152886020848701011115610c3657600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610c73578181015183820152602001610c5b565b83811115610c82576000848401525b50505050565b6020815260008251806020840152610ca7816040850160208701610c58565b601f01601f19169190910160400192915050565b602080825260159082015274151bdad95b881b9bdd081dda1a5d195b1a5cdd1959605a1b604082015260600190565b600060208284031215610cfc57600080fd5b5051919050565b600060208284031215610d1557600080fd5b81518015158114610b1257600080fd5b600060208284031215610d3757600080fd5b8151610b1281610ae0565b60008219821115610d6357634e487b7160e01b600052601160045260246000fd5b500190565b60008251610d7a818460208701610c58565b919091019291505056fea26469706673582212200d90a25af915a90a18523ab979647ceb3bd688574989c71d17b9786a28659f5564736f6c634300080b0033
Deployed Bytecode Sourcemap
7201:5361:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9093:181;;;;;;:::i;:::-;;:::i;:::-;;9450:244;;;;;;:::i;:::-;;:::i;11969:107::-;;;:::i;11628:243::-;;;;;;:::i;:::-;;:::i;8822:133::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8911:36:0;8887:4;8911:36;;;:25;:36;;;;;;;;;8822:133;;;;960:14:1;;953:22;935:41;;923:2;908:18;8822:133:0;;;;;;;;7356:48;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1133:25:1;;;1121:2;1106:18;7356:48:0;987:177:1;3065:103:0;;;:::i;8405:182::-;;;;;;:::i;:::-;;:::i;2424:87::-;2470:7;2497:6;-1:-1:-1;;;;;2497:6:0;2424:87;;;-1:-1:-1;;;;;1333:32:1;;;1315:51;;1303:2;1288:18;2424:87:0;1169:203:1;11170:240:0;;;;;;:::i;:::-;;:::i;7257:57::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12305:254;;;;;;:::i;:::-;;:::i;9940:478::-;;;;;;:::i;:::-;;:::i;8074:172::-;;;;;;:::i;:::-;;:::i;10706:235::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3323:201::-;;;;;;:::i;:::-;;:::i;7445:30::-;;;;;-1:-1:-1;;;;;7445:30:0;;;9093:181;2310:13;:11;:13::i;:::-;9199:15:::1;::::0;9176:51:::1;::::0;-1:-1:-1;;;;;9176:51:0;;::::1;::::0;9199:15:::1;::::0;9176:51:::1;::::0;9199:15:::1;::::0;9176:51:::1;9238:15;:28:::0;;-1:-1:-1;;;;;;9238:28:0::1;-1:-1:-1::0;;;;;9238:28:0;;;::::1;::::0;;;::::1;::::0;;9093:181::o;9450:244::-;-1:-1:-1;;;;;9518:36:0;;;;;;:25;:36;;;;;;;;9510:70;;;;-1:-1:-1;;;9510:70:0;;;;;;;:::i;:::-;;;;;;;;;9608:9;-1:-1:-1;;;;;9591:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9648:38:0;;9684:1;1133:25:1;;9672:10:0;;-1:-1:-1;;;;;;9648:38:0;;;-1:-1:-1;9648:38:0;;1121:2:1;1106:18;9648:38:0;;;;;;;9450:244;:::o;11969:107::-;2310:13;:11;:13::i;:::-;2470:7;2497:6;;12020:48:::1;::::0;-1:-1:-1;;;;;2497:6:0;;;;12046:21:::1;12020:48:::0;::::1;;;::::0;12046:21;;12020:48;2470:7;12020:48;12046:21;2497:6;12020:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;11969:107::o:0;11628:243::-;2310:13;:11;:13::i;:::-;-1:-1:-1;;;;;11735:36:0;::::1;;::::0;;;:25:::1;:36;::::0;;;;;::::1;;11727:70;;;;-1:-1:-1::0;;;11727:70:0::1;;;;;;;:::i;:::-;11808:55;::::0;-1:-1:-1;;;11808:55:0;;-1:-1:-1;;;;;1333:32:1;;;11808:55:0::1;::::0;::::1;1315:51:1::0;11808:45:0;::::1;::::0;::::1;::::0;1288:18:1;;11808:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11628:243:::0;;:::o;3065:103::-;2310:13;:11;:13::i;:::-;3130:30:::1;3157:1;3130:18;:30::i;:::-;3065:103::o:0;8405:182::-;2310:13;:11;:13::i;:::-;-1:-1:-1;;;;;8483:36:0;::::1;8522:5;8483:36:::0;;;:25:::1;:36;::::0;;;;;:44;;-1:-1:-1;;8483:44:0::1;::::0;;8543:36;::::1;::::0;8522:5;8543:36:::1;8405:182:::0;:::o;11170:240::-;2310:13;:11;:13::i;:::-;-1:-1:-1;;;;;11273:36:0;::::1;;::::0;;;:25:::1;:36;::::0;;;;;::::1;;11265:70;;;;-1:-1:-1::0;;;11265:70:0::1;;;;;;;:::i;:::-;11346:56;::::0;-1:-1:-1;;;11346:56:0;;::::1;::::0;::::1;1133:25:1::0;;;-1:-1:-1;;;;;11346:48:0;::::1;::::0;::::1;::::0;1106:18:1;;11346:56:0::1;987:177:1::0;12305:254:0;12375:7;2310:13;:11;:13::i;:::-;12453:30:::1;::::0;-1:-1:-1;;;12453:30:0;;12477:4:::1;12453:30;::::0;::::1;1315:51:1::0;12417:6:0;;12395:12:::1;::::0;-1:-1:-1;;;;;12453:15:0;::::1;::::0;::::1;::::0;1288:18:1;;12453:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12435:48;;12494:5;-1:-1:-1::0;;;;;12494:14:0::1;;12509:7;2470::::0;2497:6;-1:-1:-1;;;;;2497:6:0;;2424:87;12509:7:::1;12494:32;::::0;-1:-1:-1;;;;;;12494:32:0::1;::::0;;;;;;-1:-1:-1;;;;;4460:32:1;;;12494::0::1;::::0;::::1;4442:51:1::0;4509:18;;;4502:34;;;4415:18;;12494:32:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;12544:7:0;12305:254;-1:-1:-1;;;12305:254:0:o;9940:478::-;-1:-1:-1;;;;;10033:36:0;;10005:7;10033:36;;;:25;:36;;;;;;;;10025:70;;;;-1:-1:-1;;;10025:70:0;;;;;;;:::i;:::-;10106:12;10145:9;-1:-1:-1;;;;;10128:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10193:30;;-1:-1:-1;;;10193:30:0;;10217:4;10193:30;;;1315:51:1;10106:58:0;;-1:-1:-1;10175:15:0;;-1:-1:-1;;;;;10193:15:0;;;;;1288:18:1;;10193:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10249:15;;10234:40;;-1:-1:-1;;;10234:40:0;;-1:-1:-1;;;;;10249:15:0;;;10234:40;;;4442:51:1;4509:18;;;4502:34;;;10175:48:0;;-1:-1:-1;10234:14:0;;;;;4415:18:1;;10234:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;10285:24:0;;;;;;:13;:24;;;;;:35;;10313:7;;10285:24;:35;;10313:7;;10285:35;:::i;:::-;;;;-1:-1:-1;;10360:15:0;;10336:49;;1133:25:1;;;-1:-1:-1;;;;;10360:15:0;;;;10336:49;;;;;1121:2:1;1106:18;10336:49:0;;;;;;;10403:7;9940:478;-1:-1:-1;;;9940:478:0:o;8074:172::-;2310:13;:11;:13::i;:::-;-1:-1:-1;;;;;8147:36:0;::::1;;::::0;;;8186:4:::1;8147:36;::::0;;;;;;;:43;;-1:-1:-1;;8147:43:0::1;::::0;;::::1;::::0;;;8206:32;::::1;::::0;8147:36;8206:32:::1;8074:172:::0;:::o;10706:235::-;10788:12;2310:13;:11;:13::i;:::-;10814:12:::1;10828:19:::0;10851:6:::1;-1:-1:-1::0;;;;;10851:11:0::1;10863:4;10851:17;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10813:55;;;;10887:7;10879:30;;;::::0;-1:-1:-1;;;10879:30:0;;5796:2:1;10879:30:0::1;::::0;::::1;5778:21:1::0;5835:2;5815:18;;;5808:30;-1:-1:-1;;;5854:18:1;;;5847:40;5904:18;;10879:30:0::1;5594:334:1::0;10879:30:0::1;10927:6:::0;10706:235;-1:-1:-1;;;;10706:235:0:o;3323:201::-;2310:13;:11;:13::i;:::-;-1:-1:-1;;;;;3412:22:0;::::1;3404:73;;;::::0;-1:-1:-1;;;3404:73:0;;6135:2:1;3404:73:0::1;::::0;::::1;6117:21:1::0;6174:2;6154:18;;;6147:30;6213:34;6193:18;;;6186:62;-1:-1:-1;;;6264:18:1;;;6257:36;6310:19;;3404:73:0::1;5933:402:1::0;3404:73:0::1;3488:28;3507:8;3488:18;:28::i;2589:132::-:0;2470:7;2497:6;-1:-1:-1;;;;;2497:6:0;1051:10;2653:23;2645:68;;;;-1:-1:-1;;;2645:68:0;;6542:2:1;2645:68:0;;;6524:21:1;;;6561:18;;;6554:30;6620:34;6600:18;;;6593:62;6672:18;;2645:68:0;6340:356:1;3684:191:0;3758:16;3777:6;;-1:-1:-1;;;;;3794:17:0;;;-1:-1:-1;;;;;;3794:17:0;;;;;;3827:40;;3777:6;;;;;;;3827:40;;3758:16;3827:40;3747:128;3684:191;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:1:o;402:388::-;470:6;478;531:2;519:9;510:7;506:23;502:32;499:52;;;547:1;544;537:12;499:52;586:9;573:23;605:31;630:5;605:31;:::i;:::-;655:5;-1:-1:-1;712:2:1;697:18;;684:32;725:33;684:32;725:33;:::i;:::-;777:7;767:17;;;402:388;;;;;:::o;1377:315::-;1445:6;1453;1506:2;1494:9;1485:7;1481:23;1477:32;1474:52;;;1522:1;1519;1512:12;1474:52;1561:9;1548:23;1580:31;1605:5;1580:31;:::i;:::-;1630:5;1682:2;1667:18;;;;1654:32;;-1:-1:-1;;;1377:315:1:o;1697:127::-;1758:10;1753:3;1749:20;1746:1;1739:31;1789:4;1786:1;1779:15;1813:4;1810:1;1803:15;1829:1056;1906:6;1914;1967:2;1955:9;1946:7;1942:23;1938:32;1935:52;;;1983:1;1980;1973:12;1935:52;2022:9;2009:23;2041:31;2066:5;2041:31;:::i;:::-;2091:5;-1:-1:-1;2147:2:1;2132:18;;2119:32;2170:18;2200:14;;;2197:34;;;2227:1;2224;2217:12;2197:34;2265:6;2254:9;2250:22;2240:32;;2310:7;2303:4;2299:2;2295:13;2291:27;2281:55;;2332:1;2329;2322:12;2281:55;2368:2;2355:16;2390:2;2386;2383:10;2380:36;;;2396:18;;:::i;:::-;2471:2;2465:9;2439:2;2525:13;;-1:-1:-1;;2521:22:1;;;2545:2;2517:31;2513:40;2501:53;;;2569:18;;;2589:22;;;2566:46;2563:72;;;2615:18;;:::i;:::-;2655:10;2651:2;2644:22;2690:2;2682:6;2675:18;2730:7;2725:2;2720;2716;2712:11;2708:20;2705:33;2702:53;;;2751:1;2748;2741:12;2702:53;2807:2;2802;2798;2794:11;2789:2;2781:6;2777:15;2764:46;2852:1;2847:2;2842;2834:6;2830:15;2826:24;2819:35;2873:6;2863:16;;;;;;;1829:1056;;;;;:::o;2890:258::-;2962:1;2972:113;2986:6;2983:1;2980:13;2972:113;;;3062:11;;;3056:18;3043:11;;;3036:39;3008:2;3001:10;2972:113;;;3103:6;3100:1;3097:13;3094:48;;;3138:1;3129:6;3124:3;3120:16;3113:27;3094:48;;2890:258;;;:::o;3153:381::-;3300:2;3289:9;3282:21;3263:4;3332:6;3326:13;3375:6;3370:2;3359:9;3355:18;3348:34;3391:66;3450:6;3445:2;3434:9;3430:18;3425:2;3417:6;3413:15;3391:66;:::i;:::-;3518:2;3497:15;-1:-1:-1;;3493:29:1;3478:45;;;;3525:2;3474:54;;3153:381;-1:-1:-1;;3153:381:1:o;3539:345::-;3741:2;3723:21;;;3780:2;3760:18;;;3753:30;-1:-1:-1;;;3814:2:1;3799:18;;3792:51;3875:2;3860:18;;3539:345::o;4079:184::-;4149:6;4202:2;4190:9;4181:7;4177:23;4173:32;4170:52;;;4218:1;4215;4208:12;4170:52;-1:-1:-1;4241:16:1;;4079:184;-1:-1:-1;4079:184:1:o;4547:277::-;4614:6;4667:2;4655:9;4646:7;4642:23;4638:32;4635:52;;;4683:1;4680;4673:12;4635:52;4715:9;4709:16;4768:5;4761:13;4754:21;4747:5;4744:32;4734:60;;4790:1;4787;4780:12;4829:251;4899:6;4952:2;4940:9;4931:7;4927:23;4923:32;4920:52;;;4968:1;4965;4958:12;4920:52;5000:9;4994:16;5019:31;5044:5;5019:31;:::i;5085:225::-;5125:3;5156:1;5152:6;5149:1;5146:13;5143:136;;;5201:10;5196:3;5192:20;5189:1;5182:31;5236:4;5233:1;5226:15;5264:4;5261:1;5254:15;5143:136;-1:-1:-1;5295:9:1;;5085:225::o;5315:274::-;5444:3;5482:6;5476:13;5498:53;5544:6;5539:3;5532:4;5524:6;5520:17;5498:53;:::i;:::-;5567:16;;;;;5315:274;-1:-1:-1;;5315:274:1:o
Swarm Source
ipfs://0d90a25af915a90a18523ab979647ceb3bd688574989c71d17b9786a28659f55
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.