Skip to content

shafayeatsumit/rugged-multisig

Repository files navigation

multisig logo

🚀 Rugged MultiSig

A minimal clone of gnosis-safe with one key difference Rugged Multisig uses Waku Connect as its indexer.

The purpose of multisig wallets is to increase security by requiring multiple parties to agree on transactions before execution. Transactions can be executed only when confirmed by a predefined number of owners

💡what problem does it solve?

Typical multi-sig wallets are able to achieve gas-less signatures by running a centralized indexer, aka transaction history service.

This indexer is a centralized piece, critical to the wallet functionality. As of any centralized infrastructure, the indexer can be subject to censorship, DDOS attacks or hosting failure.

Replacing the indexer by the decentralized Waku network would mitigate such risks.

✨ Features

  • Create wallet.
  • Import existing wallet.
  • Propose basic transactions with the frontend that sends them to the backend.
  • “vote” on the transaction as other signers.
  • Add/remove new signer.
  • Execute transaction as an active signer.

🛠 Waku Implementation Detail

This project integrates Waku to multisig wallet for initiating multi-party multi-signature transactions. When an owner of a safe initiates a Safe transaction, the transaction data will be broadcast to the Waku network with symmetric encryption, instead of sending to the centralized server. Other owners who need to confirm the transaction would either receive the request via:

  • Waku Relay, if they were online when the request was originally made, or,
  • Waku Store, if they were offline when the request was originall made.

The content topic is versioned so that this workflow can be upgraded anytime.

🏄‍♂️ Quick Start

Prerequisites: Node (v16 LTS) plus Yarn and Git

clone/fork :

https://github.com/shafayeatsumit/rugged-multisig.git

install and start your 👷‍ Hardhat chain:

cd rugged-multisig
yarn install
yarn chain

in a second terminal window, start your 📱 frontend:

cd rugged-multisig
yarn start

in a third terminal window, 🛰 deploy your contract:

cd waku-multi-sig-wallet
yarn deploy

📱 Open http://localhost:3000 to see the app

🧪 Test Coverage:

----------------------|----------|----------|----------|----------|----------------|
File                  |  % Stmts | % Branch |  % Funcs |  % Lines |Uncovered Lines |
----------------------|----------|----------|----------|----------|----------------|
 contracts/           |    95.31 |       50 |      100 |    95.77 |                |
  MultiSigFactory.sol |      100 |       50 |      100 |      100 |                |
  MultiSigWallet.sol  |    94.23 |       50 |      100 |    94.83 |    116,117,121 |
  TestERC20Token.sol  |      100 |      100 |      100 |      100 |                |
----------------------|----------|----------|----------|----------|----------------|
All files             |    95.31 |       50 |      100 |    95.77 |                |
----------------------|----------|----------|----------|----------|----------------|

📣 Shout Out:

💌 P.S.

🌍 You need an RPC key for testnets and production deployments, create an Alchemy account and replace the value of ALCHEMY_KEY = xxx in packages/react-app/src/constants.js with your new key.

📣 Make sure you update the InfuraID before you go to production. Huge thanks to Infura for our special account that fields 7m req/day!