ETH Price: $3,253.32 (+2.45%)
Gas: 3 Gwei

Contract

0x5d9a0646c46245A8a3B4775aFB3c54d07BCB1764
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Update Seigniora...188056252023-12-17 12:04:23221 days ago1702814663IN
0x5d9a0646...07BCB1764
0 ETH0.0012702538.16076041
Update Seigniora...184226832023-10-24 21:05:23275 days ago1698181523IN
0x5d9a0646...07BCB1764
0 ETH0.0010651832
Update Seigniora...182755162023-10-04 6:57:59296 days ago1696402679IN
0x5d9a0646...07BCB1764
0 ETH0.000193925.82597787
Update Seigniora...182713452023-10-03 16:59:11296 days ago1696352351IN
0x5d9a0646...07BCB1764
0 ETH0.0006657420
Update Seigniora...181306252023-09-13 23:23:11316 days ago1694647391IN
0x5d9a0646...07BCB1764
0 ETH0.0027502613
Update Seigniora...179168112023-08-15 0:57:23346 days ago1692061043IN
0x5d9a0646...07BCB1764
0 ETH0.0037007416.18456531
Claim Activity R...177755962023-07-26 6:54:35366 days ago1690354475IN
0x5d9a0646...07BCB1764
0 ETH0.0020514916.56435753
Update Seigniora...177748922023-07-26 4:32:47366 days ago1690345967IN
0x5d9a0646...07BCB1764
0 ETH0.0042166418.44073633
Update Seigniora...176597712023-07-10 0:40:47382 days ago1688949647IN
0x5d9a0646...07BCB1764
0 ETH0.0027300812.90462001
Update Seigniora...175105242023-06-19 1:28:47403 days ago1687138127IN
0x5d9a0646...07BCB1764
0 ETH0.0029208413.80630699
Update Seigniora...173317422023-05-24 21:33:35428 days ago1684964015IN
0x5d9a0646...07BCB1764
0 ETH0.0084603837
Update Seigniora...172848032023-05-18 6:57:47435 days ago1684393067IN
0x5d9a0646...07BCB1764
0 ETH0.0077385636.57876038
Update Seigniora...170337442023-04-12 18:38:59470 days ago1681324739IN
0x5d9a0646...07BCB1764
0 ETH0.0052889725
Update Seigniora...170022132023-04-08 7:29:11475 days ago1680938951IN
0x5d9a0646...07BCB1764
0 ETH0.0047036922.23348677
Update Seigniora...168624692023-03-19 14:50:23494 days ago1679237423IN
0x5d9a0646...07BCB1764
0 ETH0.0029980414.17122242
Update Seigniora...166374562023-02-15 23:36:23526 days ago1676504183IN
0x5d9a0646...07BCB1764
0 ETH0.0084623640
Update Seigniora...165868022023-02-08 21:44:47533 days ago1675892687IN
0x5d9a0646...07BCB1764
0 ETH0.0074045635
Update Seigniora...165373992023-02-01 23:58:35540 days ago1675295915IN
0x5d9a0646...07BCB1764
0 ETH0.0051221924.21167727
Update Seigniora...164370502023-01-18 23:43:47554 days ago1674085427IN
0x5d9a0646...07BCB1764
0 ETH0.0044094720.84277992
Update Seigniora...163360452023-01-04 21:14:35568 days ago1672866875IN
0x5d9a0646...07BCB1764
0 ETH0.0052889725
Update Seigniora...162865102022-12-28 23:22:47575 days ago1672269767IN
0x5d9a0646...07BCB1764
0 ETH0.0036891716.13394278
Update Seigniora...161376372022-12-08 4:34:35596 days ago1670474075IN
0x5d9a0646...07BCB1764
0 ETH0.0036306317.16132358
Update Seigniora...160859582022-11-30 23:04:35603 days ago1669849475IN
0x5d9a0646...07BCB1764
0 ETH0.0031733815
Update Seigniora...160361082022-11-23 23:58:23610 days ago1669247903IN
0x5d9a0646...07BCB1764
0 ETH0.0023498411.10728233
Update Seigniora...159356322022-11-09 23:06:11624 days ago1668035171IN
0x5d9a0646...07BCB1764
0 ETH0.0186740681.66774392
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
146142162022-04-19 7:29:28829 days ago1650353368  Contract Creation0 ETH
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x42CCF076...62e0bBC52
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Candidate

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
istanbul EvmVersion, MIT license
File 1 of 17 : Candidate.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;

import "Ownable.sol";

import { IDAOCommittee } from "IDAOCommittee.sol";
import { IERC20 } from  "IERC20.sol";
import { SafeMath } from "SafeMath.sol";
import { ISeigManager } from "ISeigManager.sol";
import { ICandidate } from "ICandidate.sol";
import { ILayer2 } from "ILayer2.sol";
import { ILayer2Registry } from "ILayer2Registry.sol";
import { ERC165 } from "ERC165.sol";

/// @title Managing a candidate
/// @notice Either a user or layer2 contract can be a candidate
contract Candidate is Ownable, ERC165, ICandidate, ILayer2 {
    using SafeMath for uint256;

    bool public override isLayer2Candidate;
    address public override candidate;
    string public override memo;

    IDAOCommittee public override committee;
    ISeigManager public override seigManager;

    modifier onlyCandidate() {
        if (isLayer2Candidate) {
            ILayer2 layer2 = ILayer2(candidate);
            require(layer2.operator() == msg.sender, "Candidate: sender is not the operator of this contract");
        } else {
            require(candidate == msg.sender, "Candidate: sender is not the candidate of this contract");
        }
        _;
    }

    constructor(
        address _candidate,
        bool _isLayer2Candidate,
        string memory _memo,
        address _committee,
        address _seigManager
    ) 
    {
        require(
            _candidate != address(0)
            || _committee != address(0)
            || _seigManager != address(0),
            "Candidate: input is zero"
        );
        candidate = _candidate;
        isLayer2Candidate = _isLayer2Candidate;
        if (isLayer2Candidate) {
            require(
                ILayer2(candidate).isLayer2(),
                "Candidate: invalid layer2 contract"
            );
        }
        committee = IDAOCommittee(_committee);
        seigManager = ISeigManager(_seigManager);
        memo = _memo;

        _registerInterface(ICandidate(address(this)).isCandidateContract.selector);
    }
    
    /// @notice Set SeigManager contract address
    /// @param _seigManager New SeigManager contract address
    function setSeigManager(address _seigManager) external override onlyOwner {
        require(_seigManager != address(0), "Candidate: input is zero");
        seigManager = ISeigManager(_seigManager);
    }

    /// @notice Set DAOCommitteeProxy contract address
    /// @param _committee New DAOCommitteeProxy contract address
    function setCommittee(address _committee) external override onlyOwner {
        require(_committee != address(0), "Candidate: input is zero");
        committee = IDAOCommittee(_committee);
    }

    /// @notice Set memo
    /// @param _memo New memo on this candidate
    function setMemo(string calldata _memo) external override onlyOwner {
        memo = _memo;
    }

    /// @notice Set DAOCommitteeProxy contract address
    /// @notice Call updateSeigniorage on SeigManager
    /// @return Whether or not the execution succeeded
    function updateSeigniorage() external override returns (bool) {
        require(address(seigManager) != address(0), "Candidate: SeigManager is zero");
        require(
            !isLayer2Candidate,
            "Candidate: you should update seigniorage from layer2 contract"
        );

        return seigManager.updateSeigniorage();
    }

    /// @notice Try to be a member
    /// @param _memberIndex The index of changing member slot
    /// @return Whether or not the execution succeeded
    function changeMember(uint256 _memberIndex)
        external
        override
        onlyCandidate
        returns (bool)
    {
        return committee.changeMember(_memberIndex);
    }

    /// @notice Retire a member
    /// @return Whether or not the execution succeeded
    function retireMember() external override onlyCandidate returns (bool) {
        return committee.retireMember();
    }
    
    /// @notice Vote on an agenda
    /// @param _agendaID The agenda ID
    /// @param _vote voting type
    /// @param _comment voting comment
    function castVote(
        uint256 _agendaID,
        uint256 _vote,
        string calldata _comment
    )
        external
        override
        onlyCandidate
    {
        committee.castVote(_agendaID, _vote, _comment);
    }

    function claimActivityReward()
        external
        override
        onlyCandidate
    {
        address receiver;

        if (isLayer2Candidate) {
            ILayer2 layer2 = ILayer2(candidate);
            receiver = layer2.operator();
        } else {
            receiver = candidate;
        }
        committee.claimActivityReward(receiver);
    }

    /// @notice Checks whether this contract is a candidate contract
    /// @return Whether or not this contract is a candidate contract
    function isCandidateContract() external view override returns (bool) {
        return true;
    }

    function operator() external view override returns (address) { return candidate; }
    function isLayer2() external view override returns (bool) { return true; }
    function currentFork() external view override returns (uint256) { return 1; }
    function lastEpoch(uint256 forkNumber) external view override returns (uint256) { return 1; }
    function changeOperator(address _operator) external override { }

    /// @notice Retrieves the total staked balance on this candidate
    /// @return totalsupply Total staked amount on this candidate
    function totalStaked()
        external
        view
        override
        returns (uint256 totalsupply)
    {
        IERC20 coinage = _getCoinageToken();
        return coinage.totalSupply();
    }

    /// @notice Retrieves the staked balance of the account on this candidate
    /// @param _account Address being retrieved
    /// @return amount The staked balance of the account on this candidate
    function stakedOf(
        address _account
    )
        external
        view
        override
        returns (uint256 amount)
    {
        IERC20 coinage = _getCoinageToken();
        return coinage.balanceOf(_account);
    }

    function _getCoinageToken() internal view returns (IERC20) {
        address c;
        if (isLayer2Candidate) {
            c = candidate;
        } else {
            c = address(this);
        }

        require(c != address(0), "Candidate: coinage is zero");

        return IERC20(seigManager.coinages(c));
    }
}

File 2 of 17 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

import "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 () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 3 of 17 : IDAOCommittee.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;
pragma abicoder v2;

import { IStorageStateCommittee } from "IStorageStateCommittee.sol";

interface IDAOCommittee is IStorageStateCommittee {
    //--owner
    function setSeigManager(address _seigManager) external;
    function setCandidatesSeigManager(address[] calldata _candidateContracts, address _seigManager) external;
    function setCandidatesCommittee(address[] calldata _candidateContracts, address _committee) external;
    function setLayer2Registry(address _layer2Registry) external;
    function setAgendaManager(address _agendaManager) external;
    function setCandidateFactory(address _candidateFactory) external;
    function setTon(address _ton) external;
    function setActivityRewardPerSecond(uint256 _value) external;
    function setDaoVault(address _daoVault) external;

    function increaseMaxMember(uint256 _newMaxMember, uint256 _quorum) external;
    function decreaseMaxMember(uint256 _reducingMemberIndex, uint256 _quorum) external;
    function createCandidate(string calldata _memo) external;
    function registerLayer2Candidate(address _layer2, string memory _memo) external;
    function registerLayer2CandidateByOwner(address _operator, address _layer2, string memory _memo) external;
    function changeMember(uint256 _memberIndex) external returns (bool);
    function retireMember() external returns (bool);
    function setMemoOnCandidate(address _candidate, string calldata _memo) external;
    function setMemoOnCandidateContract(address _candidate, string calldata _memo) external;

    function onApprove(
        address owner,
        address spender,
        uint256 tonAmount,
        bytes calldata data
    )
        external
        returns (bool);

    function setQuorum(uint256 _quorum) external;
    function setCreateAgendaFees(uint256 _fees) external;
    function setMinimumNoticePeriodSeconds(uint256 _minimumNoticePeriod) external;
    function setMinimumVotingPeriodSeconds(uint256 _minimumVotingPeriod) external;
    function setExecutingPeriodSeconds(uint256 _executingPeriodSeconds) external;
    function castVote(uint256 _AgendaID, uint256 _vote, string calldata _comment) external;
    function endAgendaVoting(uint256 _agendaID) external;
    function executeAgenda(uint256 _AgendaID) external;
    function setAgendaStatus(uint256 _agendaID, uint256 _status, uint256 _result) external;

    function updateSeigniorage(address _candidate) external returns (bool);
    function updateSeigniorages(address[] calldata _candidates) external returns (bool);
    function claimActivityReward(address _receiver) external;

    function isCandidate(address _candidate) external view returns (bool);
    function totalSupplyOnCandidate(address _candidate) external view returns (uint256);
    function balanceOfOnCandidate(address _candidate, address _account) external view returns (uint256);
    function totalSupplyOnCandidateContract(address _candidateContract) external view returns (uint256);
    function balanceOfOnCandidateContract(address _candidateContract, address _account) external view returns (uint256);
    function candidatesLength() external view returns (uint256);
    function isExistCandidate(address _candidate) external view returns (bool);
    function getClaimableActivityReward(address _candidate) external view returns (uint256);
}

File 4 of 17 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <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);
}

File 5 of 17 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 6 of 17 : ISeigManager.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;

interface ISeigManager {
    function registry() external view returns (address);
    function depositManager() external view returns (address);
    function ton() external view returns (address);
    function wton() external view returns (address);
    function powerton() external view returns (address);
    function tot() external view returns (address);
    function coinages(address layer2) external view returns (address);
    function commissionRates(address layer2) external view returns (uint256);

    function lastCommitBlock(address layer2) external view returns (uint256);
    function seigPerBlock() external view returns (uint256);
    function lastSeigBlock() external view returns (uint256);
    function pausedBlock() external view returns (uint256);
    function unpausedBlock() external view returns (uint256);
    function DEFAULT_FACTOR() external view returns (uint256);

    function deployCoinage(address layer2) external returns (bool);
    function setCommissionRate(address layer2, uint256 commission, bool isCommissionRateNegative) external returns (bool);

    function uncomittedStakeOf(address layer2, address account) external view returns (uint256);
    function stakeOf(address layer2, address account) external view returns (uint256);
    function additionalTotBurnAmount(address layer2, address account, uint256 amount) external view returns (uint256 totAmount);

    function onTransfer(address sender, address recipient, uint256 amount) external returns (bool);
    function updateSeigniorage() external returns (bool);
    function onDeposit(address layer2, address account, uint256 amount) external returns (bool);
    function onWithdraw(address layer2, address account, uint256 amount) external returns (bool);
}

File 7 of 17 : ICandidate.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;

import { IDAOCommittee } from "IDAOCommittee.sol";
import { ISeigManager } from "ISeigManager.sol";

interface ICandidate {
    function setSeigManager(address _seigMan) external;
    function setCommittee(address _committee) external;
    function updateSeigniorage() external returns (bool);
    function changeMember(uint256 _memberIndex) external returns (bool);
    function retireMember() external returns (bool);
    function castVote(uint256 _agendaID, uint256 _vote, string calldata _comment) external;
    function isCandidateContract() external view returns (bool);
    function totalStaked() external view returns (uint256 totalsupply);
    function stakedOf(address _account) external view returns (uint256 amount);
    function setMemo(string calldata _memo) external;
    function claimActivityReward() external;

    // getter
    function candidate() external view returns (address);
    function isLayer2Candidate() external view returns (bool);
    function memo() external view returns (string memory);
    function committee() external view returns (IDAOCommittee);
    function seigManager() external view returns (ISeigManager);
}

File 8 of 17 : ILayer2.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;

interface ILayer2 {
  function operator() external view returns (address);
  function isLayer2() external view returns (bool);
  function currentFork() external view returns (uint256);
  function lastEpoch(uint256 forkNumber) external view returns (uint256);
  function changeOperator(address _operator) external;
}

File 9 of 17 : ILayer2Registry.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;

interface ILayer2Registry {
    function layer2s(address layer2) external view returns (bool);

    function register(address layer2) external returns (bool);
    function numLayer2s() external view returns (uint256);
    function layer2ByIndex(uint256 index) external view returns (address);

    function deployCoinage(address layer2, address seigManager) external returns (bool);
    function registerAndDeployCoinage(address layer2, address seigManager) external returns (bool);
    function unregister(address layer2) external returns (bool);
}

File 10 of 17 : ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

import "IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts may inherit from this and call {_registerInterface} to declare
 * their support of an interface.
 */
abstract contract ERC165 is IERC165 {
    /*
     * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7
     */
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;

    /**
     * @dev Mapping of interface ids to whether or not it's supported.
     */
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () internal {
        // Derived contracts need only register support for their own interfaces,
        // we register support for ERC165 itself here
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     *
     * Time complexity O(1), guaranteed to always use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    /**
     * @dev Registers the contract as an implementer of the interface defined by
     * `interfaceId`. Support of the actual ERC165 interface is automatic and
     * registering its interface id is not required.
     *
     * See {IERC165-supportsInterface}.
     *
     * Requirements:
     *
     * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).
     */
    function _registerInterface(bytes4 interfaceId) internal virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

File 11 of 17 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <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 GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 12 of 17 : IStorageStateCommittee.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;
pragma abicoder v2;

import { ICandidateFactory } from "ICandidateFactory.sol";
import { ILayer2Registry } from "ILayer2Registry.sol";
import { ISeigManager } from "ISeigManager.sol";
import { IDAOAgendaManager } from "IDAOAgendaManager.sol";
import { IDAOVault } from "IDAOVault.sol";

interface IStorageStateCommittee {
    struct CandidateInfo {
        address candidateContract;
        uint256 indexMembers;
        uint128 memberJoinedTime;
        uint128 rewardPeriod;
        uint128 claimedTimestamp;
    }

    function ton() external returns (address);
    function daoVault() external returns (IDAOVault);
    function agendaManager() external returns (IDAOAgendaManager);
    function candidateFactory() external returns (ICandidateFactory);
    function layer2Registry() external returns (ILayer2Registry);
    function seigManager() external returns (ISeigManager);
    function candidates(uint256 _index) external returns (address);
    function members(uint256 _index) external returns (address);
    function maxMember() external returns (uint256);
    function candidateInfos(address _candidate) external returns (CandidateInfo memory);
    function quorum() external returns (uint256);
    function activityRewardPerSecond() external returns (uint256);

    function isMember(address _candidate) external returns (bool);
    function candidateContract(address _candidate) external returns (address);
}

File 13 of 17 : IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 14 of 17 : ICandidateFactory.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;

interface ICandidateFactory {
    function deploy(
        address _candidate,
        bool _isLayer2Candidate,
        string memory _name,
        address _committee,
        address _seigManager
    )
        external
        returns (address);
}

File 15 of 17 : IDAOAgendaManager.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;
pragma abicoder v2;

import { LibAgenda } from "LibAgenda.sol";
import { IDAOCommittee } from "IDAOCommittee.sol";

interface IDAOAgendaManager  {
    struct Ratio {
        uint256 numerator;
        uint256 denominator;
    }

    function setCommittee(address _committee) external;
    function setCreateAgendaFees(uint256 _createAgendaFees) external;
    function setMinimumNoticePeriodSeconds(uint256 _minimumNoticePeriodSeconds) external;
    function setMinimumVotingPeriodSeconds(uint256 _minimumVotingPeriodSeconds) external;
    function setExecutingPeriodSeconds(uint256 _executingPeriodSeconds) external;
    function newAgenda(
        address[] memory _targets,
        uint256 _noticePeriodSeconds,
        uint256 _votingPeriodSeconds,
        bool _atomicExecute,
        bytes[] calldata _functionBytecodes
    )
        external
        returns (uint256 agendaID);
    function castVote(uint256 _agendaID, address voter, uint256 _vote) external returns (bool);
    function setExecutedAgenda(uint256 _agendaID) external;
    function setResult(uint256 _agendaID, LibAgenda.AgendaResult _result) external;
    function setStatus(uint256 _agendaID, LibAgenda.AgendaStatus _status) external;
    function endAgendaVoting(uint256 _agendaID) external;
    function setExecutedCount(uint256 _agendaID, uint256 _count) external;
     
    // -- view functions
    function isVoter(uint256 _agendaID, address _user) external view returns (bool);
    function hasVoted(uint256 _agendaID, address _user) external view returns (bool);
    function getVoteStatus(uint256 _agendaID, address _user) external view returns (bool, uint256);
    function getAgendaNoticeEndTimeSeconds(uint256 _agendaID) external view returns (uint256);
    function getAgendaVotingStartTimeSeconds(uint256 _agendaID) external view returns (uint256);
    function getAgendaVotingEndTimeSeconds(uint256 _agendaID) external view returns (uint256) ;

    function canExecuteAgenda(uint256 _agendaID) external view returns (bool);
    function getAgendaStatus(uint256 _agendaID) external view returns (uint256 status);
    function totalAgendas() external view returns (uint256);
    function getAgendaResult(uint256 _agendaID) external view returns (uint256 result, bool executed);
    function getExecutionInfo(uint256 _agendaID)
        external
        view
        returns(
            address[] memory target,
            bytes[] memory functionBytecode,
            bool atomicExecute,
            uint256 executeStartFrom
        );
    function isVotableStatus(uint256 _agendaID) external view returns (bool);
    function getVotingCount(uint256 _agendaID)
        external
        view
        returns (
            uint256 countingYes,
            uint256 countingNo,
            uint256 countingAbstain
        );
    function getAgendaTimestamps(uint256 _agendaID)
        external
        view
        returns (
            uint256 createdTimestamp,
            uint256 noticeEndTimestamp,
            uint256 votingStartedTimestamp,
            uint256 votingEndTimestamp,
            uint256 executedTimestamp
        );
    function numAgendas() external view returns (uint256);
    function getVoters(uint256 _agendaID) external view returns (address[] memory);

    function getStatus(uint256 _createAgendaFees) external pure returns (LibAgenda.AgendaStatus);

    // getter
    function committee() external view returns (IDAOCommittee);
    function createAgendaFees() external view returns (uint256);
    function minimumNoticePeriodSeconds() external view returns (uint256);
    function minimumVotingPeriodSeconds() external view returns (uint256);
    function executingPeriodSeconds() external view returns (uint256);
    function agendas(uint256 _index) external view returns (LibAgenda.Agenda memory);
    function voterInfos(uint256 _index1, address _index2) external view returns (LibAgenda.Voter memory);
}

File 16 of 17 : IDAOVault.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;

interface IDAOVault {
    function setTON(address _ton) external;
    function setWTON(address _wton) external;
    function approveTON(address _to, uint256 _amount) external;
    function approveWTON(address _to, uint256 _amount) external;
    function approveERC20(address _token, address _to, uint256 _amount) external;
    function claimTON(address _to, uint256 _amount) external;
    function claimWTON(address _to, uint256 _amount) external;
    function claimERC20(address _token, address _to, uint256 _amount) external;
}

File 17 of 17 : LibAgenda.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;
pragma abicoder v2;

library LibAgenda {
    //using LibAgenda for Agenda;

    enum AgendaStatus { NONE, NOTICE, VOTING, WAITING_EXEC, EXECUTED, ENDED }
    enum AgendaResult { PENDING, ACCEPT, REJECT, DISMISS }

    //votor : based operator 
    struct Voter {
        bool isVoter;
        bool hasVoted;
        uint256 vote;
    }

    // counting abstainVotes yesVotes noVotes
    struct Agenda {
        uint256 createdTimestamp;
        uint256 noticeEndTimestamp;
        uint256 votingPeriodInSeconds;
        uint256 votingStartedTimestamp;
        uint256 votingEndTimestamp;
        uint256 executableLimitTimestamp;
        uint256 executedTimestamp;
        uint256 countingYes;
        uint256 countingNo;
        uint256 countingAbstain;
        AgendaStatus status;
        AgendaResult result;
        address[] voters;
        bool executed;
    }

    struct AgendaExecutionInfo {
        address[] targets;
        bytes[] functionBytecodes;
        bool atomicExecute;
        uint256 executeStartFrom;
    }

    /*function getAgenda(Agenda[] storage agendas, uint256 index) public view returns (Agenda storage agenda) {
        return agendas[index];
    }*/
}

Settings
{
  "remappings": [
    ":g=/dir"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "istanbul",
  "metadata": {
    "useLiteralContent": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_candidate","type":"address"},{"internalType":"bool","name":"_isLayer2Candidate","type":"bool"},{"internalType":"string","name":"_memo","type":"string"},{"internalType":"address","name":"_committee","type":"address"},{"internalType":"address","name":"_seigManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"candidate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"},{"internalType":"uint256","name":"_vote","type":"uint256"},{"internalType":"string","name":"_comment","type":"string"}],"name":"castVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_memberIndex","type":"uint256"}],"name":"changeMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"changeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimActivityReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"committee","outputs":[{"internalType":"contract IDAOCommittee","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentFork","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isCandidateContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLayer2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLayer2Candidate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"forkNumber","type":"uint256"}],"name":"lastEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"memo","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"retireMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"seigManager","outputs":[{"internalType":"contract ISeigManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_committee","type":"address"}],"name":"setCommittee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_memo","type":"string"}],"name":"setMemo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_seigManager","type":"address"}],"name":"setSeigManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"stakedOf","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"totalsupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateSeigniorage","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101735760003560e01c8063764a7856116100de5780638da5cb5b11610097578063bddae40e11610071578063bddae40e14610450578063c4ef9c0014610476578063d864e7401461047e578063f2fde38b1461048657610173565b80638da5cb5b1461041a5780639b63826814610422578063af500ba31461042a57610173565b8063764a7856146103d45780637657f20a146103dc57806377ff21c414610402578063817b1cd21461040a578063882eed2c146104025780638bf7a3ab1461041257610173565b806325d608611161013057806325d60861146102ab578063570ca7351461031b57806358c3b8701461033f5780636c8381f8146103bc5780636fb7f558146103c4578063715018a6146103cc57610173565b806301ffc9a71461017857806306394c9b146101b357806311e4c914146101db57806311f19e041461020a578063183d2d1c1461022757806324f99b1e1461022f575b600080fd5b61019f6004803603602081101561018e57600080fd5b50356001600160e01b0319166104ac565b604080519115158252519081900360200190f35b6101d9600480360360208110156101c957600080fd5b50356001600160a01b03166104cb565b005b6101f8600480360360208110156101f157600080fd5b50356104ce565b60408051918252519081900360200190f35b61019f6004803603602081101561022057600080fd5b50356104d4565b6101f8610682565b6101d96004803603606081101561024557600080fd5b81359160208101359181019060608101604082013564010000000081111561026c57600080fd5b82018360208201111561027e57600080fd5b803590602001918460018302840111640100000000831117156102a057600080fd5b509092509050610687565b6101d9600480360360208110156102c157600080fd5b8101906020810181356401000000008111156102dc57600080fd5b8201836020820111156102ee57600080fd5b8035906020019184600183028401116401000000008311171561031057600080fd5b50909250905061085c565b6103236108c5565b604080516001600160a01b039092168252519081900360200190f35b6103476108d9565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610381578181015183820152602001610369565b50505050905090810190601f1680156103ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610323610967565b61032361097b565b6101d961098a565b61019f610a2c565b6101d9600480360360208110156103f257600080fd5b50356001600160a01b0316610b4f565b61019f610682565b6101f8610c1f565b6101d9610c97565b610323610eec565b61019f610efb565b6101f86004803603602081101561044057600080fd5b50356001600160a01b0316610f04565b6101d96004803603602081101561046657600080fd5b50356001600160a01b0316610f91565b61019f611061565b6103236111d4565b6101d96004803603602081101561049c57600080fd5b50356001600160a01b03166111e3565b6001600160e01b03191660009081526001602052604090205460ff1690565b50565b50600190565b60025460009060ff16156105b6576000600260019054906101000a90046001600160a01b03169050336001600160a01b0316816001600160a01b031663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b15801561053f57600080fd5b505afa158015610553573d6000803e3d6000fd5b505050506040513d602081101561056957600080fd5b50516001600160a01b0316146105b05760405162461bcd60e51b815260040180806020018281038252603681526020018061150d6036913960400191505060405180910390fd5b50610604565b60025461010090046001600160a01b031633146106045760405162461bcd60e51b81526004018080602001828103825260378152602001806114796037913960400191505060405180910390fd5b600480546040805163047c678160e21b8152928301859052516001600160a01b03909116916311f19e049160248083019260209291908290030181600087803b15801561065057600080fd5b505af1158015610664573d6000803e3d6000fd5b505050506040513d602081101561067a57600080fd5b505192915050565b600190565b60025460ff1615610766576000600260019054906101000a90046001600160a01b03169050336001600160a01b0316816001600160a01b031663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b1580156106ef57600080fd5b505afa158015610703573d6000803e3d6000fd5b505050506040513d602081101561071957600080fd5b50516001600160a01b0316146107605760405162461bcd60e51b815260040180806020018281038252603681526020018061150d6036913960400191505060405180910390fd5b506107b4565b60025461010090046001600160a01b031633146107b45760405162461bcd60e51b81526004018080602001828103825260378152602001806114796037913960400191505060405180910390fd5b6004805460405163127ccd8f60e11b815291820186815260248301869052606060448401908152606484018590526001600160a01b03909216926324f99b1e92889288928892889291608401848480828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561083e57600080fd5b505af1158015610852573d6000803e3d6000fd5b5050505050505050565b6108646112db565b6000546001600160a01b039081169116146108b4576040805162461bcd60e51b815260206004820181905260248201526000805160206114ed833981519152604482015290519081900360640190fd5b6108c0600383836113b1565b505050565b60025461010090046001600160a01b031690565b6003805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561095f5780601f106109345761010080835404028352916020019161095f565b820191906000526020600020905b81548152906001019060200180831161094257829003601f168201915b505050505081565b60025461010090046001600160a01b031681565b6005546001600160a01b031681565b6109926112db565b6000546001600160a01b039081169116146109e2576040805162461bcd60e51b815260206004820181905260248201526000805160206114ed833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6005546000906001600160a01b0316610a8c576040805162461bcd60e51b815260206004820152601e60248201527f43616e6469646174653a20536569674d616e61676572206973207a65726f0000604482015290519081900360640190fd5b60025460ff1615610ace5760405162461bcd60e51b815260040180806020018281038252603d8152602001806114b0603d913960400191505060405180910390fd5b600560009054906101000a90046001600160a01b03166001600160a01b031663764a78566040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b505050506040513d6020811015610b4857600080fd5b5051905090565b610b576112db565b6000546001600160a01b03908116911614610ba7576040805162461bcd60e51b815260206004820181905260248201526000805160206114ed833981519152604482015290519081900360640190fd5b6001600160a01b038116610bfd576040805162461bcd60e51b815260206004820152601860248201527743616e6469646174653a20696e707574206973207a65726f60401b604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080610c2a6112df565b9050806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c6557600080fd5b505afa158015610c79573d6000803e3d6000fd5b505050506040513d6020811015610c8f57600080fd5b505191505090565b60025460ff1615610d76576000600260019054906101000a90046001600160a01b03169050336001600160a01b0316816001600160a01b031663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015610cff57600080fd5b505afa158015610d13573d6000803e3d6000fd5b505050506040513d6020811015610d2957600080fd5b50516001600160a01b031614610d705760405162461bcd60e51b815260040180806020018281038252603681526020018061150d6036913960400191505060405180910390fd5b50610dc4565b60025461010090046001600160a01b03163314610dc45760405162461bcd60e51b81526004018080602001828103825260378152602001806114796037913960400191505060405180910390fd5b60025460009060ff1615610e5a576000600260019054906101000a90046001600160a01b03169050806001600160a01b031663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015610e2557600080fd5b505afa158015610e39573d6000803e3d6000fd5b505050506040513d6020811015610e4f57600080fd5b50519150610e6d9050565b5060025461010090046001600160a01b03165b600460009054906101000a90046001600160a01b03166001600160a01b0316636becff27826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015610ed157600080fd5b505af1158015610ee5573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031690565b60025460ff1681565b600080610f0f6112df565b9050806001600160a01b03166370a08231846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610f5e57600080fd5b505afa158015610f72573d6000803e3d6000fd5b505050506040513d6020811015610f8857600080fd5b50519392505050565b610f996112db565b6000546001600160a01b03908116911614610fe9576040805162461bcd60e51b815260206004820181905260248201526000805160206114ed833981519152604482015290519081900360640190fd5b6001600160a01b03811661103f576040805162461bcd60e51b815260206004820152601860248201527743616e6469646174653a20696e707574206973207a65726f60401b604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60025460009060ff1615611143576000600260019054906101000a90046001600160a01b03169050336001600160a01b0316816001600160a01b031663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b1580156110cc57600080fd5b505afa1580156110e0573d6000803e3d6000fd5b505050506040513d60208110156110f657600080fd5b50516001600160a01b03161461113d5760405162461bcd60e51b815260040180806020018281038252603681526020018061150d6036913960400191505060405180910390fd5b50611191565b60025461010090046001600160a01b031633146111915760405162461bcd60e51b81526004018080602001828103825260378152602001806114796037913960400191505060405180910390fd5b600480546040805162313be760ea1b815290516001600160a01b039092169263c4ef9c009282820192602092908290030181600087803b158015610b1e57600080fd5b6004546001600160a01b031681565b6111eb6112db565b6000546001600160a01b0390811691161461123b576040805162461bcd60e51b815260206004820181905260248201526000805160206114ed833981519152604482015290519081900360640190fd5b6001600160a01b0381166112805760405162461bcd60e51b81526004018080602001828103825260268152602001806114536026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600254600090819060ff1615611306575060025461010090046001600160a01b0316611309565b50305b6001600160a01b038116611364576040805162461bcd60e51b815260206004820152601a60248201527f43616e6469646174653a20636f696e616765206973207a65726f000000000000604482015290519081900360640190fd5b60055460408051634c063c1960e01b81526001600160a01b03848116600483015291519190921691634c063c19916024808301926020929190829003018186803b158015610c6557600080fd5b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826113e7576000855561142d565b82601f106114005782800160ff1982351617855561142d565b8280016001018555821561142d579182015b8281111561142d578235825591602001919060010190611412565b5061143992915061143d565b5090565b5b80821115611439576000815560010161143e56fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737343616e6469646174653a2073656e646572206973206e6f74207468652063616e646964617465206f66207468697320636f6e747261637443616e6469646174653a20796f752073686f756c642075706461746520736569676e696f726167652066726f6d206c617965723220636f6e74726163744f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657243616e6469646174653a2073656e646572206973206e6f7420746865206f70657261746f72206f66207468697320636f6e7472616374a264697066735822122006aa15018ce209fd2118b1446e326cd8b90c40a0ef06a1565a486e9b5772286e64736f6c63430007060033

Deployed Bytecode Sourcemap

532:5912:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;963:140:2;;;;;;;;;;;;;;;;-1:-1:-1;963:140:2;-1:-1:-1;;;;;;963:140:2;;:::i;:::-;;;;;;;;;;;;;;;;;;5275:64:0;;;;;;;;;;;;;;;;-1:-1:-1;5275:64:0;-1:-1:-1;;;;;5275:64:0;;:::i;:::-;;5177:93;;;;;;;;;;;;;;;;-1:-1:-1;5177:93:0;;:::i;:::-;;;;;;;;;;;;;;;;3532:187;;;;;;;;;;;;;;;;-1:-1:-1;3532:187:0;;:::i;5095:77::-;;;:::i;4086:231::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4086:231:0;;-1:-1:-1;4086:231:0;-1:-1:-1;4086:231:0;:::i;2766:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2766:97:0;;-1:-1:-1;2766:97:0;-1:-1:-1;2766:97:0;:::i;4929:82::-;;;:::i;:::-;;;;-1:-1:-1;;;;;4929:82:0;;;;;;;;;;;;;;713:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;674:33;;;:::i;792:40::-;;;:::i;1699:145:15:-;;;:::i;3033:341:0:-;;;:::i;2162:204::-;;;;;;;;;;;;;;;;-1:-1:-1;2162:204:0;-1:-1:-1;;;;;2162:204:0;;:::i;4826:97::-;;;:::i;5480:202::-;;;:::i;4323:359::-;;;:::i;1076:77:15:-;;;:::i;630:38:0:-;;;:::i;5889:230::-;;;;;;;;;;;;;;;;-1:-1:-1;5889:230:0;-1:-1:-1;;;;;5889:230:0;;:::i;2492:195::-;;;;;;;;;;;;;;;;-1:-1:-1;2492:195:0;-1:-1:-1;;;;;2492:195:0;;:::i;3812:119::-;;;:::i;747:39::-;;;:::i;1993:240:15:-;;;;;;;;;;;;;;;;-1:-1:-1;1993:240:15;-1:-1:-1;;;;;1993:240:15;;:::i;963:140:2:-;-1:-1:-1;;;;;;1063:33:2;1040:4;1063:33;;;:20;:33;;;;;;;;;963:140::o;5275:64:0:-;;:::o;5177:93::-;-1:-1:-1;5266:1:0;;5177:93::o;3532:187::-;878:17;;3649:4;;878:17;;874:317;;;911:14;936:9;;;;;;;;;-1:-1:-1;;;;;936:9:0;911:35;;989:10;-1:-1:-1;;;;;968:31:0;:6;-1:-1:-1;;;;;968:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;968:17:0;-1:-1:-1;;;;;968:31:0;;960:98;;;;-1:-1:-1;;;960:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;874:317;;;;1097:9;;;;;-1:-1:-1;;;;;1097:9:0;1110:10;1097:23;1089:91;;;;-1:-1:-1;;;1089:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3676:9:::1;::::0;;:36:::1;::::0;;-1:-1:-1;;;3676:36:0;;;;::::1;::::0;;;;-1:-1:-1;;;;;3676:9:0;;::::1;::::0;:22:::1;::::0;:36;;;;;::::1;::::0;;;;;;;;:9:::1;::::0;:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;3676:36:0;;3532:187;-1:-1:-1;;3532:187:0:o;5095:77::-;5168:1;5095:77;:::o;4086:231::-;878:17;;;;874:317;;;911:14;936:9;;;;;;;;;-1:-1:-1;;;;;936:9:0;911:35;;989:10;-1:-1:-1;;;;;968:31:0;:6;-1:-1:-1;;;;;968:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;968:17:0;-1:-1:-1;;;;;968:31:0;;960:98;;;;-1:-1:-1;;;960:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;874:317;;;;1097:9;;;;;-1:-1:-1;;;;;1097:9:0;1110:10;1097:23;1089:91;;;;-1:-1:-1;;;1089:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4264:9:::1;::::0;;:46:::1;::::0;-1:-1:-1;;;4264:46:0;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4264:9:0;;::::1;::::0;:18:::1;::::0;4283:9;;4294:5;;4301:8;;;;4264:46;;;4301:8;;;;4264:46;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4086:231:::0;;;;:::o;2766:97::-;1290:12:15;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:15;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:15;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:15;;;;;;;;;;;;;;;2844:12:0::1;:4;2851:5:::0;;2844:12:::1;:::i;:::-;;2766:97:::0;;:::o;4929:82::-;4999:9;;;;;-1:-1:-1;;;;;4999:9:0;;4929:82::o;713:27::-;;;;;;;;;;;;;;;-1:-1:-1;;713:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;674:33::-;;;;;;-1:-1:-1;;;;;674:33:0;;:::o;792:40::-;;;-1:-1:-1;;;;;792:40:0;;:::o;1699:145:15:-;1290:12;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:15;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:15;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:15;;;;;;;;;;;;;;;1805:1:::1;1789:6:::0;;1768:40:::1;::::0;-1:-1:-1;;;;;1789:6:15;;::::1;::::0;1768:40:::1;::::0;1805:1;;1768:40:::1;1835:1;1818:19:::0;;-1:-1:-1;;;;;;1818:19:15::1;::::0;;1699:145::o;3033:341:0:-;3121:11;;3089:4;;-1:-1:-1;;;;;3121:11:0;3105:77;;;;;-1:-1:-1;;;3105:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3214:17;;;;3213:18;3192:126;;;;-1:-1:-1;;;3192:126:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3336:11;;;;;;;;;-1:-1:-1;;;;;3336:11:0;-1:-1:-1;;;;;3336:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3336:31:0;;-1:-1:-1;3033:341:0;:::o;2162:204::-;1290:12:15;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:15;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:15;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:15;;;;;;;;;;;;;;;-1:-1:-1;;;;;2254:26:0;::::1;2246:63;;;::::0;;-1:-1:-1;;;2246:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2246:63:0;;;;;;;;;;;;;::::1;;2319:11;:40:::0;;-1:-1:-1;;;;;;2319:40:0::1;-1:-1:-1::0;;;;;2319:40:0;;;::::1;::::0;;;::::1;::::0;;2162:204::o;5480:202::-;5567:19;5602:14;5619:18;:16;:18::i;:::-;5602:35;;5654:7;-1:-1:-1;;;;;5654:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5654:21:0;;-1:-1:-1;;5480:202:0;:::o;4323:359::-;878:17;;;;874:317;;;911:14;936:9;;;;;;;;;-1:-1:-1;;;;;936:9:0;911:35;;989:10;-1:-1:-1;;;;;968:31:0;:6;-1:-1:-1;;;;;968:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;968:17:0;-1:-1:-1;;;;;968:31:0;;960:98;;;;-1:-1:-1;;;960:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;874:317;;;;1097:9;;;;;-1:-1:-1;;;;;1097:9:0;1110:10;1097:23;1089:91;;;;-1:-1:-1;;;1089:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4455:17:::1;::::0;4424:16:::1;::::0;4455:17:::1;;4451:176;;;4488:14;4513:9;;;;;;;;;-1:-1:-1::0;;;;;4513:9:0::1;4488:35;;4548:6;-1:-1:-1::0;;;;;4548:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;4548:17:0;;-1:-1:-1;4451:176:0::1;::::0;-1:-1:-1;4451:176:0::1;;-1:-1:-1::0;4607:9:0::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;4607:9:0::1;4451:176;4636:9;;;;;;;;;-1:-1:-1::0;;;;;4636:9:0::1;-1:-1:-1::0;;;;;4636:29:0::1;;4666:8;4636:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;4636:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1200:1;4323:359::o:0;1076:77:15:-;1114:7;1140:6;-1:-1:-1;;;;;1140:6:15;1076:77;:::o;630:38:0:-;;;;;;:::o;5889:230::-;6003:14;6033;6050:18;:16;:18::i;:::-;6033:35;;6085:7;-1:-1:-1;;;;;6085:17:0;;6103:8;6085:27;;;;;;;;;;;;;-1:-1:-1;;;;;6085:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6085:27:0;;5889:230;-1:-1:-1;;;5889:230:0:o;2492:195::-;1290:12:15;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:15;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:15;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:15;;;;;;;;;;;;;;;-1:-1:-1;;;;;2580:24:0;::::1;2572:61;;;::::0;;-1:-1:-1;;;2572:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2572:61:0;;;;;;;;;;;;;::::1;;2643:9;:37:::0;;-1:-1:-1;;;;;;2643:37:0::1;-1:-1:-1::0;;;;;2643:37:0;;;::::1;::::0;;;::::1;::::0;;2492:195::o;3812:119::-;878:17;;3877:4;;878:17;;874:317;;;911:14;936:9;;;;;;;;;-1:-1:-1;;;;;936:9:0;911:35;;989:10;-1:-1:-1;;;;;968:31:0;:6;-1:-1:-1;;;;;968:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;968:17:0;-1:-1:-1;;;;;968:31:0;;960:98;;;;-1:-1:-1;;;960:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;874:317;;;;1097:9;;;;;-1:-1:-1;;;;;1097:9:0;1110:10;1097:23;1089:91;;;;-1:-1:-1;;;1089:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3900:9:::1;::::0;;:24:::1;::::0;;-1:-1:-1;;;3900:24:0;;;;-1:-1:-1;;;;;3900:9:0;;::::1;::::0;:22:::1;::::0;:24;;::::1;::::0;::::1;::::0;;;;;;;:9:::1;::::0;:24;::::1;;::::0;::::1;;;;::::0;::::1;747:39:::0;;;-1:-1:-1;;;;;747:39:0;;:::o;1993:240:15:-;1290:12;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:15;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:15;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:15;;;;;;;;;;;;;;;-1:-1:-1;;;;;2081:22:15;::::1;2073:73;;;;-1:-1:-1::0;;;2073:73:15::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2182:6;::::0;;2161:38:::1;::::0;-1:-1:-1;;;;;2161:38:15;;::::1;::::0;2182:6;::::1;::::0;2161:38:::1;::::0;::::1;2209:6;:17:::0;;-1:-1:-1;;;;;;2209:17:15::1;-1:-1:-1::0;;;;;2209:17:15;;;::::1;::::0;;;::::1;::::0;;1993:240::o;598:104:1:-;685:10;598:104;:::o;6125:317:0:-;6217:17;;6176:6;;;;6217:17;;6213:109;;;-1:-1:-1;6254:9:0;;;;;-1:-1:-1;;;;;6254:9:0;6213:109;;;-1:-1:-1;6306:4:0;6213:109;-1:-1:-1;;;;;6340:15:0;;6332:54;;;;;-1:-1:-1;;;6332:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6411:11;;:23;;;-1:-1:-1;;;6411:23:0;;-1:-1:-1;;;;;6411:23:0;;;;;;;;;:11;;;;;:20;;:23;;;;;;;;;;;;;;:11;:23;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;

Swarm Source

ipfs://06aa15018ce209fd2118b1446e326cd8b90c40a0ef06a1565a486e9b5772286e

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.