ERC20VotesHarness.sol 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import "../../contracts/token/ERC20/extensions/ERC20Votes.sol";
  2. contract ERC20VotesHarness is ERC20Votes {
  3. constructor(string memory name, string memory symbol) ERC20Permit(name) ERC20(name, symbol) {}
  4. mapping(address => mapping(uint256 => uint256)) public _getPastVotes;
  5. function _afterTokenTransfer(
  6. address from,
  7. address to,
  8. uint256 amount
  9. ) internal virtual override {
  10. super._afterTokenTransfer(from, to, amount);
  11. _getPastVotes[from][block.number] -= amount;
  12. _getPastVotes[to][block.number] += amount;
  13. }
  14. /**
  15. * @dev Change delegation for `delegator` to `delegatee`.
  16. *
  17. * Emits events {DelegateChanged} and {DelegateVotesChanged}.
  18. */
  19. function _delegate(address delegator, address delegatee) internal virtual override{
  20. super._delegate(delegator, delegatee);
  21. _getPastVotes[delegator][block.number] -= balanceOf(delegator);
  22. _getPastVotes[delegatee][block.number] += balanceOf(delegator);
  23. }
  24. /*
  25. function getPastVotes(address account, uint256 blockNumber) public view virtual override returns (uint256) {
  26. uint256 gpv = super.getPastVotes(account, blockNumber);
  27. require (_getPastVotes[account][blockNumber] == gpv);
  28. return gpv;
  29. }
  30. */
  31. }