You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit a3c0eae
Browse filesBrowse the repository at this point in the historyBrowse files
@@ -83,7 +84,8 @@ escrow **straight into this contract**. Every claim is public on Etherscan. Anyo
83
84
84
85
<palign="center"><imgsrc="docs/readme/genesis-tree.jpg"alt="The genesis tree: four branches and fourteen recipients"width="100%" /></p>
85
86
86
-
The starting weights, before any committee has voted. From the first epoch on, the committees decide.
87
+
The starting weights, before any committee has voted. From the first epoch on, the committees decide, 5 points per
88
+
epoch at most.
87
89
88
90
<table>
89
91
<tr><thalign="left">Branch</th><thalign="left">Recipient</th><thalign="right">Inside the branch</th><thalign="right">Of every ETH¹</th></tr>
@@ -111,15 +113,16 @@ The starting weights, before any committee has voted. From the first epoch on, t
111
113
> lives in [contracts/script/genesis.json](contracts/script/genesis.json).
112
114
113
115
**New projects can join.** Anyone can propose a project under a branch with a deposit of 1,000,000 $GRAPHFUND. It
114
-
enters at 0% and only gets money if a committee gives it weight; the deposit comes back the first time it does.
116
+
enters at 0%, gains at most 5 points per epoch, and only gets money if a committee gives it weight; the deposit comes
117
+
back the first time it does.
115
118
116
119
<br />
117
120
118
121
## Who can do what
119
122
120
123
|| Can | Cannot |
121
124
|---|---|---|
122
-
|**Keepers**| Lock and unlock $GRAPHFUND, vote on the fork they were drawn for | Unlock while sitting on a committee |
125
+
|**Keepers**| Lock $GRAPHFUND, vote on the fork they were drawn for, leave the draw and unlock| Unlock while sitting on a committee |
123
126
|**Anyone**| Call `draw()` and `advance()`, send ETH, propose a project, trigger `payout` for a recipient | Choose who gets drawn |
124
127
|**Owner***(until renounced)*| Edit the tree and the starting weights, change parameters within fixed bounds, reject spam proposals | Touch anyone's stake, touch money owed to a project, choose who gets drawn |
125
128
@@ -132,7 +135,7 @@ The owner renounces after **28 epochs (7 days)** with committees drawn and no em
132
135
| Contract | What it does |
133
136
|---|---|
134
137
|[`GraphFund`](contracts/src/GraphFund.sol)| The tree, the epochs (`draw` → `vote` → `advance`), the payouts (ETH, or WETH to contracts that refuse ETH) and the proposals |
135
-
|[`KeeperStaking`](contracts/src/KeeperStaking.sol)| Lock $GRAPHFUND (minimum 100,000) to enter the draw. Stakes freeze for about a minute while a draw is pending (never more than ~1 day), and stay locked while you sit on a committee |
138
+
|[`KeeperStaking`](contracts/src/KeeperStaking.sol)| Lock $GRAPHFUND (minimum 100,000) to enter the draw. Stakes can't change while a draw is pending (minutes; if nobody draws, anyone can end it with `draw()`), and stay locked while you sit on a committee. To exit: `leave()` takes you out of every future draw, then `unstake` as soon as your seat ends|
136
139
|[`KeeperBadge`](contracts/src/KeeperBadge.sol)| One soulbound token per epoch you voted in |
137
140
| $GRAPHFUND | 1,000,000,000 fixed supply, launched on Stockereum |
138
141
@@ -143,9 +146,11 @@ Addresses go here, and on the site, the moment they are deployed.
143
146
## Honest limits
144
147
145
148
- ⚖️ **Stake buys seats.** Seats are drawn in proportion to what is locked: whoever locks most of the supply wins most
146
-
seats. The median protects a fork's split only while no one holds three of its five seats. Every seat and every vote
147
-
is public.
148
-
- 🎲 **Randomness is a future blockhash.** The proposer of that block can bias it by withholding the block.
149
+
seats. The median protects a fork's split only while no one holds three of its five seats, and even a captured
150
+
committee moves each share at most 5 points per epoch. Every seat and every vote is public.
151
+
- 🎲 **Randomness is a future blockhash.** Whoever builds that block (a role that can be bought for a single slot) can
152
+
grind its hash and pick a committee. The 5-point cap is the answer: capturing one committee pays little, and honest
153
+
committees undo it at the same speed. Verifiable randomness (e.g. a VRF) would close it for good.
149
154
- 🔑 **The fee claim depends on the creator wallet.** Claims into the contract are public, but someone has to make them.
150
155
- ⛽ **One transaction draws every committee.** Parameters are bounded (`committeeSize × maxNodes/2 ≤ 120`) so the worst
151
156
case stays well under Ethereum's per-transaction gas cap.
0 commit comments