Contract 0x206340f3361404910f45ca0893980ef3f9b418ea

 
Ad
Ad
Txn Hash
Block
From
To
Value [Txn Fee]
0xef7e776728db24a08cac941cc324ce6d72fe24a3eb2d08fab86de1195750e27667533782021-04-21 7:31:2416 hrs 56 mins ago0x4476d8182c77af02ffeedf8099fe64e550b69bb8 IN  MemeFarm: MFRM Token0 BNB0.000236385
0x2471232050080f6eb1576cdd3d3ce1dea0ba02bb26a32058cb8f2a533a44c8d367532382021-04-21 7:24:2417 hrs 3 mins ago0x4476d8182c77af02ffeedf8099fe64e550b69bb8 IN  MemeFarm: MFRM Token0 BNB0.000153205
0x876a06e11af96a092cb618c00ec2f6986cc377281e44ad39474daa62ab7c96fd67469682021-04-21 2:10:1922 hrs 17 mins ago0x7ee8030b4780afcafc1d92f31b0df12aa751e86a IN  MemeFarm: MFRM Token0 BNB0.000236385
0xda5e168eef1d499829aa3c1c438365946c6ad437c7eaf5f6e2c29beb66d430d967454922021-04-21 0:55:0323 hrs 32 mins ago0xb877357634621498a58dd93d4bf824281c179628 IN  MemeFarm: MFRM Token0 BNB0.000236385
0x1225a935c61443650db4b9f7ac13f93f50647ae378d070fe4cbb37e42f5f07d267318602021-04-20 13:26:091 day 11 hrs ago0x940276db366a4af5e04c9c0079e0b6c34ebd4317 IN  MemeFarm: MFRM Token0 BNB0.000140385
0xa823ce815af52bdeb05ddbb5f770f26415d642cba558c79e27e7be7842ca02a367318582021-04-20 13:26:031 day 11 hrs ago0x940276db366a4af5e04c9c0079e0b6c34ebd4317 IN  MemeFarm: MFRM Token0 BNB0.000236385
0x8bf37a5af19c9213910a62359cd8816c2c6664142d55ebcd98e5058aa2ea5c4b67288102021-04-20 10:53:381 day 13 hrs ago0xc165896160920cf5c3553746641f384e4d16d3fa IN  MemeFarm: MFRM Token0 BNB0.000270625
0x952b0019beaad1f6ce2386f5d96f503ac5c4fbd676e08e0159055336f164a1da67098722021-04-19 19:02:122 days 5 hrs ago0x594625306a045032ac68ead6a0314143b7b057fb IN  MemeFarm: MFRM Token0 BNB0.000236385
0x759e2c416abe069a1a7341d0a2e63c3137e0bafada96d897d6442d6de63efa8c66936642021-04-19 5:24:432 days 19 hrs ago0x406cbfc2d391bed42078138165465128b4e0cb06 IN  MemeFarm: MFRM Token0 BNB0.000236385
0x2052a91027dc981b63d76bed324658986f7e5add49bae5962eeba48382b7ed4566871282021-04-18 23:57:513 days 29 mins ago0x9a8b175573f233a13282d8988cadb884e1282265 IN  MemeFarm: MFRM Token0 BNB0.000236385
0xe3ce2f787aee46fc724413b660886914b13bdf850d9a1d8f8da5e332de62d9f466738402021-04-18 12:51:573 days 11 hrs ago0x229c8603e9766668cc5cf0ca286a1b71aa2d71ba IN  MemeFarm: MFRM Token0 BNB0.000236385
0xa7e0c110ff9f4691b046922f02a8ab4bbb8fc1214f99eb7ded619f0cd081651366074902021-04-16 5:26:015 days 19 hrs ago0x2fe79f33d373565feeac730d011ae758b0b367be IN  MemeFarm: MFRM Token0 BNB0.000236385
0xa0c2d7171cdf2d26edb496ef52f116210f779a308cb9ca97a82c02888fcde2e265996522021-04-15 22:52:596 days 1 hr ago0x59e8459c647c531f47a518f96447ea71b128ced7 IN  MemeFarm: MFRM Token0 BNB0.000236385
0xd20c3d607895e13afce68e83313dd066f413e8c29a2e832505961f1b670d185065927722021-04-15 17:08:586 days 7 hrs ago0x242f451fee53e5b69d6693192b02614a03b1fa2e IN  MemeFarm: MFRM Token0 BNB0.000236385
0x8d8f495882659d320a32f3b2b8e97c75e7d1037b889410a34e4f5091a6dcdbb265793622021-04-15 5:58:066 days 18 hrs ago0x95a75b04f08eae0b22d04d81f6ce03da99fdd1e6 IN  MemeFarm: MFRM Token0 BNB0.000236385
0x4b768de2e9b2d5675c4dfa0a8822643e0333beeefeecfacec04c4ddd5b09cc4865702002021-04-14 22:19:117 days 2 hrs ago0x9479bbb1282c6515ede4b57b4b01c57792d708c1 IN  MemeFarm: MFRM Token0 BNB0.000236385
0x44577433e10a1089d2cf84f5a35e87ed1f1d1651fdfdd1474130ee2c81754d3465631382021-04-14 16:25:537 days 8 hrs ago0xc0acb69282d1884148ea469cbf87a06848521d3c IN  MemeFarm: MFRM Token0 BNB0.000236385
0x8f89a36036cc50cc704ddec97b71ae9ee725584ef5782697ffe9f0942852f6e465578042021-04-14 11:58:147 days 12 hrs ago0xdf60cfb20d78c65b89367e81c4ca74e144f05510 IN  MemeFarm: MFRM Token0 BNB0.000236385
0x7ce0b6ef5c78f6255e21205255ba33930476e932018d8f5b8c9161deae216da965577592021-04-14 11:55:597 days 12 hrs ago0xdf60cfb20d78c65b89367e81c4ca74e144f05510 IN  MemeFarm: MFRM Token0 BNB0.000236385
0x2a5b2e343af905d723510a77b92c2787f7b96f13a54d752f695e96a2fdd3f31c64820882021-04-11 20:48:5010 days 3 hrs ago0x80398bb76cfe37abc9308ecfc77399dd5bd7012a IN  MemeFarm: MFRM Token0 BNB0.000168462
0xd8826f80db4990071544f19bcddd9211e6c49413f89a39dcef7ead47c5c4e30064820792021-04-11 20:48:2310 days 3 hrs ago0x80398bb76cfe37abc9308ecfc77399dd5bd7012a IN  MemeFarm: MFRM Token0 BNB0.000283662
0x6a095c58e527c08fbd45caa387430a36992562857f53aa47b38ce8e0d1b146f264697232021-04-11 10:30:2710 days 13 hrs ago0x7a19d8952181656f882322f15d5c63a6eafd5227 IN  MemeFarm: MFRM Token0 BNB0.000236385
0x96d3d87fd3b6efb12f2a830652dd5707eb22fa656c10cd7b7ab60a2a8acc182c64671532021-04-11 8:21:5710 days 16 hrs ago0xd7b8e4affc276d534afc03ce12fccf4525413c4d IN  MemeFarm: MFRM Token0 BNB0.000236385
0x09d19e4acb3b0cb66109d894f2c2784c611b8b7344b4993aadfacf606cc999da64661842021-04-11 7:33:2110 days 16 hrs ago0xe5bcb087e8083ce080cad255644511e5b94c90d1 IN  MemeFarm: MFRM Token0 BNB0.000236385
0x6a6d996b0a1f5bc4be3f40b1c89fdb90c391528005001fe5ed33c9485a91840664530792021-04-10 20:36:1911 days 3 hrs ago0x95a75b04f08eae0b22d04d81f6ce03da99fdd1e6 IN  MemeFarm: MFRM Token0 BNB0.000236385
[ Download CSV Export 

OVERVIEW

A marketplace for NFTs where farmers earn not just $MFRM but also NFTs.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x2ace39792303477c65d833ab081a1a89aac7b4a37288793d62645a28434f290c54709742021-03-07 11:41:3945 days 12 hrs ago MemeFarm: MFRM Token 0xffe998e124983d56782cdcc8bc7107fd8ffe29000 BNB
0x2ace39792303477c65d833ab081a1a89aac7b4a37288793d62645a28434f290c54709742021-03-07 11:41:3945 days 12 hrs ago PancakeSwap: MFRM MemeFarm: MFRM Token0 BNB
0x2ace39792303477c65d833ab081a1a89aac7b4a37288793d62645a28434f290c54709742021-03-07 11:41:3945 days 12 hrs ago MemeFarm: MFRM Token 0xffe998e124983d56782cdcc8bc7107fd8ffe29000 BNB
0x2ace39792303477c65d833ab081a1a89aac7b4a37288793d62645a28434f290c54709742021-03-07 11:41:3945 days 12 hrs ago PancakeSwap: Router MemeFarm: MFRM Token0 BNB
0x0aadcbe162dfb85f44ec4dab592d3fe1a8e87612df2bdcfdaf7985b6f7b6c12254698462021-03-07 10:45:1545 days 13 hrs ago MemeFarm: MFRM Token 0xffe998e124983d56782cdcc8bc7107fd8ffe29000 BNB
0x0aadcbe162dfb85f44ec4dab592d3fe1a8e87612df2bdcfdaf7985b6f7b6c12254698462021-03-07 10:45:1545 days 13 hrs ago 0xa0a4ab8c15c5b7c9f0d73a23786b5b51ba2d5399 MemeFarm: MFRM Token0 BNB
0x0aadcbe162dfb85f44ec4dab592d3fe1a8e87612df2bdcfdaf7985b6f7b6c12254698462021-03-07 10:45:1545 days 13 hrs ago MemeFarm: MFRM Token 0xffe998e124983d56782cdcc8bc7107fd8ffe29000 BNB
0x0aadcbe162dfb85f44ec4dab592d3fe1a8e87612df2bdcfdaf7985b6f7b6c12254698462021-03-07 10:45:1545 days 13 hrs ago 0xa0a4ab8c15c5b7c9f0d73a23786b5b51ba2d5399 MemeFarm: MFRM Token0 BNB
0x0aadcbe162dfb85f44ec4dab592d3fe1a8e87612df2bdcfdaf7985b6f7b6c12254698462021-03-07 10:45:1545 days 13 hrs ago MemeFarm: MFRM Token 0xffe998e124983d56782cdcc8bc7107fd8ffe29000 BNB
0x0aadcbe162dfb85f44ec4dab592d3fe1a8e87612df2bdcfdaf7985b6f7b6c12254698462021-03-07 10:45:1545 days 13 hrs ago 0xa0a4ab8c15c5b7c9f0d73a23786b5b51ba2d5399 MemeFarm: MFRM Token0 BNB
0x27643c633cd6a83c5178ab8be362534e4530b8e19995fc18b43d308af59bf14a54698402021-03-07 10:44:5745 days 13 hrs ago MemeFarm: MFRM Token 0xffe998e124983d56782cdcc8bc7107fd8ffe29000 BNB
0x27643c633cd6a83c5178ab8be362534e4530b8e19995fc18b43d308af59bf14a54698402021-03-07 10:44:5745 days 13 hrs ago 0xa0a4ab8c15c5b7c9f0d73a23786b5b51ba2d5399 MemeFarm: MFRM Token0 BNB
0x27643c633cd6a83c5178ab8be362534e4530b8e19995fc18b43d308af59bf14a54698402021-03-07 10:44:5745 days 13 hrs ago MemeFarm: MFRM Token 0xffe998e124983d56782cdcc8bc7107fd8ffe29000 BNB
0x27643c633cd6a83c5178ab8be362534e4530b8e19995fc18b43d308af59bf14a54698402021-03-07 10:44:5745 days 13 hrs ago 0xa0a4ab8c15c5b7c9f0d73a23786b5b51ba2d5399 MemeFarm: MFRM Token0 BNB
0x27643c633cd6a83c5178ab8be362534e4530b8e19995fc18b43d308af59bf14a54698402021-03-07 10:44:5745 days 13 hrs ago MemeFarm: MFRM Token 0xffe998e124983d56782cdcc8bc7107fd8ffe29000 BNB
0x27643c633cd6a83c5178ab8be362534e4530b8e19995fc18b43d308af59bf14a54698402021-03-07 10:44:5745 days 13 hrs ago 0xa0a4ab8c15c5b7c9f0d73a23786b5b51ba2d5399 MemeFarm: MFRM Token0 BNB
0xa2620c93e91f87ad893fd7e4f69c5805a13c563eb2fee7361894a29e0ccc2c2454695922021-03-07 10:32:3345 days 13 hrs ago MemeFarm: MFRM Token 0xffe998e124983d56782cdcc8bc7107fd8ffe29000 BNB
0xa2620c93e91f87ad893fd7e4f69c5805a13c563eb2fee7361894a29e0ccc2c2454695922021-03-07 10:32:3345 days 13 hrs ago PancakeSwap: MFRM MemeFarm: MFRM Token0 BNB
0xa2620c93e91f87ad893fd7e4f69c5805a13c563eb2fee7361894a29e0ccc2c2454695922021-03-07 10:32:3345 days 13 hrs ago MemeFarm: MFRM Token 0xffe998e124983d56782cdcc8bc7107fd8ffe29000 BNB
0xa2620c93e91f87ad893fd7e4f69c5805a13c563eb2fee7361894a29e0ccc2c2454695922021-03-07 10:32:3345 days 13 hrs ago PancakeSwap: Router MemeFarm: MFRM Token0 BNB
0xd9f2e6fce7313e3820f181fe6643b97f3e8aa3671b0c9fb99af91e750bb104b254687952021-03-07 9:52:4245 days 14 hrs ago MemeFarm: MFRM Token 0xffe998e124983d56782cdcc8bc7107fd8ffe29000 BNB
0xd9f2e6fce7313e3820f181fe6643b97f3e8aa3671b0c9fb99af91e750bb104b254687952021-03-07 9:52:4245 days 14 hrs ago 0xa0a4ab8c15c5b7c9f0d73a23786b5b51ba2d5399 MemeFarm: MFRM Token0 BNB
0xd9f2e6fce7313e3820f181fe6643b97f3e8aa3671b0c9fb99af91e750bb104b254687952021-03-07 9:52:4245 days 14 hrs ago MemeFarm: MFRM Token 0xffe998e124983d56782cdcc8bc7107fd8ffe29000 BNB
0xd9f2e6fce7313e3820f181fe6643b97f3e8aa3671b0c9fb99af91e750bb104b254687952021-03-07 9:52:4245 days 14 hrs ago 0xa0a4ab8c15c5b7c9f0d73a23786b5b51ba2d5399 MemeFarm: MFRM Token0 BNB
0xd9f2e6fce7313e3820f181fe6643b97f3e8aa3671b0c9fb99af91e750bb104b254687952021-03-07 9:52:4245 days 14 hrs ago MemeFarm: MFRM Token 0xffe998e124983d56782cdcc8bc7107fd8ffe29000 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x3efa8e9a406e4255a22619341ea7fa65f2465929

Contract Name:
AdminUpgradeabilityProxy

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at BscScan.com on 2021-02-23
*/

//OpenZeppelin_UpgradableProxy.sol

pragma solidity ^0.5.0;


//https://github.com/OpenZeppelin/openzeppelin-sdk/blob/master/packages/lib/contracts/utils/Address.sol
/**
 * Utility library of inline functions on addresses
 *
 * Source https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-solidity/v2.1.3/contracts/utils/Address.sol
 * This contract is copied here and renamed from the original to avoid clashes in the compiled artifacts
 * when the user imports a zos-lib contract (that transitively causes this contract to be compiled and added to the
 * build/artifacts folder) as well as the vanilla Address implementation from an openzeppelin version.
 */
library OpenZeppelinUpgradesAddress {
    /**
     * Returns whether the target address is a contract
     * @dev This function will return false if invoked during the constructor of a contract,
     * as the code is not actually created until after the constructor finishes.
     * @param account address of the account to check
     * @return whether the target address is a contract
     */
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        // XXX Currently there is no better way to check if there is a contract in an address
        // than to check the size of the code at that address.
        // See https://ethereum.stackexchange.com/a/14016/36603
        // for more details about how this works.
        // TODO Check this again before the Serenity release, because all addresses will be
        // contracts then.
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}








//https://github.com/OpenZeppelin/openzeppelin-sdk/blob/master/packages/lib/contracts/ownership/Ownable.sol
/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 *
 * Source https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-solidity/v2.1.3/contracts/ownership/Ownable.sol
 * This contract is copied here and renamed from the original to avoid clashes in the compiled artifacts
 * when the user imports a zos-lib contract (that transitively causes this contract to be compiled and added to the
 * build/artifacts folder) as well as the vanilla Ownable implementation from an openzeppelin version.
 */
contract OpenZeppelinUpgradesOwnable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @return the address of the owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * @notice Renouncing to ownership will leave the contract without an owner.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}









//https://github.com/OpenZeppelin/openzeppelin-sdk/blob/master/packages/lib/contracts/upgradeability/Proxy.sol
/**
 * @title Proxy
 * @dev Implements delegation of calls to other contracts, with proper
 * forwarding of return values and bubbling of failures.
 * It defines a fallback function that delegates all calls to the address
 * returned by the abstract _implementation() internal function.
 */
contract Proxy {
  /**
   * @dev Fallback function.
   * Implemented entirely in `_fallback`.
   */
  function () payable external {
    _fallback();
  }

  /**
   * @return The Address of the implementation.
   */
  function _implementation() internal view returns (address);

  /**
   * @dev Delegates execution to an implementation contract.
   * This is a low level function that doesn't return to its internal call site.
   * It will return to the external caller whatever the implementation returns.
   * @param implementation Address to delegate.
   */
  function _delegate(address implementation) internal {
    assembly {
      // Copy msg.data. We take full control of memory in this inline assembly
      // block because it will not return to Solidity code. We overwrite the
      // Solidity scratch pad at memory position 0.
      calldatacopy(0, 0, calldatasize)

      // Call the implementation.
      // out and outsize are 0 because we don't know the size yet.
      let result := delegatecall(gas, implementation, 0, calldatasize, 0, 0)

      // Copy the returned data.
      returndatacopy(0, 0, returndatasize)

      switch result
      // delegatecall returns 0 on error.
      case 0 { revert(0, returndatasize) }
      default { return(0, returndatasize) }
    }
  }

  /**
   * @dev Function that is run as the first thing in the fallback function.
   * Can be redefined in derived contracts to add functionality.
   * Redefinitions must call super._willFallback().
   */
  function _willFallback() internal {
  }

  /**
   * @dev fallback implementation.
   * Extracted to enable manual triggering.
   */
  function _fallback() internal {
    _willFallback();
    _delegate(_implementation());
  }
}





//https://github.com/OpenZeppelin/openzeppelin-sdk/blob/master/packages/lib/contracts/upgradeability/BaseUpgradeabilityProxy.sol
/**
 * @title BaseUpgradeabilityProxy
 * @dev This contract implements a proxy that allows to change the
 * implementation address to which it will delegate.
 * Such a change is called an implementation upgrade.
 */
contract BaseUpgradeabilityProxy is Proxy {
  /**
   * @dev Emitted when the implementation is upgraded.
   * @param implementation Address of the new implementation.
   */
  event Upgraded(address indexed implementation);

  /**
   * @dev Storage slot with the address of the current implementation.
   * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
   * validated in the constructor.
   */
  bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

  /**
   * @dev Returns the current implementation.
   * @return Address of the current implementation
   */
  function _implementation() internal view returns (address impl) {
    bytes32 slot = IMPLEMENTATION_SLOT;
    assembly {
      impl := sload(slot)
    }
  }

  /**
   * @dev Upgrades the proxy to a new implementation.
   * @param newImplementation Address of the new implementation.
   */
  function _upgradeTo(address newImplementation) internal {
    _setImplementation(newImplementation);
    emit Upgraded(newImplementation);
  }

  /**
   * @dev Sets the implementation address of the proxy.
   * @param newImplementation Address of the new implementation.
   */
  function _setImplementation(address newImplementation) internal {
    require(OpenZeppelinUpgradesAddress.isContract(newImplementation), "Cannot set a proxy implementation to a non-contract address");

    bytes32 slot = IMPLEMENTATION_SLOT;

    assembly {
      sstore(slot, newImplementation)
    }
  }
}





//https://github.com/OpenZeppelin/openzeppelin-sdk/blob/master/packages/lib/contracts/upgradeability/UpgradeabilityProxy.sol
/**
 * @title UpgradeabilityProxy
 * @dev Extends BaseUpgradeabilityProxy with a constructor for initializing
 * implementation and init data.
 */
contract UpgradeabilityProxy is BaseUpgradeabilityProxy {
  /**
   * @dev Contract constructor.
   * @param _logic Address of the initial implementation.
   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.
   * It should include the signature and the parameters of the function to be called, as described in
   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.
   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.
   */
  constructor(address _logic, bytes memory _data) public payable {
    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));
    _setImplementation(_logic);
    if(_data.length > 0) {
      (bool success,) = _logic.delegatecall(_data);
      require(success);
    }
  }  
}








//https://github.com/OpenZeppelin/openzeppelin-sdk/blob/master/packages/lib/contracts/upgradeability/BaseAdminUpgradeabilityProxy.sol
/**
 * @title BaseAdminUpgradeabilityProxy
 * @dev This contract combines an upgradeability proxy with an authorization
 * mechanism for administrative tasks.
 * All external functions in this contract must be guarded by the
 * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity
 * feature proposal that would enable this to be done automatically.
 */
contract BaseAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {
  /**
   * @dev Emitted when the administration has been transferred.
   * @param previousAdmin Address of the previous admin.
   * @param newAdmin Address of the new admin.
   */
  event AdminChanged(address previousAdmin, address newAdmin);

  /**
   * @dev Storage slot with the admin of the contract.
   * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is
   * validated in the constructor.
   */

  bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

  /**
   * @dev Modifier to check whether the `msg.sender` is the admin.
   * If it is, it will run the function. Otherwise, it will delegate the call
   * to the implementation.
   */
  modifier ifAdmin() {
    if (msg.sender == _admin()) {
      _;
    } else {
      _fallback();
    }
  }

  /**
   * @return The address of the proxy admin.
   */
  function admin() external ifAdmin returns (address) {
    return _admin();
  }

  /**
   * @return The address of the implementation.
   */
  function implementation() external ifAdmin returns (address) {
    return _implementation();
  }

  /**
   * @dev Changes the admin of the proxy.
   * Only the current admin can call this function.
   * @param newAdmin Address to transfer proxy administration to.
   */
  function changeAdmin(address newAdmin) external ifAdmin {
    require(newAdmin != address(0), "Cannot change the admin of a proxy to the zero address");
    emit AdminChanged(_admin(), newAdmin);
    _setAdmin(newAdmin);
  }

  /**
   * @dev Upgrade the backing implementation of the proxy.
   * Only the admin can call this function.
   * @param newImplementation Address of the new implementation.
   */
  function upgradeTo(address newImplementation) external ifAdmin {
    _upgradeTo(newImplementation);
  }

  /**
   * @dev Upgrade the backing implementation of the proxy and call a function
   * on the new implementation.
   * This is useful to initialize the proxied contract.
   * @param newImplementation Address of the new implementation.
   * @param data Data to send as msg.data in the low level call.
   * It should include the signature and the parameters of the function to be called, as described in
   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.
   */
  function upgradeToAndCall(address newImplementation, bytes calldata data) payable external ifAdmin {
    _upgradeTo(newImplementation);
    (bool success,) = newImplementation.delegatecall(data);
    require(success);
  }

  /**
   * @return The admin slot.
   */
  function _admin() internal view returns (address adm) {
    bytes32 slot = ADMIN_SLOT;
    assembly {
      adm := sload(slot)
    }
  }

  /**
   * @dev Sets the address of the proxy admin.
   * @param newAdmin Address of the new proxy admin.
   */
  function _setAdmin(address newAdmin) internal {
    bytes32 slot = ADMIN_SLOT;

    assembly {
      sstore(slot, newAdmin)
    }
  }

  /**
   * @dev Only fall back when the sender is not the admin.
   */
  function _willFallback() internal {
    require(msg.sender != _admin(), "Cannot call fallback function from the proxy admin");
    super._willFallback();
  }
}





//https://github.com/OpenZeppelin/openzeppelin-sdk/blob/master/packages/lib/contracts/upgradeability/AdminUpgradeabilityProxy.sol
/**
 * @title AdminUpgradeabilityProxy
 * @dev Extends from BaseAdminUpgradeabilityProxy with a constructor for 
 * initializing the implementation, admin, and init data.
 */
contract AdminUpgradeabilityProxy is BaseAdminUpgradeabilityProxy, UpgradeabilityProxy {
  /**
   * Contract constructor.
   * @param _logic address of the initial implementation.
   * @param _admin Address of the proxy administrator.
   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.
   * It should include the signature and the parameters of the function to be called, as described in
   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.
   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.
   */
  constructor(address _logic, address _admin, bytes memory _data) UpgradeabilityProxy(_logic, _data) public payable {
    assert(ADMIN_SLOT == bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1));
    _setAdmin(_admin);
  }
}




//https://github.com/OpenZeppelin/openzeppelin-sdk/blob/master/packages/lib/contracts/upgradeability/ProxyAdmin.sol

/**
 * @title ProxyAdmin
 * @dev This contract is the admin of a proxy, and is in charge
 * of upgrading it as well as transferring it to another admin.
 */
contract ProxyAdmin is OpenZeppelinUpgradesOwnable {
  
  /**
   * @dev Returns the current implementation of a proxy.
   * This is needed because only the proxy admin can query it.
   * @return The address of the current implementation of the proxy.
   */
  function getProxyImplementation(AdminUpgradeabilityProxy proxy) public view returns (address) {
    // We need to manually run the static call since the getter cannot be flagged as view
    // bytes4(keccak256("implementation()")) == 0x5c60da1b
    (bool success, bytes memory returndata) = address(proxy).staticcall(hex"5c60da1b");
    require(success);
    return abi.decode(returndata, (address));
  }

  /**
   * @dev Returns the admin of a proxy. Only the admin can query it.
   * @return The address of the current admin of the proxy.
   */
  function getProxyAdmin(AdminUpgradeabilityProxy proxy) public view returns (address) {
    // We need to manually run the static call since the getter cannot be flagged as view
    // bytes4(keccak256("admin()")) == 0xf851a440
    (bool success, bytes memory returndata) = address(proxy).staticcall(hex"f851a440");
    require(success);
    return abi.decode(returndata, (address));
  }

  /**
   * @dev Changes the admin of a proxy.
   * @param proxy Proxy to change admin.
   * @param newAdmin Address to transfer proxy administration to.
   */
  function changeProxyAdmin(AdminUpgradeabilityProxy proxy, address newAdmin) public onlyOwner {
    proxy.changeAdmin(newAdmin);
  }

  /**
   * @dev Upgrades a proxy to the newest implementation of a contract.
   * @param proxy Proxy to be upgraded.
   * @param implementation the address of the Implementation.
   */
  function upgrade(AdminUpgradeabilityProxy proxy, address implementation) public onlyOwner {
    proxy.upgradeTo(implementation);
  }

  /**
   * @dev Upgrades a proxy to the newest implementation of a contract and forwards a function call to it.
   * This is useful to initialize the proxied contract.
   * @param proxy Proxy to be upgraded.
   * @param implementation Address of the Implementation.
   * @param data Data to send as msg.data in the low level call.
   * It should include the signature and the parameters of the function to be called, as described in
   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.
   */
  function upgradeAndCall(AdminUpgradeabilityProxy proxy, address implementation, bytes memory data) payable public onlyOwner {
    proxy.upgradeToAndCall.value(msg.value)(implementation, data);
  }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"payable":true,"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"payable":true,"stateMutability":"payable","type":"function"}]

6080604052604051610ca3380380610ca38339818101604052606081101561002657600080fd5b8101908080519060200190929190805190602001909291908051604051939291908464010000000082111561005a57600080fd5b8382019150602082018581111561007057600080fd5b825186600182028301116401000000008211171561008d57600080fd5b8083526020830192505050908051906020019080838360005b838110156100c15780820151818401526020810190506100a6565b50505050905090810190601f1680156100ee5780820380516001836020036101000a031916815260200191505b506040525050508281600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815250601c019050604051809103902060001c0360001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b1461016157fe5b610170826102bf60201b60201c565b60008151111561023c5760008273ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b602083106101c757805182526020820191506020810190506020830392506101a4565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610227576040519150601f19603f3d011682016040523d82523d6000602084013e61022c565b606091505b505090508061023a57600080fd5b505b5050600160405180807f656970313936372e70726f78792e61646d696e000000000000000000000000008152506013019050604051809103902060001c0360001b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b146102a857fe5b6102b78261035660201b60201c565b505050610398565b6102d28161038560201b6107d61760201c565b610327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180610c68603b913960400191505060405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181555050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b90508181555050565b600080823b905060008111915050919050565b6108c1806103a76000396000f3fe60806040526004361061004a5760003560e01c80633659cfe6146100545780634f1ef286146100a55780635c60da1b1461013e5780638f28397014610195578063f851a440146101e6575b61005261023d565b005b34801561006057600080fd5b506100a36004803603602081101561007757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610257565b005b61013c600480360360408110156100bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b90919293919293905050506102ac565b005b34801561014a57600080fd5b50610153610382565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101a157600080fd5b506101e4600480360360208110156101b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103da565b005b3480156101f257600080fd5b506101fb610553565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102456105ab565b610255610250610641565b610672565b565b61025f610698565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102a05761029b816106c9565b6102a9565b6102a861023d565b5b50565b6102b4610698565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610374576102f0836106c9565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051808383808284378083019250505092505050600060405180830381855af49150503d806000811461035b576040519150601f19603f3d011682016040523d82523d6000602084013e610360565b606091505b505090508061036e57600080fd5b5061037d565b61037c61023d565b5b505050565b600061038c610698565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103ce576103c7610641565b90506103d7565b6103d661023d565b5b90565b6103e2610698565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561054757600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561049b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061081c6036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104c4610698565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a161054281610718565b610550565b61054f61023d565b5b50565b600061055d610698565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561059f57610598610698565b90506105a8565b6105a761023d565b5b90565b6105b3610698565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610637576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806107ea6032913960400191505060405180910390fd5b61063f610747565b565b6000807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b9050805491505090565b3660008037600080366000845af43d6000803e8060008114610693573d6000f35b3d6000fd5b6000807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b9050805491505090565b6106d281610749565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b90508181555050565b565b610752816107d6565b6107a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180610852603b913960400191505060405180910390fd5b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b90508181555050565b600080823b90506000811191505091905056fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a265627a7a7231582069b8716bf80b84f072c4d174256675e6795b7ae2a64d284fb1af75f026b5b22b64736f6c6343000511003243616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000000000000000000a35c7f80fc2a7a43266d969b752a7b1833a393a8000000000000000000000000cee9d0fe3ced340e1602c3ae8e390484fac2833b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000

Deployed ByteCode Sourcemap

14057:903:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5022:11;:9;:11::i;:::-;14057:903;12181:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12181:105:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12181:105:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;12814:225;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12814:225:0;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;12814:225:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;12814:225:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;12814:225:0;;;;;;;;;;;;:::i;:::-;;11481:98;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11481:98:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11762:228;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11762:228:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11762:228:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;11332:80;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11332:80:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6568:93;6605:15;:13;:15::i;:::-;6627:28;6637:17;:15;:17::i;:::-;6627:9;:28::i;:::-;6568:93::o;12181:105::-;11199:8;:6;:8::i;:::-;11185:22;;:10;:22;;;11181:80;;;12251:29;12262:17;12251:10;:29::i;:::-;11181:80;;;11242:11;:9;:11::i;:::-;11181:80;12181:105;:::o;12814:225::-;11199:8;:6;:8::i;:::-;11185:22;;:10;:22;;;11181:80;;;12920:29;12931:17;12920:10;:29::i;:::-;12957:12;12974:17;:30;;13005:4;;12974:36;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;12974:36:0;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;12956:54:0;;;13025:7;13017:16;;;;;;11218:1;11181:80;;;11242:11;:9;:11::i;:::-;11181:80;12814:225;;;:::o;11481:98::-;11533:7;11199:8;:6;:8::i;:::-;11185:22;;:10;:22;;;11181:80;;;11556:17;:15;:17::i;:::-;11549:24;;11181:80;;;11242:11;:9;:11::i;:::-;11181:80;11481:98;:::o;11762:228::-;11199:8;:6;:8::i;:::-;11185:22;;:10;:22;;;11181:80;;;11853:1;11833:22;;:8;:22;;;;11825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11926:32;11939:8;:6;:8::i;:::-;11949;11926:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11965:19;11975:8;11965:9;:19::i;:::-;11181:80;;;11242:11;:9;:11::i;:::-;11181:80;11762:228;:::o;11332:80::-;11375:7;11199:8;:6;:8::i;:::-;11185:22;;:10;:22;;;11181:80;;;11398:8;:6;:8::i;:::-;11391:15;;11181:80;;;11242:11;:9;:11::i;:::-;11181:80;11332;:::o;13571:160::-;13634:8;:6;:8::i;:::-;13620:22;;:10;:22;;;;13612:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13704:21;:19;:21::i;:::-;13571:160::o;7709:161::-;7759:12;7780;7523:66;7795:19;;7780:34;;7853:4;7847:11;7839:19;;7830:35;;:::o;5461:750::-;5768:12;5765:1;5762;5749:32;5962:1;5959;5945:12;5942:1;5926:14;5921:3;5908:56;6029:14;6026:1;6023;6008:36;6061:6;6123:1;6118:36;;;;6182:14;6179:1;6172:25;6118:36;6137:14;6134:1;6127:25;13089:141;13130:11;13150:12;10892:66;13165:10;;13150:25;;13213:4;13207:11;13200:18;;13191:34;;:::o;8011:145::-;8074:37;8093:17;8074:18;:37::i;:::-;8132:17;8123:27;;;;;;;;;;;;8011:145;:::o;13352:139::-;13405:12;10892:66;13420:10;;13405:25;;13470:8;13464:4;13457:22;13448:38;;:::o;6427:40::-;:::o;8299:313::-;8378:57;8417:17;8378:38;:57::i;:::-;8370:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8508:12;7523:66;8523:19;;8508:34;;8582:17;8576:4;8569:31;8560:47;;:::o;1087:627::-;1147:4;1164:12;1671:7;1659:20;1651:28;;1705:1;1698:4;:8;1691:15;;;1087:627;;;:::o

Swarm Source

bzzr://69b8716bf80b84f072c4d174256675e6795b7ae2a64d284fb1af75f026b5b22b
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.