Feature Tip: Add private address tag to any address under My Name Tag !
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
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 10674655 | 1510 days ago | IN | 0 ETH | 0.23412587 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
YAMDelegate
Compiler Version
v0.5.17+commit.d19bba13
Optimization Enabled:
Yes with 50000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-08-17 */ pragma solidity 0.5.17; contract YAMGovernanceStorage { /// @notice A record of each accounts delegate mapping (address => address) internal _delegates; /// @notice A checkpoint for marking number of votes from a given block struct Checkpoint { uint32 fromBlock; uint256 votes; } /// @notice A record of votes checkpoints for each account, by index mapping (address => mapping (uint32 => Checkpoint)) public checkpoints; /// @notice The number of checkpoints for each account mapping (address => uint32) public numCheckpoints; /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); /// @notice The EIP-712 typehash for the delegation struct used by the contract bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); /// @notice A record of states for signing / validating signatures mapping (address => uint) public nonces; } // SPDX-License-Identifier: MIT /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // Storage for a YAM token contract YAMTokenStorage { using SafeMath for uint256; /** * @dev Guard variable for re-entrancy checks. Not currently used */ bool internal _notEntered; /** * @notice EIP-20 token name for this token */ string public name; /** * @notice EIP-20 token symbol for this token */ string public symbol; /** * @notice EIP-20 token decimals for this token */ uint8 public decimals; /** * @notice Governor for this contract */ address public gov; /** * @notice Pending governance for this contract */ address public pendingGov; /** * @notice Approved rebaser for this contract */ address public rebaser; /** * @notice Reserve address of YAM protocol */ address public incentivizer; /** * @notice Total supply of YAMs */ uint256 public totalSupply; /** * @notice Internal decimals used to handle scaling factor */ uint256 public constant internalDecimals = 10**24; /** * @notice Used for percentage maths */ uint256 public constant BASE = 10**18; /** * @notice Scaling factor that adjusts everyone's balances */ uint256 public yamsScalingFactor; mapping (address => uint256) internal _yamBalances; mapping (address => mapping (address => uint256)) internal _allowedFragments; uint256 public initSupply; } contract YAMTokenInterface is YAMTokenStorage, YAMGovernanceStorage { /// @notice An event thats emitted when an account changes its delegate event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /** * @notice Event emitted when tokens are rebased */ event Rebase(uint256 epoch, uint256 prevYamsScalingFactor, uint256 newYamsScalingFactor); /*** Gov Events ***/ /** * @notice Event emitted when pendingGov is changed */ event NewPendingGov(address oldPendingGov, address newPendingGov); /** * @notice Event emitted when gov is changed */ event NewGov(address oldGov, address newGov); /** * @notice Sets the rebaser contract */ event NewRebaser(address oldRebaser, address newRebaser); /** * @notice Sets the incentivizer contract */ event NewIncentivizer(address oldIncentivizer, address newIncentivizer); /* - ERC20 Events - */ /** * @notice EIP20 Transfer event */ event Transfer(address indexed from, address indexed to, uint amount); /** * @notice EIP20 Approval event */ event Approval(address indexed owner, address indexed spender, uint amount); /* - Extra Events - */ /** * @notice Tokens minted event */ event Mint(address to, uint256 amount); // Public functions function transfer(address to, uint256 value) external returns(bool); function transferFrom(address from, address to, uint256 value) external returns(bool); function balanceOf(address who) external view returns(uint256); function balanceOfUnderlying(address who) external view returns(uint256); function allowance(address owner_, address spender) external view returns(uint256); function approve(address spender, uint256 value) external returns (bool); function increaseAllowance(address spender, uint256 addedValue) external returns (bool); function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); function maxScalingFactor() external view returns (uint256); /* - Governance Functions - */ function getPriorVotes(address account, uint blockNumber) external view returns (uint256); function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) external; function delegate(address delegatee) external; function delegates(address delegator) external view returns (address); function getCurrentVotes(address account) external view returns (uint256); /* - Permissioned/Governance functions - */ function mint(address to, uint256 amount) external returns (bool); function rebase(uint256 epoch, uint256 indexDelta, bool positive) external returns (uint256); function _setRebaser(address rebaser_) external; function _setIncentivizer(address incentivizer_) external; function _setPendingGov(address pendingGov_) external; function _acceptGov() external; } contract YAMGovernanceToken is YAMTokenInterface { /// @notice An event thats emitted when an account changes its delegate event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegator The address to get delegatee for */ function delegates(address delegator) external view returns (address) { return _delegates[delegator]; } /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegatee The address to delegate votes to */ function delegate(address delegatee) external { return _delegate(msg.sender, delegatee); } /** * @notice Delegates votes from signatory to `delegatee` * @param delegatee The address to delegate votes to * @param nonce The contract state required to match the signature * @param expiry The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair */ function delegateBySig( address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s ) external { bytes32 domainSeparator = keccak256( abi.encode( DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this) ) ); bytes32 structHash = keccak256( abi.encode( DELEGATION_TYPEHASH, delegatee, nonce, expiry ) ); bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", domainSeparator, structHash ) ); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "YAM::delegateBySig: invalid signature"); require(nonce == nonces[signatory]++, "YAM::delegateBySig: invalid nonce"); require(now <= expiry, "YAM::delegateBySig: signature expired"); return _delegate(signatory, delegatee); } /** * @notice Gets the current votes balance for `account` * @param account The address to get votes balance * @return The number of current votes for `account` */ function getCurrentVotes(address account) external view returns (uint256) { uint32 nCheckpoints = numCheckpoints[account]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; } /** * @notice Determine the prior number of votes for an account as of a block number * @dev Block number must be a finalized block or else this function will revert to prevent misinformation. * @param account The address of the account to check * @param blockNumber The block number to get the vote balance at * @return The number of votes the account had as of the given block */ function getPriorVotes(address account, uint blockNumber) external view returns (uint256) { require(blockNumber < block.number, "YAM::getPriorVotes: not yet determined"); uint32 nCheckpoints = numCheckpoints[account]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1].votes; } // Next check implicit zero balance if (checkpoints[account][0].fromBlock > blockNumber) { return 0; } uint32 lower = 0; uint32 upper = nCheckpoints - 1; while (upper > lower) { uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow Checkpoint memory cp = checkpoints[account][center]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower].votes; } function _delegate(address delegator, address delegatee) internal { address currentDelegate = _delegates[delegator]; uint256 delegatorBalance = _yamBalances[delegator]; // balance of underlying YAMs (not scaled); _delegates[delegator] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance); } function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { // decrease old representative uint32 srcRepNum = numCheckpoints[srcRep]; uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0; uint256 srcRepNew = srcRepOld.sub(amount); _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); } if (dstRep != address(0)) { // increase new representative uint32 dstRepNum = numCheckpoints[dstRep]; uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0; uint256 dstRepNew = dstRepOld.add(amount); _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); } } } function _writeCheckpoint( address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes ) internal { uint32 blockNumber = safe32(block.number, "YAM::_writeCheckpoint: block number exceeds 32 bits"); if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) { checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes); numCheckpoints[delegatee] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } function getChainId() internal pure returns (uint) { uint256 chainId; assembly { chainId := chainid() } return chainId; } } /* import "./YAMTokenInterface.sol"; */ contract YAMToken is YAMGovernanceToken { // Modifiers modifier onlyGov() { require(msg.sender == gov); _; } modifier onlyRebaser() { require(msg.sender == rebaser); _; } modifier onlyMinter() { require(msg.sender == rebaser || msg.sender == incentivizer || msg.sender == gov, "not minter"); _; } modifier validRecipient(address to) { require(to != address(0x0)); require(to != address(this)); _; } function initialize( string memory name_, string memory symbol_, uint8 decimals_ ) public { require(yamsScalingFactor == 0, "already initialized"); name = name_; symbol = symbol_; decimals = decimals_; } /** * @notice Computes the current max scaling factor */ function maxScalingFactor() external view returns (uint256) { return _maxScalingFactor(); } function _maxScalingFactor() internal view returns (uint256) { // scaling factor can only go up to 2**256-1 = initSupply * yamsScalingFactor // this is used to check if yamsScalingFactor will be too high to compute balances when rebasing. return uint256(-1) / initSupply; } /** * @notice Mints new tokens, increasing totalSupply, initSupply, and a users balance. * @dev Limited to onlyMinter modifier */ function mint(address to, uint256 amount) external onlyMinter returns (bool) { _mint(to, amount); return true; } function _mint(address to, uint256 amount) internal { // increase totalSupply totalSupply = totalSupply.add(amount); // get underlying value uint256 yamValue = amount.mul(internalDecimals).div(yamsScalingFactor); // increase initSupply initSupply = initSupply.add(yamValue); // make sure the mint didnt push maxScalingFactor too low require(yamsScalingFactor <= _maxScalingFactor(), "max scaling factor too low"); // add balance _yamBalances[to] = _yamBalances[to].add(yamValue); // add delegates to the minter _moveDelegates(address(0), _delegates[to], yamValue); emit Mint(to, amount); } /* - ERC20 functionality - */ /** * @dev Transfer tokens to a specified address. * @param to The address to transfer to. * @param value The amount to be transferred. * @return True on success, false otherwise. */ function transfer(address to, uint256 value) external validRecipient(to) returns (bool) { // underlying balance is stored in yams, so divide by current scaling factor // note, this means as scaling factor grows, dust will be untransferrable. // minimum transfer value == yamsScalingFactor / 1e24; // get amount in underlying uint256 yamValue = value.mul(internalDecimals).div(yamsScalingFactor); // sub from balance of sender _yamBalances[msg.sender] = _yamBalances[msg.sender].sub(yamValue); // add to balance of receiver _yamBalances[to] = _yamBalances[to].add(yamValue); emit Transfer(msg.sender, to, value); _moveDelegates(_delegates[msg.sender], _delegates[to], yamValue); return true; } /** * @dev Transfer tokens from one address to another. * @param from The address you want to send tokens from. * @param to The address you want to transfer to. * @param value The amount of tokens to be transferred. */ function transferFrom(address from, address to, uint256 value) external validRecipient(to) returns (bool) { // decrease allowance _allowedFragments[from][msg.sender] = _allowedFragments[from][msg.sender].sub(value); // get value in yams uint256 yamValue = value.mul(internalDecimals).div(yamsScalingFactor); // sub from from _yamBalances[from] = _yamBalances[from].sub(yamValue); _yamBalances[to] = _yamBalances[to].add(yamValue); emit Transfer(from, to, value); _moveDelegates(_delegates[from], _delegates[to], yamValue); return true; } /** * @param who The address to query. * @return The balance of the specified address. */ function balanceOf(address who) external view returns (uint256) { return _yamBalances[who].mul(yamsScalingFactor).div(internalDecimals); } /** @notice Currently returns the internal storage amount * @param who The address to query. * @return The underlying balance of the specified address. */ function balanceOfUnderlying(address who) external view returns (uint256) { return _yamBalances[who]; } /** * @dev Function to check the amount of tokens that an owner has allowed to a spender. * @param owner_ The address which owns the funds. * @param spender The address which will spend the funds. * @return The number of tokens still available for the spender. */ function allowance(address owner_, address spender) external view returns (uint256) { return _allowedFragments[owner_][spender]; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of * msg.sender. This method is included for ERC20 compatibility. * increaseAllowance and decreaseAllowance should be used instead. * Changing an allowance with this method brings the risk that someone may transfer both * the old and the new allowance - if they are both greater than zero - if a transfer * transaction is mined before the later approve() call is mined. * * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) external returns (bool) { _allowedFragments[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /** * @dev Increase the amount of tokens that an owner has allowed to a spender. * This method should be used instead of approve() to avoid the double approval vulnerability * described above. * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][spender].add(addedValue); emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]); return true; } /** * @dev Decrease the amount of tokens that an owner has allowed to a spender. * * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 oldValue = _allowedFragments[msg.sender][spender]; if (subtractedValue >= oldValue) { _allowedFragments[msg.sender][spender] = 0; } else { _allowedFragments[msg.sender][spender] = oldValue.sub(subtractedValue); } emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]); return true; } /* - Governance Functions - */ /** @notice sets the rebaser * @param rebaser_ The address of the rebaser contract to use for authentication. */ function _setRebaser(address rebaser_) external onlyGov { address oldRebaser = rebaser; rebaser = rebaser_; emit NewRebaser(oldRebaser, rebaser_); } /** @notice sets the incentivizer * @param incentivizer_ The address of the rebaser contract to use for authentication. */ function _setIncentivizer(address incentivizer_) external onlyGov { address oldIncentivizer = incentivizer; incentivizer = incentivizer_; emit NewIncentivizer(oldIncentivizer, incentivizer_); } /** @notice sets the pendingGov * @param pendingGov_ The address of the rebaser contract to use for authentication. */ function _setPendingGov(address pendingGov_) external onlyGov { address oldPendingGov = pendingGov; pendingGov = pendingGov_; emit NewPendingGov(oldPendingGov, pendingGov_); } /** @notice lets msg.sender accept governance * */ function _acceptGov() external { require(msg.sender == pendingGov, "!pending"); address oldGov = gov; gov = pendingGov; pendingGov = address(0); emit NewGov(oldGov, gov); } /* - Extras - */ /** * @notice Initiates a new rebase operation, provided the minimum time period has elapsed. * * @dev The supply adjustment equals (totalSupply * DeviationFromTargetRate) / rebaseLag * Where DeviationFromTargetRate is (MarketOracleRate - targetRate) / targetRate * and targetRate is CpiOracleRate / baseCpi */ function rebase( uint256 epoch, uint256 indexDelta, bool positive ) external onlyRebaser returns (uint256) { if (indexDelta == 0) { emit Rebase(epoch, yamsScalingFactor, yamsScalingFactor); return totalSupply; } uint256 prevYamsScalingFactor = yamsScalingFactor; if (!positive) { yamsScalingFactor = yamsScalingFactor.mul(BASE.sub(indexDelta)).div(BASE); } else { uint256 newScalingFactor = yamsScalingFactor.mul(BASE.add(indexDelta)).div(BASE); if (newScalingFactor < _maxScalingFactor()) { yamsScalingFactor = newScalingFactor; } else { yamsScalingFactor = _maxScalingFactor(); } } totalSupply = initSupply.mul(yamsScalingFactor).div(BASE); emit Rebase(epoch, prevYamsScalingFactor, yamsScalingFactor); return totalSupply; } } contract YAM is YAMToken { /** * @notice Initialize the new money market * @param name_ ERC-20 name of this token * @param symbol_ ERC-20 symbol of this token * @param decimals_ ERC-20 decimal precision of this token */ function initialize( string memory name_, string memory symbol_, uint8 decimals_, address initial_owner, uint256 initSupply_ ) public { require(initSupply_ > 0, "0 init supply"); super.initialize(name_, symbol_, decimals_); initSupply = initSupply_.mul(10**24/ (BASE)); totalSupply = initSupply_; yamsScalingFactor = BASE; _yamBalances[initial_owner] = initSupply_.mul(10**24 / (BASE)); // owner renounces ownership after deployment as they need to set // rebaser and incentivizer // gov = gov_; } } contract YAMDelegationStorage { /** * @notice Implementation address for this contract */ address public implementation; } contract YAMDelegatorInterface is YAMDelegationStorage { /** * @notice Emitted when implementation is changed */ event NewImplementation(address oldImplementation, address newImplementation); /** * @notice Called by the gov to update the implementation of the delegator * @param implementation_ The address of the new implementation for delegation * @param allowResign Flag to indicate whether to call _resignImplementation on the old implementation * @param becomeImplementationData The encoded bytes data to be passed to _becomeImplementation */ function _setImplementation(address implementation_, bool allowResign, bytes memory becomeImplementationData) public; } contract YAMDelegateInterface is YAMDelegationStorage { /** * @notice Called by the delegator on a delegate to initialize it for duty * @dev Should revert if any issues arise which make it unfit for delegation * @param data The encoded bytes data for any initialization */ function _becomeImplementation(bytes memory data) public; /** * @notice Called by the delegator on a delegate to forfeit its responsibility */ function _resignImplementation() public; } contract YAMDelegate is YAM, YAMDelegateInterface { /** * @notice Construct an empty delegate */ constructor() public {} /** * @notice Called by the delegator on a delegate to initialize it for duty * @param data The encoded bytes data for any initialization */ function _becomeImplementation(bytes memory data) public { // Shh -- currently unused data; // Shh -- we don't ever want this hook to be marked pure if (false) { implementation = address(0); } require(msg.sender == gov, "only the gov may call _becomeImplementation"); } /** * @notice Called by the delegator on a delegate to forfeit its responsibility */ function _resignImplementation() public { // Shh -- we don't ever want this hook to be marked pure if (false) { implementation = address(0); } require(msg.sender == gov, "only the gov may call _resignImplementation"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldGov","type":"address"},{"indexed":false,"internalType":"address","name":"newGov","type":"address"}],"name":"NewGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldIncentivizer","type":"address"},{"indexed":false,"internalType":"address","name":"newIncentivizer","type":"address"}],"name":"NewIncentivizer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingGov","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingGov","type":"address"}],"name":"NewPendingGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRebaser","type":"address"},{"indexed":false,"internalType":"address","name":"newRebaser","type":"address"}],"name":"NewRebaser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"prevYamsScalingFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newYamsScalingFactor","type":"uint256"}],"name":"Rebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"_acceptGov","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"_becomeImplementation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"_resignImplementation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"incentivizer_","type":"address"}],"name":"_setIncentivizer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"pendingGov_","type":"address"}],"name":"_setPendingGov","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"rebaser_","type":"address"}],"name":"_setRebaser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incentivizer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"initSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"address","name":"initial_owner","type":"address"},{"internalType":"uint256","name":"initSupply_","type":"uint256"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"internalDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxScalingFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingGov","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"indexDelta","type":"uint256"},{"internalType":"bool","name":"positive","type":"bool"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rebaser","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"yamsScalingFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50613101806100206000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80636c9452211161018657806398dca210116100e3578063c3cda52011610097578063ec342ad011610071578063ec342ad014610ba7578063f1127ed814610baf578063fa8f345514610c0e576102de565b8063c3cda52014610b10578063dd62ed3e14610b64578063e7a324dc14610b9f576102de565b8063a9059cbb116100c8578063a9059cbb14610a9c578063b4b5ea5714610ad5578063b6fa857614610b08576102de565b806398dca21014610a30578063a457c2d714610a63576102de565b8063782d6fe11161013a5780637ecebe001161011f5780637ecebe00146109ed57806395d89b4114610a2057806397d63f9314610a28576102de565b8063782d6fe1146109895780637af548c1146109c2576102de565b80636fcfff451161016b5780636fcfff45146108d757806370a082311461092357806373f03dff14610956576102de565b80636c9452211461077e5780636fc6407c146108cf576102de565b8063252408101161023f5780634bda2e20116101f35780635c19a95c116101cd5780635c19a95c1461073b5780635c60da1b1461076e57806364dd48f514610776576102de565b80634bda2e201461065a57806356e6772814610662578063587cde1e14610708576102de565b8063395093511161022457806339509351146105b55780633af9e669146105ee57806340c10f1914610621576102de565b8063252408101461058f578063313ce56714610597576102de565b8063153ab5051161029657806318160ddd1161027b57806318160ddd1461053c57806320606b701461054457806323b872dd1461054c576102de565b8063153ab505146104005780631624f6c61461040a576102de565b806311d3e6c4116102c757806311d3e6c4146103ad57806311fd8a83146103c757806312d43a51146103f8576102de565b806306fdde03146102e3578063095ea7b314610360575b600080fd5b6102eb610c41565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032557818101518382015260200161030d565b50505050905090810190601f1680156103525780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103996004803603604081101561037657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610cec565b604080519115158252519081900360200190f35b6103b5610d60565b60408051918252519081900360200190f35b6103cf610d70565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103cf610d8c565b610408610dad565b005b6104086004803603606081101561042057600080fd5b81019060208101813564010000000081111561043b57600080fd5b82018360208201111561044d57600080fd5b8035906020019184600183028401116401000000008311171561046f57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156104c257600080fd5b8201836020820111156104d457600080fd5b803590602001918460018302840111640100000000831117156104f657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff169150610e249050565b6103b5610ef1565b6103b5610ef7565b6103996004803603606081101561056257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610f12565b6103cf611124565b61059f611140565b6040805160ff9092168252519081900360200190f35b610399600480360360408110156105cb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611149565b6103b56004803603602081101561060457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111fc565b6103996004803603604081101561063757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611224565b610408611309565b6104086004803603602081101561067857600080fd5b81019060208101813564010000000081111561069357600080fd5b8201836020820111156106a557600080fd5b803590602001918460018302840111640100000000831117156106c757600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061144c945050505050565b6103cf6004803603602081101561071e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166114c4565b6104086004803603602081101561075157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166114ef565b6103cf6114f9565b6103b5611515565b610408600480360360a081101561079457600080fd5b8101906020810181356401000000008111156107af57600080fd5b8201836020820111156107c157600080fd5b803590602001918460018302840111640100000000831117156107e357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561083657600080fd5b82018360208201111561084857600080fd5b8035906020019184600183028401116401000000008311171561086a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050813560ff16925050602081013573ffffffffffffffffffffffffffffffffffffffff169060400135611523565b6103cf61161e565b61090a600480360360208110156108ed57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661163a565b6040805163ffffffff9092168252519081900360200190f35b6103b56004803603602081101561093957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611652565b6104086004803603602081101561096c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661169d565b6103b56004803603604081101561099f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561174e565b6103b5600480360360608110156109d857600080fd5b50803590602081013590604001351515611a18565b6103b560048036036020811015610a0357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611b8e565b6102eb611ba0565b6103b5611c16565b61040860048036036020811015610a4657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611c1c565b61039960048036036040811015610a7957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611ccd565b61039960048036036040811015610ab257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611df0565b6103b560048036036020811015610aeb57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611f67565b6103b5612002565b610408600480360360c0811015610b2657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060408101359060ff6060820135169060808101359060a00135612008565b6103b560048036036040811015610b7a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166123bf565b6103b56123f7565b6103b5612412565b610bee60048036036040811015610bc557600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff1661241e565b6040805163ffffffff909316835260208301919091528051918290030190f35b61040860048036036020811015610c2457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661244b565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610ce45780601f10610cb957610100808354040283529160200191610ce4565b820191906000526020600020905b815481529060010190602001808311610cc757829003601f168201915b505050505081565b336000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6000610d6a6124fc565b90505b90565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b600354610100900473ffffffffffffffffffffffffffffffffffffffff1681565b600354610100900473ffffffffffffffffffffffffffffffffffffffff163314610e22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612f5b602b913960400191505060405180910390fd5b565b60085415610e9357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f616c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b8251610ea6906001906020860190612e65565b508151610eba906002906020850190612e65565b50600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff929092169190911790555050565b60075481565b604051806043612fd782396043019050604051809103902081565b60008273ffffffffffffffffffffffffffffffffffffffff8116610f3557600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116301415610f5857600080fd5b73ffffffffffffffffffffffffffffffffffffffff85166000908152600a60209081526040808320338452909152902054610f99908463ffffffff61252f16565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600a60209081526040808320338452909152812091909155600854610ffa90610fee8669d3c21bcecceda100000063ffffffff61257116565b9063ffffffff6125e416565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260096020526040902054909150611033908263ffffffff61252f16565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600960205260408082209390935590871681522054611075908263ffffffff61262616565b73ffffffffffffffffffffffffffffffffffffffff80871660008181526009602090815260409182902094909455805188815290519193928a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a373ffffffffffffffffffffffffffffffffffffffff8087166000908152600c60205260408082205488841683529120546111189291821691168361269a565b50600195945050505050565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60035460ff1681565b336000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205461118a908363ffffffff61262616565b336000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526009602052604090205490565b60055460009073ffffffffffffffffffffffffffffffffffffffff16331480611264575060065473ffffffffffffffffffffffffffffffffffffffff1633145b8061128b5750600354610100900473ffffffffffffffffffffffffffffffffffffffff1633145b6112f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74206d696e74657200000000000000000000000000000000000000000000604482015290519081900360640190fd5b611300838361288c565b50600192915050565b60045473ffffffffffffffffffffffffffffffffffffffff16331461138f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f2170656e64696e67000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600380546004805473ffffffffffffffffffffffffffffffffffffffff8181166101009081027fffffffffffffffffffffff0000000000000000000000000000000000000000ff861617958690557fffffffffffffffffffffffff000000000000000000000000000000000000000090921690925560408051938290048316808552919094049091166020830152825190927f1f14cfc03e486d23acee577b07bc0b3b23f4888c91fcdba5e0fef5a2549d5523928290030190a150565b600354610100900473ffffffffffffffffffffffffffffffffffffffff1633146114c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612fac602b913960400191505060405180910390fd5b50565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600c60205260409020541690565b6114c13382612a24565b60105473ffffffffffffffffffffffffffffffffffffffff1681565b69d3c21bcecceda100000081565b6000811161159257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f3020696e697420737570706c7900000000000000000000000000000000000000604482015290519081900360640190fd5b61159d858585610e24565b6115c4670de0b6b3a764000069d3c21bcecceda10000005b8391900463ffffffff61257116565b600b556007819055670de0b6b3a764000060088190556115ee9069d3c21bcecceda10000006115b5565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526009602052604090209190915550505050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020526000908152604090205463ffffffff1681565b60085473ffffffffffffffffffffffffffffffffffffffff82166000908152600960205260408120549091610d5a9169d3c21bcecceda100000091610fee919063ffffffff61257116565b600354610100900473ffffffffffffffffffffffffffffffffffffffff1633146116c657600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f6163d5b9efd962645dd649e6e48a61bcb0f9df00997a2398b80d135a9ab0c61e929181900390910190a15050565b60004382106117a8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612f866026913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600e602052604090205463ffffffff16806117e3576000915050610d5a565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600d6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8601811685529252909120541683106118a85773ffffffffffffffffffffffffffffffffffffffff84166000908152600d602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490940163ffffffff16835292905220600101549050610d5a565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600d6020908152604080832083805290915290205463ffffffff168310156118f0576000915050610d5a565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8163ffffffff168163ffffffff1611156119d457600282820363ffffffff16048103611940612ee3565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152600d6020908152604080832063ffffffff8086168552908352928190208151808301909252805490931680825260019093015491810191909152908714156119af57602001519450610d5a9350505050565b805163ffffffff168711156119c6578193506119cd565b6001820392505b5050611916565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152600d6020908152604080832063ffffffff9094168352929052206001015491505092915050565b60055460009073ffffffffffffffffffffffffffffffffffffffff163314611a3f57600080fd5b82611a9057600854604080518681526020810183905280820192909252517fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c09181900360600190a150600754611b87565b60085482611ace57611ac6670de0b6b3a7640000610fee611ab7828863ffffffff61252f16565b6008549063ffffffff61257116565b600855611b18565b6000611aef670de0b6b3a7640000610fee611ab7828963ffffffff61262616565b9050611af96124fc565b811015611b0a576008819055611b16565b611b126124fc565b6008555b505b611b3b670de0b6b3a7640000610fee600854600b5461257190919063ffffffff16565b600755600854604080518781526020810184905280820192909252517fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c09181900360600190a150506007545b9392505050565b600f6020526000908152604090205481565b600280546040805160206001841615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909316849004601f81018490048402820184019092528181529291830182828015610ce45780601f10610cb957610100808354040283529160200191610ce4565b600b5481565b600354610100900473ffffffffffffffffffffffffffffffffffffffff163314611c4557600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f2ee668ca7d17a9122dc00c0bfd73b684f2f7d681f17733cc02b294f69f1b3896929181900390910190a15050565b336000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054808310611d3b57336000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452909152812055611d7d565b611d4b818463ffffffff61252f16565b336000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff891684529091529020555b336000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60008273ffffffffffffffffffffffffffffffffffffffff8116611e1357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116301415611e3657600080fd5b600854600090611e5a90610fee8669d3c21bcecceda100000063ffffffff61257116565b33600090815260096020526040902054909150611e7d908263ffffffff61252f16565b336000908152600960205260408082209290925573ffffffffffffffffffffffffffffffffffffffff871681522054611ebc908263ffffffff61262616565b73ffffffffffffffffffffffffffffffffffffffff86166000818152600960209081526040918290209390935580518781529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3336000908152600c60205260408082205473ffffffffffffffffffffffffffffffffffffffff88811684529190922054611f5c92821691168361269a565b506001949350505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600e602052604081205463ffffffff1680611f9f576000611b87565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600d6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86011684529091529020600101549392505050565b60085481565b60006040518080612fd76043913960430190506040518091039020600160405180828054600181600116156101000203166002900480156120805780601f1061205e576101008083540402835291820191612080565b820191906000526020600020905b81548152906001019060200180831161206c575b50509150506040518091039020612095612ac9565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405160208183030381529060405280519060200120905060006040518080613093603a91396040805191829003603a01822060208084019190915273ffffffffffffffffffffffffffffffffffffffff8c1683830152606083018b905260808084018b90528251808503909101815260a0840183528051908201207f190100000000000000000000000000000000000000000000000000000000000060c085015260c2840187905260e2808501829052835180860390910181526101028501808552815191840191909120600091829052610122860180865281905260ff8c1661014287015261016286018b905261018286018a9052935191965092945091926001926101a280830193927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301929081900390910190855afa158015612233573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166122ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612f366025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f60205260409020805460018101909155891461234f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612f156021913960400191505060405180910390fd5b874211156123a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061303b6025913960400191505060405180910390fd5b6123b2818b612a24565b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600a6020908152604080832093909416825291909152205490565b60405180603a6130938239603a019050604051809103902081565b670de0b6b3a764000081565b600d6020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b600354610100900473ffffffffffffffffffffffffffffffffffffffff16331461247457600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f51f448520e2183de499e224808a409ee01a1f380edb2e8497572320c15030545929181900390910190a15050565b6000600b547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161252957fe5b04905090565b6000611b8783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612acd565b60008261258057506000610d5a565b8282028284828161258d57fe5b0414611b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061301a6021913960400191505060405180910390fd5b6000611b8783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b7e565b600082820183811015611b8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126d65750600081115b156128875773ffffffffffffffffffffffffffffffffffffffff8316156127b35773ffffffffffffffffffffffffffffffffffffffff83166000908152600e602052604081205463ffffffff16908161273057600061278d565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600d6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87011684529091529020600101545b905060006127a1828563ffffffff61252f16565b90506127af86848484612bfd565b5050505b73ffffffffffffffffffffffffffffffffffffffff8216156128875773ffffffffffffffffffffffffffffffffffffffff82166000908152600e602052604081205463ffffffff169081612808576000612865565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600d6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87011684529091529020600101545b90506000612879828563ffffffff61262616565b90506123b785848484612bfd565b505050565b60075461289f908263ffffffff61262616565b6007556008546000906128c690610fee8469d3c21bcecceda100000063ffffffff61257116565b600b549091506128dc908263ffffffff61262616565b600b556128e76124fc565b600854111561295757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d6178207363616c696e6720666163746f7220746f6f206c6f77000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526009602052604090205461298d908263ffffffff61262616565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260096020908152604080832094909455600c9052918220546129ce9291168361269a565b6040805173ffffffffffffffffffffffffffffffffffffffff851681526020810184905281517f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885929181900390910190a1505050565b73ffffffffffffffffffffffffffffffffffffffff8083166000818152600c6020818152604080842080546009845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4612ac382848361269a565b50505050565b4690565b60008184841115612b76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b3b578181015183820152602001612b23565b50505050905090810190601f168015612b685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183612be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612b3b578181015183820152602001612b23565b506000838581612bf357fe5b0495945050505050565b6000612c214360405180606001604052806033815260200161306060339139612ded565b905060008463ffffffff16118015612c95575073ffffffffffffffffffffffffffffffffffffffff85166000908152600d6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901811685529252909120548282169116145b15612cfd5773ffffffffffffffffffffffffffffffffffffffff85166000908152600d6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff89011684529091529020600101829055612d96565b60408051808201825263ffffffff8084168252602080830186815273ffffffffffffffffffffffffffffffffffffffff8a166000818152600d84528681208b861682528452868120955186549086167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009182161787559251600196870155908152600e9092529390208054928801909116919092161790555b6040805184815260208101849052815173ffffffffffffffffffffffffffffffffffffffff8816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b6000816401000000008410612e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612b3b578181015183820152602001612b23565b509192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612ea657805160ff1916838001178555612ed3565b82800160010185558215612ed3579182015b82811115612ed3578251825591602001919060010190612eb8565b50612edf929150612efa565b5090565b604080518082019091526000808252602082015290565b610d6d91905b80821115612edf5760008155600101612f0056fe59414d3a3a64656c656761746542795369673a20696e76616c6964206e6f6e636559414d3a3a64656c656761746542795369673a20696e76616c6964207369676e61747572656f6e6c792074686520676f76206d61792063616c6c205f72657369676e496d706c656d656e746174696f6e59414d3a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e65646f6e6c792074686520676f76206d61792063616c6c205f6265636f6d65496d706c656d656e746174696f6e454950373132446f6d61696e28737472696e67206e616d652c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7759414d3a3a64656c656761746542795369673a207369676e6174757265206578706972656459414d3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747344656c65676174696f6e28616464726573732064656c6567617465652c75696e74323536206e6f6e63652c75696e743235362065787069727929a265627a7a72315820b7132799657cfca26af529dcb5162bcce1638e5159e6a82ea86daefc206287c964736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102de5760003560e01c80636c9452211161018657806398dca210116100e3578063c3cda52011610097578063ec342ad011610071578063ec342ad014610ba7578063f1127ed814610baf578063fa8f345514610c0e576102de565b8063c3cda52014610b10578063dd62ed3e14610b64578063e7a324dc14610b9f576102de565b8063a9059cbb116100c8578063a9059cbb14610a9c578063b4b5ea5714610ad5578063b6fa857614610b08576102de565b806398dca21014610a30578063a457c2d714610a63576102de565b8063782d6fe11161013a5780637ecebe001161011f5780637ecebe00146109ed57806395d89b4114610a2057806397d63f9314610a28576102de565b8063782d6fe1146109895780637af548c1146109c2576102de565b80636fcfff451161016b5780636fcfff45146108d757806370a082311461092357806373f03dff14610956576102de565b80636c9452211461077e5780636fc6407c146108cf576102de565b8063252408101161023f5780634bda2e20116101f35780635c19a95c116101cd5780635c19a95c1461073b5780635c60da1b1461076e57806364dd48f514610776576102de565b80634bda2e201461065a57806356e6772814610662578063587cde1e14610708576102de565b8063395093511161022457806339509351146105b55780633af9e669146105ee57806340c10f1914610621576102de565b8063252408101461058f578063313ce56714610597576102de565b8063153ab5051161029657806318160ddd1161027b57806318160ddd1461053c57806320606b701461054457806323b872dd1461054c576102de565b8063153ab505146104005780631624f6c61461040a576102de565b806311d3e6c4116102c757806311d3e6c4146103ad57806311fd8a83146103c757806312d43a51146103f8576102de565b806306fdde03146102e3578063095ea7b314610360575b600080fd5b6102eb610c41565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032557818101518382015260200161030d565b50505050905090810190601f1680156103525780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103996004803603604081101561037657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610cec565b604080519115158252519081900360200190f35b6103b5610d60565b60408051918252519081900360200190f35b6103cf610d70565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103cf610d8c565b610408610dad565b005b6104086004803603606081101561042057600080fd5b81019060208101813564010000000081111561043b57600080fd5b82018360208201111561044d57600080fd5b8035906020019184600183028401116401000000008311171561046f57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156104c257600080fd5b8201836020820111156104d457600080fd5b803590602001918460018302840111640100000000831117156104f657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff169150610e249050565b6103b5610ef1565b6103b5610ef7565b6103996004803603606081101561056257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610f12565b6103cf611124565b61059f611140565b6040805160ff9092168252519081900360200190f35b610399600480360360408110156105cb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611149565b6103b56004803603602081101561060457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111fc565b6103996004803603604081101561063757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611224565b610408611309565b6104086004803603602081101561067857600080fd5b81019060208101813564010000000081111561069357600080fd5b8201836020820111156106a557600080fd5b803590602001918460018302840111640100000000831117156106c757600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061144c945050505050565b6103cf6004803603602081101561071e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166114c4565b6104086004803603602081101561075157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166114ef565b6103cf6114f9565b6103b5611515565b610408600480360360a081101561079457600080fd5b8101906020810181356401000000008111156107af57600080fd5b8201836020820111156107c157600080fd5b803590602001918460018302840111640100000000831117156107e357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561083657600080fd5b82018360208201111561084857600080fd5b8035906020019184600183028401116401000000008311171561086a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050813560ff16925050602081013573ffffffffffffffffffffffffffffffffffffffff169060400135611523565b6103cf61161e565b61090a600480360360208110156108ed57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661163a565b6040805163ffffffff9092168252519081900360200190f35b6103b56004803603602081101561093957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611652565b6104086004803603602081101561096c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661169d565b6103b56004803603604081101561099f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561174e565b6103b5600480360360608110156109d857600080fd5b50803590602081013590604001351515611a18565b6103b560048036036020811015610a0357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611b8e565b6102eb611ba0565b6103b5611c16565b61040860048036036020811015610a4657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611c1c565b61039960048036036040811015610a7957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611ccd565b61039960048036036040811015610ab257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611df0565b6103b560048036036020811015610aeb57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611f67565b6103b5612002565b610408600480360360c0811015610b2657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060408101359060ff6060820135169060808101359060a00135612008565b6103b560048036036040811015610b7a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166123bf565b6103b56123f7565b6103b5612412565b610bee60048036036040811015610bc557600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff1661241e565b6040805163ffffffff909316835260208301919091528051918290030190f35b61040860048036036020811015610c2457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661244b565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610ce45780601f10610cb957610100808354040283529160200191610ce4565b820191906000526020600020905b815481529060010190602001808311610cc757829003601f168201915b505050505081565b336000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6000610d6a6124fc565b90505b90565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b600354610100900473ffffffffffffffffffffffffffffffffffffffff1681565b600354610100900473ffffffffffffffffffffffffffffffffffffffff163314610e22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612f5b602b913960400191505060405180910390fd5b565b60085415610e9357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f616c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b8251610ea6906001906020860190612e65565b508151610eba906002906020850190612e65565b50600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff929092169190911790555050565b60075481565b604051806043612fd782396043019050604051809103902081565b60008273ffffffffffffffffffffffffffffffffffffffff8116610f3557600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116301415610f5857600080fd5b73ffffffffffffffffffffffffffffffffffffffff85166000908152600a60209081526040808320338452909152902054610f99908463ffffffff61252f16565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600a60209081526040808320338452909152812091909155600854610ffa90610fee8669d3c21bcecceda100000063ffffffff61257116565b9063ffffffff6125e416565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260096020526040902054909150611033908263ffffffff61252f16565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600960205260408082209390935590871681522054611075908263ffffffff61262616565b73ffffffffffffffffffffffffffffffffffffffff80871660008181526009602090815260409182902094909455805188815290519193928a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a373ffffffffffffffffffffffffffffffffffffffff8087166000908152600c60205260408082205488841683529120546111189291821691168361269a565b50600195945050505050565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60035460ff1681565b336000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205461118a908363ffffffff61262616565b336000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526009602052604090205490565b60055460009073ffffffffffffffffffffffffffffffffffffffff16331480611264575060065473ffffffffffffffffffffffffffffffffffffffff1633145b8061128b5750600354610100900473ffffffffffffffffffffffffffffffffffffffff1633145b6112f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74206d696e74657200000000000000000000000000000000000000000000604482015290519081900360640190fd5b611300838361288c565b50600192915050565b60045473ffffffffffffffffffffffffffffffffffffffff16331461138f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f2170656e64696e67000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600380546004805473ffffffffffffffffffffffffffffffffffffffff8181166101009081027fffffffffffffffffffffff0000000000000000000000000000000000000000ff861617958690557fffffffffffffffffffffffff000000000000000000000000000000000000000090921690925560408051938290048316808552919094049091166020830152825190927f1f14cfc03e486d23acee577b07bc0b3b23f4888c91fcdba5e0fef5a2549d5523928290030190a150565b600354610100900473ffffffffffffffffffffffffffffffffffffffff1633146114c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612fac602b913960400191505060405180910390fd5b50565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600c60205260409020541690565b6114c13382612a24565b60105473ffffffffffffffffffffffffffffffffffffffff1681565b69d3c21bcecceda100000081565b6000811161159257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f3020696e697420737570706c7900000000000000000000000000000000000000604482015290519081900360640190fd5b61159d858585610e24565b6115c4670de0b6b3a764000069d3c21bcecceda10000005b8391900463ffffffff61257116565b600b556007819055670de0b6b3a764000060088190556115ee9069d3c21bcecceda10000006115b5565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526009602052604090209190915550505050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020526000908152604090205463ffffffff1681565b60085473ffffffffffffffffffffffffffffffffffffffff82166000908152600960205260408120549091610d5a9169d3c21bcecceda100000091610fee919063ffffffff61257116565b600354610100900473ffffffffffffffffffffffffffffffffffffffff1633146116c657600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f6163d5b9efd962645dd649e6e48a61bcb0f9df00997a2398b80d135a9ab0c61e929181900390910190a15050565b60004382106117a8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612f866026913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600e602052604090205463ffffffff16806117e3576000915050610d5a565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600d6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8601811685529252909120541683106118a85773ffffffffffffffffffffffffffffffffffffffff84166000908152600d602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490940163ffffffff16835292905220600101549050610d5a565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600d6020908152604080832083805290915290205463ffffffff168310156118f0576000915050610d5a565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8163ffffffff168163ffffffff1611156119d457600282820363ffffffff16048103611940612ee3565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152600d6020908152604080832063ffffffff8086168552908352928190208151808301909252805490931680825260019093015491810191909152908714156119af57602001519450610d5a9350505050565b805163ffffffff168711156119c6578193506119cd565b6001820392505b5050611916565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152600d6020908152604080832063ffffffff9094168352929052206001015491505092915050565b60055460009073ffffffffffffffffffffffffffffffffffffffff163314611a3f57600080fd5b82611a9057600854604080518681526020810183905280820192909252517fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c09181900360600190a150600754611b87565b60085482611ace57611ac6670de0b6b3a7640000610fee611ab7828863ffffffff61252f16565b6008549063ffffffff61257116565b600855611b18565b6000611aef670de0b6b3a7640000610fee611ab7828963ffffffff61262616565b9050611af96124fc565b811015611b0a576008819055611b16565b611b126124fc565b6008555b505b611b3b670de0b6b3a7640000610fee600854600b5461257190919063ffffffff16565b600755600854604080518781526020810184905280820192909252517fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c09181900360600190a150506007545b9392505050565b600f6020526000908152604090205481565b600280546040805160206001841615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909316849004601f81018490048402820184019092528181529291830182828015610ce45780601f10610cb957610100808354040283529160200191610ce4565b600b5481565b600354610100900473ffffffffffffffffffffffffffffffffffffffff163314611c4557600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f2ee668ca7d17a9122dc00c0bfd73b684f2f7d681f17733cc02b294f69f1b3896929181900390910190a15050565b336000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054808310611d3b57336000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452909152812055611d7d565b611d4b818463ffffffff61252f16565b336000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff891684529091529020555b336000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60008273ffffffffffffffffffffffffffffffffffffffff8116611e1357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116301415611e3657600080fd5b600854600090611e5a90610fee8669d3c21bcecceda100000063ffffffff61257116565b33600090815260096020526040902054909150611e7d908263ffffffff61252f16565b336000908152600960205260408082209290925573ffffffffffffffffffffffffffffffffffffffff871681522054611ebc908263ffffffff61262616565b73ffffffffffffffffffffffffffffffffffffffff86166000818152600960209081526040918290209390935580518781529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3336000908152600c60205260408082205473ffffffffffffffffffffffffffffffffffffffff88811684529190922054611f5c92821691168361269a565b506001949350505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600e602052604081205463ffffffff1680611f9f576000611b87565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600d6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86011684529091529020600101549392505050565b60085481565b60006040518080612fd76043913960430190506040518091039020600160405180828054600181600116156101000203166002900480156120805780601f1061205e576101008083540402835291820191612080565b820191906000526020600020905b81548152906001019060200180831161206c575b50509150506040518091039020612095612ac9565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405160208183030381529060405280519060200120905060006040518080613093603a91396040805191829003603a01822060208084019190915273ffffffffffffffffffffffffffffffffffffffff8c1683830152606083018b905260808084018b90528251808503909101815260a0840183528051908201207f190100000000000000000000000000000000000000000000000000000000000060c085015260c2840187905260e2808501829052835180860390910181526101028501808552815191840191909120600091829052610122860180865281905260ff8c1661014287015261016286018b905261018286018a9052935191965092945091926001926101a280830193927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301929081900390910190855afa158015612233573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166122ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612f366025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f60205260409020805460018101909155891461234f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612f156021913960400191505060405180910390fd5b874211156123a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061303b6025913960400191505060405180910390fd5b6123b2818b612a24565b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600a6020908152604080832093909416825291909152205490565b60405180603a6130938239603a019050604051809103902081565b670de0b6b3a764000081565b600d6020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b600354610100900473ffffffffffffffffffffffffffffffffffffffff16331461247457600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f51f448520e2183de499e224808a409ee01a1f380edb2e8497572320c15030545929181900390910190a15050565b6000600b547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161252957fe5b04905090565b6000611b8783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612acd565b60008261258057506000610d5a565b8282028284828161258d57fe5b0414611b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061301a6021913960400191505060405180910390fd5b6000611b8783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b7e565b600082820183811015611b8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126d65750600081115b156128875773ffffffffffffffffffffffffffffffffffffffff8316156127b35773ffffffffffffffffffffffffffffffffffffffff83166000908152600e602052604081205463ffffffff16908161273057600061278d565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600d6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87011684529091529020600101545b905060006127a1828563ffffffff61252f16565b90506127af86848484612bfd565b5050505b73ffffffffffffffffffffffffffffffffffffffff8216156128875773ffffffffffffffffffffffffffffffffffffffff82166000908152600e602052604081205463ffffffff169081612808576000612865565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600d6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87011684529091529020600101545b90506000612879828563ffffffff61262616565b90506123b785848484612bfd565b505050565b60075461289f908263ffffffff61262616565b6007556008546000906128c690610fee8469d3c21bcecceda100000063ffffffff61257116565b600b549091506128dc908263ffffffff61262616565b600b556128e76124fc565b600854111561295757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d6178207363616c696e6720666163746f7220746f6f206c6f77000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526009602052604090205461298d908263ffffffff61262616565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260096020908152604080832094909455600c9052918220546129ce9291168361269a565b6040805173ffffffffffffffffffffffffffffffffffffffff851681526020810184905281517f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885929181900390910190a1505050565b73ffffffffffffffffffffffffffffffffffffffff8083166000818152600c6020818152604080842080546009845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4612ac382848361269a565b50505050565b4690565b60008184841115612b76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b3b578181015183820152602001612b23565b50505050905090810190601f168015612b685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183612be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612b3b578181015183820152602001612b23565b506000838581612bf357fe5b0495945050505050565b6000612c214360405180606001604052806033815260200161306060339139612ded565b905060008463ffffffff16118015612c95575073ffffffffffffffffffffffffffffffffffffffff85166000908152600d6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901811685529252909120548282169116145b15612cfd5773ffffffffffffffffffffffffffffffffffffffff85166000908152600d6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff89011684529091529020600101829055612d96565b60408051808201825263ffffffff8084168252602080830186815273ffffffffffffffffffffffffffffffffffffffff8a166000818152600d84528681208b861682528452868120955186549086167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009182161787559251600196870155908152600e9092529390208054928801909116919092161790555b6040805184815260208101849052815173ffffffffffffffffffffffffffffffffffffffff8816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b6000816401000000008410612e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612b3b578181015183820152602001612b23565b509192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612ea657805160ff1916838001178555612ed3565b82800160010185558215612ed3579182015b82811115612ed3578251825591602001919060010190612eb8565b50612edf929150612efa565b5090565b604080518082019091526000808252602082015290565b610d6d91905b80821115612edf5760008155600101612f0056fe59414d3a3a64656c656761746542795369673a20696e76616c6964206e6f6e636559414d3a3a64656c656761746542795369673a20696e76616c6964207369676e61747572656f6e6c792074686520676f76206d61792063616c6c205f72657369676e496d706c656d656e746174696f6e59414d3a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e65646f6e6c792074686520676f76206d61792063616c6c205f6265636f6d65496d706c656d656e746174696f6e454950373132446f6d61696e28737472696e67206e616d652c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7759414d3a3a64656c656761746542795369673a207369676e6174757265206578706972656459414d3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747344656c65676174696f6e28616464726573732064656c6567617465652c75696e74323536206e6f6e63652c75696e743235362065787069727929a265627a7a72315820b7132799657cfca26af529dcb5162bcce1638e5159e6a82ea86daefc206287c964736f6c63430005110032
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 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.