⚡ Tóm tắt — Đọc trong 60 giây
EOA và Smart Contract Wallet: Hai paradigm khác nhau hoàn toàn
EOA (Externally Owned Account) được kiểm soát bởi private key — ai có key là có tất cả. Transaction được ký bằng ECDSA, validate bởi protocol level. Đơn giản, phổ biến (MetaMask), nhưng limited: không thể tùy chỉnh validation logic, không có tính năng recovery, mất key = mất hết.
Smart Contract Wallet là smart contract deploy on-chain với bất kỳ logic nào bạn muốn: multisig, social recovery, session keys, spending limits, gas sponsorship. Tính năng phong phú hơn nhiều, nhưng tốn gas deployment, cần trust contract code, và phức tạp hơn.
EOA
Private key
Đơn giản, phổ biến, limited
SC Wallet
Smart contract
Phong phú, phức tạp, gas cao
ERC-4337
Account Abstraction
SC Wallet dùng UserOp
EIP-7702
EOA + contract
Pectra: EOA có thêm code
Mọi account trên Ethereum (và EVM-compatible chains) có 4 fields trong state: nonce (số transaction đã thực hiện hoặc contract đã deploy), balance (ETH balance tính bằng wei), codeHash (hash của bytecode), và storageRoot (root của storage trie).
Sự khác biệt duy nhất giữa EOA và Contract Account: EOA có codeHash = keccak256("") (empty code), trong khi Contract Account có bytecode thực sự tại địa chỉ đó. Không có trường nào khác phân biệt hai loại — chỉ là có code hay không.
EOA là account được kiểm soát bởi private key nằm ngoài blockchain (vì vậy "externally owned"). Địa chỉ Ethereum được derive từ public key: address = last20bytes(keccak256(publicKey)). Mối quan hệ: 1 private key ↔ 1 public key ↔ 1 địa chỉ duy nhất, và không thể thay đổi.
Cách EOA Gửi Transaction
- Build transaction object:
{to, value, data, gasLimit, maxFeePerGas, nonce, chainId}
- Sign bằng private key: ECDSA signature
(v, r, s)
- Broadcast transaction lên mempool
- Validator verify signature, execute, update state
Giới hạn của EOA: Validation logic được hardcode trong protocol — luôn là ECDSA với key tương ứng. Không thể thêm multisig natively, không thể recovery, không thể thay đổi key mà giữ nguyên address.
Smart Contract Wallet là một smart contract (code chạy on-chain) đóng vai trò là "ví". Nó có địa chỉ Ethereum, có thể nhận và gửi ETH/tokens, nhưng thay vì bị kiểm soát bởi private key, nó được kiểm soát bởi code logic do bạn định nghĩa.
Tính Năng Có Thể Implement
- Multisig: Yêu cầu M/N approvals — Gnosis Safe
- Social Recovery: Recover qua guardians thay vì seed phrase
- Session Keys: Delegate limited signing permissions cho dApp
- Gas Abstraction: Trả gas bằng ERC-20, hoặc sponsor cho user
- Spending Limits: Không thể transfer quá X ETH/ngày
- Batched Transactions: Nhiều actions trong 1 transaction
- Custom Signature Schemes: Passkey, WebAuthn, zkProof
💡
Khác biệt quan trọng
Smart Contract Wallet vẫn cần 1 EOA để trigger transaction đầu tiên — vì chỉ EOA mới có thể là "sender" của transaction theo protocol. Đây là lý do tại sao ERC-4337 tạo ra EntryPoint contract: nó là EOA-level sender thay mặt cho SC Wallet.
| Tiêu chí | EOA | Smart Contract Wallet |
| Kiểm soát | Private key (ECDSA) | Contract code (tùy chỉnh) |
| Deployment gas | Không — free | Cần — deploy contract (~100k gas) |
| Transaction gas | 21,000 gas baseline | 21,000 + contract overhead |
| Multisig | Không | Có |
| Social Recovery | Không | Có |
| Gas Sponsorship | Không | Qua Paymaster |
| Batch Transactions | Không | Có |
| Thay đổi owner | Không thể | Có thể |
| Address thay đổi? | Không — address từ key | Không — cố định khi deploy |
| Smart contract bug risk | Không có | Có — cần audit |
| Ví phổ biến | MetaMask, Rainbow, Trust | Argent, Safe, Coinbase SW |
Vấn đề cốt lõi: Smart Contract Wallet không thể tự gửi transaction vì chỉ EOA mới là "sender". ERC-4337 giải quyết bằng cách tạo một execution layer riêng: UserOperation thay cho Transaction, Bundler thay cho Validator (ở tầng application), và EntryPoint contract thay cho protocol-level sender check.
ERC-4337 UserOperation Flow
SC Wallet user ──▶ UserOperation ──▶ Alt Mempool
│
Bundler ──────────────────────────────┘
│ picks UserOps, bundles into 1 Transaction
▼
EntryPoint.handleOps() ──▶ calls Paymaster (optional)
──▶ calls SC Wallet.validateUserOp()
──▶ executes calldata
Xem chi tiết tại ERC-4337 Là Gì, Paymaster Là Gì, và Bundler Là Gì.
EIP-7702, được include trong Ethereum Pectra upgrade (2025), là bước tiến lớn nhất: cho phép EOA tạm thời set code cho chính nó. Một EOA có thể delegate sang contract code trong một transaction — cho phép dùng tính năng Smart Contract Wallet mà không cần migrate funds.
Tại Sao Quan Trọng
- User dùng MetaMask có thể batch transaction, sponsor gas, dùng passkey — không cần move sang Argent hay Safe
- Không cần deploy separate contract — EOA "borrow" code từ implementation contract
- Backward compatible: EOA vẫn là EOA, chỉ có thêm khả năng
- Đây là bước đi về phía "EOA và SC Wallet hội tụ"
Nên dùng EOA khi:
- Cá nhân, tự custody, chỉ cần 1 key
- Dùng hardware wallet (Ledger, Trezor) — bảo mật tốt hơn SC Wallet với setup đơn giản
- Gas optimization là ưu tiên (EOA rẻ hơn ~40k gas/tx)
- Cross-chain cần address nhất quán (dùng cùng private key)
- Beginners — ít attack surface hơn
Nên dùng Smart Contract Wallet khi:
- Tổ chức, DAO, treasury cần multiple approvers
- Muốn social recovery thay vì seed phrase
- dApp cần gas sponsorship cho user (onboarding)
- High-value holdings cần spending limits và time-lock
- DeFi automation cần session keys
Năm 2026, ranh giới EOA/SC Wallet đang mờ dần. EIP-7702 cho phép EOA dùng tính năng SC Wallet. MetaMask đang tích hợp ERC-4337 natively. Coinbase Smart Wallet, Argent X (StarkNet), và zkSync native AA đang push adoption.
Xu hướng rõ ràng: Onboarding users mới sẽ ngày càng dùng SC Wallet với passkey thay vì seed phrase — UX đơn giản hơn nhiều. Power users vẫn dùng hardware wallet + EOA cho cold storage. Institutional thì Safe + MPC là tiêu chuẩn.
🔮
EIP-3074 vs EIP-7702
EIP-3074 (đã bị drop khỏi Pectra) cho phép EOA delegate toàn bộ quyền cho contract — nguy hiểm hơn. EIP-7702 an toàn hơn: chỉ set code tạm thời trong scope transaction đó. Community chọn 7702 sau debate dài về security implications.
MetaMask là EOA hay Smart Contract Wallet?+
MetaMask là EOA wallet — quản lý private key và ký transaction bằng ECDSA. Smart Contract Wallet là loại khác như Argent, Safe, Coinbase Smart Wallet — nơi account là smart contract với logic tùy chỉnh. MetaMask có thể interact với Safe nhưng bản thân account vẫn là EOA.
Smart Contract Wallet có an toàn hơn EOA không?+
Phụ thuộc threat model. SC Wallet có lợi thế: multisig, social recovery, session keys, spending limits. Nhưng có rủi ro mới: smart contract bug, upgrade mechanism có thể bị exploit, gas cao hơn. EOA đơn giản hơn, ít attack surface, nhưng mất key là mất tất cả — không có recovery.
ERC-4337 thay thế EOA không?+
Không — ERC-4337 không thay thế EOA, nó thêm alternative execution path. EOA vẫn hoạt động bình thường. ERC-4337 tạo UserOperation mempool song song. EIP-7702 (Pectra) và EIP-3074 hướng tới cho EOA có AA capabilities mà không cần migrate.
Chuyển từ EOA sang Smart Contract Wallet như thế nào?+
Không có cách "convert" — chúng là hai loại account hoàn toàn khác. Để dùng SC Wallet: 1) Deploy contract mới (hoặc counterfactual via CREATE2), 2) Chuyển assets từ EOA sang contract address, 3) Dùng SC Wallet từ đó. EOA cũ có thể là signer/owner. EIP-7702 (Pectra) sẽ cho phép EOA tạm thời dùng contract code — quan trọng nhưng không phải convert.
Tài Liệu Tham Khảo
- Ethereum Docs — Accounts
- EIP-4337 — Account Abstraction
- EIP-7702 — Set EOA account code
- EIP-1271 — Standard Signature Validation for Contracts
- Argent — Account Abstraction blog
- Ethereum Roadmap — Account Abstraction path
- TWT.VN — ERC-4337 Là Gì?
- TWT.VN — Multisig Wallet Là Gì?