Private Multi Signature Wallet Which Enables Private Voting And Custom Transfer Transaction Execution
This project is a Multi Signature Wallet with private voting solution. Users could be sending private key for verification and make use another wallet as a fee payer to hide the identity of the Multi Sig wallet member. We provided solution with current maximum of 254 wallets to be stored in a merkle tree. We decided on that number because bitmask for voting for each member can be stored in a single state field. Voters will be mapped to their votes with dynamic calculation and will be able to vote on one active proposal. On submission of a vote, or proposal making, or execution, user will need to provide correct data which will be compared to the proposal hash. This way we ensure that the voter/executor knows what he is doing, and is able to make sure data is right without storing all data on chain. Data will be used inside contract to create transfers on which, there will be logic which will read out the json string and figure out how many transfers need to be done, to which wallets. For the action of proposal cancellation and/or execution the quorum must agree, by the standard that is determined by the contract logic, currently 50% must agree for action to be canceller or executed in order to do so. There will be no way to conclude if somebody voted or not, and if their vote was for or against execution because there will be random fee payer wallets executing the transaction. PrivateKey of user will be verified in a zkp and will never be stored on chain or visible to public, and same is for privateKey.
We used react for frontend, and we wrote couple of helpful scripts and all of contracts in ts. About the hacky things, i would consider mostly our bitmap voting solution, even though it is not that unique, it is pretty useful on places with limited storage such as mina. Another cool thing is storing huge amount of users in a merkle tree without revealing their identity.