Introduction
Cell Wallet is an opinionated 2-of-2 multisig smart contract wallet on Ethereum, with an optional soft guardian role for 2-of-3 recovery. It's designed for simplicity, security, and sovereignty.
The Cells protocol is deployed at 0x000000000022Edf13B917B80B4c0B52fab2eC902
A lite version (minimal proxy factory) is deployed at 0x000000000022fe09b19508Ceeb97FBEb41B66d0F
Access the dApp at cellwall.eth.limo
Core Concepts
2/2 Multisig
Every Cell requires exactly two owners to approve any transaction. This provides maximum security without the complexity of threshold signatures. Both owners have equal power—no hierarchy, no single point of failure.
Sorted Ownership
Owners are automatically sorted by address (owner0 < owner1). This ensures deterministic behavior and prevents ordering confusion.
Guardian Role
An optional third signer with limited powers. The guardian can initiate and co-approve transactions but cannot directly set allowances or permits—those require 2/2 owner consensus. Perfect for recovery scenarios or trusted third-party assistance.
Key Features
Technical Details
Contract Architecture
Transaction Flow
- Initiate: First owner calls execute() with transaction details
- Hash: Transaction is hashed and stored with first approver
- Approve: Second owner calls execute() with same parameters
- Execute: Transaction executes atomically upon second approval
Hashing Mechanism
Transactions are identified by their content hash:
Special Permissions
| Action | Owner 0/1 | Guardian |
|---|---|---|
| Initiate transaction | ✓ | ✓ |
| Approve & execute | ✓ | ✓ |
| Send chat message | ✓ | ✓ |
| Transfer ownership | ✓ | ✗ |
| Set allowances | ✓ | ✗ |
| Cancel pending | ✓ (if approver) | ✓ (if approver) |
Using the dApp
Getting Started
- Visit cellwall.eth.limo
- Connect your Web3 wallet (Rainbow, MetaMask, Coinbase)
- Create new Cell or access existing ones
Interface Elements
Left side shows Owner 0 address, status, and pending count
Right side shows Owner 1 address, status, and pending count
Bottom drawer for messages, transactions, allowances, and permits
Transaction Types
- SEND: Transfer ETH or ERC-20 tokens
- CONTRACT: Call any smart contract function
- ALLOWANCE: Grant spending permission to other owner
- PERMIT: Issue reusable execution permits
- GUARDIAN: Set or update guardian address
- TRANSFER: Transfer your ownership slot
Security Considerations
Best Practices
- Use hardware wallets for owner accounts
- Store owner keys in separate locations
- Choose guardian carefully—they can approve but not initiate
- Use unique nonces for each transaction
- Verify transaction hashes before approval
Recovery Scenarios
Lost one owner key: Remaining owner + guardian can execute ownership transfer to new address.
Lost guardian key: Both owners can update guardian address.
Lost both owner keys: Funds are permanently locked. Always maintain secure backups.
Gas Optimization
Cell uses several gas optimization techniques:
- Transient storage for reentrancy guards (EIP-1153)
- Transaction content hashing for single slot storage
- Inline assembly for critical operations
- Batch operations to amortize base costs
Examples
Creating a Cell
Executing a Transaction
Setting Allowance
Advanced Features
Multicall
Execute multiple calls to the Cell contract atomically:
Delegate Execution
Execute code in Cell's context (for upgrades/modules):
EIP-712 Signatures
Approve transactions offline via structured signatures: