EthereumEthereum
0xbc...ede3
NAP V2

NAP V2

NAPV2

代币
市值
$1.00
 
价格
2%
此合同的源代码已经过验证!
合同元数据
编译器
0.6.12+commit.27d51765
语言
Solidity
合同源代码
文件 1 的 1:NAPProxy.sol
pragma solidity ^0.6.0;



contract NAPProxy {
  bytes32 private constant implementationPosition = bytes32(uint256(keccak256("zzz.nap.impl")) - 1);
  bytes32 private constant proxyOwnerPosition = bytes32(uint256(keccak256("zzz.nap.owner")) - 1);

  constructor() public {
    _setUpgradeabilityOwner(msg.sender);
  }

  function setup(address _implementation) external {
    require(msg.sender == proxyOwner());
    _setImplementation(_implementation);
  }

  function setupOwner(address _newOwner) external {
    require(msg.sender == proxyOwner());
    _setUpgradeabilityOwner(_newOwner);
  }

  // setter to set the position of an implementation from the implementation position onwards
  function _setImplementation(address _newImplementation) internal {
    require(msg.sender == proxyOwner());
    bytes32 position = implementationPosition;

    assembly {
      sstore(position, _newImplementation)
    }
  }

  // retrieving the address at the implementation position
  function implementation() public view returns (address impl) {
    bytes32 position = implementationPosition;
    assembly {
      impl := sload(position)
    }
  }

  function proxyOwner() public view returns (address owner) {
    bytes32 position = proxyOwnerPosition;
    assembly {
      owner := sload(position)
    }
  }

  function _setUpgradeabilityOwner(address _newProxyOwner) private {
    bytes32 position = proxyOwnerPosition;
    assembly {
      sstore(position, _newProxyOwner)
    }
  }

  fallback() external payable {
    address addr = implementation();

    assembly {
      calldatacopy(0, 0, calldatasize())
      let result := delegatecall(gas(), addr, 0, calldatasize(), 0, 0)
      returndatacopy(0, 0, returndatasize())
      switch result
        case 0 {
          revert(0, returndatasize())
        }
        default {
          return(0, returndatasize())
        }
    }
  }
}
设置
{
  "compilationTarget": {
    "contracts/NAPProxy.sol": "NAPProxy"
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": []
}
ABI
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"impl","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyOwner","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"name":"setup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"setupOwner","outputs":[],"stateMutability":"nonpayable","type":"function"}]