Link to the verified contract address
This is a smart contract that acts as an off-chain signature-based shared wallet amongst different signers that showcases use of meta-transaction knowledge and ECDSA recover(). If you are looking for the challenge, go to the challenges repo within scaffold-eth!
If you are unfamiliar with these concepts, check out all the ETH.BUILD videos by Austin Griffith, especially the Meta Transactions one!
At a high-level, the contract core functions are carried out as follows:
Off-chain: ⛓🙅🏻♂️ - Generation of a packed hash (bytes32) for a function call with specific parameters through a public view function . - It is signed by one of the signers associated to the multisig, and added to an array of signatures (bytes[] memory signatures)
On-Chain: ⛓🙆🏻♂️
bytes[] memory signaturesis then passed intoexecuteTransactionas well as the necessary info to userecover()to obtain the public address that ought to line up with one of the signers of the wallet.- This method, plus some conditional logic to avoid any duplicate entries from a single signer, is how votes for a specific transaction (hashed tx) are assessed.
- If it's a success, the tx is passed to the
call(){}function of the deployed MetaMultiSigWallet contract (this contract), thereby passing theonlySelfmodifier for any possible calls to internal txs such as (addSigner(),removeSigner(),transferFunds(),updateSignaturesRequried()).
Cool Stuff that is Showcased: 😎
- NOTE: Showcases how the
call(){}function is an external call that ought to increase the nonce of an external contract, as they increment differently from user accounts. - Normal internal functions, such as changing the signers, and adding or removing signers, are treated as external function calls when
call()is used with the respective transaction hash. - Showcases use of an array (see constructor) populating a mapping to store pertinent information within the deployed smart contract storage location within the EVM in a more efficient manner.
required: Node plus Yarn and Git
git clone https://github.com/scaffold-eth/scaffold-eth-challenges challenge-5-multisig
cd challenge-5-multisig
git checkout challenge-5-multisigyarn install
yarn chain
in a second terminal window:
cd challenge-5-multisig
yarn start
🔏 Edit your smart contract MultiSigWallet.sol in packages/hardhat/contracts
📝 Edit your frontend App.jsx in packages/react-app/src
💼 Edit your deployment script deploy.js in packages/hardhat/scripts
📱 Open http://localhost:3000 to see the app
in a third terminal window:
yarn backend
🔧 Configure your deployment in packages/hardhat/scripts/deploy.js
Edit the chainid, your owner addresses, and the number of signatures required:
in a fourth terminal deploy with your frontend address as one of the owners:
yarn deploy
