Contract 0x1A1F3AdA8674896B8e312BF260A390E24A7b6a9A

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xf16137100a4c7fb54ed5e2f6ad0589b5f653d6353e702f0da80433650a7601aeExecute61240632021-03-30 6:15:16210 days 9 hrs ago0x41843833cbb83f85b5d5b6b9740d64ebdb5ee678 IN  0x1a1f3ada8674896b8e312bf260a390e24a7b6a9a0 BNB0.00083503
0xf1e80233ae27b1bd1d1bdcf63110e35061528fcf879f06c332164948c349f9acCast Vote60257672021-03-26 19:30:48213 days 19 hrs ago0x8a03e55fc624a1dd7b1e5c41a82dc9aa4508043b IN  0x1a1f3ada8674896b8e312bf260a390e24a7b6a9a0 BNB0.0006215
0x75b74a497f603b8d88b28d6040ed2aeb0913c871a1a019e9896039f98f818189Cast Vote60242382021-03-26 18:13:46213 days 21 hrs ago0x41843833cbb83f85b5d5b6b9740d64ebdb5ee678 IN  0x1a1f3ada8674896b8e312bf260a390e24a7b6a9a0 BNB0.0006215
0xd82ba78d9ad6596a4e6f2b5c20db54a9e19f84a5a8d2850f10b5e04203a67028Cast Vote60226712021-03-26 16:54:40213 days 22 hrs ago0x6ab765f6ab3ababf78d1552c7855376a0a8bd077 IN  0x1a1f3ada8674896b8e312bf260a390e24a7b6a9a0 BNB0.0006215
0x58ddc169da2cf35de0a0a2dba523d20bd50c72dd8557093938a07e3406da9609Cast Vote59929052021-03-25 15:50:58214 days 23 hrs ago0x9d756cedaf8c87de86b5e3fa0481cbeb4584e889 IN  0x1a1f3ada8674896b8e312bf260a390e24a7b6a9a0 BNB0.0007715
0xcd4ffc84b7bcb9e15c6b0a05bbaaa71243bd7ec5b8f19056ab7460013412f9820x6080604059301992021-03-23 11:16:17217 days 4 hrs agoProxima: Deployer IN  Contract Creation0 BNB0.03329068
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ProximaPairGovernor

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 4 : ProximaPairGovernor.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2;

/**
 * @title : ProximaPairGovernor
 * @dev  : Inspired from COMPOUND:
 * https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/GovernorAlpha.sol
 * Developed by ProximusAlpha
 */

import "@openzeppelin/contracts/math/SafeMath.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

interface PxaInterface {
    function getPriorVotes(address account, uint256 blockNumber)
        external
        view
        returns (uint96);
}

contract ProximaPairGovernor is Ownable {
    using SafeMath for uint256;
    /// @dev Proxima Token Instance
    PxaInterface public pxa;
    /// @dev Possible states that a proposal may be in
    enum ProposalState {
        Pending,
        Active,
        Canceled,
        Defeated,
        Succeeded,
        Executed,
        Challenged
    }

    /// @dev  The name of this contract
    string public constant name = "Proxima Pair Governor";
    /// @dev  RewardVault address
    address public proximaLiquidityRewardVault;
    /// @dev  Factory Address
    address public factory;
    /// @dev  Proposal COunter
    uint256 public proposalCount;
    /// @dev  The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH =
        keccak256(
            "EIP712Domain(string name,uint256 chainId,address verifyingContract)"
        );
    /// @dev  The EIP-712 typehash for the ballot struct used by the contract
    bytes32 public constant BALLOT_TYPEHASH =
        keccak256("Ballot(uint256 proposalId,bool support)");

    /// @dev  Proposal storage struct
    struct Proposal {
        uint256 id;
        address proposer;
        address pair;
        address token0;
        address token1;
        uint256 startBlock;
        uint256 endBlock;
        uint256 forVotes;
        uint256 againstVotes;
        bool canceled;
        bool executed;
        bool challenged;
        mapping(address => Receipt) receipts;
    }
    /// @dev  Proposal votes storage struct
    struct Receipt {
        bool hasVoted;
        bool support;
        uint96 votes;
    }
    /// @dev  The official record of all proposals ever proposed
    mapping(uint256 => Proposal) public proposals;
    /// @dev  The latest proposal for each proposer
    mapping(address => uint256) public latestProposalIds;

    ///@dev  An event emitted when a new proposal is created
    event ProposalCreated(
        uint256 id,
        address proposer,
        address pair,
        address token0,
        address token1
    );
    /// @dev  An event emitted when a vote has been cast on a proposal
    event VoteCast(
        address voter,
        uint256 proposalId,
        bool support,
        uint256 votes
    );
    /// @dev  An event emitted when a proposal has been canceled
    event ProposalChallenged(
        address indexed challenger,
        uint256 indexed originalId,
        uint256 indexed newId
    );
    /// @dev  An event emitted when a proposal has been canceled
    event ProposalCanceled(uint256 id);
    /// @dev  An event emitted when a proposal has been executed in the Timelock
    event ProposalExecuted(uint256 id);

    /// @dev  Sets mandate
    constructor(
        address _pxa,
        address _factory,
        address _proximaLiquidityRewardVault
    ) public {
        pxa = PxaInterface(_pxa);
        factory = _factory;
        proximaLiquidityRewardVault = _proximaLiquidityRewardVault;
    }

    /// @dev  Creates new proposal
    function propose(
        address _pair,
        address _token0,
        address _token1,
        address _proposer
    ) external returns (bool) {
        require(msg.sender == factory, "Err: Auth failed");
        uint256 pid = _propose(_pair, _token0, _token1, _proposer);
        emit ProposalCreated(pid, msg.sender, _pair, _token0, _token1);
        return true;
    }

    /// @dev  Challenge governance of existing proposal
    function challengeGovernance(uint256 proposalId) external returns (bool) {
        require(
            proposalCount >= proposalId && proposalId > 0,
            "Err: Invalid proposalId"
        );
        require(
            pxa.getPriorVotes(msg.sender, block.number.sub(1)) >
                proposalThreshold(),
            "Err: Proposer votes below threshold"
        );
        require(
            state(proposalId) != ProposalState.Active ||
                state(proposalId) != ProposalState.Challenged,
            "Err: Proposal Active or Challenged"
        );
        Proposal storage proposal = proposals[proposalId];
        uint256 pid =
            _propose(
                proposal.pair,
                proposal.token0,
                proposal.token1,
                msg.sender
            );
        proposal.challenged = true;
        emit ProposalChallenged(msg.sender, proposalId, pid);
        return true;
    }

    /// @dev  Execute proposal
    function execute(uint256 proposalId) external {
        bool sentiment = false;
        require(
            state(proposalId) == ProposalState.Succeeded ||
                state(proposalId) == ProposalState.Defeated,
            "Err: Proposal still pending"
        );
        if (state(proposalId) == ProposalState.Succeeded) {
            sentiment = true;
        }
        Proposal storage proposal = proposals[proposalId];
        proposal.executed = true;
        (bool success, ) =
            proximaLiquidityRewardVault.call(
                abi.encodeWithSignature(
                    "applyGovernance(address,bool)",
                    proposal.pair,
                    sentiment
                )
            );
        require(success, "Err: Transaction execution reverted.");
        emit ProposalExecuted(proposalId);
    }

    /// @dev  Cancle proposal
    function cancel(uint256 proposalId) public {
        ProposalState state = state(proposalId);
        require(
            state != ProposalState.Executed,
            "Err: Cannot cancel executed proposal."
        );
        Proposal storage proposal = proposals[proposalId];
        require(msg.sender == proposal.proposer, "Err: Invalid proposer");

        proposal.canceled = true;
        emit ProposalCanceled(proposalId);
    }

    /// @dev  Caste votes for proposal
    function castVote(uint256 proposalId, bool support) public {
        return _castVote(msg.sender, proposalId, support);
    }

    /// @dev  Caste votes for proposal via signature
    function castVoteBySig(
        uint256 proposalId,
        bool support,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public {
        bytes32 domainSeparator =
            keccak256(
                abi.encode(
                    DOMAIN_TYPEHASH,
                    keccak256(bytes(name)),
                    getChainId(),
                    address(this)
                )
            );
        bytes32 structHash =
            keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support));
        bytes32 digest =
            keccak256(
                abi.encodePacked("\x19\x01", domainSeparator, structHash)
            );
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "Err: Invalid signature");
        return _castVote(signatory, proposalId, support);
    }

    function _castVote(
        address voter,
        uint256 proposalId,
        bool support
    ) internal {
        require(
            state(proposalId) == ProposalState.Active,
            "Err: Voting closed"
        );
        Proposal storage proposal = proposals[proposalId];
        Receipt storage receipt = proposal.receipts[voter];
        require(receipt.hasVoted == false, "Err: Voter already voted");
        uint96 votes = pxa.getPriorVotes(voter, block.number.sub(1));

        if (support) {
            proposal.forVotes = proposal.forVotes.add(votes);
        } else {
            proposal.againstVotes = proposal.againstVotes.add(votes);
        }
        receipt.hasVoted = true;
        receipt.support = support;
        receipt.votes = votes;
        emit VoteCast(voter, proposalId, support, votes);
    }

    /// @dev  Returns proposal state
    function state(uint256 proposalId) public view returns (ProposalState) {
        require(
            proposalCount >= proposalId && proposalId > 0,
            "Err: Invalid proposal id"
        );
        Proposal storage proposal = proposals[proposalId];
        if (proposal.challenged) {
            return ProposalState.Challenged;
        } else if (proposal.canceled) {
            return ProposalState.Canceled;
        } else if (block.number <= proposal.startBlock) {
            return ProposalState.Pending;
        } else if (block.number <= proposal.endBlock) {
            return ProposalState.Active;
        } else if (proposal.executed) {
            return ProposalState.Executed;
        } else if (proposal.againstVotes < proposal.forVotes) {
            return ProposalState.Succeeded;
        } else {
            return ProposalState.Defeated;
        }
    }

    /// @dev  Returns chainID
    function getChainId() internal pure returns (uint256) {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        return chainId;
    }

    /// @dev  Pure dapp function, returns proposal
    function getProposalInfo(uint256 proposalId)
        external
        view
        returns (
            address,
            address,
            address,
            address,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        Proposal storage proposal = proposals[proposalId];
        return (
            proposal.proposer,
            proposal.pair,
            proposal.token0,
            proposal.token1,
            proposal.startBlock,
            proposal.endBlock,
            proposal.forVotes,
            proposal.againstVotes
        );
    }

    /// @dev  Pure dapp function, Returns user support on proposal
    function getReceipt(uint256 proposalId, address voter)
        public
        view
        returns (Receipt memory)
    {
        return proposals[proposalId].receipts[voter];
    }

    /// @dev  The number of votes required in order for a voter to become a proposer
    function proposalThreshold() public pure returns (uint256) {
        return 100000e18;
        // 100000 votes;
    }

    /// @dev  The delay before voting on a proposal may take place, once proposed
    function votingDelay() public pure returns (uint256) {
        return 1;
    } // 1 block

    /// @dev  The duration of voting on a proposal, in blocks
    function votingPeriod() public pure returns (uint256) {
        return 86400;
    } // 3 sec block time (~ 3 days)

    function _propose(
        address _pair,
        address _token0,
        address _token1,
        address _proposer
    ) internal returns (uint256) {
        require(
            _pair != address(0) &&
                _token0 != address(0) &&
                _token1 != address(0) &&
                _proposer != address(0),
            "Err: Invalid request"
        );
        uint256 startBlock = block.number.add(votingDelay());
        uint256 endBlock = startBlock.add(votingPeriod());

        proposalCount++;
        Proposal memory newProposal =
            Proposal({
                id: proposalCount,
                proposer: _proposer,
                pair: _pair,
                token0: _token0,
                token1: _token1,
                startBlock: startBlock,
                endBlock: endBlock,
                forVotes: 0,
                againstVotes: 0,
                canceled: false,
                executed: false,
                challenged: false
            });

        proposals[newProposal.id] = newProposal;
        latestProposalIds[newProposal.proposer] = newProposal.id;
        return newProposal.id;
    }
}

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

pragma solidity >=0.6.0 <0.8.0;

import "../utils/Context.sol";
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        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 4 : 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, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @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) {
        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, reverting 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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * 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);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * 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);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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 4 of 4 : 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;
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_pxa","type":"address"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_proximaLiquidityRewardVault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"challenger","type":"address"},{"indexed":true,"internalType":"uint256","name":"originalId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newId","type":"uint256"}],"name":"ProposalChallenged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"proposer","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"address","name":"token0","type":"address"},{"indexed":false,"internalType":"address","name":"token1","type":"address"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"support","type":"bool"},{"indexed":false,"internalType":"uint256","name":"votes","type":"uint256"}],"name":"VoteCast","type":"event"},{"inputs":[],"name":"BALLOT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"bool","name":"support","type":"bool"}],"name":"castVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"castVoteBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"challengeGovernance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getProposalInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"voter","type":"address"}],"name":"getReceipt","outputs":[{"components":[{"internalType":"bool","name":"hasVoted","type":"bool"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint96","name":"votes","type":"uint96"}],"internalType":"struct ProximaPairGovernor.Receipt","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"bool","name":"challenged","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"},{"internalType":"address","name":"_proposer","type":"address"}],"name":"propose","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proximaLiquidityRewardVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pxa","outputs":[{"internalType":"contract PxaInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum ProximaPairGovernor.ProposalState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}]

60806040523480156200001157600080fd5b5060405162001ccd38038062001ccd8339810160408190526200003491620000d1565b600062000040620000cd565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039485166001600160a01b0319918216179091556003805493851693821693909317909255600280549190931691161790556200013d565b3390565b600080600060608486031215620000e6578283fd5b8351620000f38162000124565b6020850151909350620001068162000124565b6040850151909250620001198162000124565b809150509250925092565b6001600160a01b03811681146200013a57600080fd5b50565b611b80806200014d6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063715018a6116100c3578063da35c6641161007c578063da35c664146102c8578063deaaa7cc146102d0578063df1db7c9146102d8578063e23a9a52146102e0578063f2fde38b14610300578063fe0d94c11461031357610158565b8063715018a61461026c5780638da5cb5b14610274578063b58131b014610289578063bc903cb814610291578063c45a0155146102b8578063ce509f8d146102c057610158565b8063339bd13611610115578063339bd136146101eb5780633932abb11461020b5780633e4f49e6146102135780633fc3db031461023357806340e58ee5146102465780634634c61f1461025957610158565b8063013cf08b1461015d57806302a251a31461019157806306fdde03146101a657806315373e3d146101bb57806317977c61146101d057806320606b70146101e3575b600080fd5b61017061016b3660046113f0565b610326565b6040516101889c9b9a99989796959493929190611aa1565b60405180910390f35b61019961039d565b60405161018891906115e5565b6101ae6103a4565b604051610188919061165c565b6101ce6101c9366004611434565b6103d5565b005b6101996101de36600461137e565b6103e4565b6101996103f6565b6101fe6101f9366004611399565b61041a565b60405161018891906115da565b6101996104ab565b6102266102213660046113f0565b6104b0565b6040516101889190611648565b6101fe6102413660046113f0565b61058d565b6101ce6102543660046113f0565b610755565b6101ce610267366004611463565b610814565b6101ce6109c5565b61027c610a4e565b6040516101889190611517565b610199610a5d565b6102a461029f3660046113f0565b610a6b565b604051610188989796959493929190611544565b61027c610ac4565b61027c610ad3565b610199610ae2565b610199610ae8565b61027c610b0c565b6102f36102ee366004611408565b610b1b565b6040516101889190611a45565b6101ce61030e36600461137e565b610b8a565b6101ce6103213660046113f0565b610c4a565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460068601546007870154600888015460099098015496986001600160a01b03968716989587169794871696169492939192909160ff80821691610100810482169162010000909104168c565b6201518090565b60405180604001604052806015815260200174283937bc34b6b0902830b4b91023b7bb32b93737b960591b81525081565b6103e0338383610dde565b5050565b60066020526000908152604090205481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6003546000906001600160a01b031633146104505760405162461bcd60e51b81526004016104479061177d565b60405180910390fd5b600061045e86868686610fb6565b90507fb9ef8fa6b3cc35c03302d05e8553c7fce4f6dce176071c9101df296b1b45d5248133888888604051610497959493929190611a73565b60405180910390a150600195945050505050565b600190565b600081600454101580156104c45750600082115b6104e05760405162461bcd60e51b8152600401610447906119b4565b6000828152600560205260409020600981015462010000900460ff161561050b576006915050610588565b600981015460ff1615610522576002915050610588565b80600501544311610537576000915050610588565b8060060154431161054c576001915050610588565b6009810154610100900460ff1615610568576005915050610588565b806007015481600801541015610582576004915050610588565b60039150505b919050565b600081600454101580156105a15750600082115b6105bd5760405162461bcd60e51b8152600401610447906118bf565b6105c5610a5d565b600180546001600160a01b03169063782d6fe19033906105e6904390611287565b6040518363ffffffff1660e01b815260040161060392919061152b565b60206040518083038186803b15801561061b57600080fd5b505afa15801561062f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065391906114b9565b6001600160601b0316116106795760405162461bcd60e51b81526004016104479061187c565b6001610684836104b0565b600681111561068f57fe5b1415806106b0575060066106a2836104b0565b60068111156106ad57fe5b14155b6106cc5760405162461bcd60e51b81526004016104479061168f565b6000828152600560205260408120600281015460038201546004830154929392610706926001600160a01b03908116928116911633610fb6565b60098301805462ff00001916620100001790556040519091508190859033907f8ceffc6c865c51ebee25b0b5e080be67f8299f96202b44527697bdd5498305e790600090a45060019392505050565b6000610760826104b0565b9050600581600681111561077057fe5b141561078e5760405162461bcd60e51b81526004016104479061193a565b600082815260056020526040902060018101546001600160a01b031633146107c85760405162461bcd60e51b81526004016104479061174e565b60098101805460ff191660011790556040517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c906108079085906115e5565b60405180910390a1505050565b604080518082019091526015815274283937bc34b6b0902830b4b91023b7bb32b93737b960591b60209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667ffcaa3d5e37d8c5ccf424c843e52af147a8ff978f27b15ee3c6f64685fcf4819c61088d6112af565b306040516020016108a194939291906115ee565b60405160208183030381529060405280519060200120905060007f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee87876040516020016108f093929190611612565b6040516020818303038152906040528051906020012090506000828260405160200161091d9291906114fc565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161095a949392919061162a565b6020604051602081039080840390855afa15801561097c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166109af5760405162461bcd60e51b8152600401610447906117a7565b6109ba818a8a610dde565b505050505050505050565b6109cd6112b3565b6001600160a01b03166109de610a4e565b6001600160a01b031614610a045760405162461bcd60e51b81526004016104479061197f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b69152d02c7e14af680000090565b6000908152600560208190526040909120600181015460028201546003830154600484015494840154600685015460078601546008909601546001600160a01b0395861698948616979386169695909316949193909290565b6003546001600160a01b031681565b6001546001600160a01b031681565b60045481565b7f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee81565b6002546001600160a01b031681565b610b236112e3565b5060008281526005602090815260408083206001600160a01b0385168452600a018252918290208251606081018452905460ff80821615158352610100820416151592820192909252620100009091046001600160601b0316918101919091525b92915050565b610b926112b3565b6001600160a01b0316610ba3610a4e565b6001600160a01b031614610bc95760405162461bcd60e51b81526004016104479061197f565b6001600160a01b038116610bef5760405162461bcd60e51b8152600401610447906116d1565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006004610c57836104b0565b6006811115610c6257fe5b1480610c8157506003610c74836104b0565b6006811115610c7f57fe5b145b610c9d5760405162461bcd60e51b8152600401610447906117d7565b6004610ca8836104b0565b6006811115610cb357fe5b1415610cbd575060015b60008281526005602052604080822060098101805461ff001916610100179055600280549082015492519193926001600160a01b0391821692610d09929190911690869060240161158e565b60408051601f198184030181529181526020820180516001600160e01b0316630f1d11ff60e11b17905251610d3e91906114e0565b6000604051808303816000865af19150503d8060008114610d7b576040519150601f19603f3d011682016040523d82523d6000602084013e610d80565b606091505b5050905080610da15760405162461bcd60e51b8152600401610447906118f6565b7f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f84604051610dd091906115e5565b60405180910390a150505050565b6001610de9836104b0565b6006811115610df457fe5b14610e115760405162461bcd60e51b8152600401610447906119eb565b60008281526005602090815260408083206001600160a01b0387168452600a8101909252909120805460ff1615610e5a5760405162461bcd60e51b815260040161044790611845565b600180546000916001600160a01b039091169063782d6fe1908890610e80904390611287565b6040518363ffffffff1660e01b8152600401610e9d92919061152b565b60206040518083038186803b158015610eb557600080fd5b505afa158015610ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eed91906114b9565b90508315610f17576007830154610f0d906001600160601b0383166112b7565b6007840155610f35565b6008830154610f2f906001600160601b0383166112b7565b60088401555b8154600160ff199091161761ff00191661010085151502176dffffffffffffffffffffffff00001916620100006001600160601b038316021782556040517f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c4690610fa69088908890889086906115a9565b60405180910390a1505050505050565b60006001600160a01b03851615801590610fd857506001600160a01b03841615155b8015610fec57506001600160a01b03831615155b801561100057506001600160a01b03821615155b61101c5760405162461bcd60e51b815260040161044790611a17565b60006110306110296104ab565b43906112b7565b9050600061104661103f61039d565b83906112b7565b6004805460010190559050611059611303565b6040518061018001604052806004548152602001866001600160a01b03168152602001896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b0316815260200184815260200183815260200160008152602001600081526020016000151581526020016000151581526020016000151581525090508060056000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801556101208201518160090160006101000a81548160ff0219169083151502179055506101408201518160090160016101000a81548160ff0219169083151502179055506101608201518160090160026101000a81548160ff02191690831515021790555090505080600001516006600083602001516001600160a01b03166001600160a01b031681526020019081526020016000208190555080600001519350505050949350505050565b6000828211156112a95760405162461bcd60e51b81526004016104479061180e565b50900390565b4690565b3390565b6000828201838110156112dc5760405162461bcd60e51b815260040161044790611717565b9392505050565b604080516060810182526000808252602082018190529181019190915290565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915290565b80356001600160a01b0381168114610b8457600080fd5b60006020828403121561138f578081fd5b6112dc8383611367565b600080600080608085870312156113ae578283fd5b6113b88686611367565b93506113c78660208701611367565b92506113d68660408701611367565b91506113e58660608701611367565b905092959194509250565b600060208284031215611401578081fd5b5035919050565b6000806040838503121561141a578182fd5b8235915061142b8460208501611367565b90509250929050565b60008060408385031215611446578182fd5b82359150602083013561145881611b39565b809150509250929050565b600080600080600060a0868803121561147a578081fd5b85359450602086013561148c81611b39565b9350604086013560ff811681146114a1578182fd5b94979396509394606081013594506080013592915050565b6000602082840312156114ca578081fd5b81516001600160601b03811681146112dc578182fd5b600082516114f2818460208701611b09565b9190910192915050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03988916815296881660208801529487166040870152929095166060850152608084015260a083019390935260c082019290925260e08101919091526101000190565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b039490941684526020840192909252151560408301526001600160601b0316606082015260800190565b901515815260200190565b90815260200190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091521515604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b602081016007831061165657fe5b91905290565b600060208252825180602084015261167b816040850160208701611b09565b601f01601f19169190910160400192915050565b60208082526022908201527f4572723a2050726f706f73616c20416374697665206f72204368616c6c656e67604082015261195960f21b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526015908201527422b9391d1024b73b30b634b210383937b837b9b2b960591b604082015260600190565b60208082526010908201526f115c9c8e88105d5d1a0819985a5b195960821b604082015260600190565b6020808252601690820152754572723a20496e76616c6964207369676e617475726560501b604082015260600190565b6020808252601b908201527f4572723a2050726f706f73616c207374696c6c2070656e64696e670000000000604082015260600190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b60208082526018908201527f4572723a20566f74657220616c726561647920766f7465640000000000000000604082015260600190565b60208082526023908201527f4572723a2050726f706f73657220766f7465732062656c6f77207468726573686040820152621bdb1960ea1b606082015260800190565b60208082526017908201527f4572723a20496e76616c69642070726f706f73616c4964000000000000000000604082015260600190565b60208082526024908201527f4572723a205472616e73616374696f6e20657865637574696f6e2072657665726040820152633a32b21760e11b606082015260800190565b60208082526025908201527f4572723a2043616e6e6f742063616e63656c2065786563757465642070726f7060408201526437b9b0b61760d91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526018908201527f4572723a20496e76616c69642070726f706f73616c2069640000000000000000604082015260600190565b602080825260129082015271115c9c8e88159bdd1a5b99c818db1bdcd95960721b604082015260600190565b602080825260149082015273115c9c8e88125b9d985b1a59081c995c5d595cdd60621b604082015260600190565b8151151581526020808301511515908201526040918201516001600160601b03169181019190915260600190565b9485526001600160a01b03938416602086015291831660408501528216606084015216608082015260a00190565b9b8c526001600160a01b039a8b1660208d0152988a1660408c015296891660608b015294909716608089015260a088019290925260c087015260e086015261010085019390935291151561012084015290151561014083015215156101608201526101800190565b60005b83811015611b24578181015183820152602001611b0c565b83811115611b33576000848401525b50505050565b8015158114611b4757600080fd5b5056fea2646970667358221220a2ee84a144a8e0d8907551592980cd29481960b13c40a49fb2cf075ec8d52c9064736f6c634300060c0033000000000000000000000000086b098699a219903f5a7df526ba2874f1637f30000000000000000000000000642e7fb78a719133f15a73e14ac5801048ad79bc000000000000000000000000b761cdeb75746345c398b394a3e88443d368cc6c

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

000000000000000000000000086b098699a219903f5a7df526ba2874f1637f30000000000000000000000000642e7fb78a719133f15a73e14ac5801048ad79bc000000000000000000000000b761cdeb75746345c398b394a3e88443d368cc6c

-----Decoded View---------------
Arg [0] : _pxa (address): 0x086b098699a219903f5a7df526ba2874f1637f30
Arg [1] : _factory (address): 0x642e7fb78a719133f15a73e14ac5801048ad79bc
Arg [2] : _proximaLiquidityRewardVault (address): 0xb761cdeb75746345c398b394a3e88443d368cc6c

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000086b098699a219903f5a7df526ba2874f1637f30
Arg [1] : 000000000000000000000000642e7fb78a719133f15a73e14ac5801048ad79bc
Arg [2] : 000000000000000000000000b761cdeb75746345c398b394a3e88443d368cc6c


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.