{"id":20011231,"url":"https://github.com/mgnfy-view/multi-sig-wallet","last_synced_at":"2026-04-15T22:35:03.907Z","repository":{"id":215485323,"uuid":"738565281","full_name":"mgnfy-view/multi-sig-wallet","owner":"mgnfy-view","description":"A multi-signature wallet implementation using the eth-ape framework in python","archived":false,"fork":false,"pushed_at":"2024-05-22T07:54:07.000Z","size":397,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-03-02T02:16:08.046Z","etag":null,"topics":["eth-ape","ethereum","multisig-wallets","pip3","pytest","python3","smart-contracts","solidity"],"latest_commit_sha":null,"homepage":"https://sepolia.etherscan.io/address/0xCdec20F79bd58A9A30870f632e3F928717cffa95","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mgnfy-view.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-03T14:19:16.000Z","updated_at":"2024-07-23T07:13:35.000Z","dependencies_parsed_at":null,"dependency_job_id":"8cf9eae8-d362-4f0b-8c36-68f68ab25930","html_url":"https://github.com/mgnfy-view/multi-sig-wallet","commit_stats":null,"previous_names":["sahil-gujrati/multi-sig-wallet","mgnfy-view/multi-sig-wallet"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mgnfy-view/multi-sig-wallet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgnfy-view%2Fmulti-sig-wallet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgnfy-view%2Fmulti-sig-wallet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgnfy-view%2Fmulti-sig-wallet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgnfy-view%2Fmulti-sig-wallet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mgnfy-view","download_url":"https://codeload.github.com/mgnfy-view/multi-sig-wallet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgnfy-view%2Fmulti-sig-wallet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31863495,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"ssl_error","status_checked_at":"2026-04-15T15:24:39.138Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eth-ape","ethereum","multisig-wallets","pip3","pytest","python3","smart-contracts","solidity"],"created_at":"2024-11-13T07:24:52.918Z","updated_at":"2026-04-15T22:35:03.884Z","avatar_url":"https://github.com/mgnfy-view.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- PROJECT SHIELDS --\u003e\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n[![MIT License][license-shield]][license-url]\n[![LinkedIn][linkedin-shield]][linkedin-url]\n\n\n\u003c!-- PROJECT LOGO --\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch3 align=\"center\"\u003eMulti-Sig Wallet\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    A multi-signature wallet implementation using the Eth-Ape framework in python\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/Sahil-Gujrati/multi-sig-wallet/blob/main/docs\"\u003e\u003cstrong\u003eExplore the docs »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/Sahil-Gujrati/multi-sig-wallet/issues\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/Sahil-Gujrati/multi-sig-wallet/issues\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\n      \u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#built-with\"\u003eBuilt With\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#prerequisites\"\u003ePrerequisites\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#setup-and-deployment\"\u003eSetup and Deployment\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#roadmap\"\u003eRoadmap\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contact\"\u003eContact\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n\n## About The Project\n\nA multi-sig wallet, also known as a multi-signature wallet, is a crypto wallet which is held by multiple owners, and requires a predetermined minimum number of approvals to authorize and execute transactions.\n\nThe wallet owners and the minimum number of approvals required for transaction authorization are set during deployment of the smart contract. A transaction request can be issued by any one of the owners. Further, the transaction can be approved by other wallet owners, and then executed. This implementation of the multi-sig wallet supports ether, token, and NFT transactions.\n\nTo get a full list of multi-sig wallet functions and their descriptions, head over to `./docs/index.html`. Open the file in a web browser to view the documentation.\n\nAdditionally, you can view the most recent deployment of an example wallet contract [here](https://sepolia.etherscan.io/address/0xCdec20F79bd58A9A30870f632e3F928717cffa95).\n\n\n### Built With\n\n- ![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54)\n- ![Eth-Ape](https://img.shields.io/badge/-ETH--APE-FFFFFF.svg?style=for-the-badge)\n- ![Solidity](https://img.shields.io/badge/Solidity-%23363636.svg?style=for-the-badge\u0026logo=solidity\u0026logoColor=white)\n- ![Ethereum](https://img.shields.io/badge/-ethereum-3C3C3D?logo=ethereum\u0026logoColor=white\u0026style=for-the-badge)\n\n\n\u003c!-- GETTING STARTED --\u003e\n\n## Getting Started\n\n### Prerequisites\n\nMake sure you have node.js, python3, pip3, python3-venv, and git installed and configured on your system. Also, you need to have a bunch of MetaMask accounts, with atleast one of them (the deployer) having about 1 ETH. If you are using the Sepolia testnet, you can get Sepolia testnet ETH from the [Alchemy faucet](https://sepoliafaucet.com/).\n\n### Installation\n\nClone this repository\n\n```shell\ngit clone https://github.com/mgnfy-view/multi-sig-wallet.git\n```\n\nCd into the project folder and activate the virtual environment\n\n```shell\ncd multi-sig-wallet\npython3 -m venv .venv\nsource .venv/bin/activate\n```\n\nThen install the dependencies\n\n```shell\npip3 install -r requirements.txt\nape pm install .\nnpm install\n```\n\nDon't forget to install the plugins required by this project!\n\n```shell\nape plugins install .\n```\n\n### Setup and Deployment\n\n\u003e [!WARNING]\n\u003e The multi-sig wallet contract hasn't undergone a security review yet. It is highy advisable to keep your deployments restricted to testnets only.\n\nYou need to bring your Metamask accounts into ape. One of these accounts will be used to deploy your wallet. The others, along with the deployer, will be joint owners of the multi-sig wallet. You can import as many accounts as you like with\n\n```shell\nape accounts import \u003cALIAS\u003e\n```\nAnswer the prompts and your accounts will be registered with ape. You will need to provide an alias for each account, and a passphrase. Don't forget these! Ape will ask you for the passphrase to sign transactions.\n\nIf you would like to deploy to the Sepolia testnet, you'll need to get your api key from [Alchemy](https://www.alchemy.com/), and set it as an environment variable\n\n```shell\nexport WEB3_ALCHEMY_API_KEY=\u003cYOUR_API_KEY\u003e\n```\n\nAdditionally, you can get an api key from [Etherscan](https://docs.etherscan.io/getting-started/creating-an-account) to publish and verify your contracts. Once you have the api key, set it as an environment variable\n\n```shell\nexport ETHERSCAN_API_KEY=\u003cYOUR_API_KEY\u003e\n```\n\nThen, go to `./scripts/deploy_multi_sig_wallet.py` and bring in your accounts using the account aliases you set before. Remember, account_1 is the deployer.\n\n```python\naccount_1 = accounts.load(\"\u003cALIAS_1\u003e\")\naccount_2 = accounts.load(\"\u003cALIAS_2\u003e\")\n...\naccount_n = accounts.load(\"\u003cALIAS_n\u003e\")\n```\n\nSet the minimum number of required approvals to authorize a transaction to a valid value (required_approvals \u003c= number of wallet owners and required_approvals \u003e 0).\n\n```python\nrequired_approvals = 2 # an example\n```\n\u003e [!TIP]\n\u003e You can pass in only one owner, and set the required_approvals to 0 to use the multi-sig wallet as a conventional wallet!\n\nAdd all your accounts to the constructor arguments in order. These accounts will be registered as wallet owners during deployment.\n\n```python\nconstructor_args = [[account_1, account_2,..., account_n], required_approvals]\n```\n\nFinally, deploy your wallet to your preferred network (I'm using the Sepolia testnet as an example here)\n\n```shell\nape run scripts/deploy_multi_sig_wallet.py --network ethereum:sepolia:alchemy\n```\n\nThis will prompt you to sign the transaction by entering your passphrase. Wait for some time as the deployment script deploys the contract and publishes the contract code on Etherscan.\n\nAnd there you have it, your very own multi-sig wallet!\n\nYou can go to Etherscan, paste in your wallet's address, connect your Metamask account (which is one of the wallet owners), and start issuing, approving, and executing transactions!\n\n\n\u003c!-- ROADMAP --\u003e\n\n## Roadmap\n\n- [x] Write the multi-sig wallet and factory smart contracts\n- [x] Write deployment scripts\n- [x] Conduct unit testing\n- [x] Perform gas optimizations\n- [x] Deploy the wallet on Sepolia testnet\n- [x] Write Natspec documentation and generate docs\n- [x] Write a good README.md\n\nSee the [open issues](https://github.com/Sahil-Gujrati/multi-sig-wallet/issues) for a full list of proposed features (and known issues).\n\n\n\u003c!-- CONTRIBUTING --\u003e\n\n## Contributing\n\nCheck out [CONTRIBUTING.md](./.github/CONTRIBUTING.md) for contribution guidelines. \n\n\n\u003c!-- LICENSE --\u003e\n\n## License\n\nDistributed under the MIT License. See `LICENSE.txt` for more information.\n\n\n\u003c!-- CONTACT --\u003e\n\n### Reach Out\n\nHere's a gateway to all my socials, don't forget to hit me up!\n\n[![Linktree](https://img.shields.io/badge/linktree-1de9b6?style=for-the-badge\u0026logo=linktree\u0026logoColor=white)](https://linktr.ee/mgnfy.view)\n\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n\n[contributors-shield]: https://img.shields.io/github/contributors/Sahil-Gujrati/multi-sig-wallet.svg?style=for-the-badge\n[contributors-url]: https://github.com/Sahil-Gujrati/multi-sig-wallet/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/Sahil-Gujrati/multi-sig-wallet.svg?style=for-the-badge\n[forks-url]: https://github.com/Sahil-Gujrati/multi-sig-wallet/network/members\n[stars-shield]: https://img.shields.io/github/stars/Sahil-Gujrati/multi-sig-wallet.svg?style=for-the-badge\n[stars-url]: https://github.com/Sahil-Gujrati/multi-sig-wallet/stargazers\n[issues-shield]: https://img.shields.io/github/issues/Sahil-Gujrati/multi-sig-wallet.svg?style=for-the-badge\n[issues-url]: https://github.com/Sahil-Gujrati/multi-sig-wallet/issues\n[license-shield]: https://img.shields.io/github/license/Sahil-Gujrati/multi-sig-wallet.svg?style=for-the-badge\n[license-url]: https://github.com/Sahil-Gujrati/multi-sig-wallet/blob/master/LICENSE.txt\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge\u0026logo=linkedin\u0026colorB=555\n[linkedin-url]: https://linkedin.com/in/sahil-gujrati-125ab0284\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgnfy-view%2Fmulti-sig-wallet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmgnfy-view%2Fmulti-sig-wallet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgnfy-view%2Fmulti-sig-wallet/lists"}