Skip to content

aragonzkresearch/ovote-node

Repository files navigation

ovote-node GoDoc Go Report Card Test

Research project.

OVOTE: Offchain Voting with Onchain Trustless Execution.

This repo contains the OVOTE node implementation, compatible with the ovote circuits & contracts. All code is in early stages.

More details on the ovote-node behaviour can be found at the OVOTE document.

Usage

In the cmd/ovote-node build the binarh: go build

Which then can be used:

> ./ovote-node --help
Usage of ovote-node:
  -d, --dir string        storage data directory (default "~/.ovote-node")
  -l, --logLevel string   log level (info, debug, warn, error) (default "info")
  -p, --port string       network port for the HTTP API (default "8080")
  -c, --censusbuilder     CensusBuilder active
  -v, --votesaggregator   VotesAggregator active
      --eth string        web3 provider url
      --addr string       OVOTE contract address
      --block uint        Start scanning block (usually the block where the OVOTE contract was deployed)

So for example, running the node as a CensusBuilder and VotesAggregator for the ChainID=1 would be:

./ovote-node -c -v -l=debug \
--eth=wss://yourweb3url.com --addr=0xTheOVOTEContractAddress --block=6678912

API

  • POST /census, new census: creates a new CensusTree with the given keys & weights
    // AddKeysReq is the data packet used to add keys&weights to a census
    type AddKeysReq struct {
            PublicKeys []babyjub.PublicKeyComp `json:"publicKeys"`
            Weights    []*big.Int              `json:"weights"`
    }
  • GET /census/:censusid, get census: returns census info
  • POST /census/:censusid, add keys to census:
    // AddKeysReq is the data packet used to add keys&weights to a census
    type AddKeysReq struct {
            PublicKeys []babyjub.PublicKeyComp `json:"publicKeys"`
            Weights    []*big.Int              `json:"weights"`
    }
  • POST /census/:censusid/close, close census: closes census
  • GET /census/:censusid/merkleproof/:pubkey, get MerkleProof: returns the MerkleProof for the given PublicKey
  • POST /process/:processid, send vote: stores the vote to be included in the rollup proof
    // VotePackage represents the vote sent by the User
    type VotePackage struct {
            Signature   babyjub.SignatureComp `json:"signature"`
            CensusProof CensusProof           `json:"censusProof"`
            Vote        ByteArray             `json:"vote"`
    }
  • GET /process/:processid, get process: returns process info
  • POST /proof/:processid, generate proof: triggers proof generation
  • GET /proof/:processid, get proof: returns the generated proof

Test

  • Tests: go test ./... (need go installed)
  • Linters: golangci-lint run --timeout=5m -c .golangci.yml (need golangci-lint installed)

About

Offchain Voting with Onchain Trustless Execution

Resources

License

Stars

Watchers

Forks

Releases

No releases published