Inspiration
This project was inspired by a need for a secure way to manage cryptocurrency assets or any data that involves multiple parties, such as a business or organization that requires multiple people to authorize transactions. Additionally, the project have been inspired by my desire to learn and practice programming in Solidity, the programming language used for writing smart contracts on the Ethereum blockchain and deployment to the Mantle Test Net.
What it does
MantleMultisig contract is a smart contract on the Ethereum blockchain that implements a multi-signature wallet with the following features:
- Multiple owners: The wallet can have multiple owners, each of whom has the ability to submit and confirm transactions.
- Required signatures: The number of required signatures can be set, which determines the minimum number of confirmations needed to execute a transaction.
- Timelock: Transactions can be timelocked, which means they can only be executed after a certain amount of time has elapsed.
- Authorized users: Each transaction can have a list of authorized users who have permission to execute the transaction.
- Nonce: Each transaction is associated with a nonce, which is used to prevent replay attacks.
- Events: The contract emits events for depositing funds, submitting transactions, confirming transactions, and executing transactions.
How we built it
This Application requires multiple signatures from authorized users to execute a transaction. It has several functions, including adding and removing owners, setting the required number of signatures, depositing funds, submitting, confirming, and executing transactions, retrieving information about transactions and owners, and more.
This project was built using Next.js, Tailwind CSS, Ethers.js, Mantle, and an Ethereum smart contract to enable seamless, decentralized, and secure management of personal identity and access control.
Challenges we ran into
One of the challenges we ran into was time constraints, especially because I joined the hackathon late. This limited the time available to design, develop, test, and deploy the app. The lack of time could have led to rushed decisions and may have resulted in an incomplete or suboptimal product. To overcome this challenge, we prioritized the essential features and allocated the available time wisely to focus on those features that were critical for the app's success. We also considered delegating tasks or collaborating with other team members to ensure that the project was completed within the given time frame.
User experience: The multisig wallet must be easy to use and understand, especially for users who are not familiar with blockchain technology. The UI should be designed in a way that makes it clear what actions need to be taken and when, and any error messages should be clear and informative.
What we learned
Multisig wallet implementation - The project provides a practical example of how to implement a multisig wallet smart contract that requires multiple signatures to execute transactions. This can be useful for developers who want to implement similar functionality in their own smart contracts.
Security considerations - The project shows some of the security considerations that need to be taken into account when implementing a smart contract. For example, the use of nonces to prevent replay attacks, and the need to validate inputs to prevent unexpected behavior.
What's next for MantleMultisig
Time-based limits: Currently, the MantleMultisig contract allows for transactions to be executed after a certain block timestamp, but there is no way to enforce a time limit after which the transaction can no longer be executed. Adding a time-based limit feature could be useful for cases where the timelock is set too far in the future, or if there are concerns about the transaction becoming invalid or obsolete after a certain amount of time.
Batch transactions: Currently, each transaction must be submitted and confirmed individually. Adding the ability to batch transactions could save time and gas costs by allowing multiple transactions to be submitted and confirmed in a single transaction.
Revoke confirmation: Currently, once a user confirms a transaction, they cannot revoke their confirmation. Adding a feature to allow users to revoke their confirmation could be useful in cases where a user changes their mind or discovers new information that makes them want to withdraw their approval.
Built With
- ethers
- mantle
- nextjs
- tailwindcss
- typescript
- wagmi
- web3

Log in or sign up for Devpost to join the conversation.