ETH Price: $1,975.49 (+0.29%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Advanced mode:
Parent Transaction Hash Method Block
From
To
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BitxenGovernor

Compiler Version
v0.8.34+commit.80d5c536

Optimization Enabled:
Yes with 200 runs

Other Settings:
shanghai EvmVersion
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.34;

/*
 * BitxenGovernor — On-chain DAO for the Bitxen Protocol
 *
 * Activation:  Only becomes operational once Bitxen.totalRecordsStored()
 *              reaches DAO_ACTIVATION_THRESHOLD (5,000,000 vaults).
 *
 * Voting power: BITXEN token balance at the block snapshot captured when
 *               each proposal is created (via ERC20Votes.getPastVotes).
 *
 * Proposal types:
 *   UPDATE_FEE_PARAMS   — change baseFeePhase1, feeIncrementPhase1/2
 *   UPDATE_BURN_PARAMS  — change baseBurnPercent, burnIncrement1/2, maxBurnCap
 *   UPDATE_TREASURY     — change the treasury address
 *   UPDATE_GOVERNOR     — replace this governor contract with a new one
 *
 * Lifecycle:
 *   propose() → [VOTING_PERIOD] → queue() → [TIMELOCK_DELAY] → execute()
 *   Any state: cancel() by proposer (before execution)
 *
 * Governance parameters (themselves changeable by governance after deployment):
 *   • votingPeriod     — blocks during which votes are accepted   (default ≈ 7 days)
 *   • timelockDelay    — blocks between queue and execute         (default ≈ 2 days)
 *   • quorumBps        — minimum FOR votes as % of total supply   (default 4.00%)
 *   • proposalThreshold — min tokens required to submit a proposal (default 100k)
 */

interface IBitxen {
    function totalRecordsStored() external view returns (uint256);
    function DAO_ACTIVATION_THRESHOLD() external view returns (uint256);
    function totalSupply() external view returns (uint256);
    function getPastVotes(address account, uint256 timepoint) external view returns (uint256);
    function clock() external view returns (uint48);

    // Governance-callable setters on Bitxen
    function setFeeParams(uint256 baseFeePhase1, uint256 feeIncrementPhase1, uint256 feeIncrementPhase2) external;
    function setBurnParams(uint256 baseBurnPercent, uint256 burnIncrementPhase1, uint256 burnIncrementPhase2, uint256 maxBurnCap) external;
    function setTreasuryByGovernor(address newTreasury) external;
    function setGovernor(address newGovernor) external;
}

contract BitxenGovernor {

    // -------------------------------------------------------------------------
    // Types
    // -------------------------------------------------------------------------

    enum ProposalType {
        UPDATE_FEE_PARAMS,   // 0
        UPDATE_BURN_PARAMS,  // 1
        UPDATE_TREASURY,     // 2
        UPDATE_GOVERNOR      // 3
    }

    enum ProposalState {
        Pending,    // 0 — waiting for voting to start (1-block delay)
        Active,     // 1 — vote is open
        Defeated,   // 2 — vote closed, quorum not met or majority against
        Succeeded,  // 3 — vote passed, not yet queued
        Queued,     // 4 — in timelock
        Executed,   // 5 — successfully executed
        Cancelled   // 6 — cancelled by proposer
    }

    struct FeeParams {
        uint256 baseFeePhase1;
        uint256 feeIncrementPhase1;
        uint256 feeIncrementPhase2;
    }

    struct BurnParams {
        uint256 baseBurnPercent;
        uint256 burnIncrementPhase1;
        uint256 burnIncrementPhase2;
        uint256 maxBurnCap;
    }

    struct Proposal {
        uint256      id;
        address      proposer;
        ProposalType proposalType;
        // Encoded payload — decoded according to proposalType on execution
        bytes        payload;
        // Human-readable description stored off-chain; only hash stored on-chain
        bytes32      descriptionHash;
        // Voting window (in block numbers)
        uint256      snapshotBlock;  // getPastVotes queried at this block
        uint256      voteStart;      // first block votes are accepted
        uint256      voteEnd;        // last block votes are accepted (inclusive)
        // Timelock
        uint256      eta;            // block number after which execution is allowed (0 = not queued)
        // Tallies
        uint256      votesFor;
        uint256      votesAgainst;
        uint256      votesAbstain;
        // State flags
        bool         executed;
        bool         cancelled;
    }

    // -------------------------------------------------------------------------
    // State
    // -------------------------------------------------------------------------

    IBitxen public immutable bitxen;

    uint256 public proposalCount;
    mapping(uint256 => Proposal) public proposals;

    // voter => proposalId => has voted
    mapping(address => mapping(uint256 => bool)) public hasVoted;
    // voter => proposalId => vote (0=Against, 1=For, 2=Abstain)
    mapping(address => mapping(uint256 => uint8)) public voteChoice;

    // Governance parameters (all updatable by governance itself)
    uint256 public votingPeriod;      // in blocks
    uint256 public timelockDelay;     // in blocks
    uint256 public quorumBps;         // basis points of total supply (e.g. 400 = 4%)
    uint256 public proposalThreshold; // min voting power to create a proposal

    // Constants
    uint256 public constant VOTING_DELAY      = 1;       // 1 block before voting starts
    uint256 public constant MIN_VOTING_PERIOD = 1_800;   // ≈ 6 hours  (assuming 12s blocks)
    uint256 public constant MAX_VOTING_PERIOD = 100_800; // ≈ 14 days
    uint256 public constant MIN_TIMELOCK      = 900;     // ≈ 3 hours
    uint256 public constant MAX_TIMELOCK      = 50_400;  // ≈ 7 days
    uint256 public constant MAX_QUORUM_BPS    = 3000;    // 30% ceiling
    uint256 public constant BPS_DENOMINATOR   = 10_000;

    // -------------------------------------------------------------------------
    // Events
    // -------------------------------------------------------------------------

    event ProposalCreated(
        uint256 indexed proposalId,
        address indexed proposer,
        ProposalType    proposalType,
        bytes32         descriptionHash,
        uint256         voteStart,
        uint256         voteEnd
    );
    event VoteCast(
        uint256 indexed proposalId,
        address indexed voter,
        uint8           support,      // 0=Against, 1=For, 2=Abstain
        uint256         weight
    );
    event ProposalQueued(uint256 indexed proposalId, uint256 eta);
    event ProposalExecuted(uint256 indexed proposalId);
    event ProposalCancelled(uint256 indexed proposalId);
    event GovernanceParamsUpdated(
        uint256 votingPeriod,
        uint256 timelockDelay,
        uint256 quorumBps,
        uint256 proposalThreshold
    );

    // -------------------------------------------------------------------------
    // Modifiers
    // -------------------------------------------------------------------------

    modifier daoActive() {
        require(
            bitxen.totalRecordsStored() >= bitxen.DAO_ACTIVATION_THRESHOLD(),
            "Governor: DAO not yet active (< 5M vaults)"
        );
        _;
    }

    modifier onlySelf() {
        require(msg.sender == address(this), "Governor: caller must be governor");
        _;
    }

    // -------------------------------------------------------------------------
    // Constructor
    // -------------------------------------------------------------------------

    constructor(
        address _bitxen,
        uint256 _votingPeriod,      // recommended: 50_400 ≈ 7 days
        uint256 _timelockDelay,     // recommended: 14_400 ≈ 2 days
        uint256 _quorumBps,         // recommended: 400 = 4%
        uint256 _proposalThreshold  // recommended: 100_000 * 1e18
    ) {
        require(_bitxen != address(0), "Governor: invalid bitxen address");
        require(_votingPeriod  >= MIN_VOTING_PERIOD && _votingPeriod  <= MAX_VOTING_PERIOD, "Governor: voting period out of range");
        require(_timelockDelay >= MIN_TIMELOCK      && _timelockDelay <= MAX_TIMELOCK,      "Governor: timelock out of range");
        require(_quorumBps     <= MAX_QUORUM_BPS,   "Governor: quorum too high");
        require(_proposalThreshold > 0,             "Governor: threshold must be > 0");

        bitxen             = IBitxen(_bitxen);
        votingPeriod       = _votingPeriod;
        timelockDelay      = _timelockDelay;
        quorumBps          = _quorumBps;
        proposalThreshold  = _proposalThreshold;
    }

    // -------------------------------------------------------------------------
    // Proposal Creation
    // -------------------------------------------------------------------------

    /// @notice Create a fee parameter update proposal.
    /// @param _baseFeePhase1      New base fee (scaled by 1e18).
    /// @param _feeIncrementPhase1 New fee increment per epoch in Phase 1.
    /// @param _feeIncrementPhase2 New fee increment per epoch in Phase 2.
    /// @param _descriptionHash    keccak256 of the off-chain proposal description.
    function proposeFeeUpdate(
        uint256 _baseFeePhase1,
        uint256 _feeIncrementPhase1,
        uint256 _feeIncrementPhase2,
        bytes32 _descriptionHash
    ) external daoActive returns (uint256) {
        bytes memory payload = abi.encode(_baseFeePhase1, _feeIncrementPhase1, _feeIncrementPhase2);
        return _createProposal(ProposalType.UPDATE_FEE_PARAMS, payload, _descriptionHash);
    }

    /// @notice Create a burn parameter update proposal.
    function proposeBurnUpdate(
        uint256 _baseBurnPercent,
        uint256 _burnIncrementPhase1,
        uint256 _burnIncrementPhase2,
        uint256 _maxBurnCap,
        bytes32 _descriptionHash
    ) external daoActive returns (uint256) {
        bytes memory payload = abi.encode(_baseBurnPercent, _burnIncrementPhase1, _burnIncrementPhase2, _maxBurnCap);
        return _createProposal(ProposalType.UPDATE_BURN_PARAMS, payload, _descriptionHash);
    }

    /// @notice Create a treasury address update proposal.
    function proposeTreasuryUpdate(
        address _newTreasury,
        bytes32 _descriptionHash
    ) external daoActive returns (uint256) {
        require(_newTreasury != address(0), "Governor: invalid treasury");
        bytes memory payload = abi.encode(_newTreasury);
        return _createProposal(ProposalType.UPDATE_TREASURY, payload, _descriptionHash);
    }

    /// @notice Create a proposal to replace this governor with a new one.
    /// @dev    The new governor must already be deployed. The Bitxen owner
    ///         will need to call setGovernor() after this executes, OR this
    ///         governor can call it directly if it holds the owner role.
    function proposeGovernorUpdate(
        address _newGovernor,
        bytes32 _descriptionHash
    ) external daoActive returns (uint256) {
        require(_newGovernor != address(0) && _newGovernor != address(this), "Governor: invalid address");
        bytes memory payload = abi.encode(_newGovernor);
        return _createProposal(ProposalType.UPDATE_GOVERNOR, payload, _descriptionHash);
    }

    /// @notice Create a proposal to update governance parameters themselves.
    ///         Encoded as UPDATE_GOVERNOR type but routed to _updateGovernanceParams.
    ///         Call via proposeGovernanceParamsUpdate for clarity.
    function proposeGovernanceParamsUpdate(
        uint256 _newVotingPeriod,
        uint256 _newTimelockDelay,
        uint256 _newQuorumBps,
        uint256 _newProposalThreshold,
        bytes32 _descriptionHash
    ) external daoActive returns (uint256) {
        require(_newVotingPeriod  >= MIN_VOTING_PERIOD && _newVotingPeriod  <= MAX_VOTING_PERIOD, "Governor: voting period out of range");
        require(_newTimelockDelay >= MIN_TIMELOCK      && _newTimelockDelay <= MAX_TIMELOCK,      "Governor: timelock out of range");
        require(_newQuorumBps     <= MAX_QUORUM_BPS,   "Governor: quorum too high");
        require(_newProposalThreshold > 0,             "Governor: threshold must be > 0");

        // We re-use a bytes-encoded call to the internal setter which is
        // executed via onlySelf in _executeProposal.
        bytes memory payload = abi.encodeWithSelector(
            this.updateGovernanceParams.selector,
            _newVotingPeriod,
            _newTimelockDelay,
            _newQuorumBps,
            _newProposalThreshold
        );
        return _createProposal(ProposalType.UPDATE_GOVERNOR, payload, _descriptionHash);
    }

    // -------------------------------------------------------------------------
    // Voting
    // -------------------------------------------------------------------------

    /// @notice Cast a vote on an active proposal.
    /// @param _proposalId Proposal to vote on.
    /// @param _support    0 = Against, 1 = For, 2 = Abstain.
    function castVote(uint256 _proposalId, uint8 _support) external daoActive {
        require(_support <= 2, "Governor: invalid vote type");
        require(state(_proposalId) == ProposalState.Active, "Governor: proposal not active");
        require(!hasVoted[msg.sender][_proposalId], "Governor: already voted");

        Proposal storage p = proposals[_proposalId];
        uint256 weight = bitxen.getPastVotes(msg.sender, p.snapshotBlock);
        require(weight > 0, "Governor: no voting power at snapshot");

        hasVoted[msg.sender][_proposalId]  = true;
        voteChoice[msg.sender][_proposalId] = _support;

        if      (_support == 1) p.votesFor     += weight;
        else if (_support == 0) p.votesAgainst += weight;
        else                    p.votesAbstain  += weight;

        emit VoteCast(_proposalId, msg.sender, _support, weight);
    }

    // -------------------------------------------------------------------------
    // Queue & Execute
    // -------------------------------------------------------------------------

    /// @notice Move a succeeded proposal into the timelock queue.
    function queue(uint256 _proposalId) external daoActive {
        require(state(_proposalId) == ProposalState.Succeeded, "Governor: proposal not succeeded");

        Proposal storage p = proposals[_proposalId];
        p.eta = block.number + timelockDelay;

        emit ProposalQueued(_proposalId, p.eta);
    }

    /// @notice Execute a queued proposal whose timelock has elapsed.
    function execute(uint256 _proposalId) external daoActive {
        require(state(_proposalId) == ProposalState.Queued, "Governor: proposal not queued");

        Proposal storage p = proposals[_proposalId];
        require(block.number >= p.eta, "Governor: timelock not elapsed");

        p.executed = true;
        _executeProposal(p);

        emit ProposalExecuted(_proposalId);
    }

    /// @notice Cancel a proposal. Only the original proposer may cancel, and
    ///         only while the proposal has not yet been executed.
    function cancel(uint256 _proposalId) external {
        Proposal storage p = proposals[_proposalId];
        require(p.proposer == msg.sender,  "Governor: not proposer");
        require(!p.executed,               "Governor: already executed");
        require(!p.cancelled,              "Governor: already cancelled");

        ProposalState s = state(_proposalId);
        require(
            s == ProposalState.Pending  ||
            s == ProposalState.Active   ||
            s == ProposalState.Succeeded ||
            s == ProposalState.Queued,
            "Governor: cannot cancel in current state"
        );

        p.cancelled = true;
        emit ProposalCancelled(_proposalId);
    }

    // -------------------------------------------------------------------------
    // Self-callable Governance Param Update (executed via proposal)
    // -------------------------------------------------------------------------

    /// @notice Update core governance parameters.
    /// @dev    Can only be called by this contract itself (via an executed proposal).
    function updateGovernanceParams(
        uint256 _votingPeriod,
        uint256 _timelockDelay,
        uint256 _quorumBps,
        uint256 _proposalThreshold
    ) external onlySelf {
        require(_votingPeriod  >= MIN_VOTING_PERIOD && _votingPeriod  <= MAX_VOTING_PERIOD, "Governor: voting period out of range");
        require(_timelockDelay >= MIN_TIMELOCK      && _timelockDelay <= MAX_TIMELOCK,      "Governor: timelock out of range");
        require(_quorumBps     <= MAX_QUORUM_BPS,   "Governor: quorum too high");
        require(_proposalThreshold > 0,             "Governor: threshold must be > 0");

        votingPeriod      = _votingPeriod;
        timelockDelay     = _timelockDelay;
        quorumBps         = _quorumBps;
        proposalThreshold = _proposalThreshold;

        emit GovernanceParamsUpdated(_votingPeriod, _timelockDelay, _quorumBps, _proposalThreshold);
    }

    // -------------------------------------------------------------------------
    // Views
    // -------------------------------------------------------------------------

    /// @notice Derive the current state of a proposal from its stored data.
    function state(uint256 _proposalId) public view returns (ProposalState) {
        Proposal storage p = proposals[_proposalId];
        require(p.id != 0, "Governor: unknown proposal");

        if (p.cancelled) return ProposalState.Cancelled;
        if (p.executed)  return ProposalState.Executed;

        if (block.number < p.voteStart) return ProposalState.Pending;

        if (block.number <= p.voteEnd) return ProposalState.Active;

        // Voting closed — check result
        if (!_quorumReached(p) || !_voteSucceeded(p)) return ProposalState.Defeated;

        if (p.eta == 0) return ProposalState.Succeeded;

        return ProposalState.Queued;
    }

    /// @notice Returns voting tallies and quorum requirement for a proposal.
    function getProposalVotes(uint256 _proposalId)
        external view
        returns (
            uint256 forVotes,
            uint256 againstVotes,
            uint256 abstainVotes,
            uint256 quorumRequired
        )
    {
        Proposal storage p = proposals[_proposalId];
        require(p.id != 0, "Governor: unknown proposal");

        // Quorum is calculated against the total supply at the snapshot block.
        // We approximate with current total supply for the view (exact value
        // is enforced in _quorumReached using the snapshot approach).
        uint256 snapshotSupply = bitxen.totalSupply();
        return (
            p.votesFor,
            p.votesAgainst,
            p.votesAbstain,
            (snapshotSupply * quorumBps) / BPS_DENOMINATOR
        );
    }

    /// @notice Returns true if the DAO activation threshold has been reached.
    function isDaoActive() external view returns (bool) {
        return bitxen.totalRecordsStored() >= bitxen.DAO_ACTIVATION_THRESHOLD();
    }

    /// @notice Returns a summary of a proposal's key metadata.
    function getProposal(uint256 _proposalId)
        external view
        returns (
            address      proposer,
            ProposalType proposalType,
            bytes32      descriptionHash,
            uint256      voteStart,
            uint256      voteEnd,
            uint256      eta,
            ProposalState proposalState
        )
    {
        Proposal storage p = proposals[_proposalId];
        require(p.id != 0, "Governor: unknown proposal");
        return (
            p.proposer,
            p.proposalType,
            p.descriptionHash,
            p.voteStart,
            p.voteEnd,
            p.eta,
            state(_proposalId)
        );
    }

    // -------------------------------------------------------------------------
    // Internal
    // -------------------------------------------------------------------------

    function _createProposal(
        ProposalType _type,
        bytes memory _payload,
        bytes32 _descriptionHash
    ) internal returns (uint256) {
        address proposer = msg.sender;
        uint256 snapshot = block.number; // snapshot at creation block

        uint256 weight = bitxen.getPastVotes(proposer, snapshot > 0 ? snapshot - 1 : 0);
        require(weight >= proposalThreshold, "Governor: below proposal threshold");

        uint256 id = ++proposalCount;

        uint256 voteStart = block.number + VOTING_DELAY;
        uint256 voteEnd   = voteStart + votingPeriod - 1;

        proposals[id] = Proposal({
            id:              id,
            proposer:        proposer,
            proposalType:    _type,
            payload:         _payload,
            descriptionHash: _descriptionHash,
            snapshotBlock:   snapshot,
            voteStart:       voteStart,
            voteEnd:         voteEnd,
            eta:             0,
            votesFor:        0,
            votesAgainst:    0,
            votesAbstain:    0,
            executed:        false,
            cancelled:       false
        });

        emit ProposalCreated(id, proposer, _type, _descriptionHash, voteStart, voteEnd);
        return id;
    }

    function _executeProposal(Proposal storage p) internal {
        if (p.proposalType == ProposalType.UPDATE_FEE_PARAMS) {
            (uint256 baseFee, uint256 incr1, uint256 incr2) =
                abi.decode(p.payload, (uint256, uint256, uint256));
            bitxen.setFeeParams(baseFee, incr1, incr2);

        } else if (p.proposalType == ProposalType.UPDATE_BURN_PARAMS) {
            (uint256 baseB, uint256 bi1, uint256 bi2, uint256 cap) =
                abi.decode(p.payload, (uint256, uint256, uint256, uint256));
            bitxen.setBurnParams(baseB, bi1, bi2, cap);

        } else if (p.proposalType == ProposalType.UPDATE_TREASURY) {
            address newTreasury = abi.decode(p.payload, (address));
            bitxen.setTreasuryByGovernor(newTreasury);

        } else if (p.proposalType == ProposalType.UPDATE_GOVERNOR) {
            // May be a governor replacement OR a governance params update
            // (distinguished by the selector encoded in payload).
            bytes4 selector;
            if (p.payload.length >= 4) {
                selector = bytes4(p.payload[0]) | (bytes4(p.payload[1]) >> 8) |
                           (bytes4(p.payload[2]) >> 16) | (bytes4(p.payload[3]) >> 24);
            }
            if (selector == this.updateGovernanceParams.selector) {
                // Self-call to update governance params
                (bool ok, ) = address(this).call(p.payload);
                require(ok, "Governor: governance params update failed");
            } else {
                // Governor replacement — update the Bitxen contract's governor pointer
                address newGov = abi.decode(p.payload, (address));
                bitxen.setGovernor(newGov);
            }
        }
    }

    function _quorumReached(Proposal storage p) internal view returns (bool) {
        // Quorum is based on total supply at the snapshot block.
        // ERC20Votes does not provide getPastTotalSupply by default in all OZ versions;
        // we use current totalSupply as a conservative approximation. For a production
        // deployment, integrate IVotes.getPastTotalSupply if available.
        uint256 supply  = bitxen.totalSupply();
        uint256 quorum  = (supply * quorumBps) / BPS_DENOMINATOR;
        return p.votesFor + p.votesAbstain >= quorum;
    }

    function _voteSucceeded(Proposal storage p) internal view returns (bool) {
        return p.votesFor > p.votesAgainst;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "shanghai",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_bitxen","type":"address"},{"internalType":"uint256","name":"_votingPeriod","type":"uint256"},{"internalType":"uint256","name":"_timelockDelay","type":"uint256"},{"internalType":"uint256","name":"_quorumBps","type":"uint256"},{"internalType":"uint256","name":"_proposalThreshold","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"votingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timelockDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quorumBps","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposalThreshold","type":"uint256"}],"name":"GovernanceParamsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"ProposalCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":true,"internalType":"address","name":"proposer","type":"address"},{"indexed":false,"internalType":"enum BitxenGovernor.ProposalType","name":"proposalType","type":"uint8"},{"indexed":false,"internalType":"bytes32","name":"descriptionHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"voteStart","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"voteEnd","type":"uint256"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ProposalQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint8","name":"support","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"weight","type":"uint256"}],"name":"VoteCast","type":"event"},{"inputs":[],"name":"BPS_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_QUORUM_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TIMELOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_VOTING_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_TIMELOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_VOTING_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VOTING_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bitxen","outputs":[{"internalType":"contract IBitxen","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalId","type":"uint256"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalId","type":"uint256"},{"internalType":"uint8","name":"_support","type":"uint8"}],"name":"castVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalId","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalId","type":"uint256"}],"name":"getProposal","outputs":[{"internalType":"address","name":"proposer","type":"address"},{"internalType":"enum BitxenGovernor.ProposalType","name":"proposalType","type":"uint8"},{"internalType":"bytes32","name":"descriptionHash","type":"bytes32"},{"internalType":"uint256","name":"voteStart","type":"uint256"},{"internalType":"uint256","name":"voteEnd","type":"uint256"},{"internalType":"uint256","name":"eta","type":"uint256"},{"internalType":"enum BitxenGovernor.ProposalState","name":"proposalState","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalId","type":"uint256"}],"name":"getProposalVotes","outputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"uint256","name":"abstainVotes","type":"uint256"},{"internalType":"uint256","name":"quorumRequired","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"hasVoted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDaoActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"enum BitxenGovernor.ProposalType","name":"proposalType","type":"uint8"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"bytes32","name":"descriptionHash","type":"bytes32"},{"internalType":"uint256","name":"snapshotBlock","type":"uint256"},{"internalType":"uint256","name":"voteStart","type":"uint256"},{"internalType":"uint256","name":"voteEnd","type":"uint256"},{"internalType":"uint256","name":"eta","type":"uint256"},{"internalType":"uint256","name":"votesFor","type":"uint256"},{"internalType":"uint256","name":"votesAgainst","type":"uint256"},{"internalType":"uint256","name":"votesAbstain","type":"uint256"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_baseBurnPercent","type":"uint256"},{"internalType":"uint256","name":"_burnIncrementPhase1","type":"uint256"},{"internalType":"uint256","name":"_burnIncrementPhase2","type":"uint256"},{"internalType":"uint256","name":"_maxBurnCap","type":"uint256"},{"internalType":"bytes32","name":"_descriptionHash","type":"bytes32"}],"name":"proposeBurnUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_baseFeePhase1","type":"uint256"},{"internalType":"uint256","name":"_feeIncrementPhase1","type":"uint256"},{"internalType":"uint256","name":"_feeIncrementPhase2","type":"uint256"},{"internalType":"bytes32","name":"_descriptionHash","type":"bytes32"}],"name":"proposeFeeUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newVotingPeriod","type":"uint256"},{"internalType":"uint256","name":"_newTimelockDelay","type":"uint256"},{"internalType":"uint256","name":"_newQuorumBps","type":"uint256"},{"internalType":"uint256","name":"_newProposalThreshold","type":"uint256"},{"internalType":"bytes32","name":"_descriptionHash","type":"bytes32"}],"name":"proposeGovernanceParamsUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"},{"internalType":"bytes32","name":"_descriptionHash","type":"bytes32"}],"name":"proposeGovernorUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newTreasury","type":"address"},{"internalType":"bytes32","name":"_descriptionHash","type":"bytes32"}],"name":"proposeTreasuryUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalId","type":"uint256"}],"name":"queue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"quorumBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum BitxenGovernor.ProposalState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelockDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_votingPeriod","type":"uint256"},{"internalType":"uint256","name":"_timelockDelay","type":"uint256"},{"internalType":"uint256","name":"_quorumBps","type":"uint256"},{"internalType":"uint256","name":"_proposalThreshold","type":"uint256"}],"name":"updateGovernanceParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"voteChoice","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60a060405234801561000f575f5ffd5b5060405161336d38038061336d83398101604081905261002e91610219565b6001600160a01b0385166100895760405162461bcd60e51b815260206004820181905260248201527f476f7665726e6f723a20696e76616c69642062697478656e206164647265737360448201526064015b60405180910390fd5b610708841015801561009e5750620189c08411155b6100f65760405162461bcd60e51b8152602060048201526024808201527f476f7665726e6f723a20766f74696e6720706572696f64206f7574206f662072604482015263616e676560e01b6064820152608401610080565b610384831015801561010a575061c4e08311155b6101565760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a2074696d656c6f636b206f7574206f662072616e6765006044820152606401610080565b610bb88211156101a85760405162461bcd60e51b815260206004820152601960248201527f476f7665726e6f723a2071756f72756d20746f6f2068696768000000000000006044820152606401610080565b5f81116101f75760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a207468726573686f6c64206d757374206265203e2030006044820152606401610080565b6001600160a01b03909416608052600492909255600555600655600755610269565b5f5f5f5f5f60a0868803121561022d575f5ffd5b85516001600160a01b0381168114610243575f5ffd5b602087015160408801516060890151608090990151929a91995097965090945092505050565b6080516130366103375f395f8181610421015281816105890152818161060901528181610843015281816108c301528181610d1b01528181610dd901528181610e5901528181610f3801528181610fb8015281816111af01528181611552015281816115d201528181611740015281816117c0015281816118fe0152818161197e01528181611ae001528181611b6001528181611be701528181611c6701528181611e210152818161214c0152818161230401528181612466015281816125ac015261295401526130365ff3fe608060405234801561000f575f5ffd5b50600436106101d1575f3560e01c8063a64e024a116100fe578063dae95e0d1161009e578063e64ef85e1161006e578063e64ef85e1461041c578063eef09bad1461045b578063fb0c754914610464578063fe0d94c11461046d575f5ffd5b8063dae95e0d146103e5578063ddf0b009146103f8578063de15ae041461040b578063e1a4521814610413575f5ffd5b8063c94b7693116100d9578063c94b7693146103c3578063cd2ddd0c146103cc578063d6159fe5146103d5578063da35c664146103dd575f5ffd5b8063a64e024a1461038a578063b58131b014610394578063c7f758a81461039d575f5ffd5b806340e58ee511610174578063567813881161014457806356781388146103485780636a05c8bb1461035b57806394f1825b1461036e5780639dcfe1cd14610377575f5ffd5b806340e58ee5146102b057806342545825146102c557806347c66140146103025780634b87bc8a14610335575f5ffd5b8063215809ca116101af578063215809ca146102615780633c8f683a1461026a5780633cf23e7c1461027d5780633e4f49e614610290575f5ffd5b8063013cf08b146101d557806302a251a31461020b5780631b82fcf814610222575b5f5ffd5b6101e86101e33660046129b4565b610480565b6040516102029e9d9c9b9a99989796959493929190612a36565b60405180910390f35b61021460045481565b604051908152602001610202565b61024f610230366004612ae1565b600360209081525f928352604080842090915290825290205460ff1681565b60405160ff9091168152602001610202565b61021461070881565b610214610278366004612b0b565b610586565b61021461028b366004612ae1565b610840565b6102a361029e3660046129b4565b6109f2565b6040516102029190612b52565b6102c36102be3660046129b4565b610ac0565b005b6102f26102d3366004612ae1565b600260209081525f928352604080842090915290825290205460ff1681565b6040519015158152602001610202565b6103156103103660046129b4565b610ce4565b604080519485526020850193909352918301526060820152608001610202565b610214610343366004612b0b565b610dd6565b6102c3610356366004612b60565b610f36565b6102c3610369366004612b93565b611366565b61021461c4e081565b610214610385366004612b93565b61154f565b610214620189c081565b61021460075481565b6103b06103ab3660046129b4565b6116b1565b6040516102029796959493929190612bc2565b610214610bb881565b61021460065481565b610214600181565b6102145f5481565b6102146103f3366004612ae1565b61173d565b6102c36104063660046129b4565b6118fc565b6102f2611add565b61021461271081565b6104437f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610202565b61021460055481565b61021461038481565b6102c361047b3660046129b4565b611be5565b600160208190525f91825260409091208054918101546002820180546001600160a01b03831693600160a01b90930460ff169291906104be90612c10565b80601f01602080910402602001604051908101604052809291908181526020018280546104ea90612c10565b80156105355780601f1061050c57610100808354040283529160200191610535565b820191905f5260205f20905b81548152906001019060200180831161051857829003601f168201915b50505060038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b909b0154999a96999598509396509194909391929160ff808216916101009004168e565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106079190612c48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa158015610663573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106879190612c48565b10156106ae5760405162461bcd60e51b81526004016106a590612c5f565b60405180910390fd5b61070886101580156106c35750620189c08611155b6106df5760405162461bcd60e51b81526004016106a590612ca9565b61038485101580156106f3575061c4e08511155b61073f5760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a2074696d656c6f636b206f7574206f662072616e67650060448201526064016106a5565b610bb884111561078d5760405162461bcd60e51b815260206004820152601960248201527808edeeccae4dcdee47440e2eadee4eada40e8dede40d0d2ced603b1b60448201526064016106a5565b5f83116107dc5760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a207468726573686f6c64206d757374206265203e20300060448201526064016106a5565b6040805160248101889052604481018790526064810186905260848082018690528251808303909101815260a49091019091526020810180516001600160e01b0316636a05c8bb60e01b17905261083560038285611e13565b979650505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c19190612c48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa15801561091d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109419190612c48565b101561095f5760405162461bcd60e51b81526004016106a590612c5f565b6001600160a01b0383166109b55760405162461bcd60e51b815260206004820152601a60248201527f476f7665726e6f723a20696e76616c696420747265617375727900000000000060448201526064016106a5565b604080516001600160a01b03851660208201525f910160405160208183030381529060405290506109e860028285611e13565b9150505b92915050565b5f81815260016020526040812080548203610a1f5760405162461bcd60e51b81526004016106a590612ced565b600b810154610100900460ff1615610a3a5750600692915050565b600b81015460ff1615610a505750600592915050565b8060050154431015610a6457505f92915050565b80600601544311610a785750600192915050565b610a8181612148565b1580610a9557506009810154600882015411155b15610aa35750600292915050565b80600701545f03610ab75750600392915050565b50600492915050565b5f818152600160208190526040909120908101546001600160a01b03163314610b245760405162461bcd60e51b815260206004820152601660248201527523b7bb32b93737b91d103737ba10383937b837b9b2b960511b60448201526064016106a5565b600b81015460ff1615610b795760405162461bcd60e51b815260206004820152601a60248201527f476f7665726e6f723a20616c726561647920657865637574656400000000000060448201526064016106a5565b600b810154610100900460ff1615610bd35760405162461bcd60e51b815260206004820152601b60248201527f476f7665726e6f723a20616c72656164792063616e63656c6c6564000000000060448201526064016106a5565b5f610bdd836109f2565b90505f816006811115610bf257610bf26129cb565b1480610c0f57506001816006811115610c0d57610c0d6129cb565b145b80610c2b57506003816006811115610c2957610c296129cb565b145b80610c4757506004816006811115610c4557610c456129cb565b145b610ca45760405162461bcd60e51b815260206004820152602860248201527f476f7665726e6f723a2063616e6e6f742063616e63656c20696e2063757272656044820152676e7420737461746560c01b60648201526084016106a5565b600b8201805461ff00191661010017905560405183907f416e669c63d9a3a5e36ee7cc7e2104b8db28ccd286aa18966e98fa230c73b08c905f90a2505050565b5f8181526001602052604081208054829182918291908203610d185760405162461bcd60e51b81526004016106a590612ced565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d999190612c48565b90508160080154826009015483600a015461271060065485610dbb9190612d38565b610dc59190612d4f565b955095509550955050509193509193565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e579190612c48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eb3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed79190612c48565b1015610ef55760405162461bcd60e51b81526004016106a590612c5f565b604080516020810188905290810186905260608101859052608081018490525f9060a001604051602081830303815290604052905061083560018285611e13565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f92573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb69190612c48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa158015611012573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110369190612c48565b10156110545760405162461bcd60e51b81526004016106a590612c5f565b60028160ff1611156110a85760405162461bcd60e51b815260206004820152601b60248201527f476f7665726e6f723a20696e76616c696420766f74652074797065000000000060448201526064016106a5565b60016110b3836109f2565b60068111156110c4576110c46129cb565b146111115760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f742061637469766500000060448201526064016106a5565b335f90815260026020908152604080832085845290915290205460ff161561117b5760405162461bcd60e51b815260206004820152601760248201527f476f7665726e6f723a20616c726561647920766f74656400000000000000000060448201526064016106a5565b5f828152600160205260408082206004808201549251630748d63560e31b81523391810191909152602481019290925291907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a46b1a890604401602060405180830381865afa1580156111fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112209190612c48565b90505f811161127f5760405162461bcd60e51b815260206004820152602560248201527f476f7665726e6f723a206e6f20766f74696e6720706f77657220617420736e616044820152641c1cda1bdd60da1b60648201526084016106a5565b335f8181526002602090815260408083208884528252808320805460ff19908116600190811790925594845260038352818420898552909252909120805460ff8716931683179055036112ea5780826008015f8282546112df9190612d6e565b909155506113209050565b8260ff165f036113075780826009015f8282546112df9190612d6e565b8082600a015f82825461131a9190612d6e565b90915550505b6040805160ff8516815260208101839052339186917fb83d25c6a5d258561330739951487acb4bd09ba5190b5d32c4f261817d906792910160405180910390a350505050565b3330146113bf5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2063616c6c6572206d75737420626520676f7665726e6f6044820152603960f91b60648201526084016106a5565b61070884101580156113d45750620189c08411155b6113f05760405162461bcd60e51b81526004016106a590612ca9565b6103848310158015611404575061c4e08311155b6114505760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a2074696d656c6f636b206f7574206f662072616e67650060448201526064016106a5565b610bb882111561149e5760405162461bcd60e51b815260206004820152601960248201527808edeeccae4dcdee47440e2eadee4eada40e8dede40d0d2ced603b1b60448201526064016106a5565b5f81116114ed5760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a207468726573686f6c64206d757374206265203e20300060448201526064016106a5565b60048490556005839055600682905560078190556040805185815260208101859052908101839052606081018290527f62893e3337cca0ca70f83df6d7ed52e7850a915a9ca420cc60eaa47d753e982d9060800160405180910390a150505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d09190612c48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa15801561162c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116509190612c48565b101561166e5760405162461bcd60e51b81526004016106a590612c5f565b6040805160208101879052908101859052606081018490525f9060800160405160208183030381529060405290506116a75f8285611e13565b9695505050505050565b5f818152600160205260408120805482918291829182918291829182036116ea5760405162461bcd60e51b81526004016106a590612ced565b600181015460038201546005830154600684015460078501546001600160a01b03851694600160a01b900460ff16939291906117258f6109f2565b959f949e50929c50909a509850965090945092505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561179a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117be9190612c48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa15801561181a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183e9190612c48565b101561185c5760405162461bcd60e51b81526004016106a590612c5f565b6001600160a01b0383161580159061187d57506001600160a01b0383163014155b6118c95760405162461bcd60e51b815260206004820152601960248201527f476f7665726e6f723a20696e76616c696420616464726573730000000000000060448201526064016106a5565b604080516001600160a01b03851660208201525f910160405160208183030381529060405290506109e860038285611e13565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611958573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197c9190612c48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119fc9190612c48565b1015611a1a5760405162461bcd60e51b81526004016106a590612c5f565b6003611a25826109f2565b6006811115611a3657611a366129cb565b14611a835760405162461bcd60e51b815260206004820181905260248201527f476f7665726e6f723a2070726f706f73616c206e6f742073756363656564656460448201526064016106a5565b5f818152600160205260409020600554611a9d9043612d6e565b6007820181905560405190815282907f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda28929060200160405180910390a25050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5e9190612c48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bba573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bde9190612c48565b1015905090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c41573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c659190612c48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cc1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ce59190612c48565b1015611d035760405162461bcd60e51b81526004016106a590612c5f565b6004611d0e826109f2565b6006811115611d1f57611d1f6129cb565b14611d6c5760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f742071756575656400000060448201526064016106a5565b5f8181526001602052604090206007810154431015611dcd5760405162461bcd60e51b815260206004820152601e60248201527f476f7665726e6f723a2074696d656c6f636b206e6f7420656c6170736564000060448201526064016106a5565b600b8101805460ff19166001179055611de581612209565b60405182907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f905f90a25050565b5f3343826001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016633a46b1a88484611e52575f611e5d565b611e5d600186612d81565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015611ea4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ec89190612c48565b9050600754811015611f275760405162461bcd60e51b815260206004820152602260248201527f476f7665726e6f723a2062656c6f772070726f706f73616c207468726573686f6044820152611b1960f21b60648201526084016106a5565b5f5f5f8154611f3590612d94565b918290555090505f611f48600143612d6e565b90505f600160045483611f5b9190612d6e565b611f659190612d81565b9050604051806101c00160405280848152602001876001600160a01b031681526020018b6003811115611f9a57611f9a6129cb565b815260208082018c905260408083018c9052606083018990526080830186905260a083018590525f60c0840181905260e08401819052610100840181905261012084018190526101408401819052610160909301839052868352600180835292819020845181559184015192820180546001600160a01b031981166001600160a01b03909516948517825591850151929390916001600160a81b03191617600160a01b83600381111561204f5761204f6129cb565b0217905550606082015160028201906120689082612e13565b506080820151600382015560a0820151600482015560c0820151600582015560e0820151600682015561010080830151600783015561012083015160088301556101408301516009830155610160830151600a830155610180830151600b90920180546101a09094015161ffff1990941692151561ff00191692909217921515029190911790556040516001600160a01b0387169084907f43f220a44660542fbb31088290557df43dd379ae408911c767d43023bb436de890612132908e908d9088908890612ed2565b60405180910390a3509098975050505050505050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121ca9190612c48565b90505f612710600654836121de9190612d38565b6121e89190612d4f565b90508084600a015485600801546121ff9190612d6e565b1015949350505050565b5f6001820154600160a01b900460ff16600381111561222a5761222a6129cb565b03612361575f5f5f83600201805461224190612c10565b80601f016020809104026020016040519081016040528092919081815260200182805461226d90612c10565b80156122b85780601f1061228f576101008083540402835291602001916122b8565b820191905f5260205f20905b81548152906001019060200180831161229b57829003601f168201915b50505050508060200190518101906122d09190612efb565b6040516345f4f87160e11b815260048101849052602481018390526044810182905292955090935091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638be9f0e2906064015f604051808303815f87803b158015612345575f5ffd5b505af1158015612357573d5f5f3e3d5ffd5b5050505050505050565b600180820154600160a01b900460ff166003811115612382576123826129cb565b036124c4575f5f5f5f84600201805461239a90612c10565b80601f01602080910402602001604051908101604052809291908181526020018280546123c690612c10565b80156124115780601f106123e857610100808354040283529160200191612411565b820191905f5260205f20905b8154815290600101906020018083116123f457829003601f168201915b50505050508060200190518101906124299190612f26565b604051635d27d88f60e11b815260048101859052602481018490526044810183905260648101829052939750919550935091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ba4fb11e906084015f604051808303815f87803b1580156124a7575f5ffd5b505af11580156124b9573d5f5f3e3d5ffd5b505050505050505050565b60026001820154600160a01b900460ff1660038111156124e6576124e66129cb565b03612609575f8160020180546124fb90612c10565b80601f016020809104026020016040519081016040528092919081815260200182805461252790612c10565b80156125725780601f1061254957610100808354040283529160200191612572565b820191905f5260205f20905b81548152906001019060200180831161255557829003601f168201915b505050505080602001905181019061258a9190612f59565b6040516303cf508b60e31b81526001600160a01b0380831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690631e7a8458906024015f604051808303815f87803b1580156125ef575f5ffd5b505af1158015612601573d5f5f3e3d5ffd5b505050505050565b60036001820154600160a01b900460ff16600381111561262b5761262b6129cb565b036129b1575f600482600201805461264290612c10565b9050106127b8576018826002016003815461265c90612c10565b811061266a5761266a612f7b565b81546001161561268757905f5260205f2090602091828204019190065b9054901a600160f81b026001600160f81b0319166001600160e01b031916901c601083600201600281546126ba90612c10565b81106126c8576126c8612f7b565b8154600116156126e557905f5260205f2090602091828204019190065b9054901a600160f81b026001600160f81b0319166001600160e01b031916901c6008846002016001815461271890612c10565b811061272657612726612f7b565b81546001161561274357905f5260205f2090602091828204019190065b9054901a600160f81b026001600160f81b0319166001600160e01b031916901c846002015f815461277390612c10565b811061278157612781612f7b565b81546001161561279e57905f5260205f2090602091828204019190065b9054901a600160f81b026001600160f81b03191617171790505b6395fa374560e01b6001600160e01b0319821601612893575f306001600160a01b0316836002016040516127ec9190612f8f565b5f604051808303815f865af19150503d805f8114612825576040519150601f19603f3d011682016040523d82523d5f602084013e61282a565b606091505b505090508061288d5760405162461bcd60e51b815260206004820152602960248201527f476f7665726e6f723a20676f7665726e616e636520706172616d7320757064616044820152681d194819985a5b195960ba1b60648201526084016106a5565b506129af565b5f8260020180546128a390612c10565b80601f01602080910402602001604051908101604052809291908181526020018280546128cf90612c10565b801561291a5780601f106128f15761010080835404028352916020019161291a565b820191905f5260205f20905b8154815290600101906020018083116128fd57829003601f168201915b50505050508060200190518101906129329190612f59565b60405163c42cf53560e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063c42cf535906024015f604051808303815f87803b158015612997575f5ffd5b505af11580156129a9573d5f5f3e3d5ffd5b50505050505b505b50565b5f602082840312156129c4575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b600481106129ef576129ef6129cb565b9052565b5f81518084525f5b81811015612a17576020818501810151868301820152016129fb565b505f602082860101526020601f19601f83011685010191505092915050565b8e81526001600160a01b038e166020820152612a55604082018e6129df565b6101c060608201525f612a6c6101c083018e6129f3565b90508b60808301528a60a08301528960c08301528860e083015287610100830152866101208301528561014083015284610160830152612ab161018083018515159052565b8215156101a08301529f9e505050505050505050505050505050565b6001600160a01b03811681146129b1575f5ffd5b5f5f60408385031215612af2575f5ffd5b8235612afd81612acd565b946020939093013593505050565b5f5f5f5f5f60a08688031215612b1f575f5ffd5b505083359560208501359550604085013594606081013594506080013592509050565b600781106129ef576129ef6129cb565b602081016109ec8284612b42565b5f5f60408385031215612b71575f5ffd5b82359150602083013560ff81168114612b88575f5ffd5b809150509250929050565b5f5f5f5f60808587031215612ba6575f5ffd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038816815260e08101612bdf60208301896129df565b8660408301528560608301528460808301528360a0830152612c0460c0830184612b42565b98975050505050505050565b600181811c90821680612c2457607f821691505b602082108103612c4257634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612c58575f5ffd5b5051919050565b6020808252602a908201527f476f7665726e6f723a2044414f206e6f74207965742061637469766520283c20604082015269354d207661756c74732960b01b606082015260800190565b60208082526024908201527f476f7665726e6f723a20766f74696e6720706572696f64206f7574206f662072604082015263616e676560e01b606082015260800190565b6020808252601a908201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c000000000000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176109ec576109ec612d24565b5f82612d6957634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156109ec576109ec612d24565b818103818111156109ec576109ec612d24565b5f60018201612da557612da5612d24565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b601f821115612e0e5782821115612e0e57805f5260205f20601f840160051c6020851015612deb57505f5b90810190601f840160051c035f5b81811015612601575f83820155600101612df9565b505050565b815167ffffffffffffffff811115612e2d57612e2d612dac565b612e4181612e3b8454612c10565b84612dc0565b6020601f821160018114612e73575f8315612e5c5750848201515b5f19600385901b1c1916600184901b178455612ecb565b5f84815260208120601f198516915b82811015612ea25787850151825560209485019460019092019101612e82565b5084821015612ebf57868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b60808101612ee082876129df565b84602083015283604083015282606083015295945050505050565b5f5f5f60608486031215612f0d575f5ffd5b5050815160208301516040909301519094929350919050565b5f5f5f5f60808587031215612f39575f5ffd5b505082516020840151604085015160609095015191969095509092509050565b5f60208284031215612f69575f5ffd5b8151612f7481612acd565b9392505050565b634e487b7160e01b5f52603260045260245ffd5b5f5f8354612f9c81612c10565b600182168015612fb35760018114612fc857612ff5565b60ff1983168652811515820286019350612ff5565b865f5260205f205f5b83811015612fed57815488820152600190910190602001612fd1565b505081860193505b50919594505050505056fea26469706673582212201a055060ac3a08db3c7565df0af73652861a9104accb81ad10a0e01b7792e63e64736f6c634300082200330000000000000000000000002885477436f1e80a7690bf22878d31eac97e0244000000000000000000000000000000000000000000000000000000000000c4e00000000000000000000000000000000000000000000000000000000000003840000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000152d02c7e14af6800000

Deployed Bytecode

0x608060405234801561000f575f5ffd5b50600436106101d1575f3560e01c8063a64e024a116100fe578063dae95e0d1161009e578063e64ef85e1161006e578063e64ef85e1461041c578063eef09bad1461045b578063fb0c754914610464578063fe0d94c11461046d575f5ffd5b8063dae95e0d146103e5578063ddf0b009146103f8578063de15ae041461040b578063e1a4521814610413575f5ffd5b8063c94b7693116100d9578063c94b7693146103c3578063cd2ddd0c146103cc578063d6159fe5146103d5578063da35c664146103dd575f5ffd5b8063a64e024a1461038a578063b58131b014610394578063c7f758a81461039d575f5ffd5b806340e58ee511610174578063567813881161014457806356781388146103485780636a05c8bb1461035b57806394f1825b1461036e5780639dcfe1cd14610377575f5ffd5b806340e58ee5146102b057806342545825146102c557806347c66140146103025780634b87bc8a14610335575f5ffd5b8063215809ca116101af578063215809ca146102615780633c8f683a1461026a5780633cf23e7c1461027d5780633e4f49e614610290575f5ffd5b8063013cf08b146101d557806302a251a31461020b5780631b82fcf814610222575b5f5ffd5b6101e86101e33660046129b4565b610480565b6040516102029e9d9c9b9a99989796959493929190612a36565b60405180910390f35b61021460045481565b604051908152602001610202565b61024f610230366004612ae1565b600360209081525f928352604080842090915290825290205460ff1681565b60405160ff9091168152602001610202565b61021461070881565b610214610278366004612b0b565b610586565b61021461028b366004612ae1565b610840565b6102a361029e3660046129b4565b6109f2565b6040516102029190612b52565b6102c36102be3660046129b4565b610ac0565b005b6102f26102d3366004612ae1565b600260209081525f928352604080842090915290825290205460ff1681565b6040519015158152602001610202565b6103156103103660046129b4565b610ce4565b604080519485526020850193909352918301526060820152608001610202565b610214610343366004612b0b565b610dd6565b6102c3610356366004612b60565b610f36565b6102c3610369366004612b93565b611366565b61021461c4e081565b610214610385366004612b93565b61154f565b610214620189c081565b61021460075481565b6103b06103ab3660046129b4565b6116b1565b6040516102029796959493929190612bc2565b610214610bb881565b61021460065481565b610214600181565b6102145f5481565b6102146103f3366004612ae1565b61173d565b6102c36104063660046129b4565b6118fc565b6102f2611add565b61021461271081565b6104437f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e024481565b6040516001600160a01b039091168152602001610202565b61021460055481565b61021461038481565b6102c361047b3660046129b4565b611be5565b600160208190525f91825260409091208054918101546002820180546001600160a01b03831693600160a01b90930460ff169291906104be90612c10565b80601f01602080910402602001604051908101604052809291908181526020018280546104ea90612c10565b80156105355780601f1061050c57610100808354040283529160200191610535565b820191905f5260205f20905b81548152906001019060200180831161051857829003601f168201915b50505060038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b909b0154999a96999598509396509194909391929160ff808216916101009004168e565b5f7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106079190612c48565b7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa158015610663573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106879190612c48565b10156106ae5760405162461bcd60e51b81526004016106a590612c5f565b60405180910390fd5b61070886101580156106c35750620189c08611155b6106df5760405162461bcd60e51b81526004016106a590612ca9565b61038485101580156106f3575061c4e08511155b61073f5760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a2074696d656c6f636b206f7574206f662072616e67650060448201526064016106a5565b610bb884111561078d5760405162461bcd60e51b815260206004820152601960248201527808edeeccae4dcdee47440e2eadee4eada40e8dede40d0d2ced603b1b60448201526064016106a5565b5f83116107dc5760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a207468726573686f6c64206d757374206265203e20300060448201526064016106a5565b6040805160248101889052604481018790526064810186905260848082018690528251808303909101815260a49091019091526020810180516001600160e01b0316636a05c8bb60e01b17905261083560038285611e13565b979650505050505050565b5f7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c19190612c48565b7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa15801561091d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109419190612c48565b101561095f5760405162461bcd60e51b81526004016106a590612c5f565b6001600160a01b0383166109b55760405162461bcd60e51b815260206004820152601a60248201527f476f7665726e6f723a20696e76616c696420747265617375727900000000000060448201526064016106a5565b604080516001600160a01b03851660208201525f910160405160208183030381529060405290506109e860028285611e13565b9150505b92915050565b5f81815260016020526040812080548203610a1f5760405162461bcd60e51b81526004016106a590612ced565b600b810154610100900460ff1615610a3a5750600692915050565b600b81015460ff1615610a505750600592915050565b8060050154431015610a6457505f92915050565b80600601544311610a785750600192915050565b610a8181612148565b1580610a9557506009810154600882015411155b15610aa35750600292915050565b80600701545f03610ab75750600392915050565b50600492915050565b5f818152600160208190526040909120908101546001600160a01b03163314610b245760405162461bcd60e51b815260206004820152601660248201527523b7bb32b93737b91d103737ba10383937b837b9b2b960511b60448201526064016106a5565b600b81015460ff1615610b795760405162461bcd60e51b815260206004820152601a60248201527f476f7665726e6f723a20616c726561647920657865637574656400000000000060448201526064016106a5565b600b810154610100900460ff1615610bd35760405162461bcd60e51b815260206004820152601b60248201527f476f7665726e6f723a20616c72656164792063616e63656c6c6564000000000060448201526064016106a5565b5f610bdd836109f2565b90505f816006811115610bf257610bf26129cb565b1480610c0f57506001816006811115610c0d57610c0d6129cb565b145b80610c2b57506003816006811115610c2957610c296129cb565b145b80610c4757506004816006811115610c4557610c456129cb565b145b610ca45760405162461bcd60e51b815260206004820152602860248201527f476f7665726e6f723a2063616e6e6f742063616e63656c20696e2063757272656044820152676e7420737461746560c01b60648201526084016106a5565b600b8201805461ff00191661010017905560405183907f416e669c63d9a3a5e36ee7cc7e2104b8db28ccd286aa18966e98fa230c73b08c905f90a2505050565b5f8181526001602052604081208054829182918291908203610d185760405162461bcd60e51b81526004016106a590612ced565b5f7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d999190612c48565b90508160080154826009015483600a015461271060065485610dbb9190612d38565b610dc59190612d4f565b955095509550955050509193509193565b5f7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e579190612c48565b7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eb3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed79190612c48565b1015610ef55760405162461bcd60e51b81526004016106a590612c5f565b604080516020810188905290810186905260608101859052608081018490525f9060a001604051602081830303815290604052905061083560018285611e13565b7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f92573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb69190612c48565b7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa158015611012573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110369190612c48565b10156110545760405162461bcd60e51b81526004016106a590612c5f565b60028160ff1611156110a85760405162461bcd60e51b815260206004820152601b60248201527f476f7665726e6f723a20696e76616c696420766f74652074797065000000000060448201526064016106a5565b60016110b3836109f2565b60068111156110c4576110c46129cb565b146111115760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f742061637469766500000060448201526064016106a5565b335f90815260026020908152604080832085845290915290205460ff161561117b5760405162461bcd60e51b815260206004820152601760248201527f476f7665726e6f723a20616c726561647920766f74656400000000000000000060448201526064016106a5565b5f828152600160205260408082206004808201549251630748d63560e31b81523391810191909152602481019290925291907f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b031690633a46b1a890604401602060405180830381865afa1580156111fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112209190612c48565b90505f811161127f5760405162461bcd60e51b815260206004820152602560248201527f476f7665726e6f723a206e6f20766f74696e6720706f77657220617420736e616044820152641c1cda1bdd60da1b60648201526084016106a5565b335f8181526002602090815260408083208884528252808320805460ff19908116600190811790925594845260038352818420898552909252909120805460ff8716931683179055036112ea5780826008015f8282546112df9190612d6e565b909155506113209050565b8260ff165f036113075780826009015f8282546112df9190612d6e565b8082600a015f82825461131a9190612d6e565b90915550505b6040805160ff8516815260208101839052339186917fb83d25c6a5d258561330739951487acb4bd09ba5190b5d32c4f261817d906792910160405180910390a350505050565b3330146113bf5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2063616c6c6572206d75737420626520676f7665726e6f6044820152603960f91b60648201526084016106a5565b61070884101580156113d45750620189c08411155b6113f05760405162461bcd60e51b81526004016106a590612ca9565b6103848310158015611404575061c4e08311155b6114505760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a2074696d656c6f636b206f7574206f662072616e67650060448201526064016106a5565b610bb882111561149e5760405162461bcd60e51b815260206004820152601960248201527808edeeccae4dcdee47440e2eadee4eada40e8dede40d0d2ced603b1b60448201526064016106a5565b5f81116114ed5760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a207468726573686f6c64206d757374206265203e20300060448201526064016106a5565b60048490556005839055600682905560078190556040805185815260208101859052908101839052606081018290527f62893e3337cca0ca70f83df6d7ed52e7850a915a9ca420cc60eaa47d753e982d9060800160405180910390a150505050565b5f7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d09190612c48565b7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa15801561162c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116509190612c48565b101561166e5760405162461bcd60e51b81526004016106a590612c5f565b6040805160208101879052908101859052606081018490525f9060800160405160208183030381529060405290506116a75f8285611e13565b9695505050505050565b5f818152600160205260408120805482918291829182918291829182036116ea5760405162461bcd60e51b81526004016106a590612ced565b600181015460038201546005830154600684015460078501546001600160a01b03851694600160a01b900460ff16939291906117258f6109f2565b959f949e50929c50909a509850965090945092505050565b5f7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561179a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117be9190612c48565b7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa15801561181a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183e9190612c48565b101561185c5760405162461bcd60e51b81526004016106a590612c5f565b6001600160a01b0383161580159061187d57506001600160a01b0383163014155b6118c95760405162461bcd60e51b815260206004820152601960248201527f476f7665726e6f723a20696e76616c696420616464726573730000000000000060448201526064016106a5565b604080516001600160a01b03851660208201525f910160405160208183030381529060405290506109e860038285611e13565b7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611958573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197c9190612c48565b7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119fc9190612c48565b1015611a1a5760405162461bcd60e51b81526004016106a590612c5f565b6003611a25826109f2565b6006811115611a3657611a366129cb565b14611a835760405162461bcd60e51b815260206004820181905260248201527f476f7665726e6f723a2070726f706f73616c206e6f742073756363656564656460448201526064016106a5565b5f818152600160205260409020600554611a9d9043612d6e565b6007820181905560405190815282907f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda28929060200160405180910390a25050565b5f7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5e9190612c48565b7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bba573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bde9190612c48565b1015905090565b7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b0316639cf304cb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c41573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c659190612c48565b7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b031663157849566040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cc1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ce59190612c48565b1015611d035760405162461bcd60e51b81526004016106a590612c5f565b6004611d0e826109f2565b6006811115611d1f57611d1f6129cb565b14611d6c5760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f742071756575656400000060448201526064016106a5565b5f8181526001602052604090206007810154431015611dcd5760405162461bcd60e51b815260206004820152601e60248201527f476f7665726e6f723a2074696d656c6f636b206e6f7420656c6170736564000060448201526064016106a5565b600b8101805460ff19166001179055611de581612209565b60405182907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f905f90a25050565b5f3343826001600160a01b037f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e024416633a46b1a88484611e52575f611e5d565b611e5d600186612d81565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015611ea4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ec89190612c48565b9050600754811015611f275760405162461bcd60e51b815260206004820152602260248201527f476f7665726e6f723a2062656c6f772070726f706f73616c207468726573686f6044820152611b1960f21b60648201526084016106a5565b5f5f5f8154611f3590612d94565b918290555090505f611f48600143612d6e565b90505f600160045483611f5b9190612d6e565b611f659190612d81565b9050604051806101c00160405280848152602001876001600160a01b031681526020018b6003811115611f9a57611f9a6129cb565b815260208082018c905260408083018c9052606083018990526080830186905260a083018590525f60c0840181905260e08401819052610100840181905261012084018190526101408401819052610160909301839052868352600180835292819020845181559184015192820180546001600160a01b031981166001600160a01b03909516948517825591850151929390916001600160a81b03191617600160a01b83600381111561204f5761204f6129cb565b0217905550606082015160028201906120689082612e13565b506080820151600382015560a0820151600482015560c0820151600582015560e0820151600682015561010080830151600783015561012083015160088301556101408301516009830155610160830151600a830155610180830151600b90920180546101a09094015161ffff1990941692151561ff00191692909217921515029190911790556040516001600160a01b0387169084907f43f220a44660542fbb31088290557df43dd379ae408911c767d43023bb436de890612132908e908d9088908890612ed2565b60405180910390a3509098975050505050505050565b5f5f7f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02446001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121ca9190612c48565b90505f612710600654836121de9190612d38565b6121e89190612d4f565b90508084600a015485600801546121ff9190612d6e565b1015949350505050565b5f6001820154600160a01b900460ff16600381111561222a5761222a6129cb565b03612361575f5f5f83600201805461224190612c10565b80601f016020809104026020016040519081016040528092919081815260200182805461226d90612c10565b80156122b85780601f1061228f576101008083540402835291602001916122b8565b820191905f5260205f20905b81548152906001019060200180831161229b57829003601f168201915b50505050508060200190518101906122d09190612efb565b6040516345f4f87160e11b815260048101849052602481018390526044810182905292955090935091506001600160a01b037f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02441690638be9f0e2906064015f604051808303815f87803b158015612345575f5ffd5b505af1158015612357573d5f5f3e3d5ffd5b5050505050505050565b600180820154600160a01b900460ff166003811115612382576123826129cb565b036124c4575f5f5f5f84600201805461239a90612c10565b80601f01602080910402602001604051908101604052809291908181526020018280546123c690612c10565b80156124115780601f106123e857610100808354040283529160200191612411565b820191905f5260205f20905b8154815290600101906020018083116123f457829003601f168201915b50505050508060200190518101906124299190612f26565b604051635d27d88f60e11b815260048101859052602481018490526044810183905260648101829052939750919550935091506001600160a01b037f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e0244169063ba4fb11e906084015f604051808303815f87803b1580156124a7575f5ffd5b505af11580156124b9573d5f5f3e3d5ffd5b505050505050505050565b60026001820154600160a01b900460ff1660038111156124e6576124e66129cb565b03612609575f8160020180546124fb90612c10565b80601f016020809104026020016040519081016040528092919081815260200182805461252790612c10565b80156125725780601f1061254957610100808354040283529160200191612572565b820191905f5260205f20905b81548152906001019060200180831161255557829003601f168201915b505050505080602001905181019061258a9190612f59565b6040516303cf508b60e31b81526001600160a01b0380831660048301529192507f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e024490911690631e7a8458906024015f604051808303815f87803b1580156125ef575f5ffd5b505af1158015612601573d5f5f3e3d5ffd5b505050505050565b60036001820154600160a01b900460ff16600381111561262b5761262b6129cb565b036129b1575f600482600201805461264290612c10565b9050106127b8576018826002016003815461265c90612c10565b811061266a5761266a612f7b565b81546001161561268757905f5260205f2090602091828204019190065b9054901a600160f81b026001600160f81b0319166001600160e01b031916901c601083600201600281546126ba90612c10565b81106126c8576126c8612f7b565b8154600116156126e557905f5260205f2090602091828204019190065b9054901a600160f81b026001600160f81b0319166001600160e01b031916901c6008846002016001815461271890612c10565b811061272657612726612f7b565b81546001161561274357905f5260205f2090602091828204019190065b9054901a600160f81b026001600160f81b0319166001600160e01b031916901c846002015f815461277390612c10565b811061278157612781612f7b565b81546001161561279e57905f5260205f2090602091828204019190065b9054901a600160f81b026001600160f81b03191617171790505b6395fa374560e01b6001600160e01b0319821601612893575f306001600160a01b0316836002016040516127ec9190612f8f565b5f604051808303815f865af19150503d805f8114612825576040519150601f19603f3d011682016040523d82523d5f602084013e61282a565b606091505b505090508061288d5760405162461bcd60e51b815260206004820152602960248201527f476f7665726e6f723a20676f7665726e616e636520706172616d7320757064616044820152681d194819985a5b195960ba1b60648201526084016106a5565b506129af565b5f8260020180546128a390612c10565b80601f01602080910402602001604051908101604052809291908181526020018280546128cf90612c10565b801561291a5780601f106128f15761010080835404028352916020019161291a565b820191905f5260205f20905b8154815290600101906020018083116128fd57829003601f168201915b50505050508060200190518101906129329190612f59565b60405163c42cf53560e01b81526001600160a01b0380831660048301529192507f0000000000000000000000002885477436f1e80a7690bf22878d31eac97e02449091169063c42cf535906024015f604051808303815f87803b158015612997575f5ffd5b505af11580156129a9573d5f5f3e3d5ffd5b50505050505b505b50565b5f602082840312156129c4575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b600481106129ef576129ef6129cb565b9052565b5f81518084525f5b81811015612a17576020818501810151868301820152016129fb565b505f602082860101526020601f19601f83011685010191505092915050565b8e81526001600160a01b038e166020820152612a55604082018e6129df565b6101c060608201525f612a6c6101c083018e6129f3565b90508b60808301528a60a08301528960c08301528860e083015287610100830152866101208301528561014083015284610160830152612ab161018083018515159052565b8215156101a08301529f9e505050505050505050505050505050565b6001600160a01b03811681146129b1575f5ffd5b5f5f60408385031215612af2575f5ffd5b8235612afd81612acd565b946020939093013593505050565b5f5f5f5f5f60a08688031215612b1f575f5ffd5b505083359560208501359550604085013594606081013594506080013592509050565b600781106129ef576129ef6129cb565b602081016109ec8284612b42565b5f5f60408385031215612b71575f5ffd5b82359150602083013560ff81168114612b88575f5ffd5b809150509250929050565b5f5f5f5f60808587031215612ba6575f5ffd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b038816815260e08101612bdf60208301896129df565b8660408301528560608301528460808301528360a0830152612c0460c0830184612b42565b98975050505050505050565b600181811c90821680612c2457607f821691505b602082108103612c4257634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612c58575f5ffd5b5051919050565b6020808252602a908201527f476f7665726e6f723a2044414f206e6f74207965742061637469766520283c20604082015269354d207661756c74732960b01b606082015260800190565b60208082526024908201527f476f7665726e6f723a20766f74696e6720706572696f64206f7574206f662072604082015263616e676560e01b606082015260800190565b6020808252601a908201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c000000000000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176109ec576109ec612d24565b5f82612d6957634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156109ec576109ec612d24565b818103818111156109ec576109ec612d24565b5f60018201612da557612da5612d24565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b601f821115612e0e5782821115612e0e57805f5260205f20601f840160051c6020851015612deb57505f5b90810190601f840160051c035f5b81811015612601575f83820155600101612df9565b505050565b815167ffffffffffffffff811115612e2d57612e2d612dac565b612e4181612e3b8454612c10565b84612dc0565b6020601f821160018114612e73575f8315612e5c5750848201515b5f19600385901b1c1916600184901b178455612ecb565b5f84815260208120601f198516915b82811015612ea25787850151825560209485019460019092019101612e82565b5084821015612ebf57868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b60808101612ee082876129df565b84602083015283604083015282606083015295945050505050565b5f5f5f60608486031215612f0d575f5ffd5b5050815160208301516040909301519094929350919050565b5f5f5f5f60808587031215612f39575f5ffd5b505082516020840151604085015160609095015191969095509092509050565b5f60208284031215612f69575f5ffd5b8151612f7481612acd565b9392505050565b634e487b7160e01b5f52603260045260245ffd5b5f5f8354612f9c81612c10565b600182168015612fb35760018114612fc857612ff5565b60ff1983168652811515820286019350612ff5565b865f5260205f205f5b83811015612fed57815488820152600190910190602001612fd1565b505081860193505b50919594505050505056fea26469706673582212201a055060ac3a08db3c7565df0af73652861a9104accb81ad10a0e01b7792e63e64736f6c63430008220033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000002885477436f1e80a7690bf22878d31eac97e0244000000000000000000000000000000000000000000000000000000000000c4e00000000000000000000000000000000000000000000000000000000000003840000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000152d02c7e14af6800000

-----Decoded View---------------
Arg [0] : _bitxen (address): 0x2885477436f1e80a7690bf22878D31eAC97e0244
Arg [1] : _votingPeriod (uint256): 50400
Arg [2] : _timelockDelay (uint256): 14400
Arg [3] : _quorumBps (uint256): 400
Arg [4] : _proposalThreshold (uint256): 100000000000000000000000

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000002885477436f1e80a7690bf22878d31eac97e0244
Arg [1] : 000000000000000000000000000000000000000000000000000000000000c4e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000003840
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000190
Arg [4] : 00000000000000000000000000000000000000000000152d02c7e14af6800000


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

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.