12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- // SPDX-License-Identifier: MIT
- // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20VotesComp.sol)
- pragma solidity ^0.8.0;
- import "./ERC20Votes.sol";
- /**
- * @dev Extension of ERC20 to support Compound's voting and delegation. This version exactly matches Compound's
- * interface, with the drawback of only supporting supply up to (2^96^ - 1).
- *
- * NOTE: You should use this contract if you need exact compatibility with COMP (for example in order to use your token
- * with Governor Alpha or Bravo) and if you are sure the supply cap of 2^96^ is enough for you. Otherwise, use the
- * {ERC20Votes} variant of this module.
- *
- * This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either
- * by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting
- * power can be queried through the public accessors {getCurrentVotes} and {getPriorVotes}.
- *
- * By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it
- * requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked.
- *
- * _Available since v4.2._
- */
- abstract contract ERC20VotesComp is ERC20Votes {
- /**
- * @dev Comp version of the {getVotes} accessor, with `uint96` return type.
- */
- function getCurrentVotes(address account) external view virtual returns (uint96) {
- return SafeCast.toUint96(getVotes(account));
- }
- /**
- * @dev Comp version of the {getPastVotes} accessor, with `uint96` return type.
- */
- function getPriorVotes(address account, uint256 blockNumber) external view virtual returns (uint96) {
- return SafeCast.toUint96(getPastVotes(account, blockNumber));
- }
- /**
- * @dev Maximum token supply. Reduced to `type(uint96).max` (2^96^ - 1) to fit COMP interface.
- */
- function _maxSupply() internal view virtual override returns (uint224) {
- return type(uint96).max;
- }
- }
|