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
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.
- 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.
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.
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
----------------------|----------|----------|----------|----------|----------------|
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 | |
----------------------|----------|----------|----------|----------|----------------|
- Thse project is built on top of Scaffold-Eth. This boilerplate helps developer to quickly experiment with Solidity using a frontend that adapts to your smart contract.
- 🙏 dec3ntraliz3d Daniel, Soptq, Steven Slade, Austin Griffith.
🌍 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!