ERC-20
Source Code
Overview
Max Total Supply
5,330,788 OKGLD
Holders
483
Transfers
-
0
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
OKPCGold
Compiler Version
v0.8.14+commit.80d49f37
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/*
.oooooo. oooo oooo ooooooooo. .oooooo.
d8P' `Y8b `888 .8P' `888 `Y88. d8P' `Y8b
888 888 888 d8' 888 .d88' 888
888 888 88888[ 888ooo88P' 888
888 888 888`88b. 888 888
`88b d88' 888 `88b. 888 `88b ooo
`Y8bood8P' o888o o888o o888o `Y8bood8P'
.oooooo. .oooooo. ooooo oooooooooo.
d8P' `Y8b d8P' `Y8b `888' `888' `Y8b
888 888 888 888 888 888
888 888 888 888 888 888
888 ooooo 888 888 888 888 888
`88. .88' `88b d88' 888 o 888 d88'
`Y8bood8P' `Y8bood8P' o888ooooood8 o888bood8P'
𝙰𝙽 𝙴𝚇𝚃𝙴𝙽𝚂𝙸𝙾𝙽 𝚃𝙾 𝙾𝙺𝙿𝙲 𝙶𝙰𝙻𝙻𝙴𝚁𝚈 𝙰𝚁𝚃𝚆𝙾𝚁𝙺 #𝟼𝟿: "𝙰𝙸𝚁𝙳𝚁𝙾𝙿"
*/
// SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.14;
import "solmate/tokens/ERC20.sol";
import "solmate/auth/Owned.sol";
import "./interfaces/IOKPC.sol";
import "./interfaces/IOKPCMarketplace.sol";
/**
@title OKPC Gold
@author shahruz.eth
*/
contract OKPCGold is Owned, ERC20 {
// @dev Core OKPC contract
IOKPC public immutable OKPC;
// @dev Claim config
uint256 public constant OKPC_CLAIM_MAX = 1_024;
uint256 public constant AIRDROP_CLAIM = 10_000;
// @dev Screen staking config
uint256 public SCREEN_STAKING_INTERVAL = 64 days;
uint256 public SCREEN_STAKING_REWARD = 256;
// @dev Claim registry
bool public CLAIMABLE;
struct OKPCClaim {
bool okpcClaimed;
bool artworkClaimed;
uint128 stakingLastClaimed;
}
mapping(uint256 => OKPCClaim) public okpcClaims;
error ClaimNotOpen();
error NoOKGLDClaimable();
// @dev Modifiers
modifier ifClaimable() {
if (!CLAIMABLE) revert ClaimNotOpen();
_;
}
// @dev Constructor
constructor(IOKPC okpcAddress)
Owned(msg.sender)
ERC20("OKPC GOLD", "OKGLD", 18)
{
OKPC = okpcAddress;
}
/* -------------------------------------------------------------------------- */
/* CLAIM ALL */
/* -------------------------------------------------------------------------- */
// @notice Claim all eligible OKGLD for an OKPC.
// @param pcId An OKPC tokenId. Reverts if the token is not owned by the caller.
function claim(uint256 pcId) external ifClaimable {
if (OKPC.ownerOf(pcId) != msg.sender) revert NoOKGLDClaimable();
uint256 amount;
amount += _claimForOKPC(pcId);
amount += _claimForArtwork(pcId);
amount += _claimForScreenStaking(pcId);
if (amount == 0) revert NoOKGLDClaimable();
_mint(msg.sender, amount * 10**decimals);
}
// @notice Claim all eligible OKGLD for a set of OKPCs.
// @param pcIds An array of OKPC tokenIds. Tokens not owned by the caller are skipped.
function claim(uint256[] calldata pcIds) external ifClaimable {
uint256 amount;
for (uint256 i; i < pcIds.length; i++)
if (OKPC.ownerOf(pcIds[i]) == msg.sender) {
amount += _claimForOKPC(pcIds[i]);
amount += _claimForArtwork(pcIds[i]);
amount += _claimForScreenStaking(pcIds[i]);
}
if (amount == 0) revert NoOKGLDClaimable();
_mint(msg.sender, amount * 10**decimals);
}
// @notice Calculate the total amount of OKGLD an OKPC is eligible to claim.
// @param pcId An OKPC tokenId.
function claimableAmount(uint256 pcId)
public
view
returns (uint256 amount)
{
return
claimableAmountForOKPC(pcId) +
claimableAmountForArtwork(pcId) +
claimableAmountForScreenStaking(pcId);
}
// @notice Calculate the total amount of OKGLD a set of OKPCs are eligible to claim.
// @param pcIds An array of OKPC tokenIds.
function claimableAmount(uint256[] calldata pcIds)
public
view
returns (uint256 amount)
{
for (uint256 i; i < pcIds.length; i++)
amount += claimableAmount(pcIds[i]);
}
/* -------------------------------------------------------------------------- */
/* OKPC CLAIM */
/* -------------------------------------------------------------------------- */
// @notice Claim OKGLD for an OKPC, based on its clock speed and amount of art collected.
// @param pcId An OKPC tokenId. Reverts if the token is not owned by the caller.
function claimForOKPC(uint256 pcId) external ifClaimable {
if (OKPC.ownerOf(pcId) != msg.sender) revert NoOKGLDClaimable();
uint256 amount = _claimForOKPC(pcId);
if (amount == 0) revert NoOKGLDClaimable();
_mint(msg.sender, amount * 10**decimals);
}
// @notice Claim OKGLD for a set of OKPCs, based on their clock speeds and amounts of art collected.
// @param pcIds An array of OKPC tokenIds. Tokens not owned by the caller are skipped.
function claimForOKPC(uint256[] calldata pcIds) external ifClaimable {
uint256 amount;
for (uint256 i; i < pcIds.length; i++)
if (OKPC.ownerOf(pcIds[i]) == msg.sender)
amount += _claimForOKPC(pcIds[i]);
if (amount == 0) revert NoOKGLDClaimable();
_mint(msg.sender, amount * 10**decimals);
}
// @dev Calculate the amount of OKGLD an OKPC is eligible to claim, based on its clock speed and amount of art collected.
// @dev Register the claimed OKPC using its tokenId to lock future claims.
function _claimForOKPC(uint256 pcId) private returns (uint256 amount) {
amount = claimableAmountForOKPC(pcId);
if (amount > 0) okpcClaims[pcId].okpcClaimed = true;
}
// @notice Calculate the amount of OKGLD an OKPC is eligible to claim, based on its clock speed and amount of art collected.
// @param pcId An OKPC tokenId.
function claimableAmountForOKPC(uint256 pcId)
public
view
returns (uint256 amount)
{
return claimableAmountForOKPC(pcId, 0);
}
// @notice Calculate the amount of OKGLD a set of OKPCs is eligible to claim, based on its clock speed and amount of art collected.
// @param pcIds An array of OKPC tokenIds.
function claimableAmountForOKPC(uint256[] calldata pcIds)
public
view
returns (uint256 amount)
{
for (uint256 i; i < pcIds.length; i++)
amount += claimableAmountForOKPC(pcIds[i], 0);
}
// @notice Calculate the projected amount of OKGLD a set of OKPCs will be eligible to claim after a specified number of blocks, based on their clock speeds and amount of art collected.
// @param pcIds An array of OKPC tokenIds.
// @param afterBlocks An optional number of blocks to skip ahead for projected clock speed scores.
function claimableAmountForOKPC(
uint256[] calldata pcIds,
uint256 afterBlocks
) public view returns (uint256 amount) {
for (uint256 i; i < pcIds.length; i++)
amount += claimableAmountForOKPC(pcIds[i], afterBlocks);
}
// @notice Calculate the projected amount of OKGLD an OKPC will be eligible to claim after a specified number of blocks, based on its clock speed and amount of art collected.
// @param pcId An OKPC tokenId.
// @param afterBlocks An optional number of blocks to skip ahead for projected clock speed scores.
function claimableAmountForOKPC(uint256 pcId, uint256 afterBlocks)
public
view
returns (uint256 amount)
{
if (okpcClaims[pcId].okpcClaimed == false) {
uint256 artCount = OKPC.artCountForOKPC(pcId);
uint256 total = (clockSpeedProjected(pcId, afterBlocks) / 2) *
2**(artCount > 3 ? 3 : artCount);
amount = total > OKPC_CLAIM_MAX ? OKPC_CLAIM_MAX : total;
}
}
// @notice Calculate the projected clock speed of an OKPC after a specified number of blocks.
// @param pcId An OKPC tokenId.
// @param afterBlocks A number of blocks to skip ahead.
function clockSpeedProjected(uint256 pcId, uint256 afterBlocks)
public
view
returns (uint256)
{
(uint256 savedSpeed, uint256 lastBlock, , ) = OKPC.clockSpeedData(pcId);
if (lastBlock == 0) return 1;
uint256 delta = block.number + afterBlocks - lastBlock;
uint256 multiplier = delta / 200_000;
uint256 clockSpeedMaxMultiplier = OKPC.clockSpeedMaxMultiplier();
if (multiplier > clockSpeedMaxMultiplier)
multiplier = clockSpeedMaxMultiplier;
uint256 total = savedSpeed + ((delta * (multiplier + 1)) / 10_000);
if (total < 1) total = 1;
return total;
}
// @notice Calculate the projected clock speed of a set of OKPCs after a specified number of blocks.
// @param pcIds An array of OKPC tokenIds.
// @param afterBlocks A number of blocks to skip ahead.
function clockSpeedProjected(uint256[] calldata pcIds, uint256 afterBlocks)
public
view
returns (uint256[] memory)
{
uint256[] memory result = new uint256[](pcIds.length);
for (uint256 i; i < pcIds.length; i++)
result[i] = clockSpeedProjected(pcIds[i], afterBlocks);
return result;
}
/* -------------------------------------------------------------------------- */
/* ARTWORK CLAIM */
/* -------------------------------------------------------------------------- */
// @notice Claim OKGLD for an OKPC that has collected the AIRDROP artwork from the Gallery.
// @param pcId An OKPC tokenId. Reverts if the token is not owned by the caller.
function claimForArtwork(uint256 pcId) external ifClaimable {
if (OKPC.ownerOf(pcId) != msg.sender) revert NoOKGLDClaimable();
uint256 amount = _claimForArtwork(pcId);
if (amount == 0) revert NoOKGLDClaimable();
_mint(msg.sender, amount * 10**decimals);
}
// @notice Claim OKGLD for a set of OKPCs that have collected the AIRDROP artwork from the Gallery.
// @param pcIds An array of OKPC tokenIds. Tokens not owned by the caller are skipped.
function claimForArtwork(uint256[] calldata pcIds) external ifClaimable {
uint256 amount;
for (uint256 i; i < pcIds.length; i++)
if (OKPC.ownerOf(pcIds[i]) == msg.sender)
amount += _claimForArtwork(pcIds[i]);
if (amount == 0) revert NoOKGLDClaimable();
_mint(msg.sender, amount * 10**decimals);
}
// @dev Calculate the amount of OKGLD an OKPC is eligible to claim, based on collecting the AIRDROP artwork from the Gallery.
// @dev Register the artwork claim using its tokenId to lock future claims.
function _claimForArtwork(uint256 pcId) private returns (uint256 amount) {
amount = claimableAmountForArtwork(pcId);
if (amount > 0) okpcClaims[pcId].artworkClaimed = true;
}
// @notice Calculate the amount of OKGLD an OKPC is eligible to claim, based on collecting the AIRDROP artwork from the Gallery.
// @param pcId An OKPC tokenId.
function claimableAmountForArtwork(uint256 pcId)
public
view
returns (uint256 amount)
{
if (
okpcClaims[pcId].artworkClaimed == false &&
OKPC.artCollectedByOKPC(pcId, 69)
) {
if (
OKPC.marketplaceAddress() == address(0) ||
IOKPCMarketplace(OKPC.marketplaceAddress()).didMint(pcId, 69)
) amount = AIRDROP_CLAIM;
}
}
// @notice Calculate the amount of OKGLD a set of OKPCs is eligible to claim, based on collecting the AIRDROP artwork from the Gallery.
// @param pcId An array of OKPC tokenIds.
function claimableAmountForArtwork(uint256[] calldata pcIds)
public
view
returns (uint256 amount)
{
for (uint256 i; i < pcIds.length; i++)
amount += claimableAmountForArtwork(pcIds[i]);
}
/* -------------------------------------------------------------------------- */
/* SCREEN STAKING */
/* -------------------------------------------------------------------------- */
// @notice Claim OKGLD for an OKPC that is continuously displaying the AIRDROP artwork from the Gallery.
// @param pcId An OKPC tokenId. Reverts if the token is not owned by the caller.
function claimForScreenStaking(uint256 pcId) external ifClaimable {
if (OKPC.ownerOf(pcId) != msg.sender) revert NoOKGLDClaimable();
uint256 amount = _claimForScreenStaking(pcId);
if (amount == 0) revert NoOKGLDClaimable();
_mint(msg.sender, amount * 10**decimals);
}
// @notice Claim OKGLD for a set of OKPCs that are continuously displaying the AIRDROP artwork from the Gallery.
// @param pcIds A set of OKPC tokenIds. Tokens not owned by the caller are skipped.
function claimForScreenStaking(uint256[] calldata pcIds)
external
ifClaimable
{
uint256 amount;
for (uint256 i; i < pcIds.length; i++)
if (OKPC.ownerOf(pcIds[i]) == msg.sender)
amount += _claimForScreenStaking(pcIds[i]);
if (amount == 0) revert NoOKGLDClaimable();
_mint(msg.sender, amount * 10**decimals);
}
// @dev Calculate the amount of OKGLD an OKPC is eligible to claim, based on continuously displaying the AIRDROP artwork from the Gallery.
// @dev Register the screen staking claim to reset the clock.
function _claimForScreenStaking(uint256 pcId)
private
returns (uint256 amount)
{
amount = claimableAmountForScreenStaking(pcId);
if (amount > 0)
okpcClaims[pcId].stakingLastClaimed = uint128(block.timestamp);
}
// @notice Calculate the amount of OKGLD an OKPC is eligible to claim, based on continuously displaying the AIRDROP artwork from the Gallery.
// @param pcId An OKPC tokenId.
function claimableAmountForScreenStaking(uint256 pcId)
public
view
returns (uint256 amount)
{
return claimableAmountForScreenStaking(pcId, 0);
}
// @notice Calculate the amount of OKGLD a set of OKPCs is eligible to claim, based on continuously displaying the AIRDROP artwork from the Gallery.
// @param pcIds An array of OKPC tokenIds.
function claimableAmountForScreenStaking(uint256[] calldata pcIds)
public
view
returns (uint256 amount)
{
for (uint256 i; i < pcIds.length; i++)
amount += claimableAmountForScreenStaking(pcIds[i]);
}
// @notice Calculate the projected amount of OKGLD an OKPC will be eligible to claim after a specified number of seconds, based on continuously displaying the AIRDROP artwork from the Gallery.
// @param pcId An OKPC tokenId.
// @param afterTime An optional number of seconds to skip ahead for projected screen staking rewards.
function claimableAmountForScreenStaking(uint256 pcId, uint256 afterTime)
public
view
returns (uint256 amount)
{
if (OKPC.activeArtForOKPC(pcId) != 69) return 0;
(, , , uint256 artLastChanged) = OKPC.clockSpeedData(pcId);
uint256 previous = (
okpcClaims[pcId].stakingLastClaimed > artLastChanged
? okpcClaims[pcId].stakingLastClaimed
: artLastChanged
);
if (block.timestamp + afterTime >= previous + SCREEN_STAKING_INTERVAL)
amount =
SCREEN_STAKING_REWARD *
((block.timestamp + afterTime - previous) /
SCREEN_STAKING_INTERVAL);
}
// @notice Calculate the projected amount of OKGLD a set of OKPCs will be eligible to claim after a specified number of seconds, based on continuously displaying the AIRDROP artwork from the Gallery.
// @param pcIds An array of OKPC tokenIds.
// @param afterTime An optional number of seconds to skip ahead for projected screen staking rewards.
function claimableAmountForScreenStaking(
uint256[] calldata pcIds,
uint256 afterTime
) public view returns (uint256 amount) {
for (uint256 i; i < pcIds.length; i++)
amount += claimableAmountForScreenStaking(pcIds[i], afterTime);
}
/* -------------------------------------------------------------------------- */
/* TOKEN FUNCTIONS */
/* -------------------------------------------------------------------------- */
// @notice Burn tokens and decrease the totalSupply.
// @param amount An amount of tokens to burn.
function burn(uint256 amount) external {
_burn(msg.sender, amount);
}
/* -------------------------------------------------------------------------- */
/* OWNER */
/* -------------------------------------------------------------------------- */
// @notice Turn the ability to claim on or off. Owner only.
function setClaimable(bool claimable) external onlyOwner {
CLAIMABLE = claimable;
}
// @notice Adjust the screen staking configuration. Owner only.
function setScreenStakingConfig(
uint256 screenStakingInterval,
uint256 screenStakingReward
) external onlyOwner {
SCREEN_STAKING_INTERVAL = screenStakingInterval;
SCREEN_STAKING_REWARD = screenStakingReward;
}
}// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;
/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
/*//////////////////////////////////////////////////////////////
EVENTS
//////////////////////////////////////////////////////////////*/
event Transfer(address indexed from, address indexed to, uint256 amount);
event Approval(address indexed owner, address indexed spender, uint256 amount);
/*//////////////////////////////////////////////////////////////
METADATA STORAGE
//////////////////////////////////////////////////////////////*/
string public name;
string public symbol;
uint8 public immutable decimals;
/*//////////////////////////////////////////////////////////////
ERC20 STORAGE
//////////////////////////////////////////////////////////////*/
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
/*//////////////////////////////////////////////////////////////
EIP-2612 STORAGE
//////////////////////////////////////////////////////////////*/
uint256 internal immutable INITIAL_CHAIN_ID;
bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;
mapping(address => uint256) public nonces;
/*//////////////////////////////////////////////////////////////
CONSTRUCTOR
//////////////////////////////////////////////////////////////*/
constructor(
string memory _name,
string memory _symbol,
uint8 _decimals
) {
name = _name;
symbol = _symbol;
decimals = _decimals;
INITIAL_CHAIN_ID = block.chainid;
INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
}
/*//////////////////////////////////////////////////////////////
ERC20 LOGIC
//////////////////////////////////////////////////////////////*/
function approve(address spender, uint256 amount) public virtual returns (bool) {
allowance[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transfer(address to, uint256 amount) public virtual returns (bool) {
balanceOf[msg.sender] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(msg.sender, to, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 amount
) public virtual returns (bool) {
uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.
if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;
balanceOf[from] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(from, to, amount);
return true;
}
/*//////////////////////////////////////////////////////////////
EIP-2612 LOGIC
//////////////////////////////////////////////////////////////*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) public virtual {
require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");
// Unchecked because the only math done is incrementing
// the owner's nonce which cannot realistically overflow.
unchecked {
address recoveredAddress = ecrecover(
keccak256(
abi.encodePacked(
"\x19\x01",
DOMAIN_SEPARATOR(),
keccak256(
abi.encode(
keccak256(
"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
),
owner,
spender,
value,
nonces[owner]++,
deadline
)
)
)
),
v,
r,
s
);
require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");
allowance[recoveredAddress][spender] = value;
}
emit Approval(owner, spender, value);
}
function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
}
function computeDomainSeparator() internal view virtual returns (bytes32) {
return
keccak256(
abi.encode(
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
keccak256(bytes(name)),
keccak256("1"),
block.chainid,
address(this)
)
);
}
/*//////////////////////////////////////////////////////////////
INTERNAL MINT/BURN LOGIC
//////////////////////////////////////////////////////////////*/
function _mint(address to, uint256 amount) internal virtual {
totalSupply += amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(address(0), to, amount);
}
function _burn(address from, uint256 amount) internal virtual {
balanceOf[from] -= amount;
// Cannot underflow because a user's balance
// will never be larger than the total supply.
unchecked {
totalSupply -= amount;
}
emit Transfer(from, address(0), amount);
}
}// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;
/// @notice Simple single owner authorization mixin.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Owned.sol)
abstract contract Owned {
/*//////////////////////////////////////////////////////////////
EVENTS
//////////////////////////////////////////////////////////////*/
event OwnerUpdated(address indexed user, address indexed newOwner);
/*//////////////////////////////////////////////////////////////
OWNERSHIP STORAGE
//////////////////////////////////////////////////////////////*/
address public owner;
modifier onlyOwner() virtual {
require(msg.sender == owner, "UNAUTHORIZED");
_;
}
/*//////////////////////////////////////////////////////////////
CONSTRUCTOR
//////////////////////////////////////////////////////////////*/
constructor(address _owner) {
owner = _owner;
emit OwnerUpdated(address(0), _owner);
}
/*//////////////////////////////////////////////////////////////
OWNERSHIP LOGIC
//////////////////////////////////////////////////////////////*/
function setOwner(address newOwner) public virtual onlyOwner {
owner = newOwner;
emit OwnerUpdated(msg.sender, newOwner);
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.14;
interface IOKPC {
function marketplaceAddress() external view returns (address);
function owner() external view returns (address);
function balanceOf(address owner) external view returns (uint256);
function ownerOf(uint256 tokenId) external view returns (address);
function artCountForOKPC(uint256) external view returns (uint256);
function clockSpeed(uint256) external view returns (uint256);
function clockSpeedMaxMultiplier() external view returns (uint256);
function clockSpeedData(uint256 pcId)
external
view
returns (
uint256,
uint256,
uint256,
uint256
);
function activeArtForOKPC(uint256 pcId) external view returns (uint256);
function artCollectedByOKPC(uint256 pcId, uint256 artId)
external
view
returns (bool);
function setMarketplaceAddress(address marketplaceAddress) external;
function transferArt(
uint256 fromOKPC,
uint256 toOKPC,
uint256 artId
) external;
}// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.14;
interface IOKPCMarketplace {
function didMint(uint256 pcId, uint256 artId) external view returns (bool);
}{
"remappings": [
"ds-test/=lib/solmate/lib/ds-test/src/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"solmate/=lib/solmate/src/",
"src/=src/",
"test/=test/",
"script/=script/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"bytecodeHash": "ipfs"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "london",
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IOKPC","name":"okpcAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ClaimNotOpen","type":"error"},{"inputs":[],"name":"NoOKGLDClaimable","type":"error"},{"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":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerUpdated","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"},{"inputs":[],"name":"AIRDROP_CLAIM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CLAIMABLE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OKPC","outputs":[{"internalType":"contract IOKPC","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OKPC_CLAIM_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SCREEN_STAKING_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SCREEN_STAKING_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pcId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pcIds","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pcIds","type":"uint256[]"}],"name":"claimForArtwork","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pcId","type":"uint256"}],"name":"claimForArtwork","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pcId","type":"uint256"}],"name":"claimForOKPC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pcIds","type":"uint256[]"}],"name":"claimForOKPC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pcIds","type":"uint256[]"}],"name":"claimForScreenStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pcId","type":"uint256"}],"name":"claimForScreenStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pcIds","type":"uint256[]"}],"name":"claimableAmount","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pcId","type":"uint256"}],"name":"claimableAmount","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pcIds","type":"uint256[]"}],"name":"claimableAmountForArtwork","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pcId","type":"uint256"}],"name":"claimableAmountForArtwork","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pcIds","type":"uint256[]"}],"name":"claimableAmountForOKPC","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pcId","type":"uint256"}],"name":"claimableAmountForOKPC","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pcIds","type":"uint256[]"},{"internalType":"uint256","name":"afterBlocks","type":"uint256"}],"name":"claimableAmountForOKPC","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pcId","type":"uint256"},{"internalType":"uint256","name":"afterBlocks","type":"uint256"}],"name":"claimableAmountForOKPC","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pcId","type":"uint256"}],"name":"claimableAmountForScreenStaking","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pcIds","type":"uint256[]"},{"internalType":"uint256","name":"afterTime","type":"uint256"}],"name":"claimableAmountForScreenStaking","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pcId","type":"uint256"},{"internalType":"uint256","name":"afterTime","type":"uint256"}],"name":"claimableAmountForScreenStaking","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pcIds","type":"uint256[]"}],"name":"claimableAmountForScreenStaking","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pcIds","type":"uint256[]"},{"internalType":"uint256","name":"afterBlocks","type":"uint256"}],"name":"clockSpeedProjected","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pcId","type":"uint256"},{"internalType":"uint256","name":"afterBlocks","type":"uint256"}],"name":"clockSpeedProjected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"okpcClaims","outputs":[{"internalType":"bool","name":"okpcClaimed","type":"bool"},{"internalType":"bool","name":"artworkClaimed","type":"bool"},{"internalType":"uint128","name":"stakingLastClaimed","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"claimable","type":"bool"}],"name":"setClaimable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"screenStakingInterval","type":"uint256"},{"internalType":"uint256","name":"screenStakingReward","type":"uint256"}],"name":"setScreenStakingConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
610100604052625460006007556101006008553480156200001f57600080fd5b5060405162002c8738038062002c87833981016040819052620000429162000261565b604080518082018252600981526813d2d410c811d3d31160ba1b60208083019190915282518084018452600581526413d2d1d31160da1b91810191909152600080546001600160a01b0319163390811782559351929391926012929182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a3508251620000db906001906020860190620001bb565b508151620000f1906002906020850190620001bb565b5060ff81166080524660a052620001076200011f565b60c0525050506001600160a01b031660e05262000372565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051620001539190620002cf565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b828054620001c99062000293565b90600052602060002090601f016020900481019282620001ed576000855562000238565b82601f106200020857805160ff191683800117855562000238565b8280016001018555821562000238579182015b82811115620002385782518255916020019190600101906200021b565b50620002469291506200024a565b5090565b5b808211156200024657600081556001016200024b565b6000602082840312156200027457600080fd5b81516001600160a01b03811681146200028c57600080fd5b9392505050565b600181811c90821680620002a857607f821691505b602082108103620002c957634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680620002ec57607f831692505b602080841082036200030c57634e487b7160e01b86526022600452602486fd5b818015620003235760018114620003355762000364565b60ff1986168952848901965062000364565b60008a81526020902060005b868110156200035c5781548b82015290850190830162000341565b505084890196505b509498975050505050505050565b60805160a05160c05160e05161285d6200042a600039600081816105a10152818161087001528181610a0b01528181610e3b01528181610ff7015281816111e701528181611300015281816114960152818161151b015281816115ad015281816116e1015281816117f5015281816118ab0152818161194601528181611ce801528181611dd70152611eab01526000610d9901526000610d640152600081816103860152818161098e0152610ad4015261285d6000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c80636ba4c1381161015c578063a9059cbb116100ce578063d505accf11610087578063d505accf14610638578063dd62ed3e1461064b578063ec937e7014610676578063f27e1ef314610689578063f700ae8b1461069c578063ff7b3446146106a557600080fd5b8063a9059cbb146105d0578063b140f644146105e3578063b4208bbf146105f6578063b778985b146105ff578063b81087fb14610612578063c640e9af1461062557600080fd5b80638c607c38116101205780638c607c38146105435780638da5cb5b14610556578063902604221461058157806395d89b4114610594578063980a04471461059c5780639b8799c8146105c357600080fd5b80636ba4c138146104ca5780636cfe0ad1146104dd57806370a08231146104f05780637ecebe00146105105780637f2d91021461053057600080fd5b8063313ce567116102005780634373853d116101b95780634373853d1461041b57806344dcb4d8146104245780634bdfc7361461042d5780634c64a52314610440578063503d154d146104a457806368939509146104b757600080fd5b8063313ce56714610381578063315d32aa146103ba5780633644e515146103da578063378c93ad146103e2578063379607f5146103f557806342966c681461040857600080fd5b806319859c641161025257806319859c641461030f5780631c836bcf1461032257806323b872dd1461033557806327c87a9b146103485780632b9727bf1461035b5780632ce4e4701461036e57600080fd5b806306fdde031461028f578063095ea7b3146102ad57806313af4035146102d057806314014565146102e557806318160ddd14610306575b600080fd5b6102976106b8565b6040516102a4919061218a565b60405180910390f35b6102c06102bb3660046121f4565b610746565b60405190151581526020016102a4565b6102e36102de366004612220565b6107b3565b005b6102f86102f3366004612244565b610831565b6040519081526020016102a4565b6102f860035481565b6102e361031d3660046122a9565b61083e565b6102e3610330366004612244565b6109c8565b6102c06103433660046122eb565b610afe565b6102f86103563660046122a9565b610bde565b6102f86103693660046122a9565b610c30565b6102e361037c36600461232c565b610c7d565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016102a4565b6103cd6103c836600461234e565b610cb2565b6040516102a4919061239a565b6102f8610d60565b6102e36103f03660046123ec565b610dbb565b6102e3610403366004612244565b610df8565b6102e3610416366004612244565b610f0c565b6102f860075481565b6102f861040081565b6102f861043b3660046122a9565b610f19565b61047e61044e366004612244565b600a6020526000908152604090205460ff808216916101008104909116906201000090046001600160801b031683565b60408051931515845291151560208401526001600160801b0316908201526060016102a4565b6102f86104b2366004612244565b610f64565b6102f86104c536600461234e565b610f71565b6102e36104d83660046122a9565b610fc5565b6102f86104eb366004612244565b611138565b6102f86104fe366004612220565b60046020526000908152604090205481565b6102f861051e366004612220565b60066020526000908152604090205481565b6102f861053e36600461234e565b611169565b6102e36105513660046122a9565b6111b5565b600054610569906001600160a01b031681565b6040516001600160a01b0390911681526020016102a4565b6102e361058f3660046122a9565b6112ce565b6102976113e7565b6105697f000000000000000000000000000000000000000000000000000000000000000081565b6009546102c09060ff1681565b6102c06105de3660046121f4565b6113f4565b6102f86105f1366004612244565b61145a565b6102f861271081565b6102f861060d36600461232c565b6116ae565b6102e3610620366004612244565b6117b2565b6102f861063336600461232c565b611892565b6102e3610646366004612409565b611a61565b6102f8610659366004612480565b600560209081526000928352604080842090915290825290205481565b6102e3610684366004612244565b611ca5565b6102f86106973660046122a9565b611d85565b6102f860085481565b6102f86106b336600461232c565b611dd0565b600180546106c5906124b9565b80601f01602080910402602001604051908101604052809291908181526020018280546106f1906124b9565b801561073e5780601f106107135761010080835404028352916020019161073e565b820191906000526020600020905b81548152906001019060200180831161072157829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107a19086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b031633146107e65760405162461bcd60e51b81526004016107dd906124f3565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b60006107ad826000611892565b60095460ff16610861576040516335b43c0360e11b815260040160405180910390fd5b6000805b8281101561096357337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e8686858181106108af576108af612519565b905060200201356040518263ffffffff1660e01b81526004016108d491815260200190565b602060405180830381865afa1580156108f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610915919061252f565b6001600160a01b0316036109515761094484848381811061093857610938612519565b90506020020135611f82565b61094e9083612562565b91505b8061095b8161257a565b915050610865565b5080600003610985576040516344b4f38360e11b815260040160405180910390fd5b6109c3336109b47f0000000000000000000000000000000000000000000000000000000000000000600a612677565b6109be9084612686565b611fd0565b505050565b60095460ff166109eb576040516335b43c0360e11b815260040160405180910390fd5b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a76919061252f565b6001600160a01b031614610a9d576040516344b4f38360e11b815260040160405180910390fd5b6000610aa88261202a565b905080600003610acb576040516344b4f38360e11b815260040160405180910390fd5b610afa336109b47f0000000000000000000000000000000000000000000000000000000000000000600a612677565b5050565b6001600160a01b03831660009081526005602090815260408083203384529091528120546000198114610b5a57610b3583826126a5565b6001600160a01b03861660009081526005602090815260408083203384529091529020555b6001600160a01b03851660009081526004602052604081208054859290610b829084906126a5565b90915550506001600160a01b038085166000818152600460205260409081902080548701905551909187169060008051602061280883398151915290610bcb9087815260200190565b60405180910390a3506001949350505050565b6000805b82811015610c2957610c0b848483818110610bff57610bff612519565b9050602002013561145a565b610c159083612562565b915080610c218161257a565b915050610be2565b5092915050565b6000805b82811015610c2957610c5f848483818110610c5157610c51612519565b9050602002013560006116ae565b610c699083612562565b915080610c758161257a565b915050610c34565b6000546001600160a01b03163314610ca75760405162461bcd60e51b81526004016107dd906124f3565b600791909155600855565b606060008367ffffffffffffffff811115610ccf57610ccf6126bc565b604051908082528060200260200182016040528015610cf8578160200160208202803683370190505b50905060005b84811015610d5757610d28868683818110610d1b57610d1b612519565b9050602002013585611dd0565b828281518110610d3a57610d3a612519565b602090810291909101015280610d4f8161257a565b915050610cfe565b50949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610d9657610d9161205b565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6000546001600160a01b03163314610de55760405162461bcd60e51b81526004016107dd906124f3565b6009805460ff1916911515919091179055565b60095460ff16610e1b576040516335b43c0360e11b815260040160405180910390fd5b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea6919061252f565b6001600160a01b031614610ecd576040516344b4f38360e11b815260040160405180910390fd5b6000610ed88261202a565b610ee29082612562565b9050610eed826120f5565b610ef79082612562565b9050610f0282611f82565b610aa89082612562565b610f163382612128565b50565b6000805b82811015610c2957610f46848483818110610f3a57610f3a612519565b90506020020135611138565b610f509083612562565b915080610f5c8161257a565b915050610f1d565b60006107ad8260006116ae565b6000805b83811015610fbd57610f9f858583818110610f9257610f92612519565b9050602002013584611892565b610fa99083612562565b915080610fb58161257a565b915050610f75565b509392505050565b60095460ff16610fe8576040516335b43c0360e11b815260040160405180910390fd5b6000805b8281101561096357337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e86868581811061103657611036612519565b905060200201356040518263ffffffff1660e01b815260040161105b91815260200190565b602060405180830381865afa158015611078573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109c919061252f565b6001600160a01b031603611126576110cb8484838181106110bf576110bf612519565b9050602002013561202a565b6110d59083612562565b91506110f88484838181106110ec576110ec612519565b905060200201356120f5565b6111029083612562565b915061111984848381811061093857610938612519565b6111239083612562565b91505b806111308161257a565b915050610fec565b600061114382610831565b61114c8361145a565b61115584610f64565b61115f9190612562565b6107ad9190612562565b6000805b83811015610fbd5761119785858381811061118a5761118a612519565b90506020020135846116ae565b6111a19083612562565b9150806111ad8161257a565b91505061116d565b60095460ff166111d8576040516335b43c0360e11b815260040160405180910390fd5b6000805b8281101561096357337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e86868581811061122657611226612519565b905060200201356040518263ffffffff1660e01b815260040161124b91815260200190565b602060405180830381865afa158015611268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128c919061252f565b6001600160a01b0316036112bc576112af8484838181106110ec576110ec612519565b6112b99083612562565b91505b806112c68161257a565b9150506111dc565b60095460ff166112f1576040516335b43c0360e11b815260040160405180910390fd5b6000805b8281101561096357337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e86868581811061133f5761133f612519565b905060200201356040518263ffffffff1660e01b815260040161136491815260200190565b602060405180830381865afa158015611381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a5919061252f565b6001600160a01b0316036113d5576113c88484838181106110bf576110bf612519565b6113d29083612562565b91505b806113df8161257a565b9150506112f5565b600280546106c5906124b9565b336000908152600460205260408120805483919083906114159084906126a5565b90915550506001600160a01b03831660008181526004602052604090819020805485019055513390600080516020612808833981519152906107a19086815260200190565b6000818152600a6020526040812054610100900460ff161580156115095750604051630458b6db60e01b815260048101839052604560248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630458b6db90604401602060405180830381865afa1580156114e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150991906126d2565b156116a95760006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663daa17f496040518163ffffffff1660e01b8152600401602060405180830381865afa158015611577573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159b919061252f565b6001600160a01b0316148061169f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663daa17f496040518163ffffffff1660e01b8152600401602060405180830381865afa158015611609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162d919061252f565b604051638439043360e01b815260048101849052604560248201526001600160a01b039190911690638439043390604401602060405180830381865afa15801561167b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169f91906126d2565b156116a957506127105b919050565b6000828152600a602052604081205460ff16151581036107ad57604051632129022960e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634252045290602401602060405180830381865afa158015611730573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175491906126ef565b90506000600382116117665781611769565b60035b611774906002612708565b60026117808787611dd0565b61178a9190612714565b6117949190612686565b905061040081116117a557806117a9565b6104005b95945050505050565b60095460ff166117d5576040516335b43c0360e11b815260040160405180910390fd5b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa15801561183c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611860919061252f565b6001600160a01b031614611887576040516344b4f38360e11b815260040160405180910390fd5b6000610aa882611f82565b60405163b75f7e5160e01b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b75f7e5190602401602060405180830381865afa1580156118fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191e91906126ef565b60451461192d575060006107ad565b604051634b00b4cd60e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639601699a90602401608060405180830381865afa158015611995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b99190612736565b6000888152600a602052604081205491955093506201000090046001600160801b0316841091506119ec90505781611a0b565b6000858152600a60205260409020546201000090046001600160801b03165b905060075481611a1b9190612562565b611a258542612562565b10611a595760075481611a388642612562565b611a4291906126a5565b611a4c9190612714565b6008546117a99190612686565b505092915050565b42841015611ab15760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064016107dd565b60006001611abd610d60565b6001600160a01b038a811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015611bc9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611bff5750876001600160a01b0316816001600160a01b0316145b611c3c5760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b60448201526064016107dd565b6001600160a01b0390811660009081526005602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b60095460ff16611cc8576040516335b43c0360e11b815260040160405180910390fd5b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611d2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d53919061252f565b6001600160a01b031614611d7a576040516344b4f38360e11b815260040160405180910390fd5b6000610aa8826120f5565b6000805b82811015610c2957611db2848483818110611da657611da6612519565b90506020020135610831565b611dbc9083612562565b915080611dc88161257a565b915050611d89565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639601699a866040518263ffffffff1660e01b8152600401611e2391815260200190565b608060405180830381865afa158015611e40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e649190612736565b50509150915080600003611e7d576001925050506107ad565b600081611e8a8643612562565b611e9491906126a5565b90506000611ea562030d4083612714565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638d774da86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2b91906126ef565b905080821115611f39578091505b6000612710611f49846001612562565b611f539086612686565b611f5d9190612714565b611f679087612562565b90506001811015611f76575060015b98975050505050505050565b6000611f8d82610831565b905080156116a9576000918252600a6020526040909120805471ffffffffffffffffffffffffffffffff0000191662010000426001600160801b03160217905590565b8060036000828254611fe29190612562565b90915550506001600160a01b03821660008181526004602090815260408083208054860190555184815260008051602061280883398151915291015b60405180910390a35050565b600061203582610f64565b905080156116a9576000828152600a60205260409020805460ff19166001179055919050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600160405161208d919061276c565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006121008261145a565b905080156116a9576000828152600a60205260409020805461ff001916610100179055919050565b6001600160a01b038216600090815260046020526040812080548392906121509084906126a5565b90915550506003805482900390556040518181526000906001600160a01b038416906000805160206128088339815191529060200161201e565b600060208083528351808285015260005b818110156121b75785810183015185820160400152820161219b565b818111156121c9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610f1657600080fd5b6000806040838503121561220757600080fd5b8235612212816121df565b946020939093013593505050565b60006020828403121561223257600080fd5b813561223d816121df565b9392505050565b60006020828403121561225657600080fd5b5035919050565b60008083601f84011261226f57600080fd5b50813567ffffffffffffffff81111561228757600080fd5b6020830191508360208260051b85010111156122a257600080fd5b9250929050565b600080602083850312156122bc57600080fd5b823567ffffffffffffffff8111156122d357600080fd5b6122df8582860161225d565b90969095509350505050565b60008060006060848603121561230057600080fd5b833561230b816121df565b9250602084013561231b816121df565b929592945050506040919091013590565b6000806040838503121561233f57600080fd5b50508035926020909101359150565b60008060006040848603121561236357600080fd5b833567ffffffffffffffff81111561237a57600080fd5b6123868682870161225d565b909790965060209590950135949350505050565b6020808252825182820181905260009190848201906040850190845b818110156123d2578351835292840192918401916001016123b6565b50909695505050505050565b8015158114610f1657600080fd5b6000602082840312156123fe57600080fd5b813561223d816123de565b600080600080600080600060e0888a03121561242457600080fd5b873561242f816121df565b9650602088013561243f816121df565b95506040880135945060608801359350608088013560ff8116811461246357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561249357600080fd5b823561249e816121df565b915060208301356124ae816121df565b809150509250929050565b600181811c908216806124cd57607f821691505b6020821081036124ed57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561254157600080fd5b815161223d816121df565b634e487b7160e01b600052601160045260246000fd5b600082198211156125755761257561254c565b500190565b60006001820161258c5761258c61254c565b5060010190565b600181815b808511156125ce5781600019048211156125b4576125b461254c565b808516156125c157918102915b93841c9390800290612598565b509250929050565b6000826125e5575060016107ad565b816125f2575060006107ad565b816001811461260857600281146126125761262e565b60019150506107ad565b60ff8411156126235761262361254c565b50506001821b6107ad565b5060208310610133831016604e8410600b8410161715612651575081810a6107ad565b61265b8383612593565b806000190482111561266f5761266f61254c565b029392505050565b600061223d60ff8416836125d6565b60008160001904831182151516156126a0576126a061254c565b500290565b6000828210156126b7576126b761254c565b500390565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156126e457600080fd5b815161223d816123de565b60006020828403121561270157600080fd5b5051919050565b600061223d83836125d6565b60008261273157634e487b7160e01b600052601260045260246000fd5b500490565b6000806000806080858703121561274c57600080fd5b505082516020840151604085015160609095015191969095509092509050565b600080835481600182811c91508083168061278857607f831692505b602080841082036127a757634e487b7160e01b86526022600452602486fd5b8180156127bb57600181146127cc576127f9565b60ff198616895284890196506127f9565b60008a81526020902060005b868110156127f15781548b8201529085019083016127d8565b505084890196505b50949897505050505050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220125265282537218036d0d00bade8f34d825688ab94b2bc0ce1d2a97ee8c672bf64736f6c634300080e00330000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e8
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061028a5760003560e01c80636ba4c1381161015c578063a9059cbb116100ce578063d505accf11610087578063d505accf14610638578063dd62ed3e1461064b578063ec937e7014610676578063f27e1ef314610689578063f700ae8b1461069c578063ff7b3446146106a557600080fd5b8063a9059cbb146105d0578063b140f644146105e3578063b4208bbf146105f6578063b778985b146105ff578063b81087fb14610612578063c640e9af1461062557600080fd5b80638c607c38116101205780638c607c38146105435780638da5cb5b14610556578063902604221461058157806395d89b4114610594578063980a04471461059c5780639b8799c8146105c357600080fd5b80636ba4c138146104ca5780636cfe0ad1146104dd57806370a08231146104f05780637ecebe00146105105780637f2d91021461053057600080fd5b8063313ce567116102005780634373853d116101b95780634373853d1461041b57806344dcb4d8146104245780634bdfc7361461042d5780634c64a52314610440578063503d154d146104a457806368939509146104b757600080fd5b8063313ce56714610381578063315d32aa146103ba5780633644e515146103da578063378c93ad146103e2578063379607f5146103f557806342966c681461040857600080fd5b806319859c641161025257806319859c641461030f5780631c836bcf1461032257806323b872dd1461033557806327c87a9b146103485780632b9727bf1461035b5780632ce4e4701461036e57600080fd5b806306fdde031461028f578063095ea7b3146102ad57806313af4035146102d057806314014565146102e557806318160ddd14610306575b600080fd5b6102976106b8565b6040516102a4919061218a565b60405180910390f35b6102c06102bb3660046121f4565b610746565b60405190151581526020016102a4565b6102e36102de366004612220565b6107b3565b005b6102f86102f3366004612244565b610831565b6040519081526020016102a4565b6102f860035481565b6102e361031d3660046122a9565b61083e565b6102e3610330366004612244565b6109c8565b6102c06103433660046122eb565b610afe565b6102f86103563660046122a9565b610bde565b6102f86103693660046122a9565b610c30565b6102e361037c36600461232c565b610c7d565b6103a87f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff90911681526020016102a4565b6103cd6103c836600461234e565b610cb2565b6040516102a4919061239a565b6102f8610d60565b6102e36103f03660046123ec565b610dbb565b6102e3610403366004612244565b610df8565b6102e3610416366004612244565b610f0c565b6102f860075481565b6102f861040081565b6102f861043b3660046122a9565b610f19565b61047e61044e366004612244565b600a6020526000908152604090205460ff808216916101008104909116906201000090046001600160801b031683565b60408051931515845291151560208401526001600160801b0316908201526060016102a4565b6102f86104b2366004612244565b610f64565b6102f86104c536600461234e565b610f71565b6102e36104d83660046122a9565b610fc5565b6102f86104eb366004612244565b611138565b6102f86104fe366004612220565b60046020526000908152604090205481565b6102f861051e366004612220565b60066020526000908152604090205481565b6102f861053e36600461234e565b611169565b6102e36105513660046122a9565b6111b5565b600054610569906001600160a01b031681565b6040516001600160a01b0390911681526020016102a4565b6102e361058f3660046122a9565b6112ce565b6102976113e7565b6105697f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e881565b6009546102c09060ff1681565b6102c06105de3660046121f4565b6113f4565b6102f86105f1366004612244565b61145a565b6102f861271081565b6102f861060d36600461232c565b6116ae565b6102e3610620366004612244565b6117b2565b6102f861063336600461232c565b611892565b6102e3610646366004612409565b611a61565b6102f8610659366004612480565b600560209081526000928352604080842090915290825290205481565b6102e3610684366004612244565b611ca5565b6102f86106973660046122a9565b611d85565b6102f860085481565b6102f86106b336600461232c565b611dd0565b600180546106c5906124b9565b80601f01602080910402602001604051908101604052809291908181526020018280546106f1906124b9565b801561073e5780601f106107135761010080835404028352916020019161073e565b820191906000526020600020905b81548152906001019060200180831161072157829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107a19086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b031633146107e65760405162461bcd60e51b81526004016107dd906124f3565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b60006107ad826000611892565b60095460ff16610861576040516335b43c0360e11b815260040160405180910390fd5b6000805b8281101561096357337f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e86001600160a01b0316636352211e8686858181106108af576108af612519565b905060200201356040518263ffffffff1660e01b81526004016108d491815260200190565b602060405180830381865afa1580156108f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610915919061252f565b6001600160a01b0316036109515761094484848381811061093857610938612519565b90506020020135611f82565b61094e9083612562565b91505b8061095b8161257a565b915050610865565b5080600003610985576040516344b4f38360e11b815260040160405180910390fd5b6109c3336109b47f0000000000000000000000000000000000000000000000000000000000000012600a612677565b6109be9084612686565b611fd0565b505050565b60095460ff166109eb576040516335b43c0360e11b815260040160405180910390fd5b6040516331a9108f60e11b81526004810182905233906001600160a01b037f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e81690636352211e90602401602060405180830381865afa158015610a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a76919061252f565b6001600160a01b031614610a9d576040516344b4f38360e11b815260040160405180910390fd5b6000610aa88261202a565b905080600003610acb576040516344b4f38360e11b815260040160405180910390fd5b610afa336109b47f0000000000000000000000000000000000000000000000000000000000000012600a612677565b5050565b6001600160a01b03831660009081526005602090815260408083203384529091528120546000198114610b5a57610b3583826126a5565b6001600160a01b03861660009081526005602090815260408083203384529091529020555b6001600160a01b03851660009081526004602052604081208054859290610b829084906126a5565b90915550506001600160a01b038085166000818152600460205260409081902080548701905551909187169060008051602061280883398151915290610bcb9087815260200190565b60405180910390a3506001949350505050565b6000805b82811015610c2957610c0b848483818110610bff57610bff612519565b9050602002013561145a565b610c159083612562565b915080610c218161257a565b915050610be2565b5092915050565b6000805b82811015610c2957610c5f848483818110610c5157610c51612519565b9050602002013560006116ae565b610c699083612562565b915080610c758161257a565b915050610c34565b6000546001600160a01b03163314610ca75760405162461bcd60e51b81526004016107dd906124f3565b600791909155600855565b606060008367ffffffffffffffff811115610ccf57610ccf6126bc565b604051908082528060200260200182016040528015610cf8578160200160208202803683370190505b50905060005b84811015610d5757610d28868683818110610d1b57610d1b612519565b9050602002013585611dd0565b828281518110610d3a57610d3a612519565b602090810291909101015280610d4f8161257a565b915050610cfe565b50949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000014614610d9657610d9161205b565b905090565b507fe134a87bef541d91c40b936eee45baca8cb255d4e02bfd10a1c05882daeeb61190565b6000546001600160a01b03163314610de55760405162461bcd60e51b81526004016107dd906124f3565b6009805460ff1916911515919091179055565b60095460ff16610e1b576040516335b43c0360e11b815260040160405180910390fd5b6040516331a9108f60e11b81526004810182905233906001600160a01b037f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e81690636352211e90602401602060405180830381865afa158015610e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea6919061252f565b6001600160a01b031614610ecd576040516344b4f38360e11b815260040160405180910390fd5b6000610ed88261202a565b610ee29082612562565b9050610eed826120f5565b610ef79082612562565b9050610f0282611f82565b610aa89082612562565b610f163382612128565b50565b6000805b82811015610c2957610f46848483818110610f3a57610f3a612519565b90506020020135611138565b610f509083612562565b915080610f5c8161257a565b915050610f1d565b60006107ad8260006116ae565b6000805b83811015610fbd57610f9f858583818110610f9257610f92612519565b9050602002013584611892565b610fa99083612562565b915080610fb58161257a565b915050610f75565b509392505050565b60095460ff16610fe8576040516335b43c0360e11b815260040160405180910390fd5b6000805b8281101561096357337f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e86001600160a01b0316636352211e86868581811061103657611036612519565b905060200201356040518263ffffffff1660e01b815260040161105b91815260200190565b602060405180830381865afa158015611078573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109c919061252f565b6001600160a01b031603611126576110cb8484838181106110bf576110bf612519565b9050602002013561202a565b6110d59083612562565b91506110f88484838181106110ec576110ec612519565b905060200201356120f5565b6111029083612562565b915061111984848381811061093857610938612519565b6111239083612562565b91505b806111308161257a565b915050610fec565b600061114382610831565b61114c8361145a565b61115584610f64565b61115f9190612562565b6107ad9190612562565b6000805b83811015610fbd5761119785858381811061118a5761118a612519565b90506020020135846116ae565b6111a19083612562565b9150806111ad8161257a565b91505061116d565b60095460ff166111d8576040516335b43c0360e11b815260040160405180910390fd5b6000805b8281101561096357337f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e86001600160a01b0316636352211e86868581811061122657611226612519565b905060200201356040518263ffffffff1660e01b815260040161124b91815260200190565b602060405180830381865afa158015611268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128c919061252f565b6001600160a01b0316036112bc576112af8484838181106110ec576110ec612519565b6112b99083612562565b91505b806112c68161257a565b9150506111dc565b60095460ff166112f1576040516335b43c0360e11b815260040160405180910390fd5b6000805b8281101561096357337f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e86001600160a01b0316636352211e86868581811061133f5761133f612519565b905060200201356040518263ffffffff1660e01b815260040161136491815260200190565b602060405180830381865afa158015611381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a5919061252f565b6001600160a01b0316036113d5576113c88484838181106110bf576110bf612519565b6113d29083612562565b91505b806113df8161257a565b9150506112f5565b600280546106c5906124b9565b336000908152600460205260408120805483919083906114159084906126a5565b90915550506001600160a01b03831660008181526004602052604090819020805485019055513390600080516020612808833981519152906107a19086815260200190565b6000818152600a6020526040812054610100900460ff161580156115095750604051630458b6db60e01b815260048101839052604560248201527f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e86001600160a01b031690630458b6db90604401602060405180830381865afa1580156114e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150991906126d2565b156116a95760006001600160a01b03167f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e86001600160a01b031663daa17f496040518163ffffffff1660e01b8152600401602060405180830381865afa158015611577573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159b919061252f565b6001600160a01b0316148061169f57507f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e86001600160a01b031663daa17f496040518163ffffffff1660e01b8152600401602060405180830381865afa158015611609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162d919061252f565b604051638439043360e01b815260048101849052604560248201526001600160a01b039190911690638439043390604401602060405180830381865afa15801561167b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169f91906126d2565b156116a957506127105b919050565b6000828152600a602052604081205460ff16151581036107ad57604051632129022960e11b8152600481018490526000907f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e86001600160a01b031690634252045290602401602060405180830381865afa158015611730573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175491906126ef565b90506000600382116117665781611769565b60035b611774906002612708565b60026117808787611dd0565b61178a9190612714565b6117949190612686565b905061040081116117a557806117a9565b6104005b95945050505050565b60095460ff166117d5576040516335b43c0360e11b815260040160405180910390fd5b6040516331a9108f60e11b81526004810182905233906001600160a01b037f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e81690636352211e90602401602060405180830381865afa15801561183c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611860919061252f565b6001600160a01b031614611887576040516344b4f38360e11b815260040160405180910390fd5b6000610aa882611f82565b60405163b75f7e5160e01b8152600481018390526000907f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e86001600160a01b03169063b75f7e5190602401602060405180830381865afa1580156118fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191e91906126ef565b60451461192d575060006107ad565b604051634b00b4cd60e11b8152600481018490526000907f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e86001600160a01b031690639601699a90602401608060405180830381865afa158015611995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b99190612736565b6000888152600a602052604081205491955093506201000090046001600160801b0316841091506119ec90505781611a0b565b6000858152600a60205260409020546201000090046001600160801b03165b905060075481611a1b9190612562565b611a258542612562565b10611a595760075481611a388642612562565b611a4291906126a5565b611a4c9190612714565b6008546117a99190612686565b505092915050565b42841015611ab15760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064016107dd565b60006001611abd610d60565b6001600160a01b038a811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015611bc9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611bff5750876001600160a01b0316816001600160a01b0316145b611c3c5760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b60448201526064016107dd565b6001600160a01b0390811660009081526005602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b60095460ff16611cc8576040516335b43c0360e11b815260040160405180910390fd5b6040516331a9108f60e11b81526004810182905233906001600160a01b037f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e81690636352211e90602401602060405180830381865afa158015611d2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d53919061252f565b6001600160a01b031614611d7a576040516344b4f38360e11b815260040160405180910390fd5b6000610aa8826120f5565b6000805b82811015610c2957611db2848483818110611da657611da6612519565b90506020020135610831565b611dbc9083612562565b915080611dc88161257a565b915050611d89565b60008060007f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e86001600160a01b0316639601699a866040518263ffffffff1660e01b8152600401611e2391815260200190565b608060405180830381865afa158015611e40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e649190612736565b50509150915080600003611e7d576001925050506107ad565b600081611e8a8643612562565b611e9491906126a5565b90506000611ea562030d4083612714565b905060007f0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e86001600160a01b0316638d774da86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2b91906126ef565b905080821115611f39578091505b6000612710611f49846001612562565b611f539086612686565b611f5d9190612714565b611f679087612562565b90506001811015611f76575060015b98975050505050505050565b6000611f8d82610831565b905080156116a9576000918252600a6020526040909120805471ffffffffffffffffffffffffffffffff0000191662010000426001600160801b03160217905590565b8060036000828254611fe29190612562565b90915550506001600160a01b03821660008181526004602090815260408083208054860190555184815260008051602061280883398151915291015b60405180910390a35050565b600061203582610f64565b905080156116a9576000828152600a60205260409020805460ff19166001179055919050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600160405161208d919061276c565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006121008261145a565b905080156116a9576000828152600a60205260409020805461ff001916610100179055919050565b6001600160a01b038216600090815260046020526040812080548392906121509084906126a5565b90915550506003805482900390556040518181526000906001600160a01b038416906000805160206128088339815191529060200161201e565b600060208083528351808285015260005b818110156121b75785810183015185820160400152820161219b565b818111156121c9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610f1657600080fd5b6000806040838503121561220757600080fd5b8235612212816121df565b946020939093013593505050565b60006020828403121561223257600080fd5b813561223d816121df565b9392505050565b60006020828403121561225657600080fd5b5035919050565b60008083601f84011261226f57600080fd5b50813567ffffffffffffffff81111561228757600080fd5b6020830191508360208260051b85010111156122a257600080fd5b9250929050565b600080602083850312156122bc57600080fd5b823567ffffffffffffffff8111156122d357600080fd5b6122df8582860161225d565b90969095509350505050565b60008060006060848603121561230057600080fd5b833561230b816121df565b9250602084013561231b816121df565b929592945050506040919091013590565b6000806040838503121561233f57600080fd5b50508035926020909101359150565b60008060006040848603121561236357600080fd5b833567ffffffffffffffff81111561237a57600080fd5b6123868682870161225d565b909790965060209590950135949350505050565b6020808252825182820181905260009190848201906040850190845b818110156123d2578351835292840192918401916001016123b6565b50909695505050505050565b8015158114610f1657600080fd5b6000602082840312156123fe57600080fd5b813561223d816123de565b600080600080600080600060e0888a03121561242457600080fd5b873561242f816121df565b9650602088013561243f816121df565b95506040880135945060608801359350608088013560ff8116811461246357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561249357600080fd5b823561249e816121df565b915060208301356124ae816121df565b809150509250929050565b600181811c908216806124cd57607f821691505b6020821081036124ed57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561254157600080fd5b815161223d816121df565b634e487b7160e01b600052601160045260246000fd5b600082198211156125755761257561254c565b500190565b60006001820161258c5761258c61254c565b5060010190565b600181815b808511156125ce5781600019048211156125b4576125b461254c565b808516156125c157918102915b93841c9390800290612598565b509250929050565b6000826125e5575060016107ad565b816125f2575060006107ad565b816001811461260857600281146126125761262e565b60019150506107ad565b60ff8411156126235761262361254c565b50506001821b6107ad565b5060208310610133831016604e8410600b8410161715612651575081810a6107ad565b61265b8383612593565b806000190482111561266f5761266f61254c565b029392505050565b600061223d60ff8416836125d6565b60008160001904831182151516156126a0576126a061254c565b500290565b6000828210156126b7576126b761254c565b500390565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156126e457600080fd5b815161223d816123de565b60006020828403121561270157600080fd5b5051919050565b600061223d83836125d6565b60008261273157634e487b7160e01b600052601260045260246000fd5b500490565b6000806000806080858703121561274c57600080fd5b505082516020840151604085015160609095015191969095509092509050565b600080835481600182811c91508083168061278857607f831692505b602080841082036127a757634e487b7160e01b86526022600452602486fd5b8180156127bb57600181146127cc576127f9565b60ff198616895284890196506127f9565b60008a81526020902060005b868110156127f15781548b8201529085019083016127d8565b505084890196505b50949897505050505050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220125265282537218036d0d00bade8f34d825688ab94b2bc0ce1d2a97ee8c672bf64736f6c634300080e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e8
-----Decoded View---------------
Arg [0] : okpcAddress (address): 0x7183209867489E1047f3A7c23ea1Aed9c4E236E8
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007183209867489e1047f3a7c23ea1aed9c4e236e8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)