Voting Tokens

What is a Voting Token?

A voting token is a token that snapshots the number of votes for any given block number.
The exact interface is defined below:
interface IHasVotes {
function getCurrentVotes(address account) external view returns (uint96);
function getPriorVotes(address account, uint256 blockNumber)
external
view
returns (uint96);
}
See: IHasVotes.sol for the interface code.

How can I create a voting token?

See POOF and UBE as examples for easily creating a voting token. Both these tokens are just implemented by constructing a TransferrableVotingToken.