Many projects (Gnosys, uPort, Universal Login) have their multisig wallet to represent a user's identity and improve the UX. Yet, all are different. It's unlikely that any of the multisig being built right now will be relevant more than a few years. There are features we haven't even though about that will be important to have in a few years.

ERC725 (v2) proposes to build a minimalistic proxy and upgrade the multisig that owns it when the users feel the need. This allows you to keep your address forever and not have to move your token to a new wallet. But with this approach, the multisig doesn't own the assets (the proxy does) so meta-tx with refund is more complex. Also, a dApp will see the proxy's address but won't be able to query the ownership contract transparently, which increases the complexity.

What it does

My proposal is to improve on ERC725 by giving the capacity to delegatecall to an external contract that hosts the ownership logic. This makes the ownership logic upgradable without needing any contract deployment. This increases the effectiveness of the proxy while reducing the upgrade cost.

How I built it

I started building the proxy itself. I then implemented a few delegates with different security level (single ownership → multisig with meta-tx → multisig with meta-tx that can refund the relayer). Of course, ENS registration and ERC1271 signature verifications are built in.

I then built a delegate that inherits from ERC1077 and is thus compatible with Universal Login. By modifying a few lines in the Universal Login SDK I made it deploy my proxy instead of the current (non-upgradable) multisigs. This reduces the deployment cost by 80%!

Last but not least I identified a missing feature in ERC1077 (support for ERC1271). I thus build a new delegate for the proxy. Proxies deployed by the SDK can then be upgraded to include this missing feature while keeping their balance and ENS registration.

Challenges I ran into

Delegate calls are tricky to work with, and handling storage in upgradable contracts was a real challenge. Also, I'm not a node.js wizard, and upgrading the Universal Login SDK was difficult in such a short time.

Accomplishments that I'm proud of

Reducing the deployment cost of wallets by 80% while giving them the ability to get upgraded.

What I learned

Working in a rush is never a good thing. Also, node.js, Universal Login's SDK, and a lot about the EVM

What's next for Universally Upgradable Identity Proxy

Pull request to Universal Login, other POC with other wallets and ERC proposal. I'd love to deploy a contract with Universal Login, register it on ENS, and then reconfigure it to be a GnosisSafe or uPort format that runs natively with these wallets.

Built With

Share this project: