Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This was part of work done in Infinite hackathon last October. The idea behind this was to extend
BaseERC20Guild
contract:Vote batching:
A user can send an array of votes to be executed, allowing the voting of multiple proposals in just one transaction. This mechanism works both for on- and off-chain voting (
setMultipleVotes
andexecuteSignedVotesBatches
respectively).Off-chain signature voting:
A user can now sign a vote off-chain that another user can execute.
Security features:
Each vote is part of a Merkle tree, allowing us to verify that the vote to be executed is indeed part of a block of votes. We do this using the MerkleProof smart contract by OpenZeppelin.
The voter must also sign the Merkle tree root hash. By doing this, the voter only needs to sign one message (the tree root) instead of every vote.
The combined mechanisms allow us to verify that a vote is part of a group of votes and that the voter indeed approves the group of votes.