Advertisement
Guest User

Untitled

a guest
May 21st, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. /**
  2. * @notice Loads _numTokens ERC20 tokens into the voting contract for one-to-one voting rights
  3. * @dev Assumes that msg.sender has approved voting contract to spend on their behalf
  4. * @param _numTokens The number of votingTokens desired in exchange for ERC20 tokens
  5. */
  6. function requestVotingRights(uint256 _numTokens) public {
  7. require(token.balanceOf(msg.sender) >= _numTokens, "Cannot stake more than you have");
  8. voteTokenBalance[msg.sender] = voteTokenBalance[msg.sender].add(_numTokens);
  9.  
  10. // Transfer tokens to voting contract
  11. // User must approve tokens to voting contract in advance token.approve(voting)
  12. require(token.transferFrom(msg.sender, this, _numTokens));
  13. emit _VotingRightsGranted(_numTokens, msg.sender);
  14. }
  15.  
  16. /**
  17. * @notice Withdraw _numTokens ERC20 tokens from the voting contract, revoking these voting rights
  18. * @param _numTokens The number of ERC20 tokens desired in exchange for voting rights
  19. */
  20. function withdrawVotingRights(uint256 _numTokens) external {
  21. // withdrawing tokens only not locked should be available
  22. require(voteTokenBalance[msg.sender] >= _numTokens, "Cannot withdraw more than used in the polls");
  23. voteTokenBalance[msg.sender] = voteTokenBalance[msg.sender].sub(_numTokens);
  24. require(token.transfer(msg.sender, _numTokens));
  25. emit _VotingRightsWithdrawn(_numTokens, msg.sender);
  26. }
  27.  
  28. /**
  29. * @dev Unlocks tokens locked in unrevealed vote where poll has ended
  30. * @param _pollID Integer identifier associated with the target poll
  31. */
  32. function rescueTokens(uint _pollID) public {
  33. require(isExpired(pollMap[_pollID].revealEndDate), "The poll has not ended");
  34. require(dllMap[msg.sender].contains(_pollID));
  35.  
  36. uint256 numTokens = getNumTokens(msg.sender, _pollID);
  37.  
  38. dllMap[msg.sender].remove(_pollID);
  39.  
  40. // No partial lock, add _numTokens back to the voting rights
  41. // Tokens are now available to withdraw or for another vote
  42. voteTokenBalance[msg.sender] = voteTokenBalance[msg.sender].add(numTokens);
  43.  
  44. emit _TokensRescued(_pollID, msg.sender);
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement