Bacalaha - Inheritance Wallet
Bacalaha - wallet that supporting secure and user-friendly feature like Inheritance and session key
Screenshots





Problem Statement
Bacalaha is a account abstraction wallet designed to manage their keys in session key and enabling seamless inheritance of assets so that it lowers the barrier of crypto wallet usage to public✨Problem that we are solvingThe biggest barrier to crypto wallet adoption is the handling of private keys, with challenges arising when owners forget their keys or face unexpected circumstances like death. Existing wallet solutions lack user-friendly approaches to address these issues, hindering seamless wallet usage and asset management.Then, what is Bachlaha Inheritance wallet?Bacalaha handle this problem using account-abstraction that supports inheritance feature, which can able to get inherited if satisfied eligibility and inactivated for certain period. By leveraging Cartridge-Controller's webAuth for key handling, Bacalaha ensures secure and user-friendly way to handle key. And implemented inheritance feature as plugin.ResourcesBacalaha core contract (w/ gaurdian contract) - https://github.com/kariy/inheritance-contract/tree/28ed0705bd1320a7651f33857afbb2e7fd2dc54eBacalaha core frontend - https://github.com/rkdud007/eth-lisbon-2023-frontendSismo connect integration - https://github.com/rkdud007/ethlisbon-2023-contract/tree/main/sismo-contractsUserFlowInitialization ProcessCreate Wallet: Users generate a wallet and securely store the session key on other devices like a phone or USB.Configure Inheritance: Users set up inheritance settings, specifying the duration of inactivity required to activate inheritance and defining the eligibility criteria for inheritance activation.Inheritance Activation Process:Caller Eligibility Verification: When an eligible person intends to activate inheritance, the caller's eligibility is validated on-chain using the Sismo connect mechanism.Wallet Inactivity Check: The system checks if the target wallet has remained inactive for the specified duration. This is done by comparing nonces between two block numbers. To verify the inactivity duration, Bacalaha utilizes the account nonce storage proof provided by Heorodotus.Inheritance Execution:If the caller is deemed eligible and the wallet has been inactive for the required duration, the inheritance is executed through the smart contract, securely transferring ownership of the assets.Future ImprovementRight at this moment Heoroduts don't support Evm <> Evm (but coming soon), and Sismo Connect is only available in EVM. So in this project, we implemented group eligibility logic into Solidity contract and account nonce storage proof into Cairo contract. So in future, we can implement full execute_inheritance function into solidity and validate two conditions in one function.
Solution
We used Sismo ( verify group eligibility ), Cartridge ( contract base ), Herodotus ( nonce storage proof )OverviewBacalaha is a contract account designed with two plugins: the session key plugin and the inheritance plugin. The contract interface, IPluginAccount, allows for the addition of plugins to the wallet contract in a scalable manner.Session Key PluginTo revoke and validate the session key during wallet creation and login, Bacalaha utilizes the cartridge-controller's Session Key plugin contract.The Session Key plugin enables the cryptographic generation and secure storage of the session key on other devices. This plugin also facilitates the validation of the session key during wallet operations.Inheritance PluginThe inheritance functionality in Bacalaha is implemented through the Inheritance plugin. Two validations are performed to activate inheritance:Caller EligibilityBacalaha employs sismo connect to verify if the caller of the inheritance function is eligible to activate inheritance. On-chain verification through sismo connect ensures that the caller is a member of the sismo group, allowing them to fulfill the inheritance conditions.Account Inactivity ValidationBacalaha checks if the target account has been inactive for a specified period of block numbers. This validation is based on retrieving the storage proof of the account's nonce from the FactsRegistry contract of Herodotus using the get_verified_account_nonce function. The validated nonce data is compared to determine if the account meets the inactivity requirement for inheritance activation.