Contract Overview
Balance:
0 FTM
FTM Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xb30dc758cd1f64ef1ede5584889c16ac14125362d39730089919a16ef55e271a | 0x60806040 | 21759180 | 497 days 2 hrs ago | Parallel: Deployer | IN | Create: GovernorAlpha | 0 FTM | 0.9936435 |
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0xb30dc758cd1f64ef1ede5584889c16ac14125362d39730089919a16ef55e271a | 21759180 | 497 days 2 hrs ago | Parallel: Deployer | Contract Creation | 0 FTM |
[ Download CSV Export ]
Contract Name:
GovernorAlpha
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)
// SPDX-License-Identifier: BSD-3-Clause pragma solidity 0.6.12; pragma experimental ABIEncoderV2; import "@openzeppelin/contracts/math/SafeMath.sol"; import "./interfaces/IGovernorAlpha.sol"; import "./interfaces/IGovernanceAddressProvider.sol"; import "../libraries/WadRayMath.sol"; contract GovernorAlpha is IGovernorAlpha { using SafeMath for uint256; using WadRayMath for uint256; /// @notice The maximum number of actions that can be included in a proposal function proposalMaxOperations() public pure returns (uint256) { return 10; } // 10 actions IGovernanceAddressProvider public a; /// @notice The address of the Governor Guardian address public guardian; /// @notice The total number of proposals uint256 public proposalCount; /// @notice The official record of all proposals ever proposed mapping(uint256 => Proposal) public proposals; /// @notice The latest proposal for each proposer mapping(address => uint256) public latestProposalIds; constructor(IGovernanceAddressProvider _addresses, address _guardian) public { require(address(_addresses) != address(0)); require(address(_guardian) != address(0)); a = _addresses; guardian = _guardian; } function propose( address[] memory targets, uint256[] memory values, string[] memory signatures, bytes[] memory calldatas, string memory description, uint256 endTime ) public override returns (uint256) { uint256 votingDuration = endTime.sub(block.timestamp); require(votingDuration >= a.parallel().config().minVotingPeriod(), "Proposal end-time too early"); require(votingDuration <= a.parallel().config().maxVotingPeriod(), "Proposal end-time too late"); require( a.votingEscrow().balanceOfAt(msg.sender, endTime) > proposalThreshold(), "GovernorAlpha::propose: proposer votes below proposal threshold" ); require( targets.length == values.length && targets.length == signatures.length && targets.length == calldatas.length, "GovernorAlpha::propose: proposal function information arity mismatch" ); require(targets.length != 0, "GovernorAlpha::propose: must provide actions"); require(targets.length <= proposalMaxOperations(), "GovernorAlpha::propose: too many actions"); uint256 latestProposalId = latestProposalIds[msg.sender]; if (latestProposalId != 0) { ProposalState proposersLatestProposalState = state(latestProposalId); require( proposersLatestProposalState != ProposalState.Active, "GovernorAlpha::propose: one live proposal per proposer, found an already active proposal" ); } proposalCount++; Proposal memory newProposal = Proposal({ id: proposalCount, proposer: msg.sender, eta: 0, targets: targets, values: values, signatures: signatures, calldatas: calldatas, startTime: block.timestamp, endTime: endTime, forVotes: 0, againstVotes: 0, canceled: false, executed: false }); proposals[newProposal.id] = newProposal; latestProposalIds[newProposal.proposer] = newProposal.id; emit ProposalCreated( newProposal.id, msg.sender, targets, values, signatures, calldatas, block.timestamp, endTime, description ); return newProposal.id; } function queue(uint256 proposalId) public override { require( state(proposalId) == ProposalState.Succeeded, "GovernorAlpha::queue: proposal can only be queued if it is succeeded" ); Proposal storage proposal = proposals[proposalId]; uint256 eta = block.timestamp.add(a.timelock().delay()); for (uint256 i = 0; i < proposal.targets.length; i++) { _queueOrRevert(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], eta); } proposal.eta = eta; emit ProposalQueued(proposalId, eta); } function execute(uint256 proposalId) public payable override { require( state(proposalId) == ProposalState.Queued, "GovernorAlpha::execute: proposal can only be executed if it is queued" ); Proposal storage proposal = proposals[proposalId]; proposal.executed = true; for (uint256 i = 0; i < proposal.targets.length; i++) { a.timelock().executeTransaction{ value: proposal.values[i] }( proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta ); } emit ProposalExecuted(proposalId); } function cancel(uint256 proposalId) public override { ProposalState state = state(proposalId); require(state != ProposalState.Executed, "GovernorAlpha::cancel: cannot cancel executed proposal"); Proposal storage proposal = proposals[proposalId]; require(msg.sender == guardian, "Only Guardian can cancel"); proposal.canceled = true; for (uint256 i = 0; i < proposal.targets.length; i++) { a.timelock().cancelTransaction( proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta ); } emit ProposalCanceled(proposalId); } function castVote(uint256 proposalId, bool support) public override { require(state(proposalId) == ProposalState.Active, "GovernorAlpha::_castVote: voting is closed"); Proposal storage proposal = proposals[proposalId]; Receipt storage receipt = proposal.receipts[msg.sender]; require(receipt.hasVoted == false, "GovernorAlpha::_castVote: voter already voted"); uint256 votes = a.votingEscrow().balanceOfAt(msg.sender, proposal.endTime); 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(msg.sender, proposalId, support, votes); } // solhint-disable-next-line private-vars-leading-underscore function __acceptAdmin() public { require(msg.sender == guardian, "GovernorAlpha::__acceptAdmin: sender must be gov guardian"); a.timelock().acceptAdmin(); } // solhint-disable-next-line private-vars-leading-underscore function __abdicate() public { require(msg.sender == guardian, "GovernorAlpha::__abdicate: sender must be gov guardian"); guardian = address(0); } // solhint-disable-next-line private-vars-leading-underscore function __queueSetTimelockPendingAdmin(address newPendingAdmin, uint256 eta) public { require(msg.sender == guardian, "GovernorAlpha::__queueSetTimelockPendingAdmin: sender must be gov guardian"); a.timelock().queueTransaction( address(a.timelock()), 0, "setPendingAdmin(address)", abi.encode(newPendingAdmin), eta ); } // solhint-disable-next-line private-vars-leading-underscore function __executeSetTimelockPendingAdmin(address newPendingAdmin, uint256 eta) public { require(msg.sender == guardian, "GovernorAlpha::__executeSetTimelockPendingAdmin: sender must be gov guardian"); a.timelock().executeTransaction( address(a.timelock()), 0, "setPendingAdmin(address)", abi.encode(newPendingAdmin), eta ); } /// @notice The number of votes in support of a proposal required in order for a quorum to be reached and for a vote to succeed function quorumVotes() public view override returns (uint256) { return a.votingEscrow().stakingToken().totalSupply().wadMul(a.parallel().config().votingQuorum()); } /// @notice The number of votes required in order for a voter to become a proposer function proposalThreshold() public view override returns (uint256) { return a.votingEscrow().stakingToken().totalSupply().wadMul(a.parallel().config().proposalThreshold()); } function getActions(uint256 proposalId) public view override returns ( address[] memory targets, uint256[] memory values, string[] memory signatures, bytes[] memory calldatas ) { Proposal storage p = proposals[proposalId]; return (p.targets, p.values, p.signatures, p.calldatas); } function getReceipt(uint256 proposalId, address voter) public view override returns (Receipt memory) { return proposals[proposalId].receipts[voter]; } function state(uint256 proposalId) public view override returns (ProposalState) { require(proposalCount >= proposalId && proposalId > 0, "GovernorAlpha::state: invalid proposal id"); Proposal storage proposal = proposals[proposalId]; if (proposal.canceled) { return ProposalState.Canceled; } else if (block.timestamp <= proposal.endTime) { return ProposalState.Active; } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes()) { return ProposalState.Defeated; } else if (proposal.eta == 0) { return ProposalState.Succeeded; } else if (proposal.executed) { return ProposalState.Executed; } else if (block.timestamp >= a.timelock().GRACE_PERIOD().add(proposal.endTime)) { return ProposalState.Expired; } else { return ProposalState.Queued; } } function _queueOrRevert( address target, uint256 value, string memory signature, bytes memory data, uint256 eta ) internal { require( !a.timelock().queuedTransactions(keccak256(abi.encode(target, value, signature, data, eta))), "GovernorAlpha::_queueOrRevert: proposal action already queued at eta" ); a.timelock().queueTransaction(target, value, signature, data, eta); } }
// 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; } }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; interface IGovernorAlpha { /// @notice Possible states that a proposal may be in enum ProposalState { Active, Canceled, Defeated, Succeeded, Queued, Expired, Executed } struct Proposal { // Unique id for looking up a proposal uint256 id; // Creator of the proposal address proposer; // The timestamp that the proposal will be available for execution, set once the vote succeeds uint256 eta; // the ordered list of target addresses for calls to be made address[] targets; // The ordered list of values (i.e. msg.value) to be passed to the calls to be made uint256[] values; // The ordered list of function signatures to be called string[] signatures; // The ordered list of calldata to be passed to each call bytes[] calldatas; // The timestamp at which voting begins: holders must delegate their votes prior to this timestamp uint256 startTime; // The timestamp at which voting ends: votes must be cast prior to this timestamp uint endTime; // Current number of votes in favor of this proposal uint256 forVotes; // Current number of votes in opposition to this proposal uint256 againstVotes; // Flag marking whether the proposal has been canceled bool canceled; // Flag marking whether the proposal has been executed bool executed; // Receipts of ballots for the entire set of voters mapping (address => Receipt) receipts; } /// @notice Ballot receipt record for a voter struct Receipt { // Whether or not a vote has been cast bool hasVoted; // Whether or not the voter supports the proposal bool support; // The number of votes the voter had, which were cast uint votes; } /// @notice An event emitted when a new proposal is created event ProposalCreated(uint256 id, address proposer, address[] targets, uint256[] values, string[] signatures, bytes[] calldatas, uint startTime, uint endTime, string description); /// @notice An event emitted when a vote has been cast on a proposal event VoteCast(address voter, uint256 proposalId, bool support, uint256 votes); /// @notice An event emitted when a proposal has been canceled event ProposalCanceled(uint256 id); /// @notice An event emitted when a proposal has been queued in the Timelock event ProposalQueued(uint256 id, uint256 eta); /// @notice An event emitted when a proposal has been executed in the Timelock event ProposalExecuted(uint256 id); function propose(address[] memory targets, uint256[] memory values, string[] memory signatures, bytes[] memory calldatas, string memory description, uint256 endTime) external returns (uint); function queue(uint256 proposalId) external; function execute(uint256 proposalId) external payable; function cancel(uint256 proposalId) external; function castVote(uint256 proposalId, bool support) external; function getActions(uint256 proposalId) external view returns (address[] memory targets, uint256[] memory values, string[] memory signatures, bytes[] memory calldatas); function getReceipt(uint256 proposalId, address voter) external view returns (Receipt memory); function state(uint proposalId) external view returns (ProposalState); function quorumVotes() external view returns (uint256); function proposalThreshold() external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; import "./IGovernorAlpha.sol"; import "./ITimelock.sol"; import "./IVotingEscrow.sol"; import "../../interfaces/IAccessController.sol"; import "../../interfaces/IAddressProvider.sol"; import "../../liquidityMining/interfaces/IMIMO.sol"; import "../../liquidityMining/interfaces/IDebtNotifier.sol"; interface IGovernanceAddressProvider { function setParallelAddressProvider(IAddressProvider _parallel) external; function setMIMO(IMIMO _mimo) external; function setDebtNotifier(IDebtNotifier _debtNotifier) external; function setGovernorAlpha(IGovernorAlpha _governorAlpha) external; function setTimelock(ITimelock _timelock) external; function setVotingEscrow(IVotingEscrow _votingEscrow) external; function controller() external view returns (IAccessController); function parallel() external view returns (IAddressProvider); function mimo() external view returns (IMIMO); function debtNotifier() external view returns (IDebtNotifier); function governorAlpha() external view returns (IGovernorAlpha); function timelock() external view returns (ITimelock); function votingEscrow() external view returns (IVotingEscrow); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "@openzeppelin/contracts/math/SafeMath.sol"; /****************** @title WadRayMath library @author Aave @dev Provides mul and div function for wads (decimal numbers with 18 digits precision) and rays (decimals with 27 digits) */ library WadRayMath { using SafeMath for uint256; uint256 internal constant _WAD = 1e18; uint256 internal constant _HALF_WAD = _WAD / 2; uint256 internal constant _RAY = 1e27; uint256 internal constant _HALF_RAY = _RAY / 2; uint256 internal constant _WAD_RAY_RATIO = 1e9; function ray() internal pure returns (uint256) { return _RAY; } function wad() internal pure returns (uint256) { return _WAD; } function halfRay() internal pure returns (uint256) { return _HALF_RAY; } function halfWad() internal pure returns (uint256) { return _HALF_WAD; } function wadMul(uint256 a, uint256 b) internal pure returns (uint256) { return _HALF_WAD.add(a.mul(b)).div(_WAD); } function wadDiv(uint256 a, uint256 b) internal pure returns (uint256) { uint256 halfB = b / 2; return halfB.add(a.mul(_WAD)).div(b); } function rayMul(uint256 a, uint256 b) internal pure returns (uint256) { return _HALF_RAY.add(a.mul(b)).div(_RAY); } function rayDiv(uint256 a, uint256 b) internal pure returns (uint256) { uint256 halfB = b / 2; return halfB.add(a.mul(_RAY)).div(b); } function rayToWad(uint256 a) internal pure returns (uint256) { uint256 halfRatio = _WAD_RAY_RATIO / 2; return halfRatio.add(a).div(_WAD_RAY_RATIO); } function wadToRay(uint256 a) internal pure returns (uint256) { return a.mul(_WAD_RAY_RATIO); } /** * @dev calculates x^n, in ray. The code uses the ModExp precompile * @param x base * @param n exponent * @return z = x^n, in ray */ function rayPow(uint256 x, uint256 n) internal pure returns (uint256 z) { z = n % 2 != 0 ? x : _RAY; for (n /= 2; n != 0; n /= 2) { x = rayMul(x, x); if (n % 2 != 0) { z = rayMul(z, x); } } } }
// SPDX-License-Identifier: BSD-3-Clause pragma solidity 0.6.12; interface ITimelock { event NewAdmin(address indexed newAdmin); event NewPendingAdmin(address indexed newPendingAdmin); event NewDelay(uint256 indexed newDelay); event CancelTransaction( bytes32 indexed txHash, address indexed target, uint256 value, string signature, bytes data, uint256 eta ); event ExecuteTransaction( bytes32 indexed txHash, address indexed target, uint256 value, string signature, bytes data, uint256 eta ); event QueueTransaction( bytes32 indexed txHash, address indexed target, uint256 value, string signature, bytes data, uint256 eta ); function acceptAdmin() external; function queueTransaction( address target, uint256 value, string calldata signature, bytes calldata data, uint256 eta ) external returns (bytes32); function cancelTransaction( address target, uint256 value, string calldata signature, bytes calldata data, uint256 eta ) external; function executeTransaction( address target, uint256 value, string calldata signature, bytes calldata data, uint256 eta ) external payable returns (bytes memory); function delay() external view returns (uint256); function GRACE_PERIOD() external view returns (uint256); function queuedTransactions(bytes32 hash) external view returns (bool); }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.6.12; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../../liquidityMining/interfaces/IGenericMiner.sol"; interface IVotingEscrow { enum LockAction { CREATE_LOCK, INCREASE_LOCK_AMOUNT, INCREASE_LOCK_TIME } struct LockedBalance { uint256 amount; uint256 end; } /** Shared Events */ event Deposit(address indexed provider, uint256 value, uint256 locktime, LockAction indexed action, uint256 ts); event Withdraw(address indexed provider, uint256 value, uint256 ts); event Expired(); function createLock(uint256 _value, uint256 _unlockTime) external; function increaseLockAmount(uint256 _value) external; function increaseLockLength(uint256 _unlockTime) external; function withdraw() external; function expireContract() external; function setMiner(IGenericMiner _miner) external; function setMinimumLockTime(uint256 _minimumLockTime) external; function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint256); function balanceOf(address _owner) external view returns (uint256); function balanceOfAt(address _owner, uint256 _blockTime) external view returns (uint256); function stakingToken() external view returns (IERC20); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IAccessController { event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; function MANAGER_ROLE() external view returns (bytes32); function MINTER_ROLE() external view returns (bytes32); function hasRole(bytes32 role, address account) external view returns (bool); function getRoleMemberCount(bytes32 role) external view returns (uint256); function getRoleMember(bytes32 role, uint256 index) external view returns (address); function getRoleAdmin(bytes32 role) external view returns (bytes32); }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; import "./IAccessController.sol"; import "./IConfigProvider.sol"; import "./ISTABLEX.sol"; import "./IPriceFeed.sol"; import "./IRatesManager.sol"; import "./ILiquidationManager.sol"; import "./IVaultsCore.sol"; import "./IVaultsDataProvider.sol"; import "./IFeeDistributor.sol"; interface IAddressProvider { function setAccessController(IAccessController _controller) external; function setConfigProvider(IConfigProvider _config) external; function setVaultsCore(IVaultsCore _core) external; function setStableX(ISTABLEX _stablex) external; function setRatesManager(IRatesManager _ratesManager) external; function setPriceFeed(IPriceFeed _priceFeed) external; function setLiquidationManager(ILiquidationManager _liquidationManager) external; function setVaultsDataProvider(IVaultsDataProvider _vaultsData) external; function setFeeDistributor(IFeeDistributor _feeDistributor) external; function controller() external view returns (IAccessController); function config() external view returns (IConfigProvider); function core() external view returns (IVaultsCore); function stablex() external view returns (ISTABLEX); function ratesManager() external view returns (IRatesManager); function priceFeed() external view returns (IPriceFeed); function liquidationManager() external view returns (ILiquidationManager); function vaultsData() external view returns (IVaultsDataProvider); function feeDistributor() external view returns (IFeeDistributor); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IMIMO is IERC20 { function burn(address account, uint256 amount) external; function mint(address account, uint256 amount) external; }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; import "../../governance/interfaces/IGovernanceAddressProvider.sol"; import "./ISupplyMiner.sol"; interface IDebtNotifier { function debtChanged(uint256 _vaultId) external; function setCollateralSupplyMiner(address collateral, ISupplyMiner supplyMiner) external; function a() external view returns (IGovernanceAddressProvider); function collateralSupplyMinerMapping(address collateral) external view returns (ISupplyMiner); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; import "@openzeppelin/contracts/math/SafeMath.sol"; import "../../interfaces/IAddressProvider.sol"; import "../../governance/interfaces/IGovernanceAddressProvider.sol"; interface IGenericMiner { struct UserInfo { uint256 stake; uint256 accAmountPerShare; // User's accAmountPerShare } /// @dev This emit when a users' productivity has changed /// It emits with the user's address and the the value after the change. event StakeIncreased(address indexed user, uint256 stake); /// @dev This emit when a users' productivity has changed /// It emits with the user's address and the the value after the change. event StakeDecreased(address indexed user, uint256 stake); function releaseMIMO(address _user) external; function a() external view returns (IGovernanceAddressProvider); function stake(address _user) external view returns (uint256); function pendingMIMO(address _user) external view returns (uint256); function totalStake() external view returns (uint256); function userInfo(address _user) external view returns (UserInfo memory); }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; import "../interfaces/IAddressProvider.sol"; interface IConfigProvider { struct CollateralConfig { address collateralType; uint256 debtLimit; uint256 liquidationRatio; uint256 minCollateralRatio; uint256 borrowRate; uint256 originationFee; uint256 liquidationBonus; uint256 liquidationFee; } event CollateralUpdated( address indexed collateralType, uint256 debtLimit, uint256 liquidationRatio, uint256 minCollateralRatio, uint256 borrowRate, uint256 originationFee, uint256 liquidationBonus, uint256 liquidationFee ); event CollateralRemoved(address indexed collateralType); function setCollateralConfig( address _collateralType, uint256 _debtLimit, uint256 _liquidationRatio, uint256 _minCollateralRatio, uint256 _borrowRate, uint256 _originationFee, uint256 _liquidationBonus, uint256 _liquidationFee ) external; function removeCollateral(address _collateralType) external; function setCollateralDebtLimit(address _collateralType, uint256 _debtLimit) external; function setCollateralLiquidationRatio(address _collateralType, uint256 _liquidationRatio) external; function setCollateralMinCollateralRatio(address _collateralType, uint256 _minCollateralRatio) external; function setCollateralBorrowRate(address _collateralType, uint256 _borrowRate) external; function setCollateralOriginationFee(address _collateralType, uint256 _originationFee) external; function setCollateralLiquidationBonus(address _collateralType, uint256 _liquidationBonus) external; function setCollateralLiquidationFee(address _collateralType, uint256 _liquidationFee) external; function setMinVotingPeriod(uint256 _minVotingPeriod) external; function setMaxVotingPeriod(uint256 _maxVotingPeriod) external; function setVotingQuorum(uint256 _votingQuorum) external; function setProposalThreshold(uint256 _proposalThreshold) external; function a() external view returns (IAddressProvider); function collateralConfigs(uint256 _id) external view returns (CollateralConfig memory); function collateralIds(address _collateralType) external view returns (uint256); function numCollateralConfigs() external view returns (uint256); function minVotingPeriod() external view returns (uint256); function maxVotingPeriod() external view returns (uint256); function votingQuorum() external view returns (uint256); function proposalThreshold() external view returns (uint256); function collateralDebtLimit(address _collateralType) external view returns (uint256); function collateralLiquidationRatio(address _collateralType) external view returns (uint256); function collateralMinCollateralRatio(address _collateralType) external view returns (uint256); function collateralBorrowRate(address _collateralType) external view returns (uint256); function collateralOriginationFee(address _collateralType) external view returns (uint256); function collateralLiquidationBonus(address _collateralType) external view returns (uint256); function collateralLiquidationFee(address _collateralType) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../interfaces/IAddressProvider.sol"; interface ISTABLEX is IERC20 { function mint(address account, uint256 amount) external; function burn(address account, uint256 amount) external; function a() external view returns (IAddressProvider); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "../chainlink/AggregatorV3Interface.sol"; import "../interfaces/IAddressProvider.sol"; interface IPriceFeed { event OracleUpdated(address indexed asset, address oracle, address sender); event EurOracleUpdated(address oracle, address sender); function setAssetOracle(address _asset, address _oracle) external; function setEurOracle(address _oracle) external; function a() external view returns (IAddressProvider); function assetOracles(address _asset) external view returns (AggregatorV3Interface); function eurOracle() external view returns (AggregatorV3Interface); function getAssetPrice(address _asset) external view returns (uint256); function convertFrom(address _asset, uint256 _amount) external view returns (uint256); function convertTo(address _asset, uint256 _amount) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; import "../interfaces/IAddressProvider.sol"; interface IRatesManager { function a() external view returns (IAddressProvider); //current annualized borrow rate function annualizedBorrowRate(uint256 _currentBorrowRate) external pure returns (uint256); //uses current cumulative rate to calculate totalDebt based on baseDebt at time T0 function calculateDebt(uint256 _baseDebt, uint256 _cumulativeRate) external pure returns (uint256); //uses current cumulative rate to calculate baseDebt at time T0 function calculateBaseDebt(uint256 _debt, uint256 _cumulativeRate) external pure returns (uint256); //calculate a new cumulative rate function calculateCumulativeRate( uint256 _borrowRate, uint256 _cumulativeRate, uint256 _timeElapsed ) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; import "../interfaces/IAddressProvider.sol"; interface ILiquidationManager { function a() external view returns (IAddressProvider); function calculateHealthFactor( uint256 _collateralValue, uint256 _vaultDebt, uint256 _minRatio ) external view returns (uint256 healthFactor); function liquidationBonus(address _collateralType, uint256 _amount) external view returns (uint256 bonus); function applyLiquidationDiscount(address _collateralType, uint256 _amount) external view returns (uint256 discountedAmount); function isHealthy( uint256 _collateralValue, uint256 _vaultDebt, uint256 _minRatio ) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; import "../interfaces/IAddressProvider.sol"; import "../interfaces/IVaultsCoreState.sol"; import "../interfaces/IWETH.sol"; import "../liquidityMining/interfaces/IDebtNotifier.sol"; interface IVaultsCore { event Opened(uint256 indexed vaultId, address indexed collateralType, address indexed owner); event Deposited(uint256 indexed vaultId, uint256 amount, address indexed sender); event Withdrawn(uint256 indexed vaultId, uint256 amount, address indexed sender); event Borrowed(uint256 indexed vaultId, uint256 amount, address indexed sender); event Repaid(uint256 indexed vaultId, uint256 amount, address indexed sender); event Liquidated( uint256 indexed vaultId, uint256 debtRepaid, uint256 collateralLiquidated, address indexed owner, address indexed sender ); event InsurancePaid(uint256 indexed vaultId, uint256 insuranceAmount, address indexed sender); function deposit(address _collateralType, uint256 _amount) external; function depositETH() external payable; function depositByVaultId(uint256 _vaultId, uint256 _amount) external; function depositETHByVaultId(uint256 _vaultId) external payable; function depositAndBorrow( address _collateralType, uint256 _depositAmount, uint256 _borrowAmount ) external; function depositETHAndBorrow(uint256 _borrowAmount) external payable; function withdraw(uint256 _vaultId, uint256 _amount) external; function withdrawETH(uint256 _vaultId, uint256 _amount) external; function borrow(uint256 _vaultId, uint256 _amount) external; function repayAll(uint256 _vaultId) external; function repay(uint256 _vaultId, uint256 _amount) external; function liquidate(uint256 _vaultId) external; function liquidatePartial(uint256 _vaultId, uint256 _amount) external; function upgrade(address payable _newVaultsCore) external; function acceptUpgrade(address payable _oldVaultsCore) external; function setDebtNotifier(IDebtNotifier _debtNotifier) external; //Read only function a() external view returns (IAddressProvider); function WETH() external view returns (IWETH); function debtNotifier() external view returns (IDebtNotifier); function state() external view returns (IVaultsCoreState); function cumulativeRates(address _collateralType) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; import "../interfaces/IAddressProvider.sol"; interface IVaultsDataProvider { struct Vault { // borrowedType support USDX / PAR address collateralType; address owner; uint256 collateralBalance; uint256 baseDebt; uint256 createdAt; } //Write function createVault(address _collateralType, address _owner) external returns (uint256); function setCollateralBalance(uint256 _id, uint256 _balance) external; function setBaseDebt(uint256 _id, uint256 _newBaseDebt) external; // Read function a() external view returns (IAddressProvider); function baseDebt(address _collateralType) external view returns (uint256); function vaultCount() external view returns (uint256); function vaults(uint256 _id) external view returns (Vault memory); function vaultOwner(uint256 _id) external view returns (address); function vaultCollateralType(uint256 _id) external view returns (address); function vaultCollateralBalance(uint256 _id) external view returns (uint256); function vaultBaseDebt(uint256 _id) external view returns (uint256); function vaultId(address _collateralType, address _owner) external view returns (uint256); function vaultExists(uint256 _id) external view returns (bool); function vaultDebt(uint256 _vaultId) external view returns (uint256); function debt() external view returns (uint256); function collateralDebt(address _collateralType) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "../interfaces/IAddressProvider.sol"; interface IFeeDistributor { event PayeeAdded(address indexed account, uint256 shares); event FeeReleased(uint256 income, uint256 releasedAt); function release() external; function changePayees(address[] memory _payees, uint256[] memory _shares) external; function a() external view returns (IAddressProvider); function lastReleasedAt() external view returns (uint256); function getPayees() external view returns (address[] memory); function totalShares() external view returns (uint256); function shares(address payee) external view returns (uint256); }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.6.12; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData(uint80 _roundId) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; import "./IAddressProvider.sol"; import "../v1/interfaces/IVaultsCoreV1.sol"; interface IVaultsCoreState { event CumulativeRateUpdated(address indexed collateralType, uint256 elapsedTime, uint256 newCumulativeRate); //cumulative interest rate from deployment time T0 function initializeRates(address _collateralType) external; function refresh() external; function refreshCollateral(address collateralType) external; function syncState(IVaultsCoreState _stateAddress) external; function syncStateFromV1(IVaultsCoreV1 _core) external; //Read only function a() external view returns (IAddressProvider); function availableIncome() external view returns (uint256); function cumulativeRates(address _collateralType) external view returns (uint256); function lastRefresh(address _collateralType) external view returns (uint256); function synced() external view returns (bool); }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; interface IWETH { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256 wad) external; }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; import "./IAddressProviderV1.sol"; interface IVaultsCoreV1 { event Opened(uint256 indexed vaultId, address indexed collateralType, address indexed owner); event Deposited(uint256 indexed vaultId, uint256 amount, address indexed sender); event Withdrawn(uint256 indexed vaultId, uint256 amount, address indexed sender); event Borrowed(uint256 indexed vaultId, uint256 amount, address indexed sender); event Repaid(uint256 indexed vaultId, uint256 amount, address indexed sender); event Liquidated( uint256 indexed vaultId, uint256 debtRepaid, uint256 collateralLiquidated, address indexed owner, address indexed sender ); event CumulativeRateUpdated(address indexed collateralType, uint256 elapsedTime, uint256 newCumulativeRate); //cumulative interest rate from deployment time T0 event InsurancePaid(uint256 indexed vaultId, uint256 insuranceAmount, address indexed sender); function deposit(address _collateralType, uint256 _amount) external; function withdraw(uint256 _vaultId, uint256 _amount) external; function withdrawAll(uint256 _vaultId) external; function borrow(uint256 _vaultId, uint256 _amount) external; function repayAll(uint256 _vaultId) external; function repay(uint256 _vaultId, uint256 _amount) external; function liquidate(uint256 _vaultId) external; //Refresh function initializeRates(address _collateralType) external; function refresh() external; function refreshCollateral(address collateralType) external; //upgrade function upgrade(address _newVaultsCore) external; //Read only function a() external view returns (IAddressProviderV1); function availableIncome() external view returns (uint256); function cumulativeRates(address _collateralType) external view returns (uint256); function lastRefresh(address _collateralType) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; import "./IConfigProviderV1.sol"; import "./ILiquidationManagerV1.sol"; import "./IVaultsCoreV1.sol"; import "../../interfaces/IVaultsCore.sol"; import "../../interfaces/IAccessController.sol"; import "../../interfaces/ISTABLEX.sol"; import "../../interfaces/IPriceFeed.sol"; import "../../interfaces/IRatesManager.sol"; import "../../interfaces/IVaultsDataProvider.sol"; import "../../interfaces/IFeeDistributor.sol"; interface IAddressProviderV1 { function setAccessController(IAccessController _controller) external; function setConfigProvider(IConfigProviderV1 _config) external; function setVaultsCore(IVaultsCoreV1 _core) external; function setStableX(ISTABLEX _stablex) external; function setRatesManager(IRatesManager _ratesManager) external; function setPriceFeed(IPriceFeed _priceFeed) external; function setLiquidationManager(ILiquidationManagerV1 _liquidationManager) external; function setVaultsDataProvider(IVaultsDataProvider _vaultsData) external; function setFeeDistributor(IFeeDistributor _feeDistributor) external; function controller() external view returns (IAccessController); function config() external view returns (IConfigProviderV1); function core() external view returns (IVaultsCoreV1); function stablex() external view returns (ISTABLEX); function ratesManager() external view returns (IRatesManager); function priceFeed() external view returns (IPriceFeed); function liquidationManager() external view returns (ILiquidationManagerV1); function vaultsData() external view returns (IVaultsDataProvider); function feeDistributor() external view returns (IFeeDistributor); }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; import "./IAddressProviderV1.sol"; interface IConfigProviderV1 { struct CollateralConfig { address collateralType; uint256 debtLimit; uint256 minCollateralRatio; uint256 borrowRate; uint256 originationFee; } event CollateralUpdated( address indexed collateralType, uint256 debtLimit, uint256 minCollateralRatio, uint256 borrowRate, uint256 originationFee ); event CollateralRemoved(address indexed collateralType); function setCollateralConfig( address _collateralType, uint256 _debtLimit, uint256 _minCollateralRatio, uint256 _borrowRate, uint256 _originationFee ) external; function removeCollateral(address _collateralType) external; function setCollateralDebtLimit(address _collateralType, uint256 _debtLimit) external; function setCollateralMinCollateralRatio(address _collateralType, uint256 _minCollateralRatio) external; function setCollateralBorrowRate(address _collateralType, uint256 _borrowRate) external; function setCollateralOriginationFee(address _collateralType, uint256 _originationFee) external; function setLiquidationBonus(uint256 _bonus) external; function a() external view returns (IAddressProviderV1); function collateralConfigs(uint256 _id) external view returns (CollateralConfig memory); function collateralIds(address _collateralType) external view returns (uint256); function numCollateralConfigs() external view returns (uint256); function liquidationBonus() external view returns (uint256); function collateralDebtLimit(address _collateralType) external view returns (uint256); function collateralMinCollateralRatio(address _collateralType) external view returns (uint256); function collateralBorrowRate(address _collateralType) external view returns (uint256); function collateralOriginationFee(address _collateralType) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; import "./IAddressProviderV1.sol"; interface ILiquidationManagerV1 { function a() external view returns (IAddressProviderV1); function calculateHealthFactor( address _collateralType, uint256 _collateralValue, uint256 _vaultDebt ) external view returns (uint256 healthFactor); function liquidationBonus(uint256 _amount) external view returns (uint256 bonus); function applyLiquidationDiscount(uint256 _amount) external view returns (uint256 discountedAmount); function isHealthy( address _collateralType, uint256 _collateralValue, uint256 _vaultDebt ) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; pragma solidity 0.6.12; interface ISupplyMiner { function baseDebtChanged(address user, uint256 newBaseDebt) external; }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IGovernanceAddressProvider","name":"_addresses","type":"address"},{"internalType":"address","name":"_guardian","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalCanceled","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":"targets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"string[]","name":"signatures","type":"string[]"},{"indexed":false,"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"},{"indexed":false,"internalType":"string","name":"description","type":"string"}],"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":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ProposalQueued","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":"__abdicate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"__acceptAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"__executeSetTimelockPendingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"__queueSetTimelockPendingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"a","outputs":[{"internalType":"contract IGovernanceAddressProvider","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":"bool","name":"support","type":"bool"}],"name":"castVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getActions","outputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"}],"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":"uint256","name":"votes","type":"uint256"}],"internalType":"struct IGovernorAlpha.Receipt","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"guardian","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalMaxOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"uint256","name":"eta","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","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"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"propose","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":"quorumVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum IGovernorAlpha.ProposalState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003b1938038062003b1983398101604081905262000034916200008e565b6001600160a01b0382166200004857600080fd5b6001600160a01b0381166200005c57600080fd5b600080546001600160a01b039384166001600160a01b03199182161790915560018054929093169116179055620000e5565b60008060408385031215620000a1578182fd5b8251620000ae81620000cc565b6020840151909250620000c181620000cc565b809150509250929050565b6001600160a01b0381168114620000e257600080fd5b50565b613a2480620000f56000396000f3fe60806040526004361061011f5760003560e01c8063452a9320116100a0578063b9a6196111610064578063b9a6196114610319578063da35c6641461032e578063ddf0b00914610343578063e23a9a5214610363578063fe0d94c1146103905761011f565b8063452a9320146102a5578063760fbc13146102ba5780637bdbe4d0146102cf57806391500671146102e4578063b58131b0146103045761011f565b806321f43e42116100e757806321f43e42146101f357806324bc1a6414610213578063328dd982146102285780633e4f49e61461025857806340e58ee5146102855761011f565b8063013cf08b146101245780630944db16146101625780630dbe671f1461018f57806315373e3d146101b157806317977c61146101d3575b600080fd5b34801561013057600080fd5b5061014461013f366004612d04565b6103a3565b604051610159999897969594939291906138ce565b60405180910390f35b34801561016e57600080fd5b5061018261017d366004612b6d565b6103fc565b6040516101599190613081565b34801561019b57600080fd5b506101a4610b56565b6040516101599190612ee3565b3480156101bd57600080fd5b506101d16101cc366004612d4b565b610b65565b005b3480156101df57600080fd5b506101826101ee366004612b26565b610d7b565b3480156101ff57600080fd5b506101d161020e366004612b42565b610d8d565b34801561021f57600080fd5b50610182610f6a565b34801561023457600080fd5b50610248610243366004612d04565b611238565b6040516101599493929190613029565b34801561026457600080fd5b50610278610273366004612d04565b6114c7565b604051610159919061308a565b34801561029157600080fd5b506101d16102a0366004612d04565b6116ad565b3480156102b157600080fd5b506101a46118e2565b3480156102c657600080fd5b506101d16118f1565b3480156102db57600080fd5b5061018261192d565b3480156102f057600080fd5b506101d16102ff366004612b42565b611932565b34801561031057600080fd5b50610182611b06565b34801561032557600080fd5b506101d1611c2d565b34801561033a57600080fd5b50610182611d2f565b34801561034f57600080fd5b506101d161035e366004612d04565b611d35565b34801561036f57600080fd5b5061038361037e366004612d1c565b61204f565b6040516101599190613811565b6101d161039e366004612d04565b6120b3565b6003602052600090815260409020805460018201546002830154600784015460088501546009860154600a870154600b9097015495966001600160a01b0390951695939492939192909160ff8082169161010090041689565b60008061040983426122f3565b905060008054906101000a90046001600160a01b03166001600160a01b0316633df06b596040518163ffffffff1660e01b815260040160206040518083038186803b15801561045757600080fd5b505afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190612ce8565b6001600160a01b03166379502c556040518163ffffffff1660e01b815260040160206040518083038186803b1580156104c757600080fd5b505afa1580156104db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ff9190612ce8565b6001600160a01b0316638635447a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561053757600080fd5b505afa15801561054b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056f9190612c5d565b8110156105975760405162461bcd60e51b815260040161058e90613581565b60405180910390fd5b60008054906101000a90046001600160a01b03166001600160a01b0316633df06b596040518163ffffffff1660e01b815260040160206040518083038186803b1580156105e357600080fd5b505afa1580156105f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061b9190612ce8565b6001600160a01b03166379502c556040518163ffffffff1660e01b815260040160206040518083038186803b15801561065357600080fd5b505afa158015610667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068b9190612ce8565b6001600160a01b0316630e31f6c26040518163ffffffff1660e01b815260040160206040518083038186803b1580156106c357600080fd5b505afa1580156106d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fb9190612c5d565b81111561071a5760405162461bcd60e51b815260040161058e906136e4565b610722611b06565b60008054906101000a90046001600160a01b03166001600160a01b0316634f2bfe5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561076e57600080fd5b505afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a69190612ce8565b6001600160a01b0316634ee2cd7e33866040518363ffffffff1660e01b81526004016107d3929190612ef7565b60206040518083038186803b1580156107eb57600080fd5b505afa1580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108239190612c5d565b116108405760405162461bcd60e51b815260040161058e90613604565b86518851148015610852575085518851145b801561085f575084518851145b61087b5760405162461bcd60e51b815260040161058e9061346c565b87516108995760405162461bcd60e51b815260040161058e906135b8565b6108a161192d565b885111156108c15760405162461bcd60e51b815260040161058e90613424565b3360009081526004602052604090205480156109125760006108e2826114c7565b905060008160068111156108f257fe5b14156109105760405162461bcd60e51b815260040161058e90613661565b505b60028054600101905561092361263e565b604051806101a001604052806002548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200142815260200186815260200160008152602001600081526020016000151581526020016000151581525090508060036000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003019080519060200190610a069291906126b3565b5060808201518051610a22916004840191602090910190612718565b5060a08201518051610a3e91600584019160209091019061275f565b5060c08201518051610a5a9160068401916020909101906127b8565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b0160006101000a81548160ff02191690831515021790555061018082015181600b0160016101000a81548160ff02191690831515021790555090505080600001516004600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c428c8e604051610b4099989796959493929190613836565b60405180910390a1519998505050505050505050565b6000546001600160a01b031681565b6000610b70836114c7565b6006811115610b7b57fe5b14610b985760405162461bcd60e51b815260040161058e90613771565b6000828152600360209081526040808320338452600c8101909252909120805460ff1615610bd85760405162461bcd60e51b815260040161058e90613330565b60008060009054906101000a90046001600160a01b03166001600160a01b0316634f2bfe5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c2757600080fd5b505afa158015610c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5f9190612ce8565b6001600160a01b0316634ee2cd7e3385600801546040518363ffffffff1660e01b8152600401610c90929190612ef7565b60206040518083038186803b158015610ca857600080fd5b505afa158015610cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce09190612c5d565b90508315610d01576009830154610cf7908261231b565b6009840155610d16565b600a830154610d10908261231b565b600a8401555b8154600160ff19909116811761ff0019166101008615150217835582018190556040517f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c4690610d6c903390889088908690612f10565b60405180910390a15050505050565b60046020526000908152604090205481565b6001546001600160a01b03163314610db75760405162461bcd60e51b815260040161058e90613207565b60008054906101000a90046001600160a01b03166001600160a01b031663d33219b46040518163ffffffff1660e01b815260040160206040518083038186803b158015610e0357600080fd5b505afa158015610e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3b9190612ce8565b6001600160a01b0316630825f38f60008054906101000a90046001600160a01b03166001600160a01b031663d33219b46040518163ffffffff1660e01b815260040160206040518083038186803b158015610e9557600080fd5b505afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecd9190612ce8565b600085604051602001610ee09190612ee3565b604051602081830303815290604052856040518563ffffffff1660e01b8152600401610f0f9493929190612f38565b600060405180830381600087803b158015610f2957600080fd5b505af1158015610f3d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f659190810190612c75565b505050565b6000805460408051633df06b5960e01b81529051611233926001600160a01b031691633df06b59916004808301926020929190829003018186803b158015610fb157600080fd5b505afa158015610fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe99190612ce8565b6001600160a01b03166379502c556040518163ffffffff1660e01b815260040160206040518083038186803b15801561102157600080fd5b505afa158015611035573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110599190612ce8565b6001600160a01b0316635a35f8346040518163ffffffff1660e01b815260040160206040518083038186803b15801561109157600080fd5b505afa1580156110a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c99190612c5d565b60008054906101000a90046001600160a01b03166001600160a01b0316634f2bfe5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561111557600080fd5b505afa158015611129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114d9190612ce8565b6001600160a01b03166372f702f36040518163ffffffff1660e01b815260040160206040518083038186803b15801561118557600080fd5b505afa158015611199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bd9190612ce8565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111f557600080fd5b505afa158015611209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122d9190612c5d565b90612347565b905090565b606080606080600060036000878152602001908152602001600020905080600301816004018260050183600601838054806020026020016040519081016040528092919081815260200182805480156112ba57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161129c575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561130c57602002820191906000526020600020905b8154815260200190600101908083116112f8575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b828210156113df5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156113cb5780601f106113a0576101008083540402835291602001916113cb565b820191906000526020600020905b8154815290600101906020018083116113ae57829003601f168201915b505050505081526020019060010190611334565b50505050915080805480602002602001604051908101604052809291908181526020016000905b828210156114b15760008481526020908190208301805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561149d5780601f106114725761010080835404028352916020019161149d565b820191906000526020600020905b81548152906001019060200180831161148057829003601f168201915b505050505081526020019060010190611406565b5050505090509450945094509450509193509193565b600081600254101580156114db5750600082115b6114f75760405162461bcd60e51b815260040161058e906132b0565b6000828152600360205260409020600b81015460ff161561151c5760019150506116a8565b806008015442116115315760009150506116a8565b80600a01548160090154111580611552575061154b610f6a565b8160090154105b156115615760029150506116a8565b60028101546115745760039150506116a8565b600b810154610100900460ff16156115905760069150506116a8565b611692816008015460008054906101000a90046001600160a01b03166001600160a01b031663d33219b46040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e457600080fd5b505afa1580156115f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161c9190612ce8565b6001600160a01b031663c1a287e26040518163ffffffff1660e01b815260040160206040518083038186803b15801561165457600080fd5b505afa158015611668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168c9190612c5d565b9061231b565b42106116a25760059150506116a8565b60049150505b919050565b60006116b8826114c7565b905060068160068111156116c857fe5b14156116e65760405162461bcd60e51b815260040161058e9061371b565b60008281526003602052604090206001546001600160a01b0316331461171e5760405162461bcd60e51b815260040161058e90613279565b600b8101805460ff1916600117905560005b60038201548110156118a55760008054906101000a90046001600160a01b03166001600160a01b031663d33219b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561178857600080fd5b505afa15801561179c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c09190612ce8565b6001600160a01b031663591fcdfe8360030183815481106117dd57fe5b6000918252602090912001546004850180546001600160a01b03909216918590811061180557fe5b906000526020600020015485600501858154811061181f57fe5b9060005260206000200186600601868154811061183857fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401611867959493929190612ff0565b600060405180830381600087803b15801561188157600080fd5b505af1158015611895573d6000803e3d6000fd5b5050600190920191506117309050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c836040516118d59190613081565b60405180910390a1505050565b6001546001600160a01b031681565b6001546001600160a01b0316331461191b5760405162461bcd60e51b815260040161058e906137bb565b600180546001600160a01b0319169055565b600a90565b6001546001600160a01b0316331461195c5760405162461bcd60e51b815260040161058e906133b4565b60008054906101000a90046001600160a01b03166001600160a01b031663d33219b46040518163ffffffff1660e01b815260040160206040518083038186803b1580156119a857600080fd5b505afa1580156119bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e09190612ce8565b6001600160a01b0316633a66f90160008054906101000a90046001600160a01b03166001600160a01b031663d33219b46040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3a57600080fd5b505afa158015611a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a729190612ce8565b600085604051602001611a859190612ee3565b604051602081830303815290604052856040518563ffffffff1660e01b8152600401611ab49493929190612f38565b602060405180830381600087803b158015611ace57600080fd5b505af1158015611ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f659190612c5d565b6000805460408051633df06b5960e01b81529051611233926001600160a01b031691633df06b59916004808301926020929190829003018186803b158015611b4d57600080fd5b505afa158015611b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b859190612ce8565b6001600160a01b03166379502c556040518163ffffffff1660e01b815260040160206040518083038186803b158015611bbd57600080fd5b505afa158015611bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf59190612ce8565b6001600160a01b031663b58131b06040518163ffffffff1660e01b815260040160206040518083038186803b15801561109157600080fd5b6001546001600160a01b03163314611c575760405162461bcd60e51b815260040161058e9061309e565b60008054906101000a90046001600160a01b03166001600160a01b031663d33219b46040518163ffffffff1660e01b815260040160206040518083038186803b158015611ca357600080fd5b505afa158015611cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdb9190612ce8565b6001600160a01b0316630e18b6816040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d1557600080fd5b505af1158015611d29573d6000803e3d6000fd5b50505050565b60025481565b6003611d40826114c7565b6006811115611d4b57fe5b14611d685760405162461bcd60e51b815260040161058e906130fb565b6000818152600360209081526040808320835482516334cc866d60e21b81529251919493611e6d936001600160a01b039092169263d33219b4926004808201939291829003018186803b158015611dbe57600080fd5b505afa158015611dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df69190612ce8565b6001600160a01b0316636a42b8f86040518163ffffffff1660e01b815260040160206040518083038186803b158015611e2e57600080fd5b505afa158015611e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e669190612c5d565b429061231b565b905060005b60038301548110156120155761200d836003018281548110611e9057fe5b6000918252602090912001546004850180546001600160a01b039092169184908110611eb857fe5b9060005260206000200154856005018481548110611ed257fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611f605780601f10611f3557610100808354040283529160200191611f60565b820191906000526020600020905b815481529060010190602001808311611f4357829003601f168201915b5050505050866006018581548110611f7457fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156120025780601f10611fd757610100808354040283529160200191612002565b820191906000526020600020905b815481529060010190602001808311611fe557829003601f168201915b505050505086612377565b600101611e72565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892906118d5908590849061391a565b612057612811565b5060008281526003602090815260408083206001600160a01b0385168452600c018252918290208251606081018452815460ff808216151583526101009091041615159281019290925260010154918101919091525b92915050565b60046120be826114c7565b60068111156120c957fe5b146120e65760405162461bcd60e51b815260040161058e90613165565b6000818152600360205260408120600b8101805461ff001916610100179055905b60038201548110156122b75760008054906101000a90046001600160a01b03166001600160a01b031663d33219b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561215f57600080fd5b505afa158015612173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121979190612ce8565b6001600160a01b0316630825f38f8360040183815481106121b457fe5b90600052602060002001548460030184815481106121ce57fe5b6000918252602090912001546004860180546001600160a01b0390921691869081106121f657fe5b906000526020600020015486600501868154811061221057fe5b9060005260206000200187600601878154811061222957fe5b9060005260206000200188600201546040518763ffffffff1660e01b8152600401612258959493929190612ff0565b6000604051808303818588803b15801561227157600080fd5b505af1158015612285573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526122ae9190810190612c75565b50600101612107565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f826040516122e79190613081565b60405180910390a15050565b6000828211156123155760405162461bcd60e51b815260040161058e906132f9565b50900390565b6000828201838110156123405760405162461bcd60e51b815260040161058e906131d0565b9392505050565b6000612340670de0b6b3a764000061237161236286866125d2565b6706f05b59d3b200009061231b565b9061260c565b60008054906101000a90046001600160a01b03166001600160a01b031663d33219b46040518163ffffffff1660e01b815260040160206040518083038186803b1580156123c357600080fd5b505afa1580156123d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fb9190612ce8565b6001600160a01b031663f2b065378686868686604051602001612422959493929190612fa4565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016124549190613081565b60206040518083038186803b15801561246c57600080fd5b505afa158015612480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a49190612c41565b156124c15760405162461bcd60e51b815260040161058e90613517565b60008054906101000a90046001600160a01b03166001600160a01b031663d33219b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561250d57600080fd5b505afa158015612521573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125459190612ce8565b6001600160a01b0316633a66f90186868686866040518663ffffffff1660e01b8152600401612578959493929190612fa4565b602060405180830381600087803b15801561259257600080fd5b505af11580156125a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ca9190612c5d565b505050505050565b6000826125e1575060006120ad565b828202828482816125ee57fe5b04146123405760405162461bcd60e51b815260040161058e906134d6565b600080821161262d5760405162461bcd60e51b815260040161058e9061337d565b81838161263657fe5b049392505050565b604051806101a001604052806000815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215612708579160200282015b8281111561270857825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906126d3565b50612714929150612831565b5090565b828054828255906000526020600020908101928215612753579160200282015b82811115612753578251825591602001919060010190612738565b50612714929150612850565b8280548282559060005260206000209081019282156127ac579160200282015b828111156127ac578251805161279c918491602090910190612865565b509160200191906001019061277f565b506127149291506128d2565b828054828255906000526020600020908101928215612805579160200282015b8281111561280557825180516127f5918491602090910190612865565b50916020019190600101906127d8565b506127149291506128ef565b604080516060810182526000808252602082018190529181019190915290565b5b808211156127145780546001600160a01b0319168155600101612832565b5b808211156127145760008155600101612851565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106128a657805160ff1916838001178555612753565b828001600101855582156127535791820182811115612753578251825591602001919060010190612738565b808211156127145760006128e6828261290c565b506001016128d2565b80821115612714576000612903828261290c565b506001016128ef565b50805460018160011615610100020316600290046000825580601f106129325750612950565b601f0160209004906000526020600020908101906129509190612850565b50565b600082601f830112612963578081fd5b81356129766129718261394f565b613928565b81815291506020808301908481018184028601820187101561299757600080fd5b60005b848110156129bf5781356129ad816139cb565b8452928201929082019060010161299a565b505050505092915050565b600082601f8301126129da578081fd5b81356129e86129718261394f565b818152915060208083019084810160005b848110156129bf57612a10888484358a0101612ad8565b845292820192908201906001016129f9565b600082601f830112612a32578081fd5b8135612a406129718261394f565b818152915060208083019084810160005b848110156129bf57612a68888484358a0101612ad8565b84529282019290820190600101612a51565b600082601f830112612a8a578081fd5b8135612a986129718261394f565b818152915060208083019084810181840286018201871015612ab957600080fd5b60005b848110156129bf57813584529282019290820190600101612abc565b600082601f830112612ae8578081fd5b8135612af66129718261396f565b9150808252836020828501011115612b0d57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215612b37578081fd5b8135612340816139cb565b60008060408385031215612b54578081fd5b8235612b5f816139cb565b946020939093013593505050565b60008060008060008060c08789031215612b85578182fd5b863567ffffffffffffffff80821115612b9c578384fd5b612ba88a838b01612953565b97506020890135915080821115612bbd578384fd5b612bc98a838b01612a7a565b96506040890135915080821115612bde578384fd5b612bea8a838b01612a22565b95506060890135915080821115612bff578384fd5b612c0b8a838b016129ca565b94506080890135915080821115612c20578384fd5b50612c2d89828a01612ad8565b92505060a087013590509295509295509295565b600060208284031215612c52578081fd5b8151612340816139e0565b600060208284031215612c6e578081fd5b5051919050565b600060208284031215612c86578081fd5b815167ffffffffffffffff811115612c9c578182fd5b8201601f81018413612cac578182fd5b8051612cba6129718261396f565b818152856020838501011115612cce578384fd5b612cdf82602083016020860161399f565b95945050505050565b600060208284031215612cf9578081fd5b8151612340816139cb565b600060208284031215612d15578081fd5b5035919050565b60008060408385031215612d2e578182fd5b823591506020830135612d40816139cb565b809150509250929050565b60008060408385031215612d5d578182fd5b823591506020830135612d40816139e0565b6000815180845260208085019450808401835b83811015612da75781516001600160a01b031687529582019590820190600101612d82565b509495945050505050565b6000815180845260208085018081965082840281019150828601855b85811015612df8578284038952612de6848351612e34565b98850198935090840190600101612dce565b5091979650505050505050565b6000815180845260208085019450808401835b83811015612da757815187529582019590820190600101612e18565b60008151808452612e4c81602086016020860161399f565b601f01601f19169290920160200192915050565b60008154600180821660008114612e7e5760018114612e9c57612eda565b60028304607f16865260ff1983166020870152604086019350612eda565b60028304808752612eac86613993565b60005b82811015612ed05781546020828b0101528482019150602081019050612eaf565b8801602001955050505b50505092915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03949094168452602084019290925215156040830152606082015260800190565b600060018060a01b038616825284602083015260a06040830152601860a08301527f73657450656e64696e6741646d696e286164647265737329000000000000000060c083015260e06060830152612f9360e0830185612e34565b905082608083015295945050505050565b600060018060a01b038716825285602083015260a06040830152612fcb60a0830186612e34565b8281036060840152612fdd8186612e34565b9150508260808301529695505050505050565b600060018060a01b038716825285602083015260a0604083015261301760a0830186612e60565b8281036060840152612fdd8186612e60565b60006080825261303c6080830187612d6f565b828103602084015261304e8187612e05565b905082810360408401526130628186612db2565b905082810360608401526130768185612db2565b979650505050505050565b90815260200190565b602081016007831061309857fe5b91905290565b60208082526039908201527f476f7665726e6f72416c7068613a3a5f5f61636365707441646d696e3a20736560408201527f6e646572206d75737420626520676f7620677561726469616e00000000000000606082015260800190565b60208082526044908201527f476f7665726e6f72416c7068613a3a71756575653a2070726f706f73616c206360408201527f616e206f6e6c79206265207175657565642069662069742069732073756363656060820152631959195960e21b608082015260a00190565b60208082526045908201527f476f7665726e6f72416c7068613a3a657865637574653a2070726f706f73616c60408201527f2063616e206f6e6c7920626520657865637574656420696620697420697320716060820152641d595d595960da1b608082015260a00190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252604c908201527f476f7665726e6f72416c7068613a3a5f5f6578656375746553657454696d656c60408201527f6f636b50656e64696e6741646d696e3a2073656e646572206d7573742062652060608201526b33b7bb1033bab0b93234b0b760a11b608082015260a00190565b60208082526018908201527f4f6e6c7920477561726469616e2063616e2063616e63656c0000000000000000604082015260600190565b60208082526029908201527f476f7665726e6f72416c7068613a3a73746174653a20696e76616c69642070726040820152681bdc1bdcd85b081a5960ba1b606082015260800190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b6020808252602d908201527f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f7465722060408201526c185b1c9958591e481d9bdd1959609a1b606082015260800190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b6020808252604a908201527f476f7665726e6f72416c7068613a3a5f5f717565756553657454696d656c6f6360408201527f6b50656e64696e6741646d696e3a2073656e646572206d75737420626520676f6060820152693b1033bab0b93234b0b760b11b608082015260a00190565b60208082526028908201527f476f7665726e6f72416c7068613a3a70726f706f73653a20746f6f206d616e7960408201526720616374696f6e7360c01b606082015260800190565b60208082526044908201527f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73616c60408201527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6060820152630c2e8c6d60e31b608082015260a00190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526044908201527f476f7665726e6f72416c7068613a3a5f71756575654f725265766572743a207060408201527f726f706f73616c20616374696f6e20616c7265616479207175657565642061746060820152632065746160e01b608082015260a00190565b6020808252601b908201527f50726f706f73616c20656e642d74696d6520746f6f206561726c790000000000604082015260600190565b6020808252602c908201527f476f7665726e6f72416c7068613a3a70726f706f73653a206d7573742070726f60408201526b7669646520616374696f6e7360a01b606082015260800190565b6020808252603f908201527f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73657260408201527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400606082015260800190565b60208082526058908201527f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766560408201527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60608201527f20616c7265616479206163746976652070726f706f73616c0000000000000000608082015260a00190565b6020808252601a908201527f50726f706f73616c20656e642d74696d6520746f6f206c617465000000000000604082015260600190565b60208082526036908201527f476f7665726e6f72416c7068613a3a63616e63656c3a2063616e6e6f742063616040820152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b606082015260800190565b6020808252602a908201527f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f74696e67604082015269081a5cc818db1bdcd95960b21b606082015260800190565b60208082526036908201527f476f7665726e6f72416c7068613a3a5f5f61626469636174653a2073656e6465604082015275391036bab9ba1031329033b7bb1033bab0b93234b0b760511b606082015260800190565b8151151581526020808301511515908201526040918201519181019190915260600190565b8981526001600160a01b0389166020820152610120604082018190526000906138618382018b612d6f565b90508281036060840152613875818a612e05565b905082810360808401526138898189612db2565b905082810360a084015261389d8188612db2565b90508560c08401528460e08401528281036101008401526138be8185612e34565b9c9b505050505050505050505050565b9889526001600160a01b0397909716602089015260408801959095526060870193909352608086019190915260a085015260c0840152151560e083015215156101008201526101200190565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561394757600080fd5b604052919050565b600067ffffffffffffffff821115613965578081fd5b5060209081020190565b600067ffffffffffffffff821115613985578081fd5b50601f01601f191660200190565b60009081526020902090565b60005b838110156139ba5781810151838201526020016139a2565b83811115611d295750506000910152565b6001600160a01b038116811461295057600080fd5b801515811461295057600080fdfea2646970667358221220ad215d07c1c7a5857665cd8877d8cc405c4e91e02b859823f1746176584f22de64736f6c634300060c003300000000000000000000000070e889f9ff9e8f9d7128f29153ac0899690ebcc00000000000000000000000000000000000000000000000000000000000000001
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000070e889f9ff9e8f9d7128f29153ac0899690ebcc00000000000000000000000000000000000000000000000000000000000000001
-----Decoded View---------------
Arg [0] : _addresses (address): 0x70e889f9ff9e8f9d7128f29153ac0899690ebcc0
Arg [1] : _guardian (address): 0x0000000000000000000000000000000000000001
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000070e889f9ff9e8f9d7128f29153ac0899690ebcc0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.