Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 14879147 | 980 days ago | IN | 0 ETH | 0.00171774 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
PirexFees
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-31 */ // Sources flattened with hardhat v2.8.3 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @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 v4.4.1 (access/Ownable.sol) /** * @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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing 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 @rari-capital/solmate/src/tokens/[email protected] /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*/////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*/////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*/////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*/////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*/////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { address recoveredAddress = ecrecover( keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256( abi.encode( keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ), owner, spender, value, nonces[owner]++, deadline ) ) ) ), v, r, s ); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*/////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } } // File @rari-capital/solmate/src/utils/[email protected] /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol) /// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer. /// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller. library SafeTransferLib { event Debug(bool one, bool two, uint256 retsize); /*/////////////////////////////////////////////////////////////// ETH OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferETH(address to, uint256 amount) internal { bool success; assembly { // Transfer the ETH and store if it succeeded or not. success := call(gas(), to, amount, 0, 0, 0, 0) } require(success, "ETH_TRANSFER_FAILED"); } /*/////////////////////////////////////////////////////////////// ERC20 OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferFrom( ERC20 token, address from, address to, uint256 amount ) internal { bool success; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), from) // Append the "from" argument. mstore(add(freeMemoryPointer, 36), to) // Append the "to" argument. mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 100, 0, 32) ) } require(success, "TRANSFER_FROM_FAILED"); } function safeTransfer( ERC20 token, address to, uint256 amount ) internal { bool success; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), to) // Append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) ) } require(success, "TRANSFER_FAILED"); } function safeApprove( ERC20 token, address to, uint256 amount ) internal { bool success; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), to) // Append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) ) } require(success, "APPROVE_FAILED"); } } // File contracts/PirexFees.sol // SPDX-License-Identifier: MIT pragma solidity 0.8.12; contract PirexFees is Ownable { using SafeTransferLib for ERC20; // Types of fee recipients enum FeeRecipient { Treasury, Contributors } uint8 public constant PERCENT_DENOMINATOR = 100; // Configurable fee recipient percent-share uint8 public treasuryPercent = 75; // Configurable fee recipient addresses address public treasury; address public contributors; event SetFeeRecipient(FeeRecipient f, address recipient); event SetTreasuryPercent(uint8 _treasuryPercent); event DistributeFees(address token, uint256 amount); error ZeroAddress(); error InvalidFeePercent(); /** @param _treasury address Redacted treasury @param _contributors address Pirex contributor multisig */ constructor(address _treasury, address _contributors) { if (_treasury == address(0)) revert ZeroAddress(); if (_contributors == address(0)) revert ZeroAddress(); treasury = _treasury; contributors = _contributors; } /** @notice Set a fee recipient address @param f enum FeeRecipient enum @param recipient address Fee recipient address */ function setFeeRecipient(FeeRecipient f, address recipient) external onlyOwner { if (recipient == address(0)) revert ZeroAddress(); emit SetFeeRecipient(f, recipient); if (f == FeeRecipient.Treasury) { treasury = recipient; return; } contributors = recipient; } /** @notice Set treasury fee percent @param _treasuryPercent uint8 Treasury fee percent */ function setTreasuryPercent(uint8 _treasuryPercent) external onlyOwner { // Treasury fee percent should never exceed 75 if (_treasuryPercent > 75) revert InvalidFeePercent(); treasuryPercent = _treasuryPercent; emit SetTreasuryPercent(_treasuryPercent); } /** @notice Distribute fees @param from address Fee source @param token address Fee token @param amount uint256 Fee token amount */ function distributeFees( address from, address token, uint256 amount ) external { emit DistributeFees(token, amount); ERC20 t = ERC20(token); uint256 treasuryDistribution = (amount * treasuryPercent) / PERCENT_DENOMINATOR; // Favoring push over pull to reduce accounting complexity for different tokens t.safeTransferFrom(from, treasury, treasuryDistribution); t.safeTransferFrom(from, contributors, amount - treasuryDistribution); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_contributors","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidFeePercent","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DistributeFees","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":false,"internalType":"enum PirexFees.FeeRecipient","name":"f","type":"uint8"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"SetFeeRecipient","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_treasuryPercent","type":"uint8"}],"name":"SetTreasuryPercent","type":"event"},{"inputs":[],"name":"PERCENT_DENOMINATOR","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contributors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"distributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum PirexFees.FeeRecipient","name":"f","type":"uint8"},{"internalType":"address","name":"recipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_treasuryPercent","type":"uint8"}],"name":"setTreasuryPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryPercent","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000805460ff60a01b1916604b60a01b17905534801561002357600080fd5b506040516108e63803806108e683398101604081905261004291610136565b61004b336100ca565b6001600160a01b0382166100725760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166100995760405163d92e233d60e01b815260040160405180910390fd5b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055610169565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461013157600080fd5b919050565b6000806040838503121561014957600080fd5b6101528361011a565b91506101606020840161011a565b90509250929050565b61076e806101786000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a6146101345780638da5cb5b1461013c5780639e6c29591461014d578063d4f5f83b14610155578063f2fde38b1461016857600080fd5b806304ef9d58146100a357806307cf6e52146100ce5780633cebc552146100e357806361d027b3146100f65780636e7e3b2b14610121575b600080fd5b6000546100b790600160a01b900460ff1681565b60405160ff90911681526020015b60405180910390f35b6100e16100dc36600461056f565b61017b565b005b6100e16100f13660046105b5565b610227565b600154610109906001600160a01b031681565b6040516001600160a01b0390911681526020016100c5565b600254610109906001600160a01b031681565b6100e16102e5565b6000546001600160a01b0316610109565b6100b7606481565b6100e16101633660046105f1565b61031b565b6100e161017636600461062a565b610401565b6000546001600160a01b031633146101ae5760405162461bcd60e51b81526004016101a590610645565b60405180910390fd5b604b8160ff1611156101d357604051638a81d3b360e01b815260040160405180910390fd5b6000805460ff60a01b1916600160a01b60ff8416908102919091179091556040519081527f642624e606c966b8999c13050ab1a20caaf2e991ad9a2b933a69a820a350d2cc9060200160405180910390a150565b604080516001600160a01b0384168152602081018390527ffa7e62a609845954a9fb1d5db8e91ccca949db2f340a43e3604ae01cd752f6b5910160405180910390a16000805483919060649061028790600160a01b900460ff1685610690565b61029191906106af565b6001549091506102b0906001600160a01b03848116918891168461049c565b6002546102de9086906001600160a01b03166102cc84876106d1565b6001600160a01b03861692919061049c565b5050505050565b6000546001600160a01b0316331461030f5760405162461bcd60e51b81526004016101a590610645565b610319600061051f565b565b6000546001600160a01b031633146103455760405162461bcd60e51b81526004016101a590610645565b6001600160a01b03811661036c5760405163d92e233d60e01b815260040160405180910390fd5b7fa431c021cf006627dcdfb8a50687f4bba78d512d59ad5069410a6f3158ccba4f828260405161039d9291906106fe565b60405180910390a160008260018111156103b9576103b96106e8565b14156103e057600180546001600160a01b0383166001600160a01b03199091161790555050565b600280546001600160a01b0383166001600160a01b03199091161790555050565b6000546001600160a01b0316331461042b5760405162461bcd60e51b81526004016101a590610645565b6001600160a01b0381166104905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101a5565b6104998161051f565b50565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806102de5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b60448201526064016101a5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561058157600080fd5b813560ff8116811461059257600080fd5b9392505050565b80356001600160a01b03811681146105b057600080fd5b919050565b6000806000606084860312156105ca57600080fd5b6105d384610599565b92506105e160208501610599565b9150604084013590509250925092565b6000806040838503121561060457600080fd5b82356002811061061357600080fd5b915061062160208401610599565b90509250929050565b60006020828403121561063c57600080fd5b61059282610599565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156106aa576106aa61067a565b500290565b6000826106cc57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156106e3576106e361067a565b500390565b634e487b7160e01b600052602160045260246000fd5b604081016002841061072057634e487b7160e01b600052602160045260246000fd5b9281526001600160a01b03919091166020909101529056fea264697066735822122054322413dbb07c94120e3ddeea157a0d86549d24c24783e5ce3ea016535839c764736f6c634300080c0033000000000000000000000000a52fd396891e7a74b641a2cb1a6999fcf56b077e0000000000000000000000006ed9c171e02de08aaedf0fc1d589923d807061d6
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a6146101345780638da5cb5b1461013c5780639e6c29591461014d578063d4f5f83b14610155578063f2fde38b1461016857600080fd5b806304ef9d58146100a357806307cf6e52146100ce5780633cebc552146100e357806361d027b3146100f65780636e7e3b2b14610121575b600080fd5b6000546100b790600160a01b900460ff1681565b60405160ff90911681526020015b60405180910390f35b6100e16100dc36600461056f565b61017b565b005b6100e16100f13660046105b5565b610227565b600154610109906001600160a01b031681565b6040516001600160a01b0390911681526020016100c5565b600254610109906001600160a01b031681565b6100e16102e5565b6000546001600160a01b0316610109565b6100b7606481565b6100e16101633660046105f1565b61031b565b6100e161017636600461062a565b610401565b6000546001600160a01b031633146101ae5760405162461bcd60e51b81526004016101a590610645565b60405180910390fd5b604b8160ff1611156101d357604051638a81d3b360e01b815260040160405180910390fd5b6000805460ff60a01b1916600160a01b60ff8416908102919091179091556040519081527f642624e606c966b8999c13050ab1a20caaf2e991ad9a2b933a69a820a350d2cc9060200160405180910390a150565b604080516001600160a01b0384168152602081018390527ffa7e62a609845954a9fb1d5db8e91ccca949db2f340a43e3604ae01cd752f6b5910160405180910390a16000805483919060649061028790600160a01b900460ff1685610690565b61029191906106af565b6001549091506102b0906001600160a01b03848116918891168461049c565b6002546102de9086906001600160a01b03166102cc84876106d1565b6001600160a01b03861692919061049c565b5050505050565b6000546001600160a01b0316331461030f5760405162461bcd60e51b81526004016101a590610645565b610319600061051f565b565b6000546001600160a01b031633146103455760405162461bcd60e51b81526004016101a590610645565b6001600160a01b03811661036c5760405163d92e233d60e01b815260040160405180910390fd5b7fa431c021cf006627dcdfb8a50687f4bba78d512d59ad5069410a6f3158ccba4f828260405161039d9291906106fe565b60405180910390a160008260018111156103b9576103b96106e8565b14156103e057600180546001600160a01b0383166001600160a01b03199091161790555050565b600280546001600160a01b0383166001600160a01b03199091161790555050565b6000546001600160a01b0316331461042b5760405162461bcd60e51b81526004016101a590610645565b6001600160a01b0381166104905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101a5565b6104998161051f565b50565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806102de5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b60448201526064016101a5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561058157600080fd5b813560ff8116811461059257600080fd5b9392505050565b80356001600160a01b03811681146105b057600080fd5b919050565b6000806000606084860312156105ca57600080fd5b6105d384610599565b92506105e160208501610599565b9150604084013590509250925092565b6000806040838503121561060457600080fd5b82356002811061061357600080fd5b915061062160208401610599565b90509250929050565b60006020828403121561063c57600080fd5b61059282610599565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156106aa576106aa61067a565b500290565b6000826106cc57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156106e3576106e361067a565b500390565b634e487b7160e01b600052602160045260246000fd5b604081016002841061072057634e487b7160e01b600052602160045260246000fd5b9281526001600160a01b03919091166020909101529056fea264697066735822122054322413dbb07c94120e3ddeea157a0d86549d24c24783e5ce3ea016535839c764736f6c634300080c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a52fd396891e7a74b641a2cb1a6999fcf56b077e0000000000000000000000006ed9c171e02de08aaedf0fc1d589923d807061d6
-----Decoded View---------------
Arg [0] : _treasury (address): 0xA52Fd396891E7A74b641a2Cb1A6999Fcf56B077e
Arg [1] : _contributors (address): 0x6ED9c171E02De08aaEDF0Fc1D589923D807061D6
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a52fd396891e7a74b641a2cb1a6999fcf56b077e
Arg [1] : 0000000000000000000000006ed9c171e02de08aaedf0fc1d589923d807061d6
Deployed Bytecode Sourcemap
16477:2811:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16766:33;;;;;-1:-1:-1;;;16766:33:0;;;;;;;;;186:4:1;174:17;;;156:36;;144:2;129:18;16766:33:0;;;;;;;;18244:300;;;;;;:::i;:::-;;:::i;:::-;;18744:541;;;;;;:::i;:::-;;:::i;16853:23::-;;;;;-1:-1:-1;;;;;16853:23:0;;;;;;-1:-1:-1;;;;;1152:32:1;;;1134:51;;1122:2;1107:18;16853:23:0;988:203:1;16883:27:0;;;;;-1:-1:-1;;;;;16883:27:0;;;2624:103;;;:::i;1973:87::-;2019:7;2046:6;-1:-1:-1;;;;;2046:6:0;1973:87;;16661:47;;16705:3;16661:47;;17746:366;;;;;;:::i;:::-;;:::i;2882:201::-;;;;;;:::i;:::-;;:::i;18244:300::-;2019:7;2046:6;-1:-1:-1;;;;;2046:6:0;800:10;2193:23;2185:68;;;;-1:-1:-1;;;2185:68:0;;;;;;;:::i;:::-;;;;;;;;;18405:2:::1;18386:16;:21;;;18382:53;;;18416:19;;-1:-1:-1::0;;;18416:19:0::1;;;;;;;;;;;18382:53;18448:15;:34:::0;;-1:-1:-1;;;;18448:34:0::1;-1:-1:-1::0;;;18448:34:0::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;18500:36:::1;::::0;156::1;;;18500::0::1;::::0;144:2:1;129:18;18500:36:0::1;;;;;;;18244:300:::0;:::o;18744:541::-;18872:29;;;-1:-1:-1;;;;;2291:32:1;;2273:51;;2355:2;2340:18;;2333:34;;;18872:29:0;;2246:18:1;18872:29:0;;;;;;;18914:7;18988:15;;18930:5;;18914:7;16705:3;;18979:24;;-1:-1:-1;;;18988:15:0;;18978:61;18988:15;18979:6;:24;:::i;:::-;18978:61;;;;:::i;:::-;19166:8;;18947:92;;-1:-1:-1;19141:56:0;;-1:-1:-1;;;;;19141:18:0;;;;19160:4;;19166:8;18947:92;19141:18;:56::i;:::-;19233:12;;19208:69;;19227:4;;-1:-1:-1;;;;;19233:12:0;19247:29;19256:20;19247:6;:29;:::i;:::-;-1:-1:-1;;;;;19208:18:0;;;:69;;:18;:69::i;:::-;18856:429;;18744:541;;;:::o;2624:103::-;2019:7;2046:6;-1:-1:-1;;;;;2046:6:0;800:10;2193:23;2185:68;;;;-1:-1:-1;;;2185:68:0;;;;;;;:::i;:::-;2689:30:::1;2716:1;2689:18;:30::i;:::-;2624:103::o:0;17746:366::-;2019:7;2046:6;-1:-1:-1;;;;;2046:6:0;800:10;2193:23;2185:68;;;;-1:-1:-1;;;2185:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17863:23:0;::::1;17859:49;;17895:13;;-1:-1:-1::0;;;17895:13:0::1;;;;;;;;;;;17859:49;17926:29;17942:1;17945:9;17926:29;;;;;;;:::i;:::-;;;;;;;;17977:21;17972:1;:26;;;;;;;;:::i;:::-;;17968:100;;;18015:8;:20:::0;;-1:-1:-1;;;;;18015:20:0;::::1;-1:-1:-1::0;;;;;;18015:20:0;;::::1;;::::0;;17746:366;;:::o;17968:100::-:1;18080:12;:24:::0;;-1:-1:-1;;;;;18080:24:0;::::1;-1:-1:-1::0;;;;;;18080:24:0;;::::1;;::::0;;17746:366;;:::o;2882:201::-;2019:7;2046:6;-1:-1:-1;;;;;2046:6:0;800:10;2193:23;2185:68;;;;-1:-1:-1;;;2185:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2971:22:0;::::1;2963:73;;;::::0;-1:-1:-1;;;2963:73:0;;3815:2:1;2963:73:0::1;::::0;::::1;3797:21:1::0;3854:2;3834:18;;;3827:30;3893:34;3873:18;;;3866:62;-1:-1:-1;;;3944:18:1;;;3937:36;3990:19;;2963:73:0::1;3613:402:1::0;2963:73:0::1;3047:28;3066:8;3047:18;:28::i;:::-;2882:201:::0;:::o;11783:1604::-;11927:12;12058:4;12052:11;-1:-1:-1;;;12184:17:0;12177:93;12318:4;12314:1;12295:17;12291:25;12284:39;12403:2;12398;12379:17;12375:26;12368:38;12484:6;12479:2;12460:17;12456:26;12449:42;13298:2;13295:1;13290:3;13271:17;13268:1;13261:5;13254;13249:52;12812:16;12805:24;12799:2;12781:16;12778:24;12774:1;12770;12764:8;12761:15;12757:46;12754:76;12551:765;12540:776;;;13347:7;13339:40;;;;-1:-1:-1;;;13339:40:0;;4222:2:1;13339:40:0;;;4204:21:1;4261:2;4241:18;;;4234:30;-1:-1:-1;;;4280:18:1;;;4273:50;4340:18;;13339:40:0;4020:344:1;3243:191:0;3317:16;3336:6;;-1:-1:-1;;;;;3353:17:0;;;-1:-1:-1;;;;;;3353:17:0;;;;;;3386:40;;3336:6;;;;;;;3386:40;;3317:16;3386:40;3306:128;3243:191;:::o;203:269:1:-;260:6;313:2;301:9;292:7;288:23;284:32;281:52;;;329:1;326;319:12;281:52;368:9;355:23;418:4;411:5;407:16;400:5;397:27;387:55;;438:1;435;428:12;387:55;461:5;203:269;-1:-1:-1;;;203:269:1:o;477:173::-;545:20;;-1:-1:-1;;;;;594:31:1;;584:42;;574:70;;640:1;637;630:12;574:70;477:173;;;:::o;655:328::-;732:6;740;748;801:2;789:9;780:7;776:23;772:32;769:52;;;817:1;814;807:12;769:52;840:29;859:9;840:29;:::i;:::-;830:39;;888:38;922:2;911:9;907:18;888:38;:::i;:::-;878:48;;973:2;962:9;958:18;945:32;935:42;;655:328;;;;;:::o;1196:346::-;1280:6;1288;1341:2;1329:9;1320:7;1316:23;1312:32;1309:52;;;1357:1;1354;1347:12;1309:52;1396:9;1383:23;1435:1;1428:5;1425:12;1415:40;;1451:1;1448;1441:12;1415:40;1474:5;-1:-1:-1;1498:38:1;1532:2;1517:18;;1498:38;:::i;:::-;1488:48;;1196:346;;;;;:::o;1547:186::-;1606:6;1659:2;1647:9;1638:7;1634:23;1630:32;1627:52;;;1675:1;1672;1665:12;1627:52;1698:29;1717:9;1698:29;:::i;1738:356::-;1940:2;1922:21;;;1959:18;;;1952:30;2018:34;2013:2;1998:18;;1991:62;2085:2;2070:18;;1738:356::o;2378:127::-;2439:10;2434:3;2430:20;2427:1;2420:31;2470:4;2467:1;2460:15;2494:4;2491:1;2484:15;2510:168;2550:7;2616:1;2612;2608:6;2604:14;2601:1;2598:21;2593:1;2586:9;2579:17;2575:45;2572:71;;;2623:18;;:::i;:::-;-1:-1:-1;2663:9:1;;2510:168::o;2683:217::-;2723:1;2749;2739:132;;2793:10;2788:3;2784:20;2781:1;2774:31;2828:4;2825:1;2818:15;2856:4;2853:1;2846:15;2739:132;-1:-1:-1;2885:9:1;;2683:217::o;2905:125::-;2945:4;2973:1;2970;2967:8;2964:34;;;2978:18;;:::i;:::-;-1:-1:-1;3015:9:1;;2905:125::o;3035:127::-;3096:10;3091:3;3087:20;3084:1;3077:31;3127:4;3124:1;3117:15;3151:4;3148:1;3141:15;3167:441;3343:2;3328:18;;3376:1;3365:13;;3355:144;;3421:10;3416:3;3412:20;3409:1;3402:31;3456:4;3453:1;3446:15;3484:4;3481:1;3474:15;3355:144;3508:25;;;-1:-1:-1;;;;;3569:32:1;;;;3564:2;3549:18;;;3542:60;3167:441;:::o
Swarm Source
ipfs://54322413dbb07c94120e3ddeea157a0d86549d24c24783e5ce3ea016535839c7
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.