go do it

a commitment device inspired by https://x.com/TILuigi/status/1724333302851514812

  • 41,000 Raised
  • 135 Views
  • 5 Judges

Categories

  • Application Track

Description

GitHub repo

https://github.com/gin/go-do-it

There are some preset commands to help play around in the `Makefile`.


Idea origin

https://x.com/TILuigi/status/1724333302851514812


Idea

Go Do It: a commitment device to help you achieve your goals.
How it works is that the commiter tells their friends what his goal is, and when the goal has to be achieved by. If commiter is unable to do it, their money is burned.

Concretely, commiter collects friends' wallet addresses.
Commiter deploys contract with ETH sent along with it and amount of time set for goal to be achieved. The ETH sent is used as the commitment to be burned if goal is not achieved.
Commiter calls `add_witness(address)` with their friends' address one by one. This step avoids random addresses joining, and getting the commiter's ETH burned with Sybil attack.

Commiter's friends can vote to say commiter did not achieve goal by calling `vote_reject()` along with sending ETH. This ETH is used to reduce chance of friends colluding to have commiter's stake burned.

If >66% of friends who voted to reject, committer's stake is burned and friends stakes are returned.
If <=33% of friends who voted to reject, the stakes are burned for those who voted to reject and committer's stake is returned.

There is also an arbiter. Its use is in case the result is at the 66% point. By default, the arbiter is the commiter. It can be changed only by the commiter by calling `change_arbiter(address)`.


Things left to do

Commiter's withdrawal is untested.
Witness' withdrawal is not yet written.