A fully decentralized multisig wallet built with Solidity and ReactJS.

  • By Shafayeat Kabir Sumit
  • Last update: Sep 12, 2022
  • Comments: 0

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

🎬 Demo Video

πŸ’‘ 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 :


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!