Contract 0x3885c4e1107b445dd370D09008D90b5153132FFF

 
 
Txn Hash
Method
Block
From
To
Value
0xd8083daa7de45a654bd91f4b2ecb8f13fda2c45f3e37eb06814a884dd1442d1dTransfer Ownersh...113817842020-12-03 20:17:30732 days 1 hr agoPowerPool.Finance: Deployer IN  0x3885c4e1107b445dd370d09008d90b5153132fff0 Ether0.0012765741
0x6302c78b988a3903dc1070f83e3ef93f5200c198dc3609ff9ceacc6d8229c8d3Set Total Restri...113817832020-12-03 20:17:23732 days 1 hr agoPowerPool.Finance: Deployer IN  0x3885c4e1107b445dd370d09008d90b5153132fff0 Ether0.0018987941
0x719fd61266247cad055b30e8ebe3f05af02b46404693b9ce9f5ad77a82805cbfSet Voting Signa...113817822020-12-03 20:16:50732 days 1 hr agoPowerPool.Finance: Deployer IN  0x3885c4e1107b445dd370d09008d90b5153132fff0 Ether0.0019777541
0x36f2d6becbc11829dc4b132466e34bb25537f613bae56cc36783a6d16f91b602Set Voting Signa...113817812020-12-03 20:16:35732 days 1 hr agoPowerPool.Finance: Deployer IN  0x3885c4e1107b445dd370d09008d90b5153132fff0 Ether0.0019777541
0x1f0fa1dd3166911cba6b5e4b8f59a5be71d1460ad2de5fcb986c5e5a1a37243d0x60806040113817792020-12-03 20:16:18732 days 1 hr agoPowerPool.Finance: Deployer IN  Create: PoolRestrictions0 Ether0.0484223141
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PoolRestrictions

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 2 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2020-12-03
*/

/*
https://powerpool.finance/

          wrrrw r wrr
         ppwr rrr wppr0       prwwwrp                                 prwwwrp                   wr0
        rr 0rrrwrrprpwp0      pp   pr  prrrr0 pp   0r  prrrr0  0rwrrr pp   pr  prrrr0  prrrr0    r0
        rrp pr   wr00rrp      prwww0  pp   wr pp w00r prwwwpr  0rw    prwww0  pp   wr pp   wr    r0
        r0rprprwrrrp pr0      pp      wr   pr pp rwwr wr       0r     pp      wr   pr wr   pr    r0
         prwr wrr0wpwr        00        www0   0w0ww    www0   0w     00        www0    www0   0www0
          wrr ww0rrrr

*/

// File: @openzeppelin/contracts/GSN/Context.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.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 GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol

pragma solidity ^0.6.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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 () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: contracts/interfaces/IPoolRestrictions.sol

pragma solidity 0.6.12;

interface IPoolRestrictions {
  function getMaxTotalSupply(address _pool) external view returns (uint256);

  function isVotingSignatureAllowed(address _votingAddress, bytes4 _signature) external view returns (bool);

  function isVotingSenderAllowed(address _votingAddress, address _sender) external view returns (bool);

  function isWithoutFee(address _addr) external view returns (bool);
}

// File: contracts/PoolRestrictions.sol

pragma solidity 0.6.12;



contract PoolRestrictions is IPoolRestrictions, Ownable {
  event SetTotalRestrictions(address indexed token, uint256 maxTotalSupply);
  event SetSignatureAllowed(bytes4 indexed signature, bool allowed);
  event SetSignatureAllowedForAddress(
    address indexed voting,
    bytes4 indexed signature,
    bool allowed,
    bool overrideAllowed
  );
  event SetVotingSenderAllowed(address indexed voting, address indexed sender, bool allowed);
  event SetWithoutFee(address indexed addr, bool withoutFee);

  struct TotalRestrictions {
    uint256 maxTotalSupply;
  }
  // token => restrictions
  mapping(address => TotalRestrictions) public totalRestrictions;

  // signature => allowed
  mapping(bytes4 => bool) public signaturesAllowed;

  struct VotingSignature {
    bool allowed;
    bool overrideAllowed;
  }
  // votingAddress => signature => data
  mapping(address => mapping(bytes4 => VotingSignature)) public votingSignatures;
  // votingAddress => sender => boolean
  mapping(address => mapping(address => bool)) public votingSenderAllowed;

  mapping(address => bool) public withoutFeeAddresses;

  constructor() public Ownable() {}

  function setTotalRestrictions(address[] calldata _poolsList, uint256[] calldata _maxTotalSupplyList)
    external
    onlyOwner
  {
    _setTotalRestrictions(_poolsList, _maxTotalSupplyList);
  }

  function setVotingSignatures(bytes4[] calldata _signatures, bool[] calldata _allowed) external onlyOwner {
    _setVotingSignatures(_signatures, _allowed);
  }

  function setVotingSignaturesForAddress(
    address _votingAddress,
    bool _override,
    bytes4[] calldata _signatures,
    bool[] calldata _allowed
  ) external onlyOwner {
    _setVotingSignaturesForAddress(_votingAddress, _override, _signatures, _allowed);
  }

  function setVotingAllowedForSenders(
    address _votingAddress,
    address[] calldata _senders,
    bool[] calldata _allowed
  ) external onlyOwner {
    uint256 len = _senders.length;
    _validateArrayLength(len);
    require(len == _allowed.length, "Arrays lengths are not equals");
    for (uint256 i = 0; i < len; i++) {
      votingSenderAllowed[_votingAddress][_senders[i]] = _allowed[i];
      emit SetVotingSenderAllowed(_votingAddress, _senders[i], _allowed[i]);
    }
  }

  function setWithoutFee(address[] calldata _addresses, bool _withoutFee) external onlyOwner {
    uint256 len = _addresses.length;
    _validateArrayLength(len);
    for (uint256 i = 0; i < len; i++) {
      withoutFeeAddresses[_addresses[i]] = _withoutFee;
      emit SetWithoutFee(_addresses[i], _withoutFee);
    }
  }

  function getMaxTotalSupply(address _poolAddress) external view override returns (uint256) {
    return totalRestrictions[_poolAddress].maxTotalSupply;
  }

  function isVotingSignatureAllowed(address _votingAddress, bytes4 _signature) external view override returns (bool) {
    if (votingSignatures[_votingAddress][_signature].overrideAllowed) {
      return votingSignatures[_votingAddress][_signature].allowed;
    } else {
      return signaturesAllowed[_signature];
    }
  }

  function isVotingSenderAllowed(address _votingAddress, address _sender) external view override returns (bool) {
    return votingSenderAllowed[_votingAddress][_sender];
  }

  function isWithoutFee(address _address) external view override returns (bool) {
    return withoutFeeAddresses[_address];
  }

  /*** Internal Functions ***/

  function _setTotalRestrictions(address[] memory _poolsList, uint256[] memory _maxTotalSupplyList) internal {
    uint256 len = _poolsList.length;
    _validateArrayLength(len);
    require(len == _maxTotalSupplyList.length, "Arrays lengths are not equals");

    for (uint256 i = 0; i < len; i++) {
      totalRestrictions[_poolsList[i]] = TotalRestrictions(_maxTotalSupplyList[i]);
      emit SetTotalRestrictions(_poolsList[i], _maxTotalSupplyList[i]);
    }
  }

  function _setVotingSignatures(bytes4[] memory _signatures, bool[] memory _allowed) internal {
    uint256 len = _signatures.length;
    _validateArrayLength(len);
    require(len == _allowed.length, "Arrays lengths are not equals");

    for (uint256 i = 0; i < len; i++) {
      signaturesAllowed[_signatures[i]] = _allowed[i];
      emit SetSignatureAllowed(_signatures[i], _allowed[i]);
    }
  }

  function _setVotingSignaturesForAddress(
    address _votingAddress,
    bool _override,
    bytes4[] memory _signatures,
    bool[] memory _allowed
  ) internal {
    uint256 len = _signatures.length;
    _validateArrayLength(len);
    require(len == _allowed.length, "Arrays lengths are not equals");

    for (uint256 i = 0; i < len; i++) {
      votingSignatures[_votingAddress][_signatures[i]] = VotingSignature(_allowed[i], _override);
      emit SetSignatureAllowedForAddress(_votingAddress, _signatures[i], _allowed[i], _override);
    }
  }

  function _validateArrayLength(uint256 _len) internal {
    require(_len <= 100, "Array length should be less or equal 100");
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"bytes4","name":"signature","type":"bytes4"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"SetSignatureAllowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voting","type":"address"},{"indexed":true,"internalType":"bytes4","name":"signature","type":"bytes4"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"},{"indexed":false,"internalType":"bool","name":"overrideAllowed","type":"bool"}],"name":"SetSignatureAllowedForAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"maxTotalSupply","type":"uint256"}],"name":"SetTotalRestrictions","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voting","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"SetVotingSenderAllowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"bool","name":"withoutFee","type":"bool"}],"name":"SetWithoutFee","type":"event"},{"inputs":[{"internalType":"address","name":"_poolAddress","type":"address"}],"name":"getMaxTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_votingAddress","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"isVotingSenderAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_votingAddress","type":"address"},{"internalType":"bytes4","name":"_signature","type":"bytes4"}],"name":"isVotingSignatureAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWithoutFee","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":"_poolsList","type":"address[]"},{"internalType":"uint256[]","name":"_maxTotalSupplyList","type":"uint256[]"}],"name":"setTotalRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_votingAddress","type":"address"},{"internalType":"address[]","name":"_senders","type":"address[]"},{"internalType":"bool[]","name":"_allowed","type":"bool[]"}],"name":"setVotingAllowedForSenders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4[]","name":"_signatures","type":"bytes4[]"},{"internalType":"bool[]","name":"_allowed","type":"bool[]"}],"name":"setVotingSignatures","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_votingAddress","type":"address"},{"internalType":"bool","name":"_override","type":"bool"},{"internalType":"bytes4[]","name":"_signatures","type":"bytes4[]"},{"internalType":"bool[]","name":"_allowed","type":"bool[]"}],"name":"setVotingSignaturesForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"_withoutFee","type":"bool"}],"name":"setWithoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"signaturesAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalRestrictions","outputs":[{"internalType":"uint256","name":"maxTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"votingSenderAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"votingSignatures","outputs":[{"internalType":"bool","name":"allowed","type":"bool"},{"internalType":"bool","name":"overrideAllowed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"withoutFeeAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6113f88061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100db5760003560e01c80630a499ad3146100e05780630ded3e601461011a578063187521a21461016b5780632e9c544e1461019957806348fbfcde1461020b5780635e664758146102c95780636e090c18146102f0578063715018a6146103be5780638da5cb5b146103c6578063a4a521da146103ea578063afff324914610410578063b23184f914610448578063d2a5bb9a14610476578063d594399f1461054b578063ddf823c414610571578063ea3457b71461062f578063f2fde38b14610665575b600080fd5b610106600480360360208110156100f657600080fd5b50356001600160a01b031661068b565b604080519115158252519081900360200190f35b6101506004803603604081101561013057600080fd5b5080356001600160a01b031690602001356001600160e01b0319166106a9565b60408051921515835290151560208301528051918290030190f35b6101066004803603604081101561018157600080fd5b506001600160a01b03813581169160200135166106d2565b610209600480360360408110156101af57600080fd5b810190602081018135600160201b8111156101c957600080fd5b8201836020820111156101db57600080fd5b803590602001918460208302840111600160201b831117156101fc57600080fd5b9193509150351515610702565b005b6102096004803603604081101561022157600080fd5b810190602081018135600160201b81111561023b57600080fd5b82018360208201111561024d57600080fd5b803590602001918460208302840111600160201b8311171561026e57600080fd5b919390929091602081019035600160201b81111561028b57600080fd5b82018360208201111561029d57600080fd5b803590602001918460208302840111600160201b831117156102be57600080fd5b509092509050610834565b610106600480360360208110156102df57600080fd5b50356001600160e01b0319166108ff565b6102096004803603606081101561030657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561033057600080fd5b82018360208201111561034257600080fd5b803590602001918460208302840111600160201b8311171561036357600080fd5b919390929091602081019035600160201b81111561038057600080fd5b82018360208201111561039257600080fd5b803590602001918460208302840111600160201b831117156103b357600080fd5b509092509050610914565b610209610adb565b6103ce610b6b565b604080516001600160a01b039092168252519081900360200190f35b6101066004803603602081101561040057600080fd5b50356001600160a01b0316610b7a565b6104366004803603602081101561042657600080fd5b50356001600160a01b0316610b8f565b60408051918252519081900360200190f35b6101066004803603604081101561045e57600080fd5b506001600160a01b0381358116916020013516610baa565b6102096004803603608081101561048c57600080fd5b6001600160a01b03823516916020810135151591810190606081016040820135600160201b8111156104bd57600080fd5b8201836020820111156104cf57600080fd5b803590602001918460208302840111600160201b831117156104f057600080fd5b919390929091602081019035600160201b81111561050d57600080fd5b82018360208201111561051f57600080fd5b803590602001918460208302840111600160201b8311171561054057600080fd5b509092509050610bca565b6104366004803603602081101561056157600080fd5b50356001600160a01b0316610c99565b6102096004803603604081101561058757600080fd5b810190602081018135600160201b8111156105a157600080fd5b8201836020820111156105b357600080fd5b803590602001918460208302840111600160201b831117156105d457600080fd5b919390929091602081019035600160201b8111156105f157600080fd5b82018360208201111561060357600080fd5b803590602001918460208302840111600160201b8311171561062457600080fd5b509092509050610cab565b6101066004803603604081101561064557600080fd5b5080356001600160a01b031690602001356001600160e01b031916610d70565b6102096004803603602081101561067b57600080fd5b50356001600160a01b0316610e05565b6001600160a01b031660009081526005602052604090205460ff1690565b600360209081526000928352604080842090915290825290205460ff8082169161010090041682565b6001600160a01b0380831660009081526004602090815260408083209385168352929052205460ff165b92915050565b61070a610eeb565b6000546001600160a01b0390811691161461075a576040805162461bcd60e51b8152602060048201819052602482015260008051602061135b833981519152604482015290519081900360640190fd5b8161076481610eef565b60005b8181101561082d57826005600087878581811061078057fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508484828181106107d357fe5b905060200201356001600160a01b03166001600160a01b03167fa0eb08aa77ca875e3b26fa653f960a22e1e9c5e5bf44a88508120a5c91c3480d8460405180821515815260200191505060405180910390a2600101610767565b5050505050565b61083c610eeb565b6000546001600160a01b0390811691161461088c576040805162461bcd60e51b8152602060048201819052602482015260008051602061135b833981519152604482015290519081900360640190fd5b6108f984848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250610f3292505050565b50505050565b60026020526000908152604090205460ff1681565b61091c610eeb565b6000546001600160a01b0390811691161461096c576040805162461bcd60e51b8152602060048201819052602482015260008051602061135b833981519152604482015290519081900360640190fd5b8261097681610eef565b8082146109b8576040805162461bcd60e51b815260206004820152601d602482015260008051602061133b833981519152604482015290519081900360640190fd5b60005b81811015610ad2578383828181106109cf57fe5b90506020020135151560046000896001600160a01b03166001600160a01b031681526020019081526020016000206000888885818110610a0b57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550858582818110610a5e57fe5b905060200201356001600160a01b03166001600160a01b0316876001600160a01b03167f1499e41de6480285a66f114deb6ffbc96c48ac56c01079821fcee776da9b5d09868685818110610aae57fe5b604080516020928302949094013515158452519283900301919050a36001016109bb565b50505050505050565b610ae3610eeb565b6000546001600160a01b03908116911614610b33576040805162461bcd60e51b8152602060048201819052602482015260008051602061135b833981519152604482015290519081900360640190fd5b600080546040516001600160a01b039091169060008051602061137b833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b60056020526000908152604090205460ff1681565b6001600160a01b031660009081526001602052604090205490565b600460209081526000928352604080842090915290825290205460ff1681565b610bd2610eeb565b6000546001600160a01b03908116911614610c22576040805162461bcd60e51b8152602060048201819052602482015260008051602061135b833981519152604482015290519081900360640190fd5b610c91868686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a0282810182019093528982529093508992508891829185019084908082843760009201919091525061105592505050565b505050505050565b60016020526000908152604090205481565b610cb3610eeb565b6000546001600160a01b03908116911614610d03576040805162461bcd60e51b8152602060048201819052602482015260008051602061135b833981519152604482015290519081900360640190fd5b6108f9848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208088028281018201909352878252909350879250869182918501908490808284376000920191909152506111e492505050565b6001600160a01b03821660009081526003602090815260408083206001600160e01b031985168452909152812054610100900460ff1615610de257506001600160a01b03821660009081526003602090815260408083206001600160e01b03198516845290915290205460ff166106fc565b506001600160e01b0319811660009081526002602052604090205460ff166106fc565b610e0d610eeb565b6000546001600160a01b03908116911614610e5d576040805162461bcd60e51b8152602060048201819052602482015260008051602061135b833981519152604482015290519081900360640190fd5b6001600160a01b038116610ea25760405162461bcd60e51b81526004018080602001828103825260268152602001806113156026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061137b83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6064811115610f2f5760405162461bcd60e51b815260040180806020018281038252602881526020018061139b6028913960400191505060405180910390fd5b50565b8151610f3d81610eef565b81518114610f80576040805162461bcd60e51b815260206004820152601d602482015260008051602061133b833981519152604482015290519081900360640190fd5b60005b818110156108f9576040518060200160405280848381518110610fa257fe5b602002602001015181525060016000868481518110610fbd57fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020905190558351849082908110610ff257fe5b60200260200101516001600160a01b03167f9a6e696e413bf386826186807d8ba42af4025e19298cd4d13de51391bc031c9a84838151811061103057fe5b60200260200101516040518082815260200191505060405180910390a2600101610f83565b815161106081610eef565b815181146110a3576040805162461bcd60e51b815260206004820152601d602482015260008051602061133b833981519152604482015290519081900360640190fd5b60005b81811015610c915760405180604001604052808483815181106110c557fe5b60200260200101511515815260200186151581525060036000886001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061110d57fe5b6020908102919091018101516001600160e01b03191682528181019290925260400160002082518154939092015115156101000261ff001992151560ff199094169390931791909116919091179055835184908290811061116a57fe5b60200260200101516001600160e01b031916866001600160a01b03167f8722ca8386a9ccdbb24deb758ec8969964a39478af2b005ed97e75b41da89e3c8584815181106111b357fe5b60200260200101518860405180831515815260200182151581526020019250505060405180910390a36001016110a6565b81516111ef81610eef565b81518114611232576040805162461bcd60e51b815260206004820152601d602482015260008051602061133b833981519152604482015290519081900360640190fd5b60005b818110156108f95782818151811061124957fe5b60200260200101516002600086848151811061126157fe5b60200260200101516001600160e01b0319166001600160e01b031916815260200190815260200160002060006101000a81548160ff0219169083151502179055508381815181106112ae57fe5b60200260200101516001600160e01b0319167f451d2d879da5fda5b63ace3ffa396619321e212363998d55449bafd511f89ed08483815181106112ed57fe5b602002602001015160405180821515815260200191505060405180910390a260010161123556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373417272617973206c656e6774687320617265206e6f7420657175616c730000004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e04172726179206c656e6774682073686f756c64206265206c657373206f7220657175616c20313030a26469706673582212206145fa49651969cac97f3ceee8a9f7f4114718a4e292d00135bdc982a95e5d5b64736f6c634300060c0033

Deployed ByteCode Sourcemap

4452:5107:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7797:127;;;;;;;;;;;;;;;;-1:-1:-1;7797:127:0;-1:-1:-1;;;;;7797:127:0;;:::i;:::-;;;;;;;;;;;;;;;;;;5335:78;;;;;;;;;;;;;;;;-1:-1:-1;5335:78:0;;-1:-1:-1;;;;;5335:78:0;;;;;-1:-1:-1;;;;;;5335:78:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;7617:174;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7617:174:0;;;;;;;;;;:::i;6788:327::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6788:327:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6788:327:0;;;;;;;;;;;;-1:-1:-1;6788:327:0;-1:-1:-1;6788:327:0;;;;:::i;:::-;;5634:200;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5634:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5634:200:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5634:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5634:200:0;;;;;;;;;;-1:-1:-1;5634:200:0;;-1:-1:-1;5634:200:0;-1:-1:-1;5634:200:0;:::i;5160:48::-;;;;;;;;;;;;;;;;-1:-1:-1;5160:48:0;-1:-1:-1;;;;;;5160:48:0;;:::i;6286:496::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6286:496:0;;;;;;;;;;;;;;;-1:-1:-1;;;6286:496:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6286:496:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6286:496:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6286:496:0;;;;;;;;;;-1:-1:-1;6286:496:0;;-1:-1:-1;6286:496:0;-1:-1:-1;6286:496:0;:::i;3337:148::-;;;:::i;2695:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;2695:79:0;;;;;;;;;;;;;;5537:51;;;;;;;;;;;;;;;;-1:-1:-1;5537:51:0;-1:-1:-1;;;;;5537:51:0;;:::i;7121:156::-;;;;;;;;;;;;;;;;-1:-1:-1;7121:156:0;-1:-1:-1;;;;;7121:156:0;;:::i;:::-;;;;;;;;;;;;;;;;5459:71;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5459:71:0;;;;;;;;;;:::i;6007:273::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6007:273:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6007:273:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6007:273:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6007:273:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6007:273:0;;;;;;;;;;-1:-1:-1;6007:273:0;;-1:-1:-1;6007:273:0;-1:-1:-1;6007:273:0;:::i;5064:62::-;;;;;;;;;;;;;;;;-1:-1:-1;5064:62:0;-1:-1:-1;;;;;5064:62:0;;:::i;5840:161::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5840:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5840:161:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5840:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5840:161:0;;;;;;;;;;-1:-1:-1;5840:161:0;;-1:-1:-1;5840:161:0;-1:-1:-1;5840:161:0;:::i;7283:328::-;;;;;;;;;;;;;;;;-1:-1:-1;7283:328:0;;-1:-1:-1;;;;;7283:328:0;;;;;-1:-1:-1;;;;;;7283:328:0;;:::i;3640:244::-;;;;;;;;;;;;;;;;-1:-1:-1;3640:244:0;-1:-1:-1;;;;;3640:244:0;;:::i;7797:127::-;-1:-1:-1;;;;;7889:29:0;7869:4;7889:29;;;:19;:29;;;;;;;;;7797:127::o;5335:78::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7617:174::-;-1:-1:-1;;;;;7741:35:0;;;7721:4;7741:35;;;:19;:35;;;;;;;;:44;;;;;;;;;;;;7617:174;;;;;:::o;6788:327::-;2917:12;:10;:12::i;:::-;2907:6;;-1:-1:-1;;;;;2907:6:0;;;:22;;;2899:67;;;;;-1:-1:-1;;;2899:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2899:67:0;;;;;;;;;;;;;;;6900:10;6924:25:::1;6900:10:::0;6924:20:::1;:25::i;:::-;6961:9;6956:154;6980:3;6976:1;:7;6956:154;;;7036:11;6999:19;:34;7019:10;;7030:1;7019:13;;;;;;;;;;;;;-1:-1:-1::0;;;;;7019:13:0::1;-1:-1:-1::0;;;;;6999:34:0::1;-1:-1:-1::0;;;;;6999:34:0::1;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;7075:10;;7086:1;7075:13;;;;;;;;;;;;;-1:-1:-1::0;;;;;7075:13:0::1;-1:-1:-1::0;;;;;7061:41:0::1;;7090:11;7061:41;;;;;;;;;;;;;;;;;;;;6985:3;;6956:154;;;;2977:1;6788:327:::0;;;:::o;5634:200::-;2917:12;:10;:12::i;:::-;2907:6;;-1:-1:-1;;;;;2907:6:0;;;:22;;;2899:67;;;;;-1:-1:-1;;;2899:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2899:67:0;;;;;;;;;;;;;;;5774:54:::1;5796:10;;5774:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;5774:54:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;5808:19:0;;-1:-1:-1;5808:19:0;;;;5774:54;::::1;::::0;5808:19;;5774:54;5808:19;5774:54;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;5774:21:0::1;::::0;-1:-1:-1;;;5774:54:0:i:1;:::-;5634:200:::0;;;;:::o;5160:48::-;;;;;;;;;;;;;;;:::o;6286:496::-;2917:12;:10;:12::i;:::-;2907:6;;-1:-1:-1;;;;;2907:6:0;;;:22;;;2899:67;;;;;-1:-1:-1;;;2899:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2899:67:0;;;;;;;;;;;;;;;6461:8;6483:25:::1;6461:8:::0;6483:20:::1;:25::i;:::-;6523:22:::0;;::::1;6515:64;;;::::0;;-1:-1:-1;;;6515:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;6515:64:0;;;;;;;;;;;;;::::1;;6591:9;6586:191;6610:3;6606:1;:7;6586:191;;;6680:8;;6689:1;6680:11;;;;;;;;;;;;;;;6629:19;:35;6649:14;-1:-1:-1::0;;;;;6629:35:0::1;-1:-1:-1::0;;;;;6629:35:0::1;;;;;;;;;;;;:48;6665:8;;6674:1;6665:11;;;;;;;;;;;;;-1:-1:-1::0;;;;;6665:11:0::1;-1:-1:-1::0;;;;;6629:48:0::1;-1:-1:-1::0;;;;;6629:48:0::1;;;;;;;;;;;;;:62;;;;;;;;;;;;;;;;;;6744:8;;6753:1;6744:11;;;;;;;;;;;;;-1:-1:-1::0;;;;;6744:11:0::1;-1:-1:-1::0;;;;;6705:64:0::1;6728:14;-1:-1:-1::0;;;;;6705:64:0::1;;6757:8;;6766:1;6757:11;;;;;;;6705:64;::::0;;6757:11:::1;::::0;;::::1;::::0;;;::::1;;;;6705:64:::0;;;;;;;;;;-1:-1:-1;6705:64:0::1;6615:3;;6586:191;;;;2977:1;6286:496:::0;;;;;:::o;3337:148::-;2917:12;:10;:12::i;:::-;2907:6;;-1:-1:-1;;;;;2907:6:0;;;:22;;;2899:67;;;;;-1:-1:-1;;;2899:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2899:67:0;;;;;;;;;;;;;;;3444:1:::1;3428:6:::0;;3407:40:::1;::::0;-1:-1:-1;;;;;3428:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;3407:40:0;3444:1;;3407:40:::1;3475:1;3458:19:::0;;-1:-1:-1;;;;;;3458:19:0::1;::::0;;3337:148::o;2695:79::-;2733:7;2760:6;-1:-1:-1;;;;;2760:6:0;2695:79;:::o;5537:51::-;;;;;;;;;;;;;;;:::o;7121:156::-;-1:-1:-1;;;;;7225:31:0;7202:7;7225:31;;;:17;:31;;;;;:46;;7121:156::o;5459:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6007:273::-;2917:12;:10;:12::i;:::-;2907:6;;-1:-1:-1;;;;;2907:6:0;;;:22;;;2899:67;;;;;-1:-1:-1;;;2899:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2899:67:0;;;;;;;;;;;;;;;6194:80:::1;6225:14;6241:9;6252:11;;6194:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;6194:80:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;6265:8:0;;-1:-1:-1;6265:8:0;;;;6194:80;::::1;::::0;6265:8;;6194:80;6265:8;6194:80;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;6194:30:0::1;::::0;-1:-1:-1;;;6194:80:0:i:1;:::-;6007:273:::0;;;;;;:::o;5064:62::-;;;;;;;;;;;;;:::o;5840:161::-;2917:12;:10;:12::i;:::-;2907:6;;-1:-1:-1;;;;;2907:6:0;;;:22;;;2899:67;;;;;-1:-1:-1;;;2899:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2899:67:0;;;;;;;;;;;;;;;5952:43:::1;5973:11;;5952:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;5952:43:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;5986:8:0;;-1:-1:-1;5986:8:0;;;;5952:43;::::1;::::0;5986:8;;5952:43;5986:8;5952:43;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;5952:20:0::1;::::0;-1:-1:-1;;;5952:43:0:i:1;7283:328::-:0;-1:-1:-1;;;;;7409:32:0;;7392:4;7409:32;;;:16;:32;;;;;;;;-1:-1:-1;;;;;;7409:44:0;;;;;;;;;:60;;;;;;7405:201;;;-1:-1:-1;;;;;;7487:32:0;;;;;;:16;:32;;;;;;;;-1:-1:-1;;;;;;7487:44:0;;;;;;;;;:52;;;7480:59;;7405:201;-1:-1:-1;;;;;;;7569:29:0;;;;;;:17;:29;;;;;;;;7562:36;;3640:244;2917:12;:10;:12::i;:::-;2907:6;;-1:-1:-1;;;;;2907:6:0;;;:22;;;2899:67;;;;;-1:-1:-1;;;2899:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2899:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3729:22:0;::::1;3721:73;;;;-1:-1:-1::0;;;3721:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3831:6;::::0;;3810:38:::1;::::0;-1:-1:-1;;;;;3810:38:0;;::::1;::::0;3831:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;3810:38:0;::::1;3859:6;:17:::0;;-1:-1:-1;;;;;;3859:17:0::1;-1:-1:-1::0;;;;;3859:17:0;;;::::1;::::0;;;::::1;::::0;;3640:244::o;1251:106::-;1339:10;1251:106;:::o;9426:130::-;9502:3;9494:4;:11;;9486:64;;;;-1:-1:-1;;;9486:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9426:130;:::o;7964:473::-;8092:17;;8116:25;8092:17;8116:20;:25::i;:::-;8163:19;:26;8156:3;:33;8148:75;;;;;-1:-1:-1;;;8148:75:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8148:75:0;;;;;;;;;;;;;;;8237:9;8232:200;8256:3;8252:1;:7;8232:200;;;8310:41;;;;;;;;8328:19;8348:1;8328:22;;;;;;;;;;;;;;8310:41;;;8275:17;:32;8293:10;8304:1;8293:13;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8275:32:0;;;;;;;;;;;-1:-1:-1;8275:32:0;:76;;;;8386:13;;:10;;8397:1;;8386:13;;;;;;;;;;;;-1:-1:-1;;;;;8365:59:0;;8401:19;8421:1;8401:22;;;;;;;;;;;;;;8365:59;;;;;;;;;;;;;;;;;;8261:3;;8232:200;;8857:563;9045:18;;9070:25;9045:18;9070:20;:25::i;:::-;9117:8;:15;9110:3;:22;9102:64;;;;;-1:-1:-1;;;9102:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9102:64:0;;;;;;;;;;;;;;;9180:9;9175:240;9199:3;9195:1;:7;9175:240;;;9269:39;;;;;;;;9285:8;9294:1;9285:11;;;;;;;;;;;;;;9269:39;;;;;;9298:9;9269:39;;;;;9218:16;:32;9235:14;-1:-1:-1;;;;;9218:32:0;-1:-1:-1;;;;;9218:32:0;;;;;;;;;;;;:48;9251:11;9263:1;9251:14;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9218:48:0;;;;;;;;;;;;-1:-1:-1;9218:48:0;:90;;;;;;;;;;;;;-1:-1:-1;;9218:90:0;;;-1:-1:-1;;9218:90:0;;;;;;;;;;;;;;;;;9368:14;;:11;;9380:1;;9368:14;;;;;;;;;;;;-1:-1:-1;;;;;9322:85:0;;9352:14;-1:-1:-1;;;;;9322:85:0;;9384:8;9393:1;9384:11;;;;;;;;;;;;;;9397:9;9322:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;9204:3;;9175:240;;8443:408;8556:18;;8581:25;8556:18;8581:20;:25::i;:::-;8628:8;:15;8621:3;:22;8613:64;;;;;-1:-1:-1;;;8613:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8613:64:0;;;;;;;;;;;;;;;8691:9;8686:160;8710:3;8706:1;:7;8686:160;;;8765:8;8774:1;8765:11;;;;;;;;;;;;;;8729:17;:33;8747:11;8759:1;8747:14;;;;;;;;;;;;;;-1:-1:-1;;;;;8729:33:0;;-1:-1:-1;;;;;8729:33:0;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;8810:11;8822:1;8810:14;;;;;;;;;;;;;;-1:-1:-1;;;;;8790:48:0;;;8826:8;8835:1;8826:11;;;;;;;;;;;;;;8790:48;;;;;;;;;;;;;;;;;;;;8715:3;;8686:160;

Swarm Source

ipfs://6145fa49651969cac97f3ceee8a9f7f4114718a4e292d00135bdc982a95e5d5b
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.