RFP: Off-chain conviction voting

Should GnosisDAO + MetaFactory help fund an off-chain conviction voting scheme?

Metafactory, Gnosis, and Ceramic are looking for someone to implement an off-chain conviction voting scheme that uses Ceramic for off-chain vote aggregation and Gnosis safe for on-chain execution. For an overview of how the system should work have a look at this article: Trust minimized, off-chain conviction voting.


The goal of this project is to create a framework for off-chain conviction voting using Ceramic, and to make it compatible with Gnosis Safe for on-chain execution. The system should meet the necessary requirements outlined in this RFP, the article linked above can serve as a general guideline. You will be working closely with the Metafactory, Gnosis, and Ceramic teams in order to implement this system.


The project is separated into two main components. An sdk which developers can use to create conviction voting apps and a front-end for creating proposals and triggering on-chain execution via a Gnosis Safe.

Create an SDK for off-chain conviction voting

The SDK should be designed such that anyone can create an instance of conviction voting for any ERC20 token. Futhermore, they should be able to run their own Snapshot service and integrate the Javascript library into their frontend application. The implementation should be implemented according to the rough spec in the Ceramic conviction voting blog post.

Snapshot service

The snapshot service should be possible to run by anyone using a simple cli or docker container. It should take a few configuration options such as which ERC20 token to use for example. The snapshot service observes votes by users and token balances from the blockchain, then computes the conviction score for each proposal.

Javascript frontend library

The javascript library should contain the neccessary components that enables a frontend developer to integrate conviction voting functionality into their app. The library will use Ceramic and 3id-connect so that users can create and vote on proposals.

The main functionality needed in the library:

  • Creating proposals
  • Voting on proposals
  • Listing active proposals and their total conviction

Build a frontend

The two main things that need to be possible here are:

  1. users need to be able to create and vote on proposals
  2. users can initiate an on-chain execution of transactions approved by a proposal, via a Gnosis Safe.

Frontend application

The frontend application allows users to see existing proposals and their total conviction score. Users can authenticate using 3id-connect, and once authenticated they should be able to create new proposals and vote on existing ones (given that they hold the erc20 token in question).

Getting the UX right in a conviction voting app can be tricky and is something which is still being researched. 1Hive has an interesting discussion around UX.

On-chain execution module

Gnosis recently released a module for on-chain execution of off-chain votes, including an implementation that allows a Snapshot instance to control a Gnosis Safe. It should be fairly straight forward to adapt this on-chain execution model for our purposes.

Evaluation criteria

We will be evaluating proposals based on:

  • Previous expereince building javascript SDKs
  • Understanding of how to design blockchain applications
  • Understanding of Gnosis Safe and Ceramic

Submission requirements

  • Detailed description of work required for each sub-task
  • Estimated time for each sub-task
  • Estimated cost for each sub-task

Please post your submissions as replies to this topic

Appendix: Existing partial implementation

p.s. Thanks to Joel from Ceramic for helping to coordinate and writing this up <3