Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 12750486 | 1679 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CVNXGovernance
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.4;
import "@openzeppelin/contracts/access/Ownable.sol";
import "./CVNX.sol";
import "./ICVNXGovernance.sol";
/// @notice Governance contract for CVNX token.
contract CVNXGovernance is ICVNXGovernance, Ownable {
CVNX private cvnx;
/// @notice Emit when new poll created.
event PollCreated(uint256 indexed pollNum);
/// @notice Emit when address vote in poll.
event PollVoted(address voterAddress, VoteType indexed voteType, uint256 indexed voteWeight);
/// @notice Emit when poll stopped.
event PollStop(uint256 indexed pollNum, uint256 indexed stopTimestamp);
/// @notice Contain all polls. Index - poll number.
Poll[] public polls;
/// @notice Contain Vote for addresses that vote in poll.
mapping(uint256 => mapping(address => Vote)) public voted;
/// @notice Shows whether tokens are locked for a certain pool at a certain address.
mapping(uint256 => mapping(address => bool)) public isTokenLockedInPoll;
/// @notice List of verified addresses for PRIVATE poll.
mapping(uint256 => mapping(address => bool)) public verifiedToVote;
/// @param _cvnxTokenAddress CVNX token address.
constructor(address _cvnxTokenAddress) {
cvnx = CVNX(_cvnxTokenAddress);
}
/// @notice Modifier check minimal CVNX token balance before method call.
/// @param _minimalBalance Minimal balance on address (Wei)
modifier onlyWithBalanceNoLess(uint256 _minimalBalance) {
require(cvnx.balanceOf(msg.sender) > _minimalBalance, "[E-34] - Your balance is too low.");
_;
}
/// @notice Create PROPOSAL poll.
/// @param _pollDeadline Poll deadline
/// @param _pollInfo Info about poll
function createProposalPoll(uint64 _pollDeadline, string memory _pollInfo) external override {
_createPoll(PollType.PROPOSAL, _pollDeadline, _pollInfo);
}
/// @notice Create EXECUTIVE poll.
/// @param _pollDeadline Poll deadline
/// @param _pollInfo Info about poll
function createExecutivePoll(uint64 _pollDeadline, string memory _pollInfo) external override onlyOwner {
_createPoll(PollType.EXECUTIVE, _pollDeadline, _pollInfo);
}
/// @notice Create EVENT poll.
/// @param _pollDeadline Poll deadline
/// @param _pollInfo Info about poll
function createEventPoll(uint64 _pollDeadline, string memory _pollInfo) external override onlyOwner {
_createPoll(PollType.EVENT, _pollDeadline, _pollInfo);
}
/// @notice Create PRIVATE poll.
/// @param _pollDeadline Poll deadline
/// @param _pollInfo Info about poll
/// @param _verifiedAddresses Array of verified addresses for poll
function createPrivatePoll(
uint64 _pollDeadline,
string memory _pollInfo,
address[] memory _verifiedAddresses
) external override onlyOwner {
uint256 _verifiedAddressesCount = _verifiedAddresses.length;
require(_verifiedAddressesCount > 1, "[E-35] - Verified addresses not set.");
uint256 _pollNum = _createPoll(PollType.PRIVATE, _pollDeadline, _pollInfo);
for (uint256 i = 0; i < _verifiedAddressesCount; i++) {
verifiedToVote[_pollNum][_verifiedAddresses[i]] = true;
}
}
/// @notice Send tokens as vote in poll. Tokens will be lock.
/// @param _pollNum Poll number
/// @param _voteType Vote type (FOR, AGAINST)
/// @param _voteWeight Vote weight in CVNX tokens
function vote(
uint256 _pollNum,
VoteType _voteType,
uint256 _voteWeight
) external override onlyWithBalanceNoLess(1000000) {
require(polls[_pollNum].pollStopped > block.timestamp, "[E-37] - Poll ended.");
if (polls[_pollNum].pollType == PollType.PRIVATE) {
require(verifiedToVote[_pollNum][msg.sender] == true, "[E-38] - You are not verify to vote in this poll.");
}
// Lock tokens
cvnx.lock(msg.sender, _voteWeight);
isTokenLockedInPoll[_pollNum][msg.sender] = true;
uint256 _voterVoteWeightBefore = voted[_pollNum][msg.sender].voteWeight;
// Set vote type
if (_voterVoteWeightBefore > 0) {
require(
voted[_pollNum][msg.sender].voteType == _voteType,
"[E-39] - The voice type does not match the first one."
);
} else {
voted[_pollNum][msg.sender].voteType = _voteType;
}
// Increase vote weight for voter
voted[_pollNum][msg.sender].voteWeight = _voterVoteWeightBefore + _voteWeight;
// Increase vote weight in poll
if (_voteType == VoteType.FOR) {
polls[_pollNum].forWeight += _voteWeight;
} else {
polls[_pollNum].againstWeight += _voteWeight;
}
emit PollVoted(msg.sender, _voteType, _voteWeight);
}
/// @notice Unlock tokens for poll. Poll should be ended.
/// @param _pollNum Poll number
function unlockTokensInPoll(uint256 _pollNum) external override {
require(polls[_pollNum].pollStopped <= block.timestamp, "[E-81] - Poll is not ended.");
require(isTokenLockedInPoll[_pollNum][msg.sender] == true, "[E-82] - Tokens not locked for this poll.");
isTokenLockedInPoll[_pollNum][msg.sender] = false;
// Unlock tokens
cvnx.unlock(msg.sender, voted[_pollNum][msg.sender].voteWeight);
}
/// @notice Stop poll before deadline.
/// @param _pollNum Poll number
function stopPoll(uint256 _pollNum) external override {
require(
owner() == msg.sender || polls[_pollNum].pollOwner == msg.sender,
"[E-91] - Not a contract or poll owner."
);
require(block.timestamp < polls[_pollNum].pollDeadline, "[E-92] - Poll ended.");
polls[_pollNum].pollStopped = uint64(block.timestamp);
emit PollStop(_pollNum, block.timestamp);
}
/// @notice Return poll status (PENDING, APPROVED, REJECTED, DRAW).
/// @param _pollNum Poll number
/// @return Poll number and status
function getPollStatus(uint256 _pollNum) external view override returns (uint256, PollStatus) {
if (polls[_pollNum].pollStopped > block.timestamp) {
return (_pollNum, PollStatus.PENDING);
}
uint256 _forWeight = polls[_pollNum].forWeight;
uint256 _againstWeight = polls[_pollNum].againstWeight;
if (_forWeight > _againstWeight) {
return (_pollNum, PollStatus.APPROVED);
} else if (_forWeight < _againstWeight) {
return (_pollNum, PollStatus.REJECTED);
} else {
return (_pollNum, PollStatus.DRAW);
}
}
/// @notice Return the poll expiration timestamp.
/// @param _pollNum Poll number
/// @return Poll deadline
function getPollExpirationTime(uint256 _pollNum) external view override returns (uint64) {
return polls[_pollNum].pollDeadline;
}
/// @notice Return the poll stop timestamp.
/// @param _pollNum Poll number
/// @return Poll stop time
function getPollStopTime(uint256 _pollNum) external view override returns (uint64) {
return polls[_pollNum].pollStopped;
}
/// @notice Return the complete list of polls an address has voted in.
/// @param _voter Voter address
/// @return Index - poll number. True - if address voted in poll
function getPollHistory(address _voter) external view override returns (bool[] memory) {
uint256 _pollsCount = polls.length;
bool[] memory _pollNums = new bool[](_pollsCount);
for (uint256 i = 0; i < _pollsCount; i++) {
if (voted[i][_voter].voteWeight > 0) {
_pollNums[i] = true;
}
}
return _pollNums;
}
/// @notice Return the vote info for a given poll for an address.
/// @param _pollNum Poll number
/// @param _voter Voter address
/// @return Info about voter vote
function getPollInfoForVoter(uint256 _pollNum, address _voter) external view override returns (Vote memory) {
return voted[_pollNum][_voter];
}
/// @notice Checks if a user address has voted for a specific poll.
/// @param _pollNum Poll number
/// @param _voter Voter address
/// @return True if address voted in poll
function getIfUserHasVoted(uint256 _pollNum, address _voter) external view override returns (bool) {
return voted[_pollNum][_voter].voteWeight > 0;
}
/// @notice Return the amount of tokens that are locked for a given voter address.
/// @param _voter Voter address
/// @return Poll number
function getLockedAmount(address _voter) external view override returns (uint256) {
return cvnx.lockedAmount(_voter);
}
/// @notice Return the amount of locked tokens of the specific poll.
/// @param _pollNum Poll number
/// @param _voter Voter address
/// @return Locked tokens amount for specific poll
function getPollLockedAmount(uint256 _pollNum, address _voter) external view override returns (uint256) {
if (isTokenLockedInPoll[_pollNum][_voter]) {
return voted[_pollNum][_voter].voteWeight;
} else {
return 0;
}
}
/// @notice Create poll process.
/// @param _pollType Poll type
/// @param _pollDeadline Poll deadline adn stop timestamp
/// @param _pollInfo Poll info
/// @return Poll number
function _createPoll(
PollType _pollType,
uint64 _pollDeadline,
string memory _pollInfo
) private onlyWithBalanceNoLess(0) returns (uint256) {
require(_pollDeadline > block.timestamp, "[E-41] - The deadline must be longer than the current time.");
Poll memory _poll = Poll(_pollDeadline, _pollDeadline, _pollType, msg.sender, _pollInfo, 0, 0);
uint256 _pollNum = polls.length;
polls.push(_poll);
emit PollCreated(_pollNum);
return _pollNum;
}
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.4;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./CVNXGovernance.sol";
import "./ICVNX.sol";
/// @notice CVNX token contract.
contract CVNX is ICVNX, ERC20("CVNX", "CVNX"), Ownable {
event TokenLocked(uint256 indexed amount, address tokenOwner);
event TokenUnlocked(uint256 indexed amount, address tokenOwner);
/// @notice Governance contract.
CVNXGovernance public cvnxGovernanceContract;
IERC20 public cvnContract;
/// @notice Locked token amount for each address.
mapping(address => uint256) public lockedAmount;
/// @notice Governance contract created in constructor.
constructor(address _cvnContract) {
uint256 _toMint = 6000000000000;
_mint(msg.sender, _toMint);
approve(address(this), _toMint);
cvnContract = IERC20(_cvnContract);
cvnxGovernanceContract = new CVNXGovernance(address(this));
cvnxGovernanceContract.transferOwnership(msg.sender);
}
/// @notice Modifier describe that call available only from governance contract.
modifier onlyGovContract() {
require(msg.sender == address(cvnxGovernanceContract), "[E-31] - Not a governance contract.");
_;
}
/// @notice Tokens decimal.
function decimals() public pure override returns (uint8) {
return 5;
}
/// @notice Lock tokens on holder balance.
/// @param _tokenOwner Token holder
/// @param _tokenAmount Amount to lock
function lock(address _tokenOwner, uint256 _tokenAmount) external override onlyGovContract {
require(_tokenAmount > 0, "[E-41] - The amount to be locked must be greater than zero.");
uint256 _balance = balanceOf(_tokenOwner);
uint256 _toLock = lockedAmount[_tokenOwner] + _tokenAmount;
require(_toLock <= _balance, "[E-42] - Not enough token on account.");
lockedAmount[_tokenOwner] = _toLock;
emit TokenLocked(_tokenAmount, _tokenOwner);
}
/// @notice Unlock tokens on holder balance.
/// @param _tokenOwner Token holder
/// @param _tokenAmount Amount to lock
function unlock(address _tokenOwner, uint256 _tokenAmount) external override onlyGovContract {
uint256 _lockedAmount = lockedAmount[_tokenOwner];
if (_tokenAmount > _lockedAmount) {
_tokenAmount = _lockedAmount;
}
lockedAmount[_tokenOwner] = _lockedAmount - _tokenAmount;
emit TokenUnlocked(_tokenAmount, _tokenOwner);
}
/// @notice Swap CVN to CVNX tokens
/// @param _amount Token amount to swap
function swap(uint256 _amount) external override returns (bool) {
cvnContract.transferFrom(msg.sender, 0x4e07dc9D1aBCf1335d1EaF4B2e28b45d5892758E, _amount);
this.transferFrom(owner(), msg.sender, _amount);
return true;
}
/// @notice Transfer stuck tokens
/// @param _token Token contract address
/// @param _to Receiver address
/// @param _amount Token amount
function transferStuckERC20(
IERC20 _token,
address _to,
uint256 _amount
) external override onlyOwner {
require(_token.transfer(_to, _amount), "[E-56] - Transfer failed.");
}
/// @notice Check that locked amount less then transfer amount
function _beforeTokenTransfer(
address _from,
address _to,
uint256 _amount
) internal view override {
if (_from != address(0)) {
require(
balanceOf(_from) - lockedAmount[_from] >= _amount,
"[E-61] - Transfer amount exceeds available tokens."
);
}
}
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.4;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
/// @notice ICVNX interface for CVNX contract.
interface ICVNX is IERC20 {
/// @notice Lock tokens on holder balance.
/// @param _tokenOwner Token holder
/// @param _tokenAmount Amount to lock
function lock(address _tokenOwner, uint256 _tokenAmount) external;
/// @notice Unlock tokens on holder balance.
/// @param _tokenOwner Token holder
/// @param _tokenAmount Amount to lock
function unlock(address _tokenOwner, uint256 _tokenAmount) external;
/// @notice Swap CVN to CVNX tokens
/// @param _amount Token amount to swap
function swap(uint256 _amount) external returns (bool);
/// @notice Transfer stuck tokens
/// @param _token Token contract address
/// @param _to Receiver address
/// @param _amount Token amount
function transferStuckERC20(
IERC20 _token,
address _to,
uint256 _amount
) external;
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.4;
/// @notice ICVNXGovernance interface for CVNXGovernance contract.
interface ICVNXGovernance {
enum PollType {PROPOSAL, EXECUTIVE, EVENT, PRIVATE}
enum PollStatus {PENDING, APPROVED, REJECTED, DRAW}
enum VoteType {FOR, AGAINST}
/// @notice Poll structure.
struct Poll {
uint64 pollDeadline;
uint64 pollStopped;
PollType pollType;
address pollOwner;
string pollInfo;
uint256 forWeight;
uint256 againstWeight;
}
/// @notice Address vote structure.
struct Vote {
VoteType voteType;
uint256 voteWeight;
}
/// @notice Create PROPOSAL poll.
/// @param _pollDeadline Poll deadline
/// @param _pollInfo Info about poll
function createProposalPoll(uint64 _pollDeadline, string memory _pollInfo) external;
/// @notice Create EXECUTIVE poll.
/// @param _pollDeadline Poll deadline
/// @param _pollInfo Info about poll
function createExecutivePoll(uint64 _pollDeadline, string memory _pollInfo) external;
/// @notice Create EVENT poll.
/// @param _pollDeadline Poll deadline
/// @param _pollInfo Info about poll
function createEventPoll(uint64 _pollDeadline, string memory _pollInfo) external;
/// @notice Create PRIVATE poll.
/// @param _pollDeadline Poll deadline
/// @param _pollInfo Info about poll
/// @param _verifiedAddresses Array of verified addresses for poll
function createPrivatePoll(
uint64 _pollDeadline,
string memory _pollInfo,
address[] memory _verifiedAddresses
) external;
/// @notice Send tokens as vote in poll. Tokens will be lock.
/// @param _pollNum Poll number
/// @param _voteType Vote type (FOR, AGAINST)
/// @param _voteWeight Vote weight in CVNX tokens
function vote(
uint256 _pollNum,
VoteType _voteType,
uint256 _voteWeight
) external;
/// @notice Unlock tokens for poll. Poll should be ended.
/// @param _pollNum Poll number
function unlockTokensInPoll(uint256 _pollNum) external;
/// @notice Stop poll before deadline.
/// @param _pollNum Poll number
function stopPoll(uint256 _pollNum) external;
/// @notice Return poll status (PENDING, APPROVED, REJECTED, DRAW).
/// @param _pollNum Poll number
/// @return Poll number and status
function getPollStatus(uint256 _pollNum) external view returns (uint256, PollStatus);
/// @notice Return the poll expiration timestamp.
/// @param _pollNum Poll number
/// @return Poll deadline
function getPollExpirationTime(uint256 _pollNum) external view returns (uint64);
/// @notice Return the poll stop timestamp.
/// @param _pollNum Poll number
/// @return Poll stop time
function getPollStopTime(uint256 _pollNum) external view returns (uint64);
/// @notice Return the complete list of polls an address has voted in.
/// @param _voter Voter address
/// @return Index - poll number. True - if address voted in poll
function getPollHistory(address _voter) external view returns (bool[] memory);
/// @notice Return the vote info for a given poll for an address.
/// @param _pollNum Poll number
/// @param _voter Voter address
/// @return Info about voter vote
function getPollInfoForVoter(uint256 _pollNum, address _voter) external view returns (Vote memory);
/// @notice Checks if a user address has voted for a specific poll.
/// @param _pollNum Poll number
/// @param _voter Voter address
/// @return True if address voted in poll
function getIfUserHasVoted(uint256 _pollNum, address _voter) external view returns (bool);
/// @notice Return the amount of tokens that are locked for a given voter address.
/// @param _voter Voter address
/// @return Poll number
function getLockedAmount(address _voter) external view returns (uint256);
/// @notice Return the amount of locked tokens of the specific poll.
/// @param _pollNum Poll number
/// @param _voter Voter address
/// @return Locked tokens amount for specific poll
function getPollLockedAmount(uint256 _pollNum, address _voter) external view returns (uint256);
}// SPDX-License-Identifier: MIT
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() {
_setOwner(_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 {
_setOwner(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");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of ERC20 applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5,05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `sender` to `recipient`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
uint256 senderBalance = _balances[sender];
require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
_afterTokenTransfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}// SPDX-License-Identifier: MIT
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 `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
address recipient,
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
pragma solidity ^0.8.0;
import "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}// SPDX-License-Identifier: MIT
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;
}
}{
"remappings": [],
"optimizer": {
"enabled": false,
"runs": 200
},
"evmVersion": "istanbul",
"libraries": {},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_cvnxTokenAddress","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pollNum","type":"uint256"}],"name":"PollCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pollNum","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"stopTimestamp","type":"uint256"}],"name":"PollStop","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voterAddress","type":"address"},{"indexed":true,"internalType":"enum ICVNXGovernance.VoteType","name":"voteType","type":"uint8"},{"indexed":true,"internalType":"uint256","name":"voteWeight","type":"uint256"}],"name":"PollVoted","type":"event"},{"inputs":[{"internalType":"uint64","name":"_pollDeadline","type":"uint64"},{"internalType":"string","name":"_pollInfo","type":"string"}],"name":"createEventPoll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_pollDeadline","type":"uint64"},{"internalType":"string","name":"_pollInfo","type":"string"}],"name":"createExecutivePoll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_pollDeadline","type":"uint64"},{"internalType":"string","name":"_pollInfo","type":"string"},{"internalType":"address[]","name":"_verifiedAddresses","type":"address[]"}],"name":"createPrivatePoll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_pollDeadline","type":"uint64"},{"internalType":"string","name":"_pollInfo","type":"string"}],"name":"createProposalPoll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollNum","type":"uint256"},{"internalType":"address","name":"_voter","type":"address"}],"name":"getIfUserHasVoted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"}],"name":"getLockedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollNum","type":"uint256"}],"name":"getPollExpirationTime","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"}],"name":"getPollHistory","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollNum","type":"uint256"},{"internalType":"address","name":"_voter","type":"address"}],"name":"getPollInfoForVoter","outputs":[{"components":[{"internalType":"enum ICVNXGovernance.VoteType","name":"voteType","type":"uint8"},{"internalType":"uint256","name":"voteWeight","type":"uint256"}],"internalType":"struct ICVNXGovernance.Vote","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollNum","type":"uint256"},{"internalType":"address","name":"_voter","type":"address"}],"name":"getPollLockedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollNum","type":"uint256"}],"name":"getPollStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"enum ICVNXGovernance.PollStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollNum","type":"uint256"}],"name":"getPollStopTime","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"isTokenLockedInPoll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"polls","outputs":[{"internalType":"uint64","name":"pollDeadline","type":"uint64"},{"internalType":"uint64","name":"pollStopped","type":"uint64"},{"internalType":"enum ICVNXGovernance.PollType","name":"pollType","type":"uint8"},{"internalType":"address","name":"pollOwner","type":"address"},{"internalType":"string","name":"pollInfo","type":"string"},{"internalType":"uint256","name":"forWeight","type":"uint256"},{"internalType":"uint256","name":"againstWeight","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollNum","type":"uint256"}],"name":"stopPoll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollNum","type":"uint256"}],"name":"unlockTokensInPoll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"verifiedToVote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollNum","type":"uint256"},{"internalType":"enum ICVNXGovernance.VoteType","name":"_voteType","type":"uint8"},{"internalType":"uint256","name":"_voteWeight","type":"uint256"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"voted","outputs":[{"internalType":"enum ICVNXGovernance.VoteType","name":"voteType","type":"uint8"},{"internalType":"uint256","name":"voteWeight","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b50604051620036bf380380620036bf833981810160405281019062000037919062000182565b620000576200004b6200009f60201b60201c565b620000a760201b60201c565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620001fc565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000815190506200017c81620001e2565b92915050565b6000602082840312156200019557600080fd5b6000620001a5848285016200016b565b91505092915050565b6000620001bb82620001c2565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620001ed81620001ae565b8114620001f957600080fd5b50565b6134b3806200020c6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80639228d07d116100b8578063c6a0f67a1161007c578063c6a0f67a146103c7578063ca34bea9146103f7578063e519c56c14610413578063e520251a1461042f578063e7f766191461044b578063f2fde38b1461047b57610142565b80639228d07d146102d0578063929ec53714610300578063ac2f007414610330578063b0c095e314610366578063b56b680a1461039757610142565b806347ec45351161010a57806347ec4535146101e75780635277b4ae1461021757806360175d7f146102485780636cee7be514610278578063715018a6146102a85780638da5cb5b146102b257610142565b80630c6d5449146101475780630de88fd814610163578063178a286a146101935780631c11f927146101af57806340beb7b4146101cb575b600080fd5b610161600480360381019061015c919061266c565b610497565b005b61017d60048036038101906101789190612512565b61063b565b60405161018a9190612a47565b60405180910390f35b6101ad60048036038101906101a89190612618565b61078d565b005b6101c960048036038101906101c4919061253b565b61079e565b005b6101e560048036038101906101e09190612618565b610a3c565b005b61020160048036038101906101fc919061253b565b610ac9565b60405161020e9190612c8c565b60405180910390f35b610231600480360381019061022c919061258d565b610b32565b60405161023f929190612a84565b60405180910390f35b610262600480360381019061025d919061258d565b610b70565b60405161026f9190612a69565b60405180910390f35b610292600480360381019061028d919061258d565b610bd0565b60405161029f9190612c2d565b60405180910390f35b6102b0610ccc565b005b6102ba610d54565b6040516102c79190612a03565b60405180910390f35b6102ea60048036038101906102e5919061258d565b610d7d565b6040516102f79190612c48565b60405180910390f35b61031a60048036038101906103159190612512565b610e48565b6040516103279190612c48565b60405180910390f35b61034a6004803603810190610345919061253b565b610efc565b60405161035d9796959493929190612ca7565b60405180910390f35b610380600480360381019061037b919061253b565b61102b565b60405161038e929190612c63565b60405180910390f35b6103b160048036038101906103ac919061258d565b611186565b6040516103be9190612a69565b60405180910390f35b6103e160048036038101906103dc919061258d565b6111b5565b6040516103ee9190612a69565b60405180910390f35b610411600480360381019061040c919061253b565b6111e4565b005b61042d60048036038101906104289190612618565b611448565b005b610449600480360381019061044491906125c9565b6114d5565b005b6104656004803603810190610460919061253b565b611d15565b6040516104729190612c8c565b60405180910390f35b61049560048036038101906104909190612512565b611d7e565b005b61049f611e76565b73ffffffffffffffffffffffffffffffffffffffff166104bd610d54565b73ffffffffffffffffffffffffffffffffffffffff1614610513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050a90612b6d565b60405180910390fd5b6000815190506001811161055c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055390612bcd565b60405180910390fd5b600061056a60038686611e7e565b905060005b828110156106335760016005600084815260200190815260200160002060008684815181106105c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061062b90612fba565b91505061056f565b505050505050565b60606000600280549050905060008167ffffffffffffffff811115610689577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156106b75781602001602082028036833780820191505090505b50905060005b828110156107825760006003600083815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154111561076f57600182828151811061075c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010190151590811515815250505b808061077a90612fba565b9150506106bd565b508092505050919050565b61079960008383611e7e565b505050565b42600282815481106107d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16111561084a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084190612b2d565b60405180910390fd5b600115156004600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146108ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e590612bed565b60405180910390fd5b60006004600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637eee288d336003600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546040518363ffffffff1660e01b8152600401610a07929190612a1e565b600060405180830381600087803b158015610a2157600080fd5b505af1158015610a35573d6000803e3d6000fd5b5050505050565b610a44611e76565b73ffffffffffffffffffffffffffffffffffffffff16610a62610d54565b73ffffffffffffffffffffffffffffffffffffffff1614610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf90612b6d565b60405180910390fd5b610ac460028383611e7e565b505050565b600060028281548110610b05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160089054906101000a900467ffffffffffffffff169050919050565b6003602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900460ff16908060010154905082565b6000806003600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411905092915050565b610bd86122b6565b6003600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900460ff166001811115610c7e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6001811115610cb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001600182015481525050905092915050565b610cd4611e76565b73ffffffffffffffffffffffffffffffffffffffff16610cf2610d54565b73ffffffffffffffffffffffffffffffffffffffff1614610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90612b6d565b60405180910390fd5b610d5260006121f2565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006004600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e3d576003600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050610e42565b600090505b92915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a153e708836040518263ffffffff1660e01b8152600401610ea59190612a03565b60206040518083038186803b158015610ebd57600080fd5b505afa158015610ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef59190612564565b9050919050565b60028181548110610f0c57600080fd5b90600052602060002090600502016000915090508060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900467ffffffffffffffff16908060000160109054906101000a900460ff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002018054610f9c90612f57565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc890612f57565b80156110155780601f10610fea57610100808354040283529160200191611015565b820191906000526020600020905b815481529060010190602001808311610ff857829003601f168201915b5050505050908060030154908060040154905087565b6000804260028481548110611069577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1611156110ab5782600091509150611181565b6000600284815481106110e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060050201600301549050600060028581548110611137577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600502016004015490508082111561116157846001935093505050611181565b8082101561117757846002935093505050611181565b8460039350935050505b915091565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60046020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16611203610d54565b73ffffffffffffffffffffffffffffffffffffffff1614806112bb57503373ffffffffffffffffffffffffffffffffffffffff1660028281548110611271577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f190612b4d565b60405180910390fd5b60028181548110611334577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1642106113a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139c90612b8d565b60405180910390fd5b42600282815481106113e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555042817fe1320e318d89b208bdb8bb1dd6e4171799dd33cc92e556955da3e6fb352f19a660405160405180910390a350565b611450611e76565b73ffffffffffffffffffffffffffffffffffffffff1661146e610d54565b73ffffffffffffffffffffffffffffffffffffffff16146114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90612b6d565b60405180910390fd5b6114d060018383611e7e565b505050565b620f424080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016115359190612a03565b60206040518083038186803b15801561154d57600080fd5b505afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115859190612564565b116115c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc90612acd565b60405180910390fd5b4260028581548110611600577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1611611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790612b0d565b60405180910390fd5b6003808111156116a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600285815481106116e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160109054906101000a900460ff16600381111561173a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156117e557600115156005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90612aad565b60405180910390fd5b5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663282d3fdf33846040518363ffffffff1660e01b8152600401611842929190612a1e565b600060405180830381600087803b15801561185c57600080fd5b505af1158015611870573d6000803e3d6000fd5b5050505060016004600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000811115611a5557836001811115611977577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166001811115611a10577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790612bad565b60405180910390fd5b611af7565b836003600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690836001811115611af1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055505b8281611b039190612df4565b6003600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555060006001811115611b94577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b846001811115611bcd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611c3a578260028681548110611c0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600502016003016000828254611c2e9190612df4565b92505081905550611c9d565b8260028681548110611c75577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600502016004016000828254611c959190612df4565b925050819055505b82846001811115611cd7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7fc31a851172a43c4e98e3e052910766c2d1c97529450d4f47acd3ff1bbeea466533604051611d069190612a03565b60405180910390a35050505050565b600060028281548110611d51577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160009054906101000a900467ffffffffffffffff169050919050565b611d86611e76565b73ffffffffffffffffffffffffffffffffffffffff16611da4610d54565b73ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190612b6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190612aed565b60405180910390fd5b611e73816121f2565b50565b600033905090565b60008080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611edd9190612a03565b60206040518083038186803b158015611ef557600080fd5b505afa158015611f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2d9190612564565b11611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6490612acd565b60405180910390fd5b428467ffffffffffffffff1611611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb090612c0d565b60405180910390fd5b60006040518060e001604052808667ffffffffffffffff1681526020018667ffffffffffffffff16815260200187600381111561201f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020013373ffffffffffffffffffffffffffffffffffffffff168152602001858152602001600081526020016000815250905060006002805490509050600282908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160000160106101000a81548160ff02191690836003811115612139577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555060608201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160020190805190602001906121a1929190612308565b5060a0820151816003015560c082015181600401555050807fab0309b6731a34e8750174d3c2c9591a34a2bf0c1425a30b34122be08d05073960405160405180910390a28093505050509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6040518060400160405280600060018111156122fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001600081525090565b82805461231490612f57565b90600052602060002090601f016020900481019282612336576000855561237d565b82601f1061234f57805160ff191683800117855561237d565b8280016001018555821561237d579182015b8281111561237c578251825591602001919060010190612361565b5b50905061238a919061238e565b5090565b5b808211156123a757600081600090555060010161238f565b5090565b60006123be6123b984612d42565b612d1d565b905080838252602082019050828560208602820111156123dd57600080fd5b60005b8581101561240d57816123f38882612455565b8452602084019350602083019250506001810190506123e0565b5050509392505050565b600061242a61242584612d6e565b612d1d565b90508281526020810184848401111561244257600080fd5b61244d848285612f15565b509392505050565b60008135905061246481613428565b92915050565b600082601f83011261247b57600080fd5b813561248b8482602086016123ab565b91505092915050565b6000813590506124a38161343f565b92915050565b600082601f8301126124ba57600080fd5b81356124ca848260208601612417565b91505092915050565b6000813590506124e28161344f565b92915050565b6000815190506124f78161344f565b92915050565b60008135905061250c81613466565b92915050565b60006020828403121561252457600080fd5b600061253284828501612455565b91505092915050565b60006020828403121561254d57600080fd5b600061255b848285016124d3565b91505092915050565b60006020828403121561257657600080fd5b6000612584848285016124e8565b91505092915050565b600080604083850312156125a057600080fd5b60006125ae858286016124d3565b92505060206125bf85828601612455565b9150509250929050565b6000806000606084860312156125de57600080fd5b60006125ec868287016124d3565b93505060206125fd86828701612494565b925050604061260e868287016124d3565b9150509250925092565b6000806040838503121561262b57600080fd5b6000612639858286016124fd565b925050602083013567ffffffffffffffff81111561265657600080fd5b612662858286016124a9565b9150509250929050565b60008060006060848603121561268157600080fd5b600061268f868287016124fd565b935050602084013567ffffffffffffffff8111156126ac57600080fd5b6126b8868287016124a9565b925050604084013567ffffffffffffffff8111156126d557600080fd5b6126e18682870161246a565b9150509250925092565b60006126f78383612770565b60208301905092915050565b61270c81612e4a565b82525050565b600061271d82612daf565b6127278185612dd2565b935061273283612d9f565b8060005b8381101561276357815161274a88826126eb565b975061275583612dc5565b925050600181019050612736565b5085935050505092915050565b61277981612e5c565b82525050565b61278881612e5c565b82525050565b61279781612edf565b82525050565b6127a681612ef1565b82525050565b6127b581612f03565b82525050565b6127c481612f03565b82525050565b60006127d582612dba565b6127df8185612de3565b93506127ef818560208601612f24565b6127f8816130bf565b840191505092915050565b6000612810603183612de3565b915061281b826130d0565b604082019050919050565b6000612833602183612de3565b915061283e8261311f565b604082019050919050565b6000612856602683612de3565b91506128618261316e565b604082019050919050565b6000612879601483612de3565b9150612884826131bd565b602082019050919050565b600061289c601b83612de3565b91506128a7826131e6565b602082019050919050565b60006128bf602683612de3565b91506128ca8261320f565b604082019050919050565b60006128e2602083612de3565b91506128ed8261325e565b602082019050919050565b6000612905601483612de3565b915061291082613287565b602082019050919050565b6000612928603583612de3565b9150612933826132b0565b604082019050919050565b600061294b602483612de3565b9150612956826132ff565b604082019050919050565b600061296e602983612de3565b91506129798261334e565b604082019050919050565b6000612991603b83612de3565b915061299c8261339d565b604082019050919050565b6040820160008201516129bd60008501826127ac565b5060208201516129d060208501826129d6565b50505050565b6129df81612ec1565b82525050565b6129ee81612ec1565b82525050565b6129fd81612ecb565b82525050565b6000602082019050612a186000830184612703565b92915050565b6000604082019050612a336000830185612703565b612a4060208301846129e5565b9392505050565b60006020820190508181036000830152612a618184612712565b905092915050565b6000602082019050612a7e600083018461277f565b92915050565b6000604082019050612a9960008301856127bb565b612aa660208301846129e5565b9392505050565b60006020820190508181036000830152612ac681612803565b9050919050565b60006020820190508181036000830152612ae681612826565b9050919050565b60006020820190508181036000830152612b0681612849565b9050919050565b60006020820190508181036000830152612b268161286c565b9050919050565b60006020820190508181036000830152612b468161288f565b9050919050565b60006020820190508181036000830152612b66816128b2565b9050919050565b60006020820190508181036000830152612b86816128d5565b9050919050565b60006020820190508181036000830152612ba6816128f8565b9050919050565b60006020820190508181036000830152612bc68161291b565b9050919050565b60006020820190508181036000830152612be68161293e565b9050919050565b60006020820190508181036000830152612c0681612961565b9050919050565b60006020820190508181036000830152612c2681612984565b9050919050565b6000604082019050612c4260008301846129a7565b92915050565b6000602082019050612c5d60008301846129e5565b92915050565b6000604082019050612c7860008301856129e5565b612c85602083018461278e565b9392505050565b6000602082019050612ca160008301846129f4565b92915050565b600060e082019050612cbc600083018a6129f4565b612cc960208301896129f4565b612cd6604083018861279d565b612ce36060830187612703565b8181036080830152612cf581866127ca565b9050612d0460a08301856129e5565b612d1160c08301846129e5565b98975050505050505050565b6000612d27612d38565b9050612d338282612f89565b919050565b6000604051905090565b600067ffffffffffffffff821115612d5d57612d5c613090565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612d8957612d88613090565b5b612d92826130bf565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612dff82612ec1565b9150612e0a83612ec1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e3f57612e3e613003565b5b828201905092915050565b6000612e5582612ea1565b9050919050565b60008115159050919050565b6000819050612e76826133ec565b919050565b6000819050612e8982613400565b919050565b6000819050612e9c82613414565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b6000612eea82612e68565b9050919050565b6000612efc82612e7b565b9050919050565b6000612f0e82612e8e565b9050919050565b82818337600083830152505050565b60005b83811015612f42578082015181840152602081019050612f27565b83811115612f51576000848401525b50505050565b60006002820490506001821680612f6f57607f821691505b60208210811415612f8357612f82613061565b5b50919050565b612f92826130bf565b810181811067ffffffffffffffff82111715612fb157612fb0613090565b5b80604052505050565b6000612fc582612ec1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ff857612ff7613003565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5b452d33385d202d20596f7520617265206e6f742076657269667920746f207660008201527f6f746520696e207468697320706f6c6c2e000000000000000000000000000000602082015250565b7f5b452d33345d202d20596f75722062616c616e636520697320746f6f206c6f7760008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5b452d33375d202d20506f6c6c20656e6465642e000000000000000000000000600082015250565b7f5b452d38315d202d20506f6c6c206973206e6f7420656e6465642e0000000000600082015250565b7f5b452d39315d202d204e6f74206120636f6e7472616374206f7220706f6c6c2060008201527f6f776e65722e0000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5b452d39325d202d20506f6c6c20656e6465642e000000000000000000000000600082015250565b7f5b452d33395d202d2054686520766f696365207479706520646f6573206e6f7460008201527f206d6174636820746865206669727374206f6e652e0000000000000000000000602082015250565b7f5b452d33355d202d20566572696669656420616464726573736573206e6f742060008201527f7365742e00000000000000000000000000000000000000000000000000000000602082015250565b7f5b452d38325d202d20546f6b656e73206e6f74206c6f636b656420666f72207460008201527f68697320706f6c6c2e0000000000000000000000000000000000000000000000602082015250565b7f5b452d34315d202d2054686520646561646c696e65206d757374206265206c6f60008201527f6e676572207468616e207468652063757272656e742074696d652e0000000000602082015250565b600481106133fd576133fc613032565b5b50565b6004811061341157613410613032565b5b50565b6002811061342557613424613032565b5b50565b61343181612e4a565b811461343c57600080fd5b50565b6002811061344c57600080fd5b50565b61345881612ec1565b811461346357600080fd5b50565b61346f81612ecb565b811461347a57600080fd5b5056fea2646970667358221220ffface1256d73d0b18e42fa24d0938dae48a71a0f29dd62fc562e76c57716bcb64736f6c63430008040033000000000000000000000000b2e7abc38b44a86be7965297b5a97e3b16453667
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101425760003560e01c80639228d07d116100b8578063c6a0f67a1161007c578063c6a0f67a146103c7578063ca34bea9146103f7578063e519c56c14610413578063e520251a1461042f578063e7f766191461044b578063f2fde38b1461047b57610142565b80639228d07d146102d0578063929ec53714610300578063ac2f007414610330578063b0c095e314610366578063b56b680a1461039757610142565b806347ec45351161010a57806347ec4535146101e75780635277b4ae1461021757806360175d7f146102485780636cee7be514610278578063715018a6146102a85780638da5cb5b146102b257610142565b80630c6d5449146101475780630de88fd814610163578063178a286a146101935780631c11f927146101af57806340beb7b4146101cb575b600080fd5b610161600480360381019061015c919061266c565b610497565b005b61017d60048036038101906101789190612512565b61063b565b60405161018a9190612a47565b60405180910390f35b6101ad60048036038101906101a89190612618565b61078d565b005b6101c960048036038101906101c4919061253b565b61079e565b005b6101e560048036038101906101e09190612618565b610a3c565b005b61020160048036038101906101fc919061253b565b610ac9565b60405161020e9190612c8c565b60405180910390f35b610231600480360381019061022c919061258d565b610b32565b60405161023f929190612a84565b60405180910390f35b610262600480360381019061025d919061258d565b610b70565b60405161026f9190612a69565b60405180910390f35b610292600480360381019061028d919061258d565b610bd0565b60405161029f9190612c2d565b60405180910390f35b6102b0610ccc565b005b6102ba610d54565b6040516102c79190612a03565b60405180910390f35b6102ea60048036038101906102e5919061258d565b610d7d565b6040516102f79190612c48565b60405180910390f35b61031a60048036038101906103159190612512565b610e48565b6040516103279190612c48565b60405180910390f35b61034a6004803603810190610345919061253b565b610efc565b60405161035d9796959493929190612ca7565b60405180910390f35b610380600480360381019061037b919061253b565b61102b565b60405161038e929190612c63565b60405180910390f35b6103b160048036038101906103ac919061258d565b611186565b6040516103be9190612a69565b60405180910390f35b6103e160048036038101906103dc919061258d565b6111b5565b6040516103ee9190612a69565b60405180910390f35b610411600480360381019061040c919061253b565b6111e4565b005b61042d60048036038101906104289190612618565b611448565b005b610449600480360381019061044491906125c9565b6114d5565b005b6104656004803603810190610460919061253b565b611d15565b6040516104729190612c8c565b60405180910390f35b61049560048036038101906104909190612512565b611d7e565b005b61049f611e76565b73ffffffffffffffffffffffffffffffffffffffff166104bd610d54565b73ffffffffffffffffffffffffffffffffffffffff1614610513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050a90612b6d565b60405180910390fd5b6000815190506001811161055c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055390612bcd565b60405180910390fd5b600061056a60038686611e7e565b905060005b828110156106335760016005600084815260200190815260200160002060008684815181106105c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061062b90612fba565b91505061056f565b505050505050565b60606000600280549050905060008167ffffffffffffffff811115610689577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156106b75781602001602082028036833780820191505090505b50905060005b828110156107825760006003600083815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154111561076f57600182828151811061075c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010190151590811515815250505b808061077a90612fba565b9150506106bd565b508092505050919050565b61079960008383611e7e565b505050565b42600282815481106107d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16111561084a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084190612b2d565b60405180910390fd5b600115156004600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146108ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e590612bed565b60405180910390fd5b60006004600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637eee288d336003600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546040518363ffffffff1660e01b8152600401610a07929190612a1e565b600060405180830381600087803b158015610a2157600080fd5b505af1158015610a35573d6000803e3d6000fd5b5050505050565b610a44611e76565b73ffffffffffffffffffffffffffffffffffffffff16610a62610d54565b73ffffffffffffffffffffffffffffffffffffffff1614610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf90612b6d565b60405180910390fd5b610ac460028383611e7e565b505050565b600060028281548110610b05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160089054906101000a900467ffffffffffffffff169050919050565b6003602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900460ff16908060010154905082565b6000806003600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411905092915050565b610bd86122b6565b6003600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900460ff166001811115610c7e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6001811115610cb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001600182015481525050905092915050565b610cd4611e76565b73ffffffffffffffffffffffffffffffffffffffff16610cf2610d54565b73ffffffffffffffffffffffffffffffffffffffff1614610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90612b6d565b60405180910390fd5b610d5260006121f2565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006004600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e3d576003600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050610e42565b600090505b92915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a153e708836040518263ffffffff1660e01b8152600401610ea59190612a03565b60206040518083038186803b158015610ebd57600080fd5b505afa158015610ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef59190612564565b9050919050565b60028181548110610f0c57600080fd5b90600052602060002090600502016000915090508060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900467ffffffffffffffff16908060000160109054906101000a900460ff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002018054610f9c90612f57565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc890612f57565b80156110155780601f10610fea57610100808354040283529160200191611015565b820191906000526020600020905b815481529060010190602001808311610ff857829003601f168201915b5050505050908060030154908060040154905087565b6000804260028481548110611069577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1611156110ab5782600091509150611181565b6000600284815481106110e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060050201600301549050600060028581548110611137577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600502016004015490508082111561116157846001935093505050611181565b8082101561117757846002935093505050611181565b8460039350935050505b915091565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60046020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16611203610d54565b73ffffffffffffffffffffffffffffffffffffffff1614806112bb57503373ffffffffffffffffffffffffffffffffffffffff1660028281548110611271577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f190612b4d565b60405180910390fd5b60028181548110611334577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1642106113a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139c90612b8d565b60405180910390fd5b42600282815481106113e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555042817fe1320e318d89b208bdb8bb1dd6e4171799dd33cc92e556955da3e6fb352f19a660405160405180910390a350565b611450611e76565b73ffffffffffffffffffffffffffffffffffffffff1661146e610d54565b73ffffffffffffffffffffffffffffffffffffffff16146114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90612b6d565b60405180910390fd5b6114d060018383611e7e565b505050565b620f424080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016115359190612a03565b60206040518083038186803b15801561154d57600080fd5b505afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115859190612564565b116115c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc90612acd565b60405180910390fd5b4260028581548110611600577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1611611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790612b0d565b60405180910390fd5b6003808111156116a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600285815481106116e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160109054906101000a900460ff16600381111561173a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156117e557600115156005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90612aad565b60405180910390fd5b5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663282d3fdf33846040518363ffffffff1660e01b8152600401611842929190612a1e565b600060405180830381600087803b15801561185c57600080fd5b505af1158015611870573d6000803e3d6000fd5b5050505060016004600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000811115611a5557836001811115611977577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166001811115611a10577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790612bad565b60405180910390fd5b611af7565b836003600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690836001811115611af1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055505b8281611b039190612df4565b6003600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555060006001811115611b94577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b846001811115611bcd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611c3a578260028681548110611c0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600502016003016000828254611c2e9190612df4565b92505081905550611c9d565b8260028681548110611c75577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600502016004016000828254611c959190612df4565b925050819055505b82846001811115611cd7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7fc31a851172a43c4e98e3e052910766c2d1c97529450d4f47acd3ff1bbeea466533604051611d069190612a03565b60405180910390a35050505050565b600060028281548110611d51577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000160009054906101000a900467ffffffffffffffff169050919050565b611d86611e76565b73ffffffffffffffffffffffffffffffffffffffff16611da4610d54565b73ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190612b6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190612aed565b60405180910390fd5b611e73816121f2565b50565b600033905090565b60008080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611edd9190612a03565b60206040518083038186803b158015611ef557600080fd5b505afa158015611f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2d9190612564565b11611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6490612acd565b60405180910390fd5b428467ffffffffffffffff1611611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb090612c0d565b60405180910390fd5b60006040518060e001604052808667ffffffffffffffff1681526020018667ffffffffffffffff16815260200187600381111561201f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020013373ffffffffffffffffffffffffffffffffffffffff168152602001858152602001600081526020016000815250905060006002805490509050600282908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160000160106101000a81548160ff02191690836003811115612139577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555060608201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160020190805190602001906121a1929190612308565b5060a0820151816003015560c082015181600401555050807fab0309b6731a34e8750174d3c2c9591a34a2bf0c1425a30b34122be08d05073960405160405180910390a28093505050509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6040518060400160405280600060018111156122fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001600081525090565b82805461231490612f57565b90600052602060002090601f016020900481019282612336576000855561237d565b82601f1061234f57805160ff191683800117855561237d565b8280016001018555821561237d579182015b8281111561237c578251825591602001919060010190612361565b5b50905061238a919061238e565b5090565b5b808211156123a757600081600090555060010161238f565b5090565b60006123be6123b984612d42565b612d1d565b905080838252602082019050828560208602820111156123dd57600080fd5b60005b8581101561240d57816123f38882612455565b8452602084019350602083019250506001810190506123e0565b5050509392505050565b600061242a61242584612d6e565b612d1d565b90508281526020810184848401111561244257600080fd5b61244d848285612f15565b509392505050565b60008135905061246481613428565b92915050565b600082601f83011261247b57600080fd5b813561248b8482602086016123ab565b91505092915050565b6000813590506124a38161343f565b92915050565b600082601f8301126124ba57600080fd5b81356124ca848260208601612417565b91505092915050565b6000813590506124e28161344f565b92915050565b6000815190506124f78161344f565b92915050565b60008135905061250c81613466565b92915050565b60006020828403121561252457600080fd5b600061253284828501612455565b91505092915050565b60006020828403121561254d57600080fd5b600061255b848285016124d3565b91505092915050565b60006020828403121561257657600080fd5b6000612584848285016124e8565b91505092915050565b600080604083850312156125a057600080fd5b60006125ae858286016124d3565b92505060206125bf85828601612455565b9150509250929050565b6000806000606084860312156125de57600080fd5b60006125ec868287016124d3565b93505060206125fd86828701612494565b925050604061260e868287016124d3565b9150509250925092565b6000806040838503121561262b57600080fd5b6000612639858286016124fd565b925050602083013567ffffffffffffffff81111561265657600080fd5b612662858286016124a9565b9150509250929050565b60008060006060848603121561268157600080fd5b600061268f868287016124fd565b935050602084013567ffffffffffffffff8111156126ac57600080fd5b6126b8868287016124a9565b925050604084013567ffffffffffffffff8111156126d557600080fd5b6126e18682870161246a565b9150509250925092565b60006126f78383612770565b60208301905092915050565b61270c81612e4a565b82525050565b600061271d82612daf565b6127278185612dd2565b935061273283612d9f565b8060005b8381101561276357815161274a88826126eb565b975061275583612dc5565b925050600181019050612736565b5085935050505092915050565b61277981612e5c565b82525050565b61278881612e5c565b82525050565b61279781612edf565b82525050565b6127a681612ef1565b82525050565b6127b581612f03565b82525050565b6127c481612f03565b82525050565b60006127d582612dba565b6127df8185612de3565b93506127ef818560208601612f24565b6127f8816130bf565b840191505092915050565b6000612810603183612de3565b915061281b826130d0565b604082019050919050565b6000612833602183612de3565b915061283e8261311f565b604082019050919050565b6000612856602683612de3565b91506128618261316e565b604082019050919050565b6000612879601483612de3565b9150612884826131bd565b602082019050919050565b600061289c601b83612de3565b91506128a7826131e6565b602082019050919050565b60006128bf602683612de3565b91506128ca8261320f565b604082019050919050565b60006128e2602083612de3565b91506128ed8261325e565b602082019050919050565b6000612905601483612de3565b915061291082613287565b602082019050919050565b6000612928603583612de3565b9150612933826132b0565b604082019050919050565b600061294b602483612de3565b9150612956826132ff565b604082019050919050565b600061296e602983612de3565b91506129798261334e565b604082019050919050565b6000612991603b83612de3565b915061299c8261339d565b604082019050919050565b6040820160008201516129bd60008501826127ac565b5060208201516129d060208501826129d6565b50505050565b6129df81612ec1565b82525050565b6129ee81612ec1565b82525050565b6129fd81612ecb565b82525050565b6000602082019050612a186000830184612703565b92915050565b6000604082019050612a336000830185612703565b612a4060208301846129e5565b9392505050565b60006020820190508181036000830152612a618184612712565b905092915050565b6000602082019050612a7e600083018461277f565b92915050565b6000604082019050612a9960008301856127bb565b612aa660208301846129e5565b9392505050565b60006020820190508181036000830152612ac681612803565b9050919050565b60006020820190508181036000830152612ae681612826565b9050919050565b60006020820190508181036000830152612b0681612849565b9050919050565b60006020820190508181036000830152612b268161286c565b9050919050565b60006020820190508181036000830152612b468161288f565b9050919050565b60006020820190508181036000830152612b66816128b2565b9050919050565b60006020820190508181036000830152612b86816128d5565b9050919050565b60006020820190508181036000830152612ba6816128f8565b9050919050565b60006020820190508181036000830152612bc68161291b565b9050919050565b60006020820190508181036000830152612be68161293e565b9050919050565b60006020820190508181036000830152612c0681612961565b9050919050565b60006020820190508181036000830152612c2681612984565b9050919050565b6000604082019050612c4260008301846129a7565b92915050565b6000602082019050612c5d60008301846129e5565b92915050565b6000604082019050612c7860008301856129e5565b612c85602083018461278e565b9392505050565b6000602082019050612ca160008301846129f4565b92915050565b600060e082019050612cbc600083018a6129f4565b612cc960208301896129f4565b612cd6604083018861279d565b612ce36060830187612703565b8181036080830152612cf581866127ca565b9050612d0460a08301856129e5565b612d1160c08301846129e5565b98975050505050505050565b6000612d27612d38565b9050612d338282612f89565b919050565b6000604051905090565b600067ffffffffffffffff821115612d5d57612d5c613090565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612d8957612d88613090565b5b612d92826130bf565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612dff82612ec1565b9150612e0a83612ec1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e3f57612e3e613003565b5b828201905092915050565b6000612e5582612ea1565b9050919050565b60008115159050919050565b6000819050612e76826133ec565b919050565b6000819050612e8982613400565b919050565b6000819050612e9c82613414565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b6000612eea82612e68565b9050919050565b6000612efc82612e7b565b9050919050565b6000612f0e82612e8e565b9050919050565b82818337600083830152505050565b60005b83811015612f42578082015181840152602081019050612f27565b83811115612f51576000848401525b50505050565b60006002820490506001821680612f6f57607f821691505b60208210811415612f8357612f82613061565b5b50919050565b612f92826130bf565b810181811067ffffffffffffffff82111715612fb157612fb0613090565b5b80604052505050565b6000612fc582612ec1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ff857612ff7613003565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5b452d33385d202d20596f7520617265206e6f742076657269667920746f207660008201527f6f746520696e207468697320706f6c6c2e000000000000000000000000000000602082015250565b7f5b452d33345d202d20596f75722062616c616e636520697320746f6f206c6f7760008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5b452d33375d202d20506f6c6c20656e6465642e000000000000000000000000600082015250565b7f5b452d38315d202d20506f6c6c206973206e6f7420656e6465642e0000000000600082015250565b7f5b452d39315d202d204e6f74206120636f6e7472616374206f7220706f6c6c2060008201527f6f776e65722e0000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5b452d39325d202d20506f6c6c20656e6465642e000000000000000000000000600082015250565b7f5b452d33395d202d2054686520766f696365207479706520646f6573206e6f7460008201527f206d6174636820746865206669727374206f6e652e0000000000000000000000602082015250565b7f5b452d33355d202d20566572696669656420616464726573736573206e6f742060008201527f7365742e00000000000000000000000000000000000000000000000000000000602082015250565b7f5b452d38325d202d20546f6b656e73206e6f74206c6f636b656420666f72207460008201527f68697320706f6c6c2e0000000000000000000000000000000000000000000000602082015250565b7f5b452d34315d202d2054686520646561646c696e65206d757374206265206c6f60008201527f6e676572207468616e207468652063757272656e742074696d652e0000000000602082015250565b600481106133fd576133fc613032565b5b50565b6004811061341157613410613032565b5b50565b6002811061342557613424613032565b5b50565b61343181612e4a565b811461343c57600080fd5b50565b6002811061344c57600080fd5b50565b61345881612ec1565b811461346357600080fd5b50565b61346f81612ecb565b811461347a57600080fd5b5056fea2646970667358221220ffface1256d73d0b18e42fa24d0938dae48a71a0f29dd62fc562e76c57716bcb64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b2e7abc38b44a86be7965297b5a97e3b16453667
-----Decoded View---------------
Arg [0] : _cvnxTokenAddress (address): 0xB2e7AbC38b44a86bE7965297b5A97e3B16453667
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b2e7abc38b44a86be7965297b5a97e3b16453667
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.