More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,872 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Authorize Operat... | 16193736 | 740 days ago | IN | 0 ETH | 0.0006363 | ||||
Authorize Operat... | 16193734 | 740 days ago | IN | 0 ETH | 0.00063529 | ||||
Authorize Operat... | 16049437 | 760 days ago | IN | 0 ETH | 0.00052238 | ||||
Authorize Operat... | 15962524 | 772 days ago | IN | 0 ETH | 0.00079517 | ||||
Claim Multiple R... | 15859427 | 787 days ago | IN | 0 ETH | 0.09730576 | ||||
Claim Multiple R... | 15843954 | 789 days ago | IN | 0 ETH | 0.0402772 | ||||
Claim Multiple R... | 15843881 | 789 days ago | IN | 0 ETH | 0.01006233 | ||||
Claim Multiple R... | 15843357 | 789 days ago | IN | 0 ETH | 0.00542285 | ||||
Claim Multiple R... | 15841957 | 789 days ago | IN | 0 ETH | 0.01377137 | ||||
Claim Multiple R... | 15841602 | 789 days ago | IN | 0 ETH | 0.14438836 | ||||
Claim Multiple R... | 15839174 | 789 days ago | IN | 0 ETH | 0.01229988 | ||||
Claim Multiple R... | 15771192 | 799 days ago | IN | 0 ETH | 0.05123307 | ||||
Claim Multiple R... | 15762094 | 800 days ago | IN | 0 ETH | 0.03030979 | ||||
Claim Multiple R... | 15760090 | 800 days ago | IN | 0 ETH | 0.05962216 | ||||
Claim Multiple R... | 15753547 | 801 days ago | IN | 0 ETH | 0.01564841 | ||||
Claim Multiple R... | 15749192 | 802 days ago | IN | 0 ETH | 0.01868184 | ||||
Claim Multiple R... | 15738371 | 803 days ago | IN | 0 ETH | 0.01009218 | ||||
Claim Multiple R... | 15738025 | 803 days ago | IN | 0 ETH | 0.00425922 | ||||
Claim Multiple R... | 15737386 | 804 days ago | IN | 0 ETH | 0.00894258 | ||||
Claim Multiple R... | 15734128 | 804 days ago | IN | 0 ETH | 0.01728532 | ||||
Claim Multiple R... | 15727752 | 805 days ago | IN | 0 ETH | 0.02288511 | ||||
Claim Multiple R... | 15721176 | 806 days ago | IN | 0 ETH | 0.01412085 | ||||
Claim Multiple R... | 15718404 | 806 days ago | IN | 0 ETH | 0.01801173 | ||||
Claim Multiple R... | 15710715 | 807 days ago | IN | 0 ETH | 0.01631139 | ||||
Claim Multiple R... | 15703328 | 808 days ago | IN | 0 ETH | 0.00278205 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
RpYieldCollector
Compiler Version
v0.8.13+commit.abaa5c0e
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; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Context.sol"; import "@openzeppelin/contracts/utils/math/Math.sol"; import "@openzeppelin/contracts/interfaces/IERC20.sol"; import './IRaid.sol'; /** * @title Raid Party pending rewards batch collection * @author xanewok.eth * @dev * * Batch claiming can be optionally: * - (`taxed` prefix) taxed by an external entity such as guilds and/or * - (`To` suffix) collected into a single address to save on gas. * * Because $CFTI is an ERC-20 token, we still need to approve this contract * from each account where we will draw the funds from for spending in order to * move the funds - however, since this contract will be (probably) fully * authorized to manage the funds, we need to be extra careful where those funds * will be withdrawn. * * To address this issue, we introduce a concept of *operators* (poor man's * ERC-777 operators) which are authorized accounts that can act (and withdraw * tokens, among others) on behalf of the token *owner* accounts via this contract. * */ contract RpYieldCollector is Context, Ownable { uint256 public _collectedFee; IERC20 public immutable _confetti; IRaid public immutable _raid; uint16 public constant BP_PRECISION = 1e4; uint16 public _feeBasisPoints = 50; // 0.5% // For each account, a mapping of its operators. mapping(address => mapping(address => bool)) private _operators; constructor(address confetti, address raid) { _confetti = IERC20(confetti); _raid = IRaid(raid); } function setFee(uint16 amount) public onlyOwner { require(amount <= 100, "Fee is never going to be more than 1%"); _feeBasisPoints = amount; } function withdrawFee() public onlyOwner { _confetti.transfer(msg.sender, _collectedFee); _collectedFee = 0; } /// @notice Claims RP pending rewards for each wallet in a single transaction function claimMultipleRewards(address[] calldata wallets) public { // NOTE: It's safe to simply collect pending rewards for given wallets, // - worst case we simply pay for their gas fees lol for (uint256 i = 0; i < wallets.length; i++) { _raid.claimRewards(wallets[i]); } } /// @notice Claims RP pending rewards for each wallet in a single transaction function taxedClaimMultipleRewards( address[] calldata wallets, uint16 taxBasisPoints, address taxRecipient ) public authorized(wallets) { require( taxBasisPoints + _feeBasisPoints <= BP_PRECISION, "Can't collect over 100%" ); require(taxRecipient != address(0x0), "Tax recipient can't be zero"); // Firstly, claim all the pending rewards for the wallets uint256 claimedRewards = getPendingRewards(wallets); claimMultipleRewards(wallets); // Secondly, collect the tax and the service fee from the rewards. // To save on gas, we try to minimize the amount of token transfers. uint256 tax = (claimedRewards * taxBasisPoints) / BP_PRECISION; amortizedCollectFrom(wallets, taxRecipient, tax); // To save on gas, fees are accumulated and pulled when needed. uint256 fee = (claimedRewards * _feeBasisPoints) / BP_PRECISION; amortizedCollectFrom(wallets, address(this), fee); _collectedFee += fee; } /// @dev You should read `isApproved` first to make sure each wallet has ERC20 approval function claimMultipleRewardsTo( address[] calldata wallets, address recipient ) public authorized(wallets) returns (uint256) { // TODO: uint256 totalClaimedRewards = 0; for (uint256 i = 0; i < wallets.length; i++) { uint256 pendingRewards = _raid.getPendingRewards(wallets[i]); totalClaimedRewards += pendingRewards; _raid.claimRewards(wallets[i]); _confetti.transferFrom(wallets[i], address(this), pendingRewards); } uint256 fee = (totalClaimedRewards * _feeBasisPoints) / BP_PRECISION; _confetti.transfer(recipient, totalClaimedRewards - fee); _collectedFee += fee; return totalClaimedRewards - fee; } /// @notice Claims rewards from the wallets to a single wallet, while also /// collecting a tax. Tax is in basis points, i.e. value of 100 means the /// tax is 1%, value of 10 means 0.1% etc. function taxedClaimMultipleRewardsTo( address[] calldata wallets, address recipient, uint16 taxBasisPoints, address taxRecipient ) public authorized(wallets) { require( taxBasisPoints + _feeBasisPoints <= BP_PRECISION, "Can't collect over 100%" ); require(taxRecipient != address(0x0), "Tax recipient can't be zero"); uint256 claimedRewards = 0; for (uint256 i = 0; i < wallets.length; i++) { uint256 pendingRewards = _raid.getPendingRewards(wallets[i]); claimedRewards += pendingRewards; _raid.claimRewards(wallets[i]); _confetti.transferFrom(wallets[i], address(this), pendingRewards); } uint256 tax = (claimedRewards * taxBasisPoints) / BP_PRECISION; uint256 fee = (claimedRewards * _feeBasisPoints) / BP_PRECISION; if (tax > 0) { _confetti.transfer(taxRecipient, tax); } _collectedFee += fee; // Finally, send the claimed reward to the recipient _confetti.transfer(recipient, claimedRewards - tax - fee); } /// @notice Bundles all of the tokens at the `recipient` address, optionally /// claiming any pending rewards. function bundleTokens( address[] calldata wallets, address recipient, bool alsoClaim ) public authorized(wallets) { if (alsoClaim) { uint256 claimedRewards = getPendingRewards(wallets); claimMultipleRewards(wallets); uint256 fee = (claimedRewards * _feeBasisPoints) / BP_PRECISION; amortizedCollectFrom(wallets, address(this), fee); _collectedFee += fee; } for (uint256 i = 0; i < wallets.length; i++) { if (wallets[i] != recipient) { uint256 amount = _confetti.balanceOf(wallets[i]); _confetti.transferFrom(wallets[i], recipient, amount); } } } // To minimize the amount of ERC-20 token transfers (which are costly), we // use a greedy algorithm of sending as much as we can until we transfer // a total, specified amount. // NOTE: The caller must ensure that wallets are safe to transfer from by the // transaction sender. function amortizedCollectFrom( address[] calldata wallets, address recipient, uint256 amount ) private { uint256 collected = 0; for (uint256 i = 0; i < wallets.length && collected < amount; i++) { uint256 collectedNow = Math.min( _confetti.balanceOf(wallets[i]), amount - collected ); _confetti.transferFrom(wallets[i], recipient, collectedNow); collected += collectedNow; } } /// @notice Returns whether given wallets authorized this contract to move at least /// their current pending rewards function isApproved(address[] calldata wallets) external view returns (bool) { for (uint256 i = 0; i < wallets.length; i++) { uint256 pendingRewards = _raid.getPendingRewards(wallets[i]); if ( _confetti.allowance(wallets[i], address(this)) < pendingRewards ) { return false; } } return true; } /// @notice Convenient function that returns total pending rewards for given wallets function getPendingRewards(address[] calldata wallets) public view returns (uint256) { uint256 sum = 0; for (uint256 i = 0; i < wallets.length; i++) { sum += _raid.getPendingRewards(wallets[i]); } return sum; } // Ensure that the transaction sender is authorized to move the funds // from these wallets modifier authorized(address[] calldata wallets) { require( isOperatorForWallets(_msgSender(), wallets), "Not authorized to manage wallets" ); _; } /// @notice Returns whether the transaction sender can manage given wallets function isOperatorForWallets(address operator, address[] calldata wallets) public view returns (bool) { for (uint256 i = 0; i < wallets.length; i++) { if (!isOperatorFor(operator, wallets[i])) { return false; } } return true; } // ERC-777-inspired operators. function isOperatorFor(address operator, address tokenHolder) public view returns (bool) { return operator == tokenHolder || _operators[tokenHolder][operator]; } /// @notice Authorize a given address to move funds in the name of the /// transaction sender. function authorizeOperator(address operator) public { require(_msgSender() != operator, "authorizing self as operator"); _operators[_msgSender()][operator] = true; emit AuthorizedOperator(operator, _msgSender()); } /// @notice Revoke a given address to move funds in the name of the /// transaction sender. function revokeOperator(address operator) public { require(operator != _msgSender(), "revoking self as operator"); delete _operators[_msgSender()][operator]; emit RevokedOperator(operator, _msgSender()); } event AuthorizedOperator( address indexed operator, address indexed tokenHolder ); event RevokedOperator( address indexed operator, address indexed tokenHolder ); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IRaid { function claimRewards(address user) external; function getPendingRewards(address user) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a / b + (a % b == 0 ? 0 : 1); } }
// SPDX-License-Identifier: MIT // 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol) pragma solidity ^0.8.0; import "../token/ERC20/IERC20.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.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); } }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "london", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"confetti","type":"address"},{"internalType":"address","name":"raid","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"tokenHolder","type":"address"}],"name":"AuthorizedOperator","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"tokenHolder","type":"address"}],"name":"RevokedOperator","type":"event"},{"inputs":[],"name":"BP_PRECISION","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_collectedFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_confetti","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeBasisPoints","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_raid","outputs":[{"internalType":"contract IRaid","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"authorizeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"bool","name":"alsoClaim","type":"bool"}],"name":"bundleTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"claimMultipleRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"address","name":"recipient","type":"address"}],"name":"claimMultipleRewardsTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"getPendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"isApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"tokenHolder","type":"address"}],"name":"isOperatorFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"isOperatorForWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"address","name":"operator","type":"address"}],"name":"revokeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"amount","type":"uint16"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint16","name":"taxBasisPoints","type":"uint16"},{"internalType":"address","name":"taxRecipient","type":"address"}],"name":"taxedClaimMultipleRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint16","name":"taxBasisPoints","type":"uint16"},{"internalType":"address","name":"taxRecipient","type":"address"}],"name":"taxedClaimMultipleRewardsTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526002805461ffff191660321790553480156200001f57600080fd5b506040516200200f3803806200200f8339810160408190526200004291620000d2565b6200004d3362000065565b6001600160a01b039182166080521660a0526200010a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000cd57600080fd5b919050565b60008060408385031215620000e657600080fd5b620000f183620000b5565b91506200010160208401620000b5565b90509250929050565b60805160a051611e61620001ae600039600081816102a40152818161032201528181610605015281816106d101528181610b6801528181610c8301528181610d4f015261156901526000818161018a015281816103e301528181610780015281816108bd0152818161094d01528181610dfe01528181610ef9015281816110a40152818161116401528181611444015281816117ab015261187a0152611e616000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063cd93dd4d116100b8578063e941fa781161007c578063e941fa7814610297578063ed1d9aad1461029f578063f2fde38b146102c6578063f808e279146102d9578063fad8b32a146102ec578063ff71c930146102ff57600080fd5b8063cd93dd4d14610242578063ce0c25771461024b578063d20ff8431461025e578063d95b637114610271578063dfec360a1461028457600080fd5b80638da5cb5b116100ff5780638da5cb5b146101e15780638e005553146101f2578063959b8c3f1461020557806395e38dcd14610218578063b2121ce51461023957600080fd5b8063283b6a1b1461013c578063392a93f81461016457806364bddca814610185578063715018a6146101c45780638c5d4d7c146101ce575b600080fd5b61014f61014a3660046119bc565b610312565b60405190151581526020015b60405180910390f35b6002546101729061ffff1681565b60405161ffff909116815260200161015b565b6101ac7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161015b565b6101cc6104d5565b005b6101cc6101dc366004611a2c565b610514565b6000546001600160a01b03166101ac565b6101cc610200366004611aa2565b610a04565b6101cc610213366004611abd565b610aa9565b61022b6102263660046119bc565b610b59565b60405190815260200161015b565b61017261271081565b61022b60015481565b61022b610259366004611ad8565b610c4a565b6101cc61026c366004611b3a565b610fc7565b61014f61027f366004611ba1565b611239565b6101cc610292366004611bd4565b611287565b6101cc6113fa565b6101ac7f000000000000000000000000000000000000000000000000000000000000000081565b6101cc6102d4366004611abd565b6114c1565b6101cc6102e73660046119bc565b61155c565b6101cc6102fa366004611abd565b61162e565b61014f61030d366004611c39565b6116db565b6000805b828110156104c95760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f6ed201786868581811061036157610361611c8c565b90506020020160208101906103769190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156103ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103de9190611ca2565b9050807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dd62ed3e87878681811061042257610422611c8c565b90506020020160208101906104379190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015610481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a59190611ca2565b10156104b6576000925050506104cf565b50806104c181611cd1565b915050610316565b50600190505b92915050565b6000546001600160a01b031633146105085760405162461bcd60e51b81526004016104ff90611cea565b60405180910390fd5b610512600061173d565b565b8484610522335b83836116db565b61053e5760405162461bcd60e51b81526004016104ff90611d1f565b600254612710906105539061ffff1686611d54565b61ffff16111561059f5760405162461bcd60e51b815260206004820152601760248201527643616e277420636f6c6c656374206f766572203130302560481b60448201526064016104ff565b6001600160a01b0383166105f55760405162461bcd60e51b815260206004820152601b60248201527f54617820726563697069656e742063616e2774206265207a65726f000000000060448201526064016104ff565b6000805b8781101561084c5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f6ed20178b8b8581811061064457610644611c8c565b90506020020160208101906106599190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561069d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c19190611ca2565b90506106cd8184611d7a565b92507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ef5cfb8c8b8b8581811061071057610710611c8c565b90506020020160208101906107259190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561076657600080fd5b505af115801561077a573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd8b8b858181106107bf576107bf611c8c565b90506020020160208101906107d49190611abd565b30846040518463ffffffff1660e01b81526004016107f493929190611d92565b6020604051808303816000875af1158015610813573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108379190611db6565b5050808061084490611cd1565b9150506105f9565b50600061271061086061ffff881684611dd3565b61086a9190611df2565b600254909150600090612710906108859061ffff1685611dd3565b61088f9190611df2565b9050811561092c5760405163a9059cbb60e01b81526001600160a01b038781166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092a9190611db6565b505b806001600082825461093e9190611d7a565b90915550506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb898361097e8688611e14565b6109889190611e14565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f79190611db6565b5050505050505050505050565b6000546001600160a01b03163314610a2e5760405162461bcd60e51b81526004016104ff90611cea565b60648161ffff161115610a915760405162461bcd60e51b815260206004820152602560248201527f466565206973206e6576657220676f696e6720746f206265206d6f7265207468604482015264616e20312560d81b60648201526084016104ff565b6002805461ffff191661ffff92909216919091179055565b6001600160a01b0381163303610b015760405162461bcd60e51b815260206004820152601c60248201527f617574686f72697a696e672073656c66206173206f70657261746f720000000060448201526064016104ff565b3360008181526003602090815260408083206001600160a01b0386168085529252808320805460ff191660011790555190917ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f991a350565b600080805b83811015610c42577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f6ed2017868684818110610ba757610ba7611c8c565b9050602002016020810190610bbc9190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c249190611ca2565b610c2e9083611d7a565b915080610c3a81611cd1565b915050610b5e565b509392505050565b60008383610c573361051b565b610c735760405162461bcd60e51b81526004016104ff90611d1f565b6000805b86811015610eca5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f6ed20178a8a85818110610cc257610cc2611c8c565b9050602002016020810190610cd79190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190611ca2565b9050610d4b8184611d7a565b92507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ef5cfb8c8a8a85818110610d8e57610d8e611c8c565b9050602002016020810190610da39190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015610de457600080fd5b505af1158015610df8573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd8a8a85818110610e3d57610e3d611c8c565b9050602002016020810190610e529190611abd565b30846040518463ffffffff1660e01b8152600401610e7293929190611d92565b6020604051808303816000875af1158015610e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb59190611db6565b50508080610ec290611cd1565b915050610c77565b5060025460009061271090610ee39061ffff1684611dd3565b610eed9190611df2565b90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb87610f298486611e14565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f989190611db6565b508060016000828254610fab9190611d7a565b90915550610fbb90508183611e14565b98975050505050505050565b8383610fd23361051b565b610fee5760405162461bcd60e51b81526004016104ff90611d1f565b82156110565760006110008787610b59565b905061100c878761155c565b600254600090612710906110249061ffff1684611dd3565b61102e9190611df2565b905061103c8888308461178d565b806001600082825461104e9190611d7a565b909155505050505b60005b8581101561123057846001600160a01b031687878381811061107d5761107d611c8c565b90506020020160208101906110929190611abd565b6001600160a01b03161461121e5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082318989858181106110e3576110e3611c8c565b90506020020160208101906110f89190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561113c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111609190611ca2565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd8989858181106111a3576111a3611c8c565b90506020020160208101906111b89190611abd565b88846040518463ffffffff1660e01b81526004016111d893929190611d92565b6020604051808303816000875af11580156111f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121b9190611db6565b50505b8061122881611cd1565b915050611059565b50505050505050565b6000816001600160a01b0316836001600160a01b0316148061128057506001600160a01b0380831660009081526003602090815260408083209387168352929052205460ff165b9392505050565b83836112923361051b565b6112ae5760405162461bcd60e51b81526004016104ff90611d1f565b600254612710906112c39061ffff1686611d54565b61ffff16111561130f5760405162461bcd60e51b815260206004820152601760248201527643616e277420636f6c6c656374206f766572203130302560481b60448201526064016104ff565b6001600160a01b0383166113655760405162461bcd60e51b815260206004820152601b60248201527f54617820726563697069656e742063616e2774206265207a65726f000000000060448201526064016104ff565b60006113718787610b59565b905061137d878761155c565b600061271061139061ffff881684611dd3565b61139a9190611df2565b90506113a88888878461178d565b600254600090612710906113c09061ffff1685611dd3565b6113ca9190611df2565b90506113d88989308461178d565b80600160008282546113ea9190611d7a565b9091555050505050505050505050565b6000546001600160a01b031633146114245760405162461bcd60e51b81526004016104ff90611cea565b60015460405163a9059cbb60e01b815233600482015260248101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b99190611db6565b506000600155565b6000546001600160a01b031633146114eb5760405162461bcd60e51b81526004016104ff90611cea565b6001600160a01b0381166115505760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104ff565b6115598161173d565b50565b60005b81811015611629577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ef5cfb8c8484848181106115a8576115a8611c8c565b90506020020160208101906115bd9190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156115fe57600080fd5b505af1158015611612573d6000803e3d6000fd5b50505050808061162190611cd1565b91505061155f565b505050565b336001600160a01b038216036116865760405162461bcd60e51b815260206004820152601960248201527f7265766f6b696e672073656c66206173206f70657261746f720000000000000060448201526064016104ff565b3360008181526003602090815260408083206001600160a01b0386168085529252808320805460ff191690555190917f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa191a350565b6000805b8281101561173257611712858585848181106116fd576116fd611c8c565b905060200201602081019061027f9190611abd565b611720576000915050611280565b8061172a81611cd1565b9150506116df565b506001949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000805b848110801561179f57508282105b156119525760006118767f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082318989868181106117ea576117ea611c8c565b90506020020160208101906117ff9190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611843573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118679190611ca2565b6118718587611e14565b61195a565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd8888858181106118b9576118b9611c8c565b90506020020160208101906118ce9190611abd565b87846040518463ffffffff1660e01b81526004016118ee93929190611d92565b6020604051808303816000875af115801561190d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119319190611db6565b5061193c8184611d7a565b925050808061194a90611cd1565b915050611791565b505050505050565b60008183106119695781611280565b5090919050565b60008083601f84011261198257600080fd5b50813567ffffffffffffffff81111561199a57600080fd5b6020830191508360208260051b85010111156119b557600080fd5b9250929050565b600080602083850312156119cf57600080fd5b823567ffffffffffffffff8111156119e657600080fd5b6119f285828601611970565b90969095509350505050565b80356001600160a01b0381168114611a1557600080fd5b919050565b803561ffff81168114611a1557600080fd5b600080600080600060808688031215611a4457600080fd5b853567ffffffffffffffff811115611a5b57600080fd5b611a6788828901611970565b9096509450611a7a9050602087016119fe565b9250611a8860408701611a1a565b9150611a96606087016119fe565b90509295509295909350565b600060208284031215611ab457600080fd5b61128082611a1a565b600060208284031215611acf57600080fd5b611280826119fe565b600080600060408486031215611aed57600080fd5b833567ffffffffffffffff811115611b0457600080fd5b611b1086828701611970565b9094509250611b239050602085016119fe565b90509250925092565b801515811461155957600080fd5b60008060008060608587031215611b5057600080fd5b843567ffffffffffffffff811115611b6757600080fd5b611b7387828801611970565b9095509350611b869050602086016119fe565b91506040850135611b9681611b2c565b939692955090935050565b60008060408385031215611bb457600080fd5b611bbd836119fe565b9150611bcb602084016119fe565b90509250929050565b60008060008060608587031215611bea57600080fd5b843567ffffffffffffffff811115611c0157600080fd5b611c0d87828801611970565b9095509350611c20905060208601611a1a565b9150611c2e604086016119fe565b905092959194509250565b600080600060408486031215611c4e57600080fd5b611c57846119fe565b9250602084013567ffffffffffffffff811115611c7357600080fd5b611c7f86828701611970565b9497909650939450505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611cb457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600060018201611ce357611ce3611cbb565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4e6f7420617574686f72697a656420746f206d616e6167652077616c6c657473604082015260600190565b600061ffff808316818516808303821115611d7157611d71611cbb565b01949350505050565b60008219821115611d8d57611d8d611cbb565b500190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215611dc857600080fd5b815161128081611b2c565b6000816000190483118215151615611ded57611ded611cbb565b500290565b600082611e0f57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611e2657611e26611cbb565b50039056fea2646970667358221220289612c0f51e65ccd6fbf795663119ad3aabc165da3a5f31cbf848a6d745baaf64736f6c634300080d0033000000000000000000000000cfef8857e9c80e3440a823971420f7fa5f62f020000000000000000000000000fa209a705a4da0a240aa355c889ed0995154d7eb
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063cd93dd4d116100b8578063e941fa781161007c578063e941fa7814610297578063ed1d9aad1461029f578063f2fde38b146102c6578063f808e279146102d9578063fad8b32a146102ec578063ff71c930146102ff57600080fd5b8063cd93dd4d14610242578063ce0c25771461024b578063d20ff8431461025e578063d95b637114610271578063dfec360a1461028457600080fd5b80638da5cb5b116100ff5780638da5cb5b146101e15780638e005553146101f2578063959b8c3f1461020557806395e38dcd14610218578063b2121ce51461023957600080fd5b8063283b6a1b1461013c578063392a93f81461016457806364bddca814610185578063715018a6146101c45780638c5d4d7c146101ce575b600080fd5b61014f61014a3660046119bc565b610312565b60405190151581526020015b60405180910390f35b6002546101729061ffff1681565b60405161ffff909116815260200161015b565b6101ac7f000000000000000000000000cfef8857e9c80e3440a823971420f7fa5f62f02081565b6040516001600160a01b03909116815260200161015b565b6101cc6104d5565b005b6101cc6101dc366004611a2c565b610514565b6000546001600160a01b03166101ac565b6101cc610200366004611aa2565b610a04565b6101cc610213366004611abd565b610aa9565b61022b6102263660046119bc565b610b59565b60405190815260200161015b565b61017261271081565b61022b60015481565b61022b610259366004611ad8565b610c4a565b6101cc61026c366004611b3a565b610fc7565b61014f61027f366004611ba1565b611239565b6101cc610292366004611bd4565b611287565b6101cc6113fa565b6101ac7f000000000000000000000000fa209a705a4da0a240aa355c889ed0995154d7eb81565b6101cc6102d4366004611abd565b6114c1565b6101cc6102e73660046119bc565b61155c565b6101cc6102fa366004611abd565b61162e565b61014f61030d366004611c39565b6116db565b6000805b828110156104c95760007f000000000000000000000000fa209a705a4da0a240aa355c889ed0995154d7eb6001600160a01b031663f6ed201786868581811061036157610361611c8c565b90506020020160208101906103769190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156103ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103de9190611ca2565b9050807f000000000000000000000000cfef8857e9c80e3440a823971420f7fa5f62f0206001600160a01b031663dd62ed3e87878681811061042257610422611c8c565b90506020020160208101906104379190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015610481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a59190611ca2565b10156104b6576000925050506104cf565b50806104c181611cd1565b915050610316565b50600190505b92915050565b6000546001600160a01b031633146105085760405162461bcd60e51b81526004016104ff90611cea565b60405180910390fd5b610512600061173d565b565b8484610522335b83836116db565b61053e5760405162461bcd60e51b81526004016104ff90611d1f565b600254612710906105539061ffff1686611d54565b61ffff16111561059f5760405162461bcd60e51b815260206004820152601760248201527643616e277420636f6c6c656374206f766572203130302560481b60448201526064016104ff565b6001600160a01b0383166105f55760405162461bcd60e51b815260206004820152601b60248201527f54617820726563697069656e742063616e2774206265207a65726f000000000060448201526064016104ff565b6000805b8781101561084c5760007f000000000000000000000000fa209a705a4da0a240aa355c889ed0995154d7eb6001600160a01b031663f6ed20178b8b8581811061064457610644611c8c565b90506020020160208101906106599190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561069d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c19190611ca2565b90506106cd8184611d7a565b92507f000000000000000000000000fa209a705a4da0a240aa355c889ed0995154d7eb6001600160a01b031663ef5cfb8c8b8b8581811061071057610710611c8c565b90506020020160208101906107259190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561076657600080fd5b505af115801561077a573d6000803e3d6000fd5b505050507f000000000000000000000000cfef8857e9c80e3440a823971420f7fa5f62f0206001600160a01b03166323b872dd8b8b858181106107bf576107bf611c8c565b90506020020160208101906107d49190611abd565b30846040518463ffffffff1660e01b81526004016107f493929190611d92565b6020604051808303816000875af1158015610813573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108379190611db6565b5050808061084490611cd1565b9150506105f9565b50600061271061086061ffff881684611dd3565b61086a9190611df2565b600254909150600090612710906108859061ffff1685611dd3565b61088f9190611df2565b9050811561092c5760405163a9059cbb60e01b81526001600160a01b038781166004830152602482018490527f000000000000000000000000cfef8857e9c80e3440a823971420f7fa5f62f020169063a9059cbb906044016020604051808303816000875af1158015610906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092a9190611db6565b505b806001600082825461093e9190611d7a565b90915550506001600160a01b037f000000000000000000000000cfef8857e9c80e3440a823971420f7fa5f62f0201663a9059cbb898361097e8688611e14565b6109889190611e14565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f79190611db6565b5050505050505050505050565b6000546001600160a01b03163314610a2e5760405162461bcd60e51b81526004016104ff90611cea565b60648161ffff161115610a915760405162461bcd60e51b815260206004820152602560248201527f466565206973206e6576657220676f696e6720746f206265206d6f7265207468604482015264616e20312560d81b60648201526084016104ff565b6002805461ffff191661ffff92909216919091179055565b6001600160a01b0381163303610b015760405162461bcd60e51b815260206004820152601c60248201527f617574686f72697a696e672073656c66206173206f70657261746f720000000060448201526064016104ff565b3360008181526003602090815260408083206001600160a01b0386168085529252808320805460ff191660011790555190917ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f991a350565b600080805b83811015610c42577f000000000000000000000000fa209a705a4da0a240aa355c889ed0995154d7eb6001600160a01b031663f6ed2017868684818110610ba757610ba7611c8c565b9050602002016020810190610bbc9190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c249190611ca2565b610c2e9083611d7a565b915080610c3a81611cd1565b915050610b5e565b509392505050565b60008383610c573361051b565b610c735760405162461bcd60e51b81526004016104ff90611d1f565b6000805b86811015610eca5760007f000000000000000000000000fa209a705a4da0a240aa355c889ed0995154d7eb6001600160a01b031663f6ed20178a8a85818110610cc257610cc2611c8c565b9050602002016020810190610cd79190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190611ca2565b9050610d4b8184611d7a565b92507f000000000000000000000000fa209a705a4da0a240aa355c889ed0995154d7eb6001600160a01b031663ef5cfb8c8a8a85818110610d8e57610d8e611c8c565b9050602002016020810190610da39190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015610de457600080fd5b505af1158015610df8573d6000803e3d6000fd5b505050507f000000000000000000000000cfef8857e9c80e3440a823971420f7fa5f62f0206001600160a01b03166323b872dd8a8a85818110610e3d57610e3d611c8c565b9050602002016020810190610e529190611abd565b30846040518463ffffffff1660e01b8152600401610e7293929190611d92565b6020604051808303816000875af1158015610e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb59190611db6565b50508080610ec290611cd1565b915050610c77565b5060025460009061271090610ee39061ffff1684611dd3565b610eed9190611df2565b90506001600160a01b037f000000000000000000000000cfef8857e9c80e3440a823971420f7fa5f62f0201663a9059cbb87610f298486611e14565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f989190611db6565b508060016000828254610fab9190611d7a565b90915550610fbb90508183611e14565b98975050505050505050565b8383610fd23361051b565b610fee5760405162461bcd60e51b81526004016104ff90611d1f565b82156110565760006110008787610b59565b905061100c878761155c565b600254600090612710906110249061ffff1684611dd3565b61102e9190611df2565b905061103c8888308461178d565b806001600082825461104e9190611d7a565b909155505050505b60005b8581101561123057846001600160a01b031687878381811061107d5761107d611c8c565b90506020020160208101906110929190611abd565b6001600160a01b03161461121e5760007f000000000000000000000000cfef8857e9c80e3440a823971420f7fa5f62f0206001600160a01b03166370a082318989858181106110e3576110e3611c8c565b90506020020160208101906110f89190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561113c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111609190611ca2565b90507f000000000000000000000000cfef8857e9c80e3440a823971420f7fa5f62f0206001600160a01b03166323b872dd8989858181106111a3576111a3611c8c565b90506020020160208101906111b89190611abd565b88846040518463ffffffff1660e01b81526004016111d893929190611d92565b6020604051808303816000875af11580156111f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121b9190611db6565b50505b8061122881611cd1565b915050611059565b50505050505050565b6000816001600160a01b0316836001600160a01b0316148061128057506001600160a01b0380831660009081526003602090815260408083209387168352929052205460ff165b9392505050565b83836112923361051b565b6112ae5760405162461bcd60e51b81526004016104ff90611d1f565b600254612710906112c39061ffff1686611d54565b61ffff16111561130f5760405162461bcd60e51b815260206004820152601760248201527643616e277420636f6c6c656374206f766572203130302560481b60448201526064016104ff565b6001600160a01b0383166113655760405162461bcd60e51b815260206004820152601b60248201527f54617820726563697069656e742063616e2774206265207a65726f000000000060448201526064016104ff565b60006113718787610b59565b905061137d878761155c565b600061271061139061ffff881684611dd3565b61139a9190611df2565b90506113a88888878461178d565b600254600090612710906113c09061ffff1685611dd3565b6113ca9190611df2565b90506113d88989308461178d565b80600160008282546113ea9190611d7a565b9091555050505050505050505050565b6000546001600160a01b031633146114245760405162461bcd60e51b81526004016104ff90611cea565b60015460405163a9059cbb60e01b815233600482015260248101919091527f000000000000000000000000cfef8857e9c80e3440a823971420f7fa5f62f0206001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b99190611db6565b506000600155565b6000546001600160a01b031633146114eb5760405162461bcd60e51b81526004016104ff90611cea565b6001600160a01b0381166115505760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104ff565b6115598161173d565b50565b60005b81811015611629577f000000000000000000000000fa209a705a4da0a240aa355c889ed0995154d7eb6001600160a01b031663ef5cfb8c8484848181106115a8576115a8611c8c565b90506020020160208101906115bd9190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156115fe57600080fd5b505af1158015611612573d6000803e3d6000fd5b50505050808061162190611cd1565b91505061155f565b505050565b336001600160a01b038216036116865760405162461bcd60e51b815260206004820152601960248201527f7265766f6b696e672073656c66206173206f70657261746f720000000000000060448201526064016104ff565b3360008181526003602090815260408083206001600160a01b0386168085529252808320805460ff191690555190917f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa191a350565b6000805b8281101561173257611712858585848181106116fd576116fd611c8c565b905060200201602081019061027f9190611abd565b611720576000915050611280565b8061172a81611cd1565b9150506116df565b506001949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000805b848110801561179f57508282105b156119525760006118767f000000000000000000000000cfef8857e9c80e3440a823971420f7fa5f62f0206001600160a01b03166370a082318989868181106117ea576117ea611c8c565b90506020020160208101906117ff9190611abd565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611843573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118679190611ca2565b6118718587611e14565b61195a565b90507f000000000000000000000000cfef8857e9c80e3440a823971420f7fa5f62f0206001600160a01b03166323b872dd8888858181106118b9576118b9611c8c565b90506020020160208101906118ce9190611abd565b87846040518463ffffffff1660e01b81526004016118ee93929190611d92565b6020604051808303816000875af115801561190d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119319190611db6565b5061193c8184611d7a565b925050808061194a90611cd1565b915050611791565b505050505050565b60008183106119695781611280565b5090919050565b60008083601f84011261198257600080fd5b50813567ffffffffffffffff81111561199a57600080fd5b6020830191508360208260051b85010111156119b557600080fd5b9250929050565b600080602083850312156119cf57600080fd5b823567ffffffffffffffff8111156119e657600080fd5b6119f285828601611970565b90969095509350505050565b80356001600160a01b0381168114611a1557600080fd5b919050565b803561ffff81168114611a1557600080fd5b600080600080600060808688031215611a4457600080fd5b853567ffffffffffffffff811115611a5b57600080fd5b611a6788828901611970565b9096509450611a7a9050602087016119fe565b9250611a8860408701611a1a565b9150611a96606087016119fe565b90509295509295909350565b600060208284031215611ab457600080fd5b61128082611a1a565b600060208284031215611acf57600080fd5b611280826119fe565b600080600060408486031215611aed57600080fd5b833567ffffffffffffffff811115611b0457600080fd5b611b1086828701611970565b9094509250611b239050602085016119fe565b90509250925092565b801515811461155957600080fd5b60008060008060608587031215611b5057600080fd5b843567ffffffffffffffff811115611b6757600080fd5b611b7387828801611970565b9095509350611b869050602086016119fe565b91506040850135611b9681611b2c565b939692955090935050565b60008060408385031215611bb457600080fd5b611bbd836119fe565b9150611bcb602084016119fe565b90509250929050565b60008060008060608587031215611bea57600080fd5b843567ffffffffffffffff811115611c0157600080fd5b611c0d87828801611970565b9095509350611c20905060208601611a1a565b9150611c2e604086016119fe565b905092959194509250565b600080600060408486031215611c4e57600080fd5b611c57846119fe565b9250602084013567ffffffffffffffff811115611c7357600080fd5b611c7f86828701611970565b9497909650939450505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611cb457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600060018201611ce357611ce3611cbb565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4e6f7420617574686f72697a656420746f206d616e6167652077616c6c657473604082015260600190565b600061ffff808316818516808303821115611d7157611d71611cbb565b01949350505050565b60008219821115611d8d57611d8d611cbb565b500190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215611dc857600080fd5b815161128081611b2c565b6000816000190483118215151615611ded57611ded611cbb565b500290565b600082611e0f57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611e2657611e26611cbb565b50039056fea2646970667358221220289612c0f51e65ccd6fbf795663119ad3aabc165da3a5f31cbf848a6d745baaf64736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cfef8857e9c80e3440a823971420f7fa5f62f020000000000000000000000000fa209a705a4da0a240aa355c889ed0995154d7eb
-----Decoded View---------------
Arg [0] : confetti (address): 0xCfef8857E9C80e3440A823971420F7Fa5F62f020
Arg [1] : raid (address): 0xFa209a705a4DA0A240AA355c889ed0995154D7Eb
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000cfef8857e9c80e3440a823971420f7fa5f62f020
Arg [1] : 000000000000000000000000fa209a705a4da0a240aa355c889ed0995154d7eb
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.