Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 17 from a total of 17 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 20413638 | 24 days ago | IN | 0 ETH | 0.00023332 | ||||
Transfer Ownersh... | 16092341 | 630 days ago | IN | 0 ETH | 0.000353 | ||||
Akc NFT Approve ... | 14675219 | 847 days ago | IN | 0 ETH | 0.00227397 | ||||
Akc NFT Approve ... | 14672959 | 847 days ago | IN | 0 ETH | 0.00164688 | ||||
Akc NFT Approve ... | 14624276 | 855 days ago | IN | 0 ETH | 0.00157317 | ||||
Akc NFT Approve ... | 14624264 | 855 days ago | IN | 0 ETH | 0.00142362 | ||||
Akc NFT Approve ... | 14598819 | 859 days ago | IN | 0 ETH | 0.00226845 | ||||
Set Akc Tribe Ma... | 14598816 | 859 days ago | IN | 0 ETH | 0.00150003 | ||||
Set Akc Tribe Ma... | 14529689 | 870 days ago | IN | 0 ETH | 0.0014524 | ||||
Akc NFT Approve ... | 14529648 | 870 days ago | IN | 0 ETH | 0.00332848 | ||||
Akc NFT Approve ... | 14529504 | 870 days ago | IN | 0 ETH | 0.0018956 | ||||
Set Akc Tribe Ma... | 14523459 | 871 days ago | IN | 0 ETH | 0.00159592 | ||||
Akc NFT Approve ... | 14523422 | 871 days ago | IN | 0 ETH | 0.00403527 | ||||
Akc NFT Approve ... | 14520808 | 871 days ago | IN | 0 ETH | 0.00213989 | ||||
Akc NFT Approve ... | 14520784 | 871 days ago | IN | 0 ETH | 0.00352801 | ||||
Set Akc Tribe Ma... | 14520762 | 871 days ago | IN | 0 ETH | 0.00278661 | ||||
0x60806040 | 14520747 | 871 days ago | IN | 0 ETH | 0.18421886 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
AKCCoreMultiStakeExtension
Compiler Version
v0.8.13+commit.abaa5c0e
Optimization Enabled:
Yes with 1000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "./interfaces/IAKCCore.sol"; contract AKCCoreMultiStakeExtension is Ownable { /** * @dev Interfaces */ IAKCCore public akcCore; IERC721 public akc; /** * @dev Addresses */ address public manager; /** * @dev Staking Logic */ /// @dev Pack owner and spec in single uint256 to save gas /// - first 160 bits is address /// - last 96 bits is spec mapping(uint256 => uint256) public kongToStaker; /// @dev Save staking data in a single uint256 /// - first 64 bits are the timestamp /// - second 64 bits are the amount /// - third 128 bits are the pending bonus mapping(address => mapping(uint256 => uint256)) public userToStakeData; /// @dev Denomination is in thousands mapping(uint256 => uint256) public stakeAmountToBonus; /// @dev Number to use for bonus when /// staked amount is greater than this number. uint256 public stakeCap = 6; uint256 public capsuleRate = 2 ether; uint256 public maxCapsules = 20; mapping(address => mapping(uint256 => uint256)) public userToTotalBonus; /** * @dev Modifiers */ modifier onlyManager() { require(msg.sender == manager || msg.sender == owner(), "Sender not authorized"); _; } constructor( address _akcCore, address _akc ) { akcCore = IAKCCore(_akcCore); akc = IERC721(_akc); stakeAmountToBonus[1] = 75; stakeAmountToBonus[2] = 100; stakeAmountToBonus[3] = 125; stakeAmountToBonus[4] = 150; stakeAmountToBonus[5] = 175; stakeAmountToBonus[6] = 200; } /** === Stake Logic === */ function _getNakedRewardBySpec(address staker, uint256 targetSpec, uint256 timestamp) internal view returns (uint256) { uint256 totalReward; for (uint i = 0; i < akcCore.getTribeAmount(staker); i++) { uint256 tribe = akcCore.userToTribes(staker, i); uint256 spec = akcCore.getSpecFromTribe(tribe); if (spec != targetSpec) continue; uint256 lastClaimedTimeStamp = akcCore.getLastClaimedTimeFromTribe(tribe); lastClaimedTimeStamp = lastClaimedTimeStamp >= timestamp ? lastClaimedTimeStamp : timestamp; (,uint256 rps,) = akcCore.tribeSpecs(spec); uint256 interval = (block.timestamp - lastClaimedTimeStamp); uint256 reward = rps * interval / 86400; totalReward += reward; } return totalReward; } /** * @dev Get bonus from last stake / claim * to block.timestamp for spec based on staked amount. */ function _getBonus(address staker, uint256 spec) internal view returns (uint256) { uint256 stakeData = userToStakeData[staker][spec]; uint256 currentAmount = _getStakeAmountFromStakeData(stakeData); uint256 lastTimeStamp = _getStakeTimeStampFromStakeData(stakeData); uint256 bonusPercentage = currentAmount >= stakeCap ? stakeAmountToBonus[stakeCap] : stakeAmountToBonus[currentAmount]; /// @dev Get reward for all tribes of spec from /// last stake timestamp to block.timestamp. Create time is taken into account /// also we make sure the last time stamp is always greater than or /// equal to the the last claim time. uint256 pendingReward; if (spec == 257) { pendingReward = (block.timestamp - lastTimeStamp) * (currentAmount * capsuleRate) / 86400; return pendingReward; } pendingReward = _getNakedRewardBySpec(staker, spec, lastTimeStamp); return pendingReward * bonusPercentage / 1000; } function addToBonus(address staker, uint256 spec, uint256 bonus) external onlyManager { uint256 stakeData = userToStakeData[staker][spec]; uint256 lastTimeStamp = _getStakeTimeStampFromStakeData(stakeData); uint256 currentAmount = _getStakeAmountFromStakeData(stakeData); uint256 accumulatedBonus = _getStakePendingBonusFromStakeData(stakeData); userToStakeData[staker][spec] = _getUpdatedStakeData(lastTimeStamp, currentAmount, accumulatedBonus + bonus); } /** * @dev Returns pending bonus * and resets stake data with current time * and zero bonus. */ function liquidateBonus(address staker, uint256 spec) external onlyManager returns (uint256) { uint256 stakeData = userToStakeData[staker][spec]; if (stakeData == 0) { return 0; } uint256 currentAmount = _getStakeAmountFromStakeData(stakeData); uint256 accumulatedBonus = _getStakePendingBonusFromStakeData(stakeData); uint256 pendingBonus = _getBonus(staker, spec); userToStakeData[staker][spec] = _getUpdatedStakeData(block.timestamp, currentAmount, 0); userToTotalBonus[staker][spec] += accumulatedBonus + pendingBonus; return (accumulatedBonus + pendingBonus); } /** * @dev Stakes a new kong in a spec * gets pending bonus based on previous amount * and adds it to accumulated bonus */ function stake(address staker, uint256 spec, uint256 kong) external onlyManager { require(spec < akcCore.getTribeSpecAmount() || spec == 257, "Invalid spec"); require(kongToStaker[kong] == 0, "Kong already staked"); require(akcCore.getTotalTribesByspec(staker, spec) > 0 || spec == 257, "User has no items in spec"); require(akc.ownerOf(kong) == address(this), "Kong not in custody"); kongToStaker[kong] = _getKongStakeData(staker, spec); uint256 stakeData = userToStakeData[staker][spec]; uint256 currentAmount = _getStakeAmountFromStakeData(stakeData); uint256 accumulatedBonus = _getStakePendingBonusFromStakeData(stakeData); if (spec == 257) { require(currentAmount < maxCapsules, "Max capsules staked"); } uint256 pendingBonus = stakeData == 0 ? 0 : _getBonus(staker, spec); userToStakeData[staker][spec] = _getUpdatedStakeData(block.timestamp, currentAmount + 1, accumulatedBonus + pendingBonus); } /** * @dev Unstakes a kong from a spec * gets pending bonus based on previous amount * and adds it to accumulated bonus */ function unstake(address staker, uint256 spec, uint256 kong) external onlyManager { uint256 kongStakeData = kongToStaker[kong]; address kongStakeStaker = _getAddressFromKongStakeData(kongStakeData); uint256 kongStakeSpec = _getSpecFromKongStakeData(kongStakeData); require(kongStakeStaker == staker, "Kong not owned by staker"); require(kongStakeSpec == spec, "Kong is not staked in supplied spec"); require(akc.ownerOf(kong) == staker, "Kong not transfered to staker"); delete kongToStaker[kong]; uint256 stakeData = userToStakeData[staker][spec]; uint256 currentAmount = _getStakeAmountFromStakeData(stakeData); uint256 accumulatedBonus = _getStakePendingBonusFromStakeData(stakeData); uint256 pendingBonus = _getBonus(staker, spec); userToStakeData[staker][spec] = _getUpdatedStakeData(block.timestamp, currentAmount - 1, accumulatedBonus + pendingBonus); } /** === Getters === */ // get stake data internal function _getStakeTimeStampFromStakeData(uint256 stakeData) internal pure returns (uint256) { return uint256(uint64(stakeData)); } function _getStakeAmountFromStakeData(uint256 stakeData) internal pure returns (uint256) { return uint256(uint64(stakeData >> 64)); } function _getStakePendingBonusFromStakeData(uint256 stakeData) internal pure returns (uint256) { return uint256(uint128(stakeData >> 128)); } function _getUpdatedStakeData(uint256 newTimeStamp, uint256 newAmount, uint256 newBonus) internal pure returns (uint256) { uint256 stakeData = newTimeStamp; stakeData |= newAmount << 64; stakeData |= newBonus << 128; return stakeData; } // get kong stake data internal function _getAddressFromKongStakeData(uint256 kongStakeData) internal pure returns (address) { return address(uint160(kongStakeData)); } function _getSpecFromKongStakeData(uint256 kongStakeData) internal pure returns (uint256) { return uint256(uint96(kongStakeData >> 160)); } function _getKongStakeData(address staker, uint256 spec) internal pure returns (uint256) { uint256 kongStakeData = uint256(uint160(staker)); kongStakeData |= spec << 160; return kongStakeData; } // get stake data external function getStakeTimeStampFromStakeData(uint256 stakeData) external pure returns (uint256) { return _getStakeTimeStampFromStakeData(stakeData); } function getStakeAmountFromStakeData(uint256 stakeData) external pure returns (uint256) { return _getStakeAmountFromStakeData(stakeData); } function getStakePendingBonusFromStakeData(uint256 stakeData) external pure returns (uint256) { return _getStakePendingBonusFromStakeData(stakeData); } // get kong stake data external function getAddressFromKongStakeData(uint256 kongStakeData) external pure returns (address) { return _getAddressFromKongStakeData(kongStakeData); } function getSpecFromKongStakeData(uint256 kongStakeData) external pure returns (uint256) { return _getSpecFromKongStakeData(kongStakeData); } /** === View Bonus === */ function getNakedRewardBySpecFromCreate(address staker, uint256 targetSpec, uint256 timestamp) public view returns (uint256) { uint256 totalReward; for (uint i = 0; i < akcCore.getTribeAmount(staker); i++) { uint256 tribe = akcCore.userToTribes(staker, i); uint256 spec = akcCore.getSpecFromTribe(tribe); if (spec != targetSpec) continue; uint256 lastClaimedTimeStamp = akcCore.getCreatedAtFromTribe(tribe); lastClaimedTimeStamp = lastClaimedTimeStamp >= timestamp ? lastClaimedTimeStamp : timestamp; (,uint256 rps,) = akcCore.tribeSpecs(spec); uint256 interval = (block.timestamp - lastClaimedTimeStamp); uint256 reward = rps * interval / 86400; totalReward += reward; } return totalReward; } function getNakedRewardBySpecDisregardCreate(address staker, uint256 targetSpec, uint256 timestamp) public view returns (uint256) { uint256 totalReward; for (uint i = 0; i < akcCore.getTribeAmount(staker); i++) { uint256 tribe = akcCore.userToTribes(staker, i); uint256 spec = akcCore.getSpecFromTribe(tribe); if (spec != targetSpec) continue; uint256 lastClaimedTimeStamp = akcCore.getCreatedAtFromTribe(tribe); lastClaimedTimeStamp = timestamp; (,uint256 rps,) = akcCore.tribeSpecs(spec); uint256 interval = (block.timestamp - lastClaimedTimeStamp); uint256 reward = rps * interval / 86400; totalReward += reward; } return totalReward; } function getBonusFromTimestamp(address staker, uint256 spec, uint256 timestamp) external view returns (uint256) { uint256 stakeData = userToStakeData[staker][spec]; uint256 currentAmount = _getStakeAmountFromStakeData(stakeData); uint256 lastTimeStamp = timestamp; uint256 bonusPercentage = currentAmount >= stakeCap ? stakeAmountToBonus[stakeCap] : stakeAmountToBonus[currentAmount]; /// @dev Get reward for all tribes of spec from /// last stake timestamp to block.timestamp. Create time is taken into account /// also we make sure the last time stamp is always greater than or /// equal to the the last claim time. uint256 pendingReward; if (spec == 257) { pendingReward = (block.timestamp - lastTimeStamp) * (currentAmount * capsuleRate) / 86400; return pendingReward; } pendingReward = getNakedRewardBySpecFromCreate(staker, spec, lastTimeStamp); return pendingReward * bonusPercentage / 1000; } function getBonusFromTimestampDisregardCreate(address staker, uint256 spec, uint256 timestamp) external view returns (uint256) { uint256 stakeData = userToStakeData[staker][spec]; uint256 currentAmount = _getStakeAmountFromStakeData(stakeData); uint256 lastTimeStamp = timestamp; uint256 bonusPercentage = currentAmount >= stakeCap ? stakeAmountToBonus[stakeCap] : stakeAmountToBonus[currentAmount]; /// @dev Get reward for all tribes of spec from /// last stake timestamp to block.timestamp. Create time is taken into account /// also we make sure the last time stamp is always greater than or /// equal to the the last claim time. uint256 pendingReward; if (spec == 257) { pendingReward = (block.timestamp - lastTimeStamp) * (currentAmount * capsuleRate) / 86400; return pendingReward; } pendingReward = getNakedRewardBySpecDisregardCreate(staker, spec, lastTimeStamp); return pendingReward * bonusPercentage / 1000; } /** === View === */ function getBonus(address staker, uint256 spec) external view returns(uint256) { return _getBonus(staker, spec); } function getNakedRewardBySpec(address staker, uint256 targetSpec, uint256 timestamp) external view returns (uint256) { return _getNakedRewardBySpec(staker, targetSpec, timestamp); } function getStakedKongsOfUserBySpec(address staker, uint256 spec) external view returns (uint256[] memory) { uint256 stakeData = userToStakeData[staker][spec]; uint256 amountStaked = _getStakeAmountFromStakeData(stakeData); uint256[] memory kongs = new uint256[](amountStaked); uint256 counter; for (uint i = 1; i <= 8888; i++) { uint256 kongStakeData = kongToStaker[i]; address kongStaker = _getAddressFromKongStakeData(kongStakeData); uint256 kongSpec = _getSpecFromKongStakeData(kongStakeData); if (kongStaker == staker && kongSpec == spec) { kongs[counter] = i; counter++; } } return kongs; } /** === Owner === */ function setAkcTribeManager(address newManager) external onlyOwner { manager = newManager; } function setStakeAmountToBonus(uint256 stakeAmount, uint256 bonus) external onlyOwner { stakeAmountToBonus[stakeAmount] = bonus; } function setStakeCap(uint256 newCap) external onlyOwner { stakeCap = newCap; } function setCapsuleRate(uint256 newRate) external onlyOwner { capsuleRate = newRate; } function akcNFTApproveForAll(address approved, bool isApproved) external onlyOwner { akc.setApprovalForAll(approved, isApproved); } function withdrawEth(uint256 percentage, address _to) external onlyOwner { payable(_to).transfer((address(this).balance * percentage) / 100); } function withdrawERC20( uint256 percentage, address _erc20Address, address _to ) external onlyOwner { uint256 amountERC20 = IERC20(_erc20Address).balanceOf(address(this)); IERC20(_erc20Address).transfer(_to, (amountERC20 * percentage) / 100); } function withdrawStuckKong(uint256 kongId, address _to) external onlyOwner { require(akc.ownerOf(kongId) == address(this), "CORE DOES NOT OWN KONG"); akc.transferFrom(address(this), _to, kongId); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract IAKCCore { /** VARIABLES */ function userToTribes(address user, uint256 index) external view returns(uint256) {} function userToEarnings(address user) external returns(uint256) {} function tribeSpecs(uint256 index) external view returns(uint256, uint256, string memory) {} function affiliatePercentage() external returns(uint256) {} function affiliateKickback() external returns(uint256) {} function userToAKC(address user, uint256 spec) external view returns (uint256) {} function akcStakeBoost() external view returns (uint256) {} function getLastClaimedOfUser(address tribeOwner) external view returns(uint256) {} /** CREATING */ function createManyTribes(address[] calldata newOwners, uint256[] calldata specs) external {} /** CLAIMING */ function claimAllRewards(address tribeOwner) external returns(uint256) {} /** STAKING */ function stakeAKC(address staker, uint256 akcId, uint256 spec) external {} function unstakeAKC(address staker, uint256 akcId, uint256 spec) external {} /** AFFILIATE */ function registerAffiliate(address affiliate, uint256 earned) external {} /** GETTERS */ function getSpecFromTribe(uint256 tribe) public pure returns(uint256) {} function getAkcIdFromAKCData(uint256 akcData) public pure returns(uint256) {} function getLastClaimedTimeFromTribe(uint256 tribe) public pure returns(uint256) {} function getCreatedAtFromTribe(uint256 tribe) public pure returns(uint256) {} /** VIEWING */ function getTribeAmount(address tribeOwner) external view returns(uint256) {} function getTribeSpecAmount() external view returns(uint256) {} function getTotalTribesByspec(address tribeOwner, uint256 spec) public view returns(uint256) {} function getAllRewards(address tribeOwner) external view returns(uint256) {} function getDiscountFactor(address tribeOwner) external view returns(uint256) {} function getCapsuleRewards(address capsuleOwner, uint256 timestamp) public view returns(uint256) {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": true, "runs": 1000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_akcCore","type":"address"},{"internalType":"address","name":"_akc","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"spec","type":"uint256"},{"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"addToBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"akc","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"akcCore","outputs":[{"internalType":"contract IAKCCore","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"approved","type":"address"},{"internalType":"bool","name":"isApproved","type":"bool"}],"name":"akcNFTApproveForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"capsuleRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"kongStakeData","type":"uint256"}],"name":"getAddressFromKongStakeData","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"spec","type":"uint256"}],"name":"getBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"spec","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getBonusFromTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"spec","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getBonusFromTimestampDisregardCreate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"targetSpec","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getNakedRewardBySpec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"targetSpec","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getNakedRewardBySpecDisregardCreate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"targetSpec","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getNakedRewardBySpecFromCreate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"kongStakeData","type":"uint256"}],"name":"getSpecFromKongStakeData","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeData","type":"uint256"}],"name":"getStakeAmountFromStakeData","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeData","type":"uint256"}],"name":"getStakePendingBonusFromStakeData","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeData","type":"uint256"}],"name":"getStakeTimeStampFromStakeData","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"spec","type":"uint256"}],"name":"getStakedKongsOfUserBySpec","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"kongToStaker","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"spec","type":"uint256"}],"name":"liquidateBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxCapsules","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"setAkcTribeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"setCapsuleRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"setStakeAmountToBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCap","type":"uint256"}],"name":"setStakeCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"spec","type":"uint256"},{"internalType":"uint256","name":"kong","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeAmountToBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakeCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"spec","type":"uint256"},{"internalType":"uint256","name":"kong","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userToStakeData","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userToTotalBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"},{"internalType":"address","name":"_erc20Address","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"kongId","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckKong","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526006600755671bc16d674ec8000060085560146009553480156200002757600080fd5b50604051620028c3380380620028c38339810160408190526200004a91620001d6565b620000553362000169565b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905560066020819052604b7f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a315560647f8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace2955607d7f75f96ab15d697e93042dc45b5c896c4b27e89bb6eaf39475c5c371cb2513f7d25560967fc5069e24aaadb2addc3e52e868fcf3f4f8acf5a87e24300992fd4540c2a87eed5560af7fbfd358e93f18da3ed276c3afdbdba00b8f0b6008a03476a6a86bd6320ee6938b5560005260c87f697b2bd7bb2984c4e0dc14c79c987d37818484a62958b9c45a0e8b962f20650f556200020e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620001d157600080fd5b919050565b60008060408385031215620001ea57600080fd5b620001f583620001b9565b91506200020560208401620001b9565b90509250929050565b6126a5806200021e6000396000f3fe608060405234801561001057600080fd5b50600436106102755760003560e01c80638be55b3711610160578063d03bc438116100d8578063f16dec981161008c578063fa72105611610071578063fa72105614610529578063fa95a0f814610554578063fc3aa7011461056757600080fd5b8063f16dec9814610503578063f2fde38b1461051657600080fd5b8063e2741326116100bd578063e2741326146104d4578063e9bced0a146104e7578063ec1dfe71146104f057600080fd5b8063d03bc438146104a1578063d3c7857d146104c157600080fd5b8063a2bc66be1161012f578063ba28fd2e11610114578063ba28fd2e14610472578063bbc6c4d11461047b578063cf68f49b1461048e57600080fd5b8063a2bc66be1461044c578063ac2a33451461045f57600080fd5b80638be55b37146103f55780638da5cb5b146104085780639eb1e25a14610419578063a158657c1461043957600080fd5b80634b7dd741116101f35780635d29dab4116101c257806370805435116101a757806370805435146103c7578063715018a6146103da57806375aca83d146103e257600080fd5b80635d29dab4146103a157806360c45f3f146103b457600080fd5b80634b7dd74114610348578063521ecd7a1461035b578063539788501461036e5780635bc514d31461038e57600080fd5b8063148566a41161024a5780632ad0a5bb1161022f5780632ad0a5bb146102f75780633a3134ff1461030a578063481c6a751461031d57600080fd5b8063148566a4146102db5780631de6dd18146102ee57600080fd5b80620648df1461027a578062cc7e81146102a05780630c51b88f146102b55780630d33b07f146102c8575b600080fd5b61028d6102883660046122b8565b610592565b6040519081526020015b60405180910390f35b6102b36102ae3660046122e6565b6105aa565b005b6102b36102c3366004612316565b610756565b61028d6102d6366004612316565b610bb7565b61028d6102e9366004612316565b610c9e565b61028d60085481565b6102b361030536600461234b565b610cb3565b61028d6103183660046122b8565b610d1f565b600354610330906001600160a01b031681565b6040516001600160a01b039091168152602001610297565b61028d61035636600461236d565b610d31565b61028d6103693660046122b8565b610e76565b61028d61037c3660046122b8565b60066020526000908152604090205481565b61028d61039c366004612316565b610e82565b6102b36103af366004612399565b611139565b61028d6103c2366004612316565b6112cd565b6102b36103d53660046122b8565b61158c565b6102b36115eb565b6102b36103f03660046123e9565b611651565b6102b36104033660046122b8565b6116fe565b6000546001600160a01b0316610330565b61042c61042736600461236d565b61175d565b6040516102979190612417565b6102b36104473660046122e6565b61186d565b6102b361045a366004612316565b611917565b61033061046d3660046122b8565b611bc9565b61028d60075481565b61028d610489366004612316565b611bd1565b600254610330906001600160a01b031681565b61028d6104af3660046122b8565b60046020526000908152604090205481565b600154610330906001600160a01b031681565b6102b36104e2366004612316565b611c65565b61028d60095481565b61028d6104fe36600461236d565b611d18565b6102b361051136600461244f565b611d24565b6102b361052436600461244f565b611dad565b61028d61053736600461236d565b600a60209081526000928352604080842090915290825290205481565b61028d6105623660046122b8565b611e8f565b61028d61057536600461236d565b600560209081526000928352604080842090915290825290205481565b6000604082901c67ffffffffffffffff165b92915050565b6000546001600160a01b031633146106095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6002546040516331a9108f60e11b81526004810184905230916001600160a01b031690636352211e90602401602060405180830381865afa158015610652573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610676919061246c565b6001600160a01b0316146106cc5760405162461bcd60e51b815260206004820152601660248201527f434f524520444f4553204e4f54204f574e204b4f4e47000000000000000000006044820152606401610600565b6002546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015260448201859052909116906323b872dd906064015b600060405180830381600087803b15801561073a57600080fd5b505af115801561074e573d6000803e3d6000fd5b505050505050565b6003546001600160a01b031633148061077957506000546001600160a01b031633145b6107bd5760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b6044820152606401610600565b600160009054906101000a90046001600160a01b03166001600160a01b0316638ed254546040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190612489565b821080610842575081610101145b61088e5760405162461bcd60e51b815260206004820152600c60248201527f496e76616c6964207370656300000000000000000000000000000000000000006044820152606401610600565b600081815260046020526040902054156108ea5760405162461bcd60e51b815260206004820152601360248201527f4b6f6e6720616c7265616479207374616b6564000000000000000000000000006044820152606401610600565b6001546040517f17800d790000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526024820185905260009216906317800d7990604401602060405180830381865afa158015610955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109799190612489565b1180610986575081610101145b6109d25760405162461bcd60e51b815260206004820152601960248201527f5573657220686173206e6f206974656d7320696e2073706563000000000000006044820152606401610600565b6002546040516331a9108f60e11b81526004810183905230916001600160a01b031690636352211e90602401602060405180830381865afa158015610a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3f919061246c565b6001600160a01b031614610a955760405162461bcd60e51b815260206004820152601360248201527f4b6f6e67206e6f7420696e20637573746f6479000000000000000000000000006044820152606401610600565b60008181526004602090815260408083206001600160a01b03871660a087901b811790915583526005825280832085845290915290819020549067ffffffffffffffff9082901c16608082901c610101859003610b3d576009548210610b3d5760405162461bcd60e51b815260206004820152601360248201527f4d61782063617073756c6573207374616b6564000000000000000000000000006044820152606401610600565b60008315610b5457610b4f8787611e9b565b610b57565b60005b9050610b8642610b688560016124b8565b610b7284866124b8565b608081901b604083901b8417179392505050565b6001600160a01b03909716600090815260056020908152604080832098835297905295909520959095555050505050565b6001600160a01b038316600090815260056020908152604080832085845290915280822054600754909182901c67ffffffffffffffff169084908490831015610c0e57600083815260066020526040902054610c21565b6007546000908152600660205260409020545b905060008761010103610c6b576201518060085485610c4091906124d0565b610c4a85426124ef565b610c5491906124d0565b610c5e9190612506565b9550610c97945050505050565b610c76898985610e82565b90506103e8610c8583836124d0565b610c8f9190612506565b955050505050505b9392505050565b6000610cab848484611f83565b949350505050565b6000546001600160a01b03163314610d0d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b60009182526006602052604090912055565b600067ffffffffffffffff82166105a4565b6003546000906001600160a01b0316331480610d5757506000546001600160a01b031633145b610d9b5760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b6044820152606401610600565b6001600160a01b038316600090815260056020908152604080832085845290915281205490819003610dd15760009150506105a4565b604081901c67ffffffffffffffff16608082901c6000610df18787611e9b565b9050604083901b42176001600160a01b03881660009081526005602090815260408083208a8452909152902055610e2881836124b8565b6001600160a01b0388166000908152600a602090815260408083208a845290915281208054909190610e5b9084906124b8565b90915550610e6b905081836124b8565b979650505050505050565b60006105a48260a01c90565b60008060005b60015460405163e5f8d2ad60e01b81526001600160a01b0388811660048301529091169063e5f8d2ad90602401602060405180830381865afa158015610ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef69190612489565b811015611130576001546040516354514fcd60e11b81526001600160a01b03888116600483015260248201849052600092169063a8a29f9a90604401602060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f739190612489565b60015460405163fefd9cbd60e01b8152600481018390529192506000916001600160a01b039091169063fefd9cbd90602401602060405180830381865afa158015610fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe69190612489565b9050868114610ff657505061111e565b6001546040516398dfa2f760e01b8152600481018490526000916001600160a01b0316906398dfa2f790602401602060405180830381865afa158015611040573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110649190612489565b5050600154604051631ef234e360e11b81526004810183905287916000916001600160a01b0390911690633de469c690602401600060405180830381865afa1580156110b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110dc919081019061253e565b509150600090506110ed83426124ef565b90506000620151806110ff83856124d0565b6111099190612506565b905061111581896124b8565b97505050505050505b8061112881612623565b915050610e88565b50949350505050565b6000546001600160a01b031633146111935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156111f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112179190612489565b90506001600160a01b03831663a9059cbb83606461123588866124d0565b61123f9190612506565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156112a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c6919061263c565b5050505050565b60008060005b60015460405163e5f8d2ad60e01b81526001600160a01b0388811660048301529091169063e5f8d2ad90602401602060405180830381865afa15801561131d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113419190612489565b811015611130576001546040516354514fcd60e11b81526001600160a01b03888116600483015260248201849052600092169063a8a29f9a90604401602060405180830381865afa15801561139a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113be9190612489565b60015460405163fefd9cbd60e01b8152600481018390529192506000916001600160a01b039091169063fefd9cbd90602401602060405180830381865afa15801561140d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114319190612489565b905086811461144157505061157a565b6001546040516398dfa2f760e01b8152600481018490526000916001600160a01b0316906398dfa2f790602401602060405180830381865afa15801561148b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114af9190612489565b9050868110156114bf57866114c1565b805b600154604051631ef234e360e11b8152600481018590529192506000916001600160a01b0390911690633de469c690602401600060405180830381865afa158015611510573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611538919081019061253e565b5091506000905061154983426124ef565b905060006201518061155b83856124d0565b6115659190612506565b905061157181896124b8565b97505050505050505b8061158481612623565b9150506112d3565b6000546001600160a01b031633146115e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b600755565b6000546001600160a01b031633146116455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b61164f600061225b565b565b6000546001600160a01b031633146116ab5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b6002546040517fa22cb4650000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015283151560248301529091169063a22cb46590604401610720565b6000546001600160a01b031633146117585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b600855565b6001600160a01b038216600090815260056020908152604080832084845290915280822054606092909182901c67ffffffffffffffff16905060008167ffffffffffffffff8111156117b1576117b1612528565b6040519080825280602002602001820160405280156117da578160200160208202803683370190505b509050600060015b6122b88111611861576000818152600460205260409020548060a081901c6001600160a01b03808316908c1614801561181a57508981145b1561184b578386868151811061183257611832612659565b60209081029190910101528461184781612623565b9550505b505050808061185990612623565b9150506117e2565b50909695505050505050565b6000546001600160a01b031633146118c75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b6001600160a01b0381166108fc60646118e085476124d0565b6118ea9190612506565b6040518115909202916000818181858888f19350505050158015611912573d6000803e3d6000fd5b505050565b6003546001600160a01b031633148061193a57506000546001600160a01b031633145b61197e5760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b6044820152606401610600565b6000818152600460205260409020548060a081901c6001600160a01b03808316908716146119ee5760405162461bcd60e51b815260206004820152601860248201527f4b6f6e67206e6f74206f776e6564206279207374616b657200000000000000006044820152606401610600565b848114611a635760405162461bcd60e51b815260206004820152602360248201527f4b6f6e67206973206e6f74207374616b656420696e20737570706c696564207360448201527f70656300000000000000000000000000000000000000000000000000000000006064820152608401610600565b6002546040516331a9108f60e11b8152600481018690526001600160a01b03888116921690636352211e90602401602060405180830381865afa158015611aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad2919061246c565b6001600160a01b031614611b285760405162461bcd60e51b815260206004820152601d60248201527f4b6f6e67206e6f74207472616e73666572656420746f207374616b65720000006044820152606401610600565b60008481526004602090815260408083208390556001600160a01b03891683526005825280832088845290915280822054919082901c67ffffffffffffffff1690506000611b768360801c90565b90506000611b848a8a611e9b565b9050611b9542610b686001866124ef565b6001600160a01b03909a1660009081526005602090815260408083209b83529a905298909820989098555050505050505050565b6000816105a4565b6001600160a01b038316600090815260056020908152604080832085845290915280822054600754909182901c67ffffffffffffffff169084908490831015611c2857600083815260066020526040902054611c3b565b6007546000908152600660205260409020545b905060008761010103611c5a576201518060085485610c4091906124d0565b610c768989856112cd565b6003546001600160a01b0316331480611c8857506000546001600160a01b031633145b611ccc5760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b6044820152606401610600565b6001600160a01b038316600090815260056020908152604080832085845290915290819020549067ffffffffffffffff8083169183901c16608083901c610b868383610b7288856124b8565b6000610c978383611e9b565b6000546001600160a01b03163314611d7e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611e075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b6001600160a01b038116611e835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610600565b611e8c8161225b565b50565b60006105a48260801c90565b6001600160a01b038216600090815260056020908152604080832084845290915280822054600754909167ffffffffffffffff9083901c811691908316908490831015611ef657600083815260066020526040902054611f09565b6007546000908152600660205260409020545b905060008661010103611f53576201518060085485611f2891906124d0565b611f3285426124ef565b611f3c91906124d0565b611f469190612506565b95506105a4945050505050565b611f5e888885611f83565b90506103e8611f6d83836124d0565b611f779190612506565b98975050505050505050565b60008060005b60015460405163e5f8d2ad60e01b81526001600160a01b0388811660048301529091169063e5f8d2ad90602401602060405180830381865afa158015611fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff79190612489565b811015611130576001546040516354514fcd60e11b81526001600160a01b03888116600483015260248201849052600092169063a8a29f9a90604401602060405180830381865afa158015612050573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120749190612489565b60015460405163fefd9cbd60e01b8152600481018390529192506000916001600160a01b039091169063fefd9cbd90602401602060405180830381865afa1580156120c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e79190612489565b90508681146120f7575050612249565b6001546040517f95bbf65e000000000000000000000000000000000000000000000000000000008152600481018490526000916001600160a01b0316906395bbf65e90602401602060405180830381865afa15801561215a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217e9190612489565b90508681101561218e5786612190565b805b600154604051631ef234e360e11b8152600481018590529192506000916001600160a01b0390911690633de469c690602401600060405180830381865afa1580156121df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612207919081019061253e565b5091506000905061221883426124ef565b905060006201518061222a83856124d0565b6122349190612506565b905061224081896124b8565b97505050505050505b8061225381612623565b915050611f89565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156122ca57600080fd5b5035919050565b6001600160a01b0381168114611e8c57600080fd5b600080604083850312156122f957600080fd5b82359150602083013561230b816122d1565b809150509250929050565b60008060006060848603121561232b57600080fd5b8335612336816122d1565b95602085013595506040909401359392505050565b6000806040838503121561235e57600080fd5b50508035926020909101359150565b6000806040838503121561238057600080fd5b823561238b816122d1565b946020939093013593505050565b6000806000606084860312156123ae57600080fd5b8335925060208401356123c0816122d1565b915060408401356123d0816122d1565b809150509250925092565b8015158114611e8c57600080fd5b600080604083850312156123fc57600080fd5b8235612407816122d1565b9150602083013561230b816123db565b6020808252825182820181905260009190848201906040850190845b8181101561186157835183529284019291840191600101612433565b60006020828403121561246157600080fd5b8135610c97816122d1565b60006020828403121561247e57600080fd5b8151610c97816122d1565b60006020828403121561249b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156124cb576124cb6124a2565b500190565b60008160001904831182151516156124ea576124ea6124a2565b500290565b600082821015612501576125016124a2565b500390565b60008261252357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561255357600080fd5b835192506020808501519250604085015167ffffffffffffffff8082111561257a57600080fd5b818701915087601f83011261258e57600080fd5b8151818111156125a0576125a0612528565b604051601f8201601f19908116603f011681019083821181831017156125c8576125c8612528565b816040528281528a868487010111156125e057600080fd5b600093505b8284101561260257848401860151818501870152928501926125e5565b828411156126135760008684830101525b8096505050505050509250925092565b600060018201612635576126356124a2565b5060010190565b60006020828403121561264e57600080fd5b8151610c97816123db565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220ed21bd9e2f5d17427bb7b3ca85dca3d1396c204c1cc10dc03df7908a3af8b29a64736f6c634300080d0033000000000000000000000000233843ffd05b8277b5c46cf567bf5cdef27444c1000000000000000000000000dbcab7a768ea9a00b2ffa5a2eb387cad609e2114
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102755760003560e01c80638be55b3711610160578063d03bc438116100d8578063f16dec981161008c578063fa72105611610071578063fa72105614610529578063fa95a0f814610554578063fc3aa7011461056757600080fd5b8063f16dec9814610503578063f2fde38b1461051657600080fd5b8063e2741326116100bd578063e2741326146104d4578063e9bced0a146104e7578063ec1dfe71146104f057600080fd5b8063d03bc438146104a1578063d3c7857d146104c157600080fd5b8063a2bc66be1161012f578063ba28fd2e11610114578063ba28fd2e14610472578063bbc6c4d11461047b578063cf68f49b1461048e57600080fd5b8063a2bc66be1461044c578063ac2a33451461045f57600080fd5b80638be55b37146103f55780638da5cb5b146104085780639eb1e25a14610419578063a158657c1461043957600080fd5b80634b7dd741116101f35780635d29dab4116101c257806370805435116101a757806370805435146103c7578063715018a6146103da57806375aca83d146103e257600080fd5b80635d29dab4146103a157806360c45f3f146103b457600080fd5b80634b7dd74114610348578063521ecd7a1461035b578063539788501461036e5780635bc514d31461038e57600080fd5b8063148566a41161024a5780632ad0a5bb1161022f5780632ad0a5bb146102f75780633a3134ff1461030a578063481c6a751461031d57600080fd5b8063148566a4146102db5780631de6dd18146102ee57600080fd5b80620648df1461027a578062cc7e81146102a05780630c51b88f146102b55780630d33b07f146102c8575b600080fd5b61028d6102883660046122b8565b610592565b6040519081526020015b60405180910390f35b6102b36102ae3660046122e6565b6105aa565b005b6102b36102c3366004612316565b610756565b61028d6102d6366004612316565b610bb7565b61028d6102e9366004612316565b610c9e565b61028d60085481565b6102b361030536600461234b565b610cb3565b61028d6103183660046122b8565b610d1f565b600354610330906001600160a01b031681565b6040516001600160a01b039091168152602001610297565b61028d61035636600461236d565b610d31565b61028d6103693660046122b8565b610e76565b61028d61037c3660046122b8565b60066020526000908152604090205481565b61028d61039c366004612316565b610e82565b6102b36103af366004612399565b611139565b61028d6103c2366004612316565b6112cd565b6102b36103d53660046122b8565b61158c565b6102b36115eb565b6102b36103f03660046123e9565b611651565b6102b36104033660046122b8565b6116fe565b6000546001600160a01b0316610330565b61042c61042736600461236d565b61175d565b6040516102979190612417565b6102b36104473660046122e6565b61186d565b6102b361045a366004612316565b611917565b61033061046d3660046122b8565b611bc9565b61028d60075481565b61028d610489366004612316565b611bd1565b600254610330906001600160a01b031681565b61028d6104af3660046122b8565b60046020526000908152604090205481565b600154610330906001600160a01b031681565b6102b36104e2366004612316565b611c65565b61028d60095481565b61028d6104fe36600461236d565b611d18565b6102b361051136600461244f565b611d24565b6102b361052436600461244f565b611dad565b61028d61053736600461236d565b600a60209081526000928352604080842090915290825290205481565b61028d6105623660046122b8565b611e8f565b61028d61057536600461236d565b600560209081526000928352604080842090915290825290205481565b6000604082901c67ffffffffffffffff165b92915050565b6000546001600160a01b031633146106095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6002546040516331a9108f60e11b81526004810184905230916001600160a01b031690636352211e90602401602060405180830381865afa158015610652573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610676919061246c565b6001600160a01b0316146106cc5760405162461bcd60e51b815260206004820152601660248201527f434f524520444f4553204e4f54204f574e204b4f4e47000000000000000000006044820152606401610600565b6002546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015260448201859052909116906323b872dd906064015b600060405180830381600087803b15801561073a57600080fd5b505af115801561074e573d6000803e3d6000fd5b505050505050565b6003546001600160a01b031633148061077957506000546001600160a01b031633145b6107bd5760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b6044820152606401610600565b600160009054906101000a90046001600160a01b03166001600160a01b0316638ed254546040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190612489565b821080610842575081610101145b61088e5760405162461bcd60e51b815260206004820152600c60248201527f496e76616c6964207370656300000000000000000000000000000000000000006044820152606401610600565b600081815260046020526040902054156108ea5760405162461bcd60e51b815260206004820152601360248201527f4b6f6e6720616c7265616479207374616b6564000000000000000000000000006044820152606401610600565b6001546040517f17800d790000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526024820185905260009216906317800d7990604401602060405180830381865afa158015610955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109799190612489565b1180610986575081610101145b6109d25760405162461bcd60e51b815260206004820152601960248201527f5573657220686173206e6f206974656d7320696e2073706563000000000000006044820152606401610600565b6002546040516331a9108f60e11b81526004810183905230916001600160a01b031690636352211e90602401602060405180830381865afa158015610a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3f919061246c565b6001600160a01b031614610a955760405162461bcd60e51b815260206004820152601360248201527f4b6f6e67206e6f7420696e20637573746f6479000000000000000000000000006044820152606401610600565b60008181526004602090815260408083206001600160a01b03871660a087901b811790915583526005825280832085845290915290819020549067ffffffffffffffff9082901c16608082901c610101859003610b3d576009548210610b3d5760405162461bcd60e51b815260206004820152601360248201527f4d61782063617073756c6573207374616b6564000000000000000000000000006044820152606401610600565b60008315610b5457610b4f8787611e9b565b610b57565b60005b9050610b8642610b688560016124b8565b610b7284866124b8565b608081901b604083901b8417179392505050565b6001600160a01b03909716600090815260056020908152604080832098835297905295909520959095555050505050565b6001600160a01b038316600090815260056020908152604080832085845290915280822054600754909182901c67ffffffffffffffff169084908490831015610c0e57600083815260066020526040902054610c21565b6007546000908152600660205260409020545b905060008761010103610c6b576201518060085485610c4091906124d0565b610c4a85426124ef565b610c5491906124d0565b610c5e9190612506565b9550610c97945050505050565b610c76898985610e82565b90506103e8610c8583836124d0565b610c8f9190612506565b955050505050505b9392505050565b6000610cab848484611f83565b949350505050565b6000546001600160a01b03163314610d0d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b60009182526006602052604090912055565b600067ffffffffffffffff82166105a4565b6003546000906001600160a01b0316331480610d5757506000546001600160a01b031633145b610d9b5760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b6044820152606401610600565b6001600160a01b038316600090815260056020908152604080832085845290915281205490819003610dd15760009150506105a4565b604081901c67ffffffffffffffff16608082901c6000610df18787611e9b565b9050604083901b42176001600160a01b03881660009081526005602090815260408083208a8452909152902055610e2881836124b8565b6001600160a01b0388166000908152600a602090815260408083208a845290915281208054909190610e5b9084906124b8565b90915550610e6b905081836124b8565b979650505050505050565b60006105a48260a01c90565b60008060005b60015460405163e5f8d2ad60e01b81526001600160a01b0388811660048301529091169063e5f8d2ad90602401602060405180830381865afa158015610ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef69190612489565b811015611130576001546040516354514fcd60e11b81526001600160a01b03888116600483015260248201849052600092169063a8a29f9a90604401602060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f739190612489565b60015460405163fefd9cbd60e01b8152600481018390529192506000916001600160a01b039091169063fefd9cbd90602401602060405180830381865afa158015610fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe69190612489565b9050868114610ff657505061111e565b6001546040516398dfa2f760e01b8152600481018490526000916001600160a01b0316906398dfa2f790602401602060405180830381865afa158015611040573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110649190612489565b5050600154604051631ef234e360e11b81526004810183905287916000916001600160a01b0390911690633de469c690602401600060405180830381865afa1580156110b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110dc919081019061253e565b509150600090506110ed83426124ef565b90506000620151806110ff83856124d0565b6111099190612506565b905061111581896124b8565b97505050505050505b8061112881612623565b915050610e88565b50949350505050565b6000546001600160a01b031633146111935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156111f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112179190612489565b90506001600160a01b03831663a9059cbb83606461123588866124d0565b61123f9190612506565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156112a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c6919061263c565b5050505050565b60008060005b60015460405163e5f8d2ad60e01b81526001600160a01b0388811660048301529091169063e5f8d2ad90602401602060405180830381865afa15801561131d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113419190612489565b811015611130576001546040516354514fcd60e11b81526001600160a01b03888116600483015260248201849052600092169063a8a29f9a90604401602060405180830381865afa15801561139a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113be9190612489565b60015460405163fefd9cbd60e01b8152600481018390529192506000916001600160a01b039091169063fefd9cbd90602401602060405180830381865afa15801561140d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114319190612489565b905086811461144157505061157a565b6001546040516398dfa2f760e01b8152600481018490526000916001600160a01b0316906398dfa2f790602401602060405180830381865afa15801561148b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114af9190612489565b9050868110156114bf57866114c1565b805b600154604051631ef234e360e11b8152600481018590529192506000916001600160a01b0390911690633de469c690602401600060405180830381865afa158015611510573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611538919081019061253e565b5091506000905061154983426124ef565b905060006201518061155b83856124d0565b6115659190612506565b905061157181896124b8565b97505050505050505b8061158481612623565b9150506112d3565b6000546001600160a01b031633146115e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b600755565b6000546001600160a01b031633146116455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b61164f600061225b565b565b6000546001600160a01b031633146116ab5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b6002546040517fa22cb4650000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015283151560248301529091169063a22cb46590604401610720565b6000546001600160a01b031633146117585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b600855565b6001600160a01b038216600090815260056020908152604080832084845290915280822054606092909182901c67ffffffffffffffff16905060008167ffffffffffffffff8111156117b1576117b1612528565b6040519080825280602002602001820160405280156117da578160200160208202803683370190505b509050600060015b6122b88111611861576000818152600460205260409020548060a081901c6001600160a01b03808316908c1614801561181a57508981145b1561184b578386868151811061183257611832612659565b60209081029190910101528461184781612623565b9550505b505050808061185990612623565b9150506117e2565b50909695505050505050565b6000546001600160a01b031633146118c75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b6001600160a01b0381166108fc60646118e085476124d0565b6118ea9190612506565b6040518115909202916000818181858888f19350505050158015611912573d6000803e3d6000fd5b505050565b6003546001600160a01b031633148061193a57506000546001600160a01b031633145b61197e5760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b6044820152606401610600565b6000818152600460205260409020548060a081901c6001600160a01b03808316908716146119ee5760405162461bcd60e51b815260206004820152601860248201527f4b6f6e67206e6f74206f776e6564206279207374616b657200000000000000006044820152606401610600565b848114611a635760405162461bcd60e51b815260206004820152602360248201527f4b6f6e67206973206e6f74207374616b656420696e20737570706c696564207360448201527f70656300000000000000000000000000000000000000000000000000000000006064820152608401610600565b6002546040516331a9108f60e11b8152600481018690526001600160a01b03888116921690636352211e90602401602060405180830381865afa158015611aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad2919061246c565b6001600160a01b031614611b285760405162461bcd60e51b815260206004820152601d60248201527f4b6f6e67206e6f74207472616e73666572656420746f207374616b65720000006044820152606401610600565b60008481526004602090815260408083208390556001600160a01b03891683526005825280832088845290915280822054919082901c67ffffffffffffffff1690506000611b768360801c90565b90506000611b848a8a611e9b565b9050611b9542610b686001866124ef565b6001600160a01b03909a1660009081526005602090815260408083209b83529a905298909820989098555050505050505050565b6000816105a4565b6001600160a01b038316600090815260056020908152604080832085845290915280822054600754909182901c67ffffffffffffffff169084908490831015611c2857600083815260066020526040902054611c3b565b6007546000908152600660205260409020545b905060008761010103611c5a576201518060085485610c4091906124d0565b610c768989856112cd565b6003546001600160a01b0316331480611c8857506000546001600160a01b031633145b611ccc5760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b6044820152606401610600565b6001600160a01b038316600090815260056020908152604080832085845290915290819020549067ffffffffffffffff8083169183901c16608083901c610b868383610b7288856124b8565b6000610c978383611e9b565b6000546001600160a01b03163314611d7e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611e075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610600565b6001600160a01b038116611e835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610600565b611e8c8161225b565b50565b60006105a48260801c90565b6001600160a01b038216600090815260056020908152604080832084845290915280822054600754909167ffffffffffffffff9083901c811691908316908490831015611ef657600083815260066020526040902054611f09565b6007546000908152600660205260409020545b905060008661010103611f53576201518060085485611f2891906124d0565b611f3285426124ef565b611f3c91906124d0565b611f469190612506565b95506105a4945050505050565b611f5e888885611f83565b90506103e8611f6d83836124d0565b611f779190612506565b98975050505050505050565b60008060005b60015460405163e5f8d2ad60e01b81526001600160a01b0388811660048301529091169063e5f8d2ad90602401602060405180830381865afa158015611fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff79190612489565b811015611130576001546040516354514fcd60e11b81526001600160a01b03888116600483015260248201849052600092169063a8a29f9a90604401602060405180830381865afa158015612050573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120749190612489565b60015460405163fefd9cbd60e01b8152600481018390529192506000916001600160a01b039091169063fefd9cbd90602401602060405180830381865afa1580156120c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e79190612489565b90508681146120f7575050612249565b6001546040517f95bbf65e000000000000000000000000000000000000000000000000000000008152600481018490526000916001600160a01b0316906395bbf65e90602401602060405180830381865afa15801561215a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217e9190612489565b90508681101561218e5786612190565b805b600154604051631ef234e360e11b8152600481018590529192506000916001600160a01b0390911690633de469c690602401600060405180830381865afa1580156121df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612207919081019061253e565b5091506000905061221883426124ef565b905060006201518061222a83856124d0565b6122349190612506565b905061224081896124b8565b97505050505050505b8061225381612623565b915050611f89565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156122ca57600080fd5b5035919050565b6001600160a01b0381168114611e8c57600080fd5b600080604083850312156122f957600080fd5b82359150602083013561230b816122d1565b809150509250929050565b60008060006060848603121561232b57600080fd5b8335612336816122d1565b95602085013595506040909401359392505050565b6000806040838503121561235e57600080fd5b50508035926020909101359150565b6000806040838503121561238057600080fd5b823561238b816122d1565b946020939093013593505050565b6000806000606084860312156123ae57600080fd5b8335925060208401356123c0816122d1565b915060408401356123d0816122d1565b809150509250925092565b8015158114611e8c57600080fd5b600080604083850312156123fc57600080fd5b8235612407816122d1565b9150602083013561230b816123db565b6020808252825182820181905260009190848201906040850190845b8181101561186157835183529284019291840191600101612433565b60006020828403121561246157600080fd5b8135610c97816122d1565b60006020828403121561247e57600080fd5b8151610c97816122d1565b60006020828403121561249b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156124cb576124cb6124a2565b500190565b60008160001904831182151516156124ea576124ea6124a2565b500290565b600082821015612501576125016124a2565b500390565b60008261252357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561255357600080fd5b835192506020808501519250604085015167ffffffffffffffff8082111561257a57600080fd5b818701915087601f83011261258e57600080fd5b8151818111156125a0576125a0612528565b604051601f8201601f19908116603f011681019083821181831017156125c8576125c8612528565b816040528281528a868487010111156125e057600080fd5b600093505b8284101561260257848401860151818501870152928501926125e5565b828411156126135760008684830101525b8096505050505050509250925092565b600060018201612635576126356124a2565b5060010190565b60006020828403121561264e57600080fd5b8151610c97816123db565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220ed21bd9e2f5d17427bb7b3ca85dca3d1396c204c1cc10dc03df7908a3af8b29a64736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000233843ffd05b8277b5c46cf567bf5cdef27444c1000000000000000000000000dbcab7a768ea9a00b2ffa5a2eb387cad609e2114
-----Decoded View---------------
Arg [0] : _akcCore (address): 0x233843ffD05b8277b5c46Cf567Bf5cdef27444C1
Arg [1] : _akc (address): 0xDBCab7A768EA9a00B2fFA5A2eB387cAD609E2114
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000233843ffd05b8277b5c46cf567bf5cdef27444c1
Arg [1] : 000000000000000000000000dbcab7a768ea9a00b2ffa5a2eb387cad609e2114
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.