Skip to main content

pallet-maci

Project Overview πŸ“„β€‹

This application is a response to On-chain Quadratic Funding RfP

Overview​

Please provide the following:

  • A brief description of the project.

There are numerous crowdfunding platforms dedicated to boosting the development and growth of different blockchains and their communities. One of the most famous ones is Gitcoin.co, which has had a significant influence on the Ethereum ecosystem's development.

Some of them are based on the quadratic funding mechanism, which became one of the fairest and most efficient ways to allocate funds to a sufficient number of projects that contribute to the ecosystem.

However, a similar solution hasn't been developed for the substrate-based blockchains. Thus, we want to create one. Moreover, we want to create a package that will include quadratic funding, user registry, and maci pallets and in addition to that first substrate-based crowdfunding platform. Thereby we will offer a finished solution that anyone can use to collect and allocate funds among different projects within their ecosystems.

This proposal is the first step as we primarily want to create a "MACI" (Minimal Anti Collusion Infrastructure) pallet that will help us to prevent collusion. Once we are finished with this pallet, we will move to the next step that will be pallet-user-registry.

More information about our long term plan you can find in the document.

  • An indication of how you will integrate this project into Substrate / Polkadot / Kusama.

This is a regular pallet that can be merged into any substrate-based blockchain. In the long run, once we develop the crowdfunding platform, we aim to integrate this solution into Kusama and potentially Polkadot, so a portion of treasury funds can be allocated to the projects chosen by the community through this platform.

  • An indication of why your team is interested in creating this project.

We have been developing numerous products on the other blockchain infrastructures such as Ethereum and Stellar. Starting from last year, we decided to focus our time and efforts more on the substrate ecosystem. Hence, we became a member of the Substrate Delivery Partners program, and a few of our team members became Polkadot ambassadors. Also, we hosted an online Substrate event - link

Recently we finished another web3 grant that we had been working on - Substrate Blockchain Starter Kit - link.

This year, we aim to dedicate even more time to substrate-based projects, especially those that can benefit the community. That’s why we got interested in creating the first substrate crowdfunding platform.

Also, we find it interesting to work on the solution (pallet) that will prevent collusion.

Project details

Technology Stack​

pallet-maci
Preventing collusion:

There are various problems in any kind of democratic environment, such as bribery, private key selling, physically threatening, and similar. To prevent, or at least make it very hard to do so, the platform will implement a MACI (Minimum Anti-Collusion Infrastructure) solution very similar to the one found on the Ethereum ecosystem. It will be implemented in the form of another pallet which will be plugged into the main quadratic funding pallet.

The MACI pallet, as presented in the roadmap of the application, is the first step in building the Quadratic funding platform. One of the first problems we have to solve, before a trustless, fair and decentralized crowdfunding platform leveraging CLR algorithm are vote bribery and user collusion.

The pallet's main task is tracking the state of user votes in anonymous and secure way while making sure the zk proofs are correct and cannot be compromised by any party.

We are going to need to limit the possibility, effectiveness and reliability of any methods used to "buy" a "vote".
To do that, the pallet will have to utilize zero knowledge proofs.
Mostly based on the design originating from this thread, the pallet will use zk-SNARKs. The most similar contender for you to see what we're going to build would be the Ethereum implementation of the MACI design.

Pallet interface

Rough glimpse of how the public methods of the pallet will look like. The interactions of all actors and guide to function usage can be seen on this diagram.

Functions:
Used for creating a new voting round newVotingRound(coordinator): roundId

Used to end an active voting round endVotingRound(roundId)

Coordinator address can be updated updateCoordinator(roundId)

Used to signup users to current round signUp(roundId)

Used by users to vote vote(roundId, optionId)

Used by coordinator after generating a zero knowledge proof of genuinity of vote state publishNewMessageState(roundId, stateRoot, proof)

Used by coordinator to prove which party got how many votes publishVoteTally(roundId, proof)

Used to verify the genuinity of the proof verifyVotes(roundId)

Used to check the total number of votes of parties totalVotes(roundId)

Getter functions getCoordinatorPublicKey(roundId) getTallyHash(roundId)

Config:
Origins which will be allowed to interact with certain functions of the pallet. This allows some implementations to levearge another pallet such as collective and have democratic processes of signup, coordination and such.
SignupOrigin VoteOrigin CoordinatorOrigin

State:
Merkle trees containing data about votes
MessageTree // This one is updated by the users
StateTree // This one is updated by the coordinator

Ecosystem fit​

  • Are there any other projects similar to yours? If so, how is your project different?
    There is no such pallet that supports Minimal anti collusion infrastructure.

Team πŸ‘₯

Team members​

  • Name of team leader: Filip Pajic
  • Names of team members: Vuksan Simunovic, Filip Pajic, Andrej Rakic.

Contact​

Contact Name: Filip Pajic
Contact Email: filip.pajic@mvpworkshop.co
Website: https://mvpworkshop.co/

Registered Address: Cara DuΕ‘ana 51 Zemun, Republic of Serbia
Registered Legal Entity: MVP Workshop doo

Team's experience​

The team consists of Blockchain pioneers who worked on various blockchain projects throughout the years and contributed to the community through education. Some of the most notable publications, projects, and technologies that the team members worked on, we will list below.

Publications:

Projects:

Technologies:

  • Rust
  • Typescript
  • Substrate
  • Ethereum
  • Solidity

Substrate related experience:

Team code repos​

Team LinkedIn Profiles​

Development roadmap

Overview​

Total Estimated Duration: 4 months
Full-time equivalent (FTE): 2.5 FTE
Total Costs: 27.000 DAI

Milestone 1 - Pallet logic​

  • Estimated duration: 2 months
  • FTE: 2.5
  • Costs: 12.000 DAI
  • Description: Pallet written in Rust for Substrate 2.0 based blockchains. The pallet will be the implementation of Minimal Anti-Collusion Infrastructure (MACI) which leverages ZKPs
NumberDeliverableSpecification
0a.LicenseApache 2.0 / MIT / Unlicense
0b.DocumentationCode documentation, API reference
0c.Usage exampleExample of how to use the pallet inside code
1.TestsThe code will have unit-test coverage (min. 70%) to ensure functionality and robustness. In the guide, we will describe how to run these tests
2.Merkle tree handlingmessageTree (submitted by users) and stateTree (mapping keys and votes) maintenance and update
3.Cryptographic operationsTo sign and encrypt a message: Generate an ECDH shared key, hash and sign EdDSA private key, Signatures validation mechanism
4.Voice credit managementDetermination of user voice credit amount assignment, weight of credits for vote calculations
5.Voting mechanismVote publishing, Message processing and publishing (It verifies the proof, updates the processed message counter, and updates the state root in storage with newStateRoot), vote tally verification
6.Account managementParticipant registration, Coordinator origin update
7.ZeroPool integrationIntegrate ZeroPool Substrate pallet for verifying circuits

Milestone 2 - ZK Circuits​

  • Estimated duration: 1 months
  • FTE: 2.5
  • Costs: 9.000 DAI
NumberDeliverableSpecification
0a.LicenseApache 2.0 / MIT / Unlicense
0b.DocumentationDocumentation explaining the circuits and their purpose
1.State tree updateCircuit to prove the correctness of each state root, define public/private inputs, write circuits pseudocode
2.Vote tallyCircuit which proves that they have correctly tallied all the votes, define public/private inputs, write circuits pseudocode

Milestone 3 - CLI and Promotion​

  • Estimated duration: 1 months
  • FTE: 2.5
  • Costs: 6.000 DAI
NumberDeliverableSpecification
0a.LicenseApache 2.0 / MIT / Unlicense
0b.DocumentationExplanation how to use the CLI
1.Operation toolsScripts written in Typescript used to perform offchain tasks needed to operate the platform and interface with the pallet. (Coordinator: newElection, generateProofs, submitProofs; User: register, vote )
2.Pallet showcaseCode repo with the node-template which contains the pallet implementation used to showcase the pallet and its usage
3.Blog postThe blog post that explains what and how we built

Community engagement​

We will create a blog post as a part of the milestone we submit, explaining what and how we built it.

Future plans​

As we mentioned, this is only the beginning and the first step in the process of creating a first substrate-based crowdfunding platform. After we finish with the maci-pallet, we will move to the pallet-user-registry and after that to the pallet-quadratic-funding and finally work platform (UI).


pallet-user-registry
Preventing pseudonymous identities (Sybil resistance):

For the platform to be credible and for funds to be matched fairly, no user should be able to fund some good more than once. It should be easy for a user to create his identity but very hard to create a pseudo-identity.

The quadratic funding pallet will be agnostic of verified user identities. Those will be plugged in the form of another pallet that implements specific interfaces. This registry will be implemented in one of these 2 forms:

  • Some collectively managed registry of whitelisted users
  • Some permissionless registry that uses a 3rd party service such as BrightID

pallet-quadratic-funding
Algorithm for calculating funds:

As explained by Vitalik B. in this blog post, some voting methods will favor plutocracy while some others will neglect the range of support or disproving of creating good. Quadratic funding seems like the best fit for aggregating people's preferences for funding some public goods, so the platform will implement the Constrained Liberal Radicalism algorithm (Quadratic funding) for calculating the funds for a specific project.

Bellow are all the components that have to be developed before the platform is ready for use:

Components overview

Component nameDescription
Web AppThe GUI used to present funding data to the users in an easy way.
pallet-quadratic-fundingThe pallet will contain business logic and data of the funding campaigns and be used to operate the platform.
pallet-user-registryPallet used to manage verified users of the platform to prevent any potential Sybil attacks.
pallet-maciMinimum Anti-Collusion Infrastructure implementation for substrate-based chains

Additional information

Any additional information that you think is relevant to this application that hasn't already been included.

Possible additional information to include:

  • Are there are any teams who have already contributed (financially) to the project?
    There are no other teams that have already contributed to this project.

  • Have you applied for other grants so far?
    We haven’t applied for other grants.