Please, refer to the whitepaper draft for therminology
Check the roadmap for context
The goal of this epic is to have a working proof of concept. This means:
- No decentralized relay
- No user interface
- No identities (just keys)
- Unit testing not required
- Documentation not required
- No optimizations
The outcome of this epic should be a clear set of specifications in order to move towars a firs MVP.
It would be the first coordinated development.
- We don't know each other
- There will be missing specifications and comunications
- We will have to find out the best tools for coordination
- We will have to setup enviroments find tools/libraries/frameworks...
So friction and slowness is expected... its ok :)
Taking all the above in consideration, we still should be able to get the first Proof of Concept
ready!
I suggest two phases of development. The firt one allows to work quite indepently, which I belive will be quite beneficial to start. The second one will be integrate everyting
-
Libraries development
- Overall setup: tooling/data schemes/libraraies/ frameworks
Franchise proof
creation and validationCensus tree
generationVoting smart-contract
- Relay setup
-
Integration
- Client local integration External integration
- Client-Relay integration
- Relay-Client integration
Below there is a more detail of what to develop
From the specs of this document each of us should generate specific tasks, and put estimated times on each. This is a super boring process but is the only way way can forecast dead-lines as well as organizing the works so no one is too over/under loaded.
- Depends on J
- Designed with Circom
- May have its own repository
- Depends on the circuit
- Needs to be executed in the
light-client
, and theRelay
as well - Should implement
- createNullifier(processId, privateKey)
- createProof(privateKey, censusMerkleProof, censusMerkleRoot, nullifier, processId, encryptedVoteHash) : proof
- validateProof(proof, merkleRoot, nullifier, encryptedVoteHash, processId): bool
- Should NOT implement
- Vote encryption is not specific to the proof. (could use multiple keys, encryption schemes...)
- Makes sense to have its own repository, although it relies on the Snarks Circuit implementation
- Takes thousands of public keys and creates a Merkle-tree
- No optimizations (sparse Merkle-trees, streams...)
- Has its own repository
- Should implement...
- createProcess(name, voteEncryptionKey)
- getProcessMetadata(processId):processMetadata
- AddVotesBatch(votesBatchHash)//eventually should store the sender to know who added it
- getPackageAgregationHash(index)
- FinalizeProcess(voteEncryptionKey)
- Should not implement (YET)
- RegisterRelay()
- Time-frames (start/end blocks)
- Available
vote options
- Has its own repository
- Can be done using a test suit (no UI)
-
Local integration
- Encyrpts mock vote
- Generates
vote package
-
External integration (relay/blockchain)
- Gets and uses
process metadata
fromvoting smart-contract
- Sends
vote-package
torelay
- Gets and uses
- Has its own repository
-
Relay setup and infrastructure
- Setup a testnet?
- Build it into a docker?
- Setup IPFS
- Expose IPFS gateway
- Setup Ethereum node
- Expose Ethereum RPC
- Setup testnet
-
External integration
- Recieves
vote package
- validates franchise proof
- Groups
voting packages
and createsvotes batch
- Pins
votes batch
- Adds
votes batch
to thevoting-smart
contract
- Recieves