
sunflower
Trustlessly use L1 multisig owners to sign txs on L2 using zk proofs
Demo
About
Various people use multisigs to personally/professionally manage funds/access control. However, in the case of multi-chain use cases, the UX is not very great. For instance, a popular platform Gnosis Safe has these downsides: - no direct way from UI to deploy a multi-sig on the same address on other networks, though there is a hacky way reserved for advanced users (replaying creation tx). I believe this is intentional because... - multi-sigs deployed by the same user, on the same address, and on different chains are treated as a completely independent multi-sig since there is no link. - there is friction for multi-sig user groups to expand to other chains since they have to create multi-sig and then also keep updating their multi-sig everywhere in case they decide to add someone to their group of owners or have to let someone go. An ideal UX could be: to create multi-sig once and get access everywhere. A trivial solution is to just use one of the many available messaging layers that involve some trust assumptions. But this reduces the security of multi-sig to a minimum of multi-sig owners clashing and messaging layer security. Often messaging layers are some form of multi-sigs. With trustlessness as the primary goal, I have prepared a PoC which demonstrates a use case in which we can read L1's data on L2 using zk state proofs. This project is a Gnosis Safe plugin that is used by a multi-sig on L2 to inherit ownership of a multi-sig on L1. The demo includes a transaction that is done through a multi-sig on Optimism Mainnet by the owners of a multi-sig on Ethereum Mainnet.
How it's made
The Optimism L2 has a precompile which gives access to L1's block hash. This allows access to the execution details of L1. However, doing MPT proofs + RLP can be costly in terms of computation and call data size. Hence, in this hack, I am using open-source code developed by the Axiom team, along with some modifications to provide a zk proof of storage slots given a block hash. Technologies used: - Rust - Solidity - axiom-eth repository - Safe Core Protocol