Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mikeghen/compensator
Vote Marketplace for COMP delegates
https://github.com/mikeghen/compensator
Last synced: about 8 hours ago
JSON representation
Vote Marketplace for COMP delegates
- Host: GitHub
- URL: https://github.com/mikeghen/compensator
- Owner: mikeghen
- Created: 2023-10-07T14:45:48.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-10-22T14:46:19.000Z (about 1 year ago)
- Last Synced: 2024-05-16T04:17:47.837Z (6 months ago)
- Language: TypeScript
- Size: 359 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# COMPenstator
This project is inspired by a project idea from Compound Grants:> Build a marketplace where delegates can offer rewards, or solicit payment, for representing COMP-holders in Compound Governance.
## Project Overview
The project has two main features:
### 1. COMP holders delegate their voting power to a delegate and earn COMP form the delegate
* The delegate deposits COMP into the Compensator contract
* The delegate sets a reward rate (in COMP/second)
* COMP holders can delegate their COMP to the delegatee's Compensator
* COMP delegator earn rewards in COMP in proportion to the reward rate and their share of the total COMP delegated to the Compensator### 2. COMP holders can pay the delegate to vote for a proposal
* Delegators can pay the delegate to vote for or against a proposal
* Delegators stake COMP for a specific option (for or against), the stake is escrowed
* After the delegate votes, the delegate earns the payment from the option they voted
* The delegators that payed for the losing option get their stake back# Protocol Specifications
## `CompensatorFactory`### Variables
* `address[] public compensators` - a list of all Compensator contracts created by the factory
* `mapping(address => address) public delegateeToCompensator` - a mapping of delegatees to their Compensator contracts### Functions
#### `createCompensator(address delegatee) returns (address)`
* Creates a Compensator contract for a delegatee
* Adds the Compensator contract to the list of compensators
* Adds the delegatee and Compensator contract to the delegateeToCompensator mapping#### `getCompensator(address delegatee) view returns (address)`
## `Compensator`
### Struct
* `Proposal` - a structure representing a compound proposal, stores information related to pay for vote
* `bool active` - true if the proposal is active, false if it has been executed or defeated
* `uint paymentFor` - the amount of COMP payed for voting for the proposal
* `uint paymentAgainst` - the amount of COMP payed for voting against the proposal
* `uint paymentAbstain` - the amount of COMP payed for abstaining from voting on the proposal
* `uint outcome` - the outcome of the proposal, true if the delegatee votes for, false if against### Variables
* `address delegate` - the address of the delegatee
* `uint256 rewardRate` - the reward rate in COMP/second`
* `uint256 rewardIndex` - increases in propotion to the rewards rate and the total rewards claimed
* `uint255 lastRewarded` - Tracks the time of the last reward claim
* `mapping(uint => Proposal) proposals` - a mapping of proposal ids to proposals, key is a vaild COMP proposal ID
* `mapping(address => uint) claimedRewards` - a mapping of delegators to the amount of rewards they've claimed in COMP### Functions
#### `delegateDeposit(uint256 amount) onlyDelegate`
* Delegate deposits COMP into the Compensator contract for payment to delegators#### `delegateWithdraw(uint256 amount) onlyDelegate`
* Delegate withdraws COMP from the Compensator contract#### `setRewardRate(uint256 amount) onlyDelegate`
* Delegate sets the reward rate for delegators in COMP/second#### `registerProposal(uint proposalId) onlyDelegate`
* Register a proposal to be voted on by the delegatee#### `castVote(uint proposalId, bool support) onlyDelegate`
* Delegate votes on a COMP proposal#### `claimVoteReward(uint proposalId) onlyDelegate`
* Delegate claims their reward for voting on a proposal#### `delegate(uint256 amount)`
* Delegator delegates COMP to the delegatee's Compensator contract
* COMP is deposited into the Compensator contract#### `undelegate(uint256 amount)`
* Delegator undelegates COMP from the delegatee's Compensator contract
* COMP is withdrawn from the Compensator contract
* Any COMP rewards are claimed on withdraw#### `incentivize(uint proposalId, bool support, uint amount)`
* Delegator pays the delegatee to vote for/against a proposal#### `claimRewards()`
* Delegator claims their rewards in COMP#### `getRewards(address delegator) view returns (uint256)`
* Returns the amount of COMP rewards a delegator has earned but not claimed