| Externally Owned Account(EOA)外部拥有账户 | Contract Account(CA) 合约账户 | |
|---|---|---|
| 共性 | 都可以接收、持有和发送代币,并与已部署的智能合约进行交互Keccak 加密算法/椭圆曲线 | |
| 成本 | 免费创建 | 付费创建(当前gas) |
| 交易 | 发起、执行任何交易,可以支付 gas。当执行交易,第一个账户必须是EOA,且支付gas | 只能在收到交易时发送交易(如swap);不能支付 gas |
| EOA 之间只能进行代币 transfer(而不能是其他交易) | 从 EOA 向合约帐户发起的交易能触发可执行多种操作的代码,例如转移代币甚至创建新合约 | |
| 控制 | 由私钥控制,由私钥和公钥组成。以太坊在称为 Secp256k1 的特定椭圆曲线上使用称为 ECDSA 的特定签名方案。 | 没有私钥,由代码控制 |
| **账户属性 | ||
| (字段)** | balance:余额nonce:历史交易次数address:私钥64字符,公钥0x+后20。codeHash:空字符段(就当不存在咯)。storageRoot | balance:余额。nonce:创建了的合约数量。address:43字符。codeHash:账户代码。storageRoot |
| Maker | Maxlion |
但是这样的账户设计存在很多问题,“罄竹难书”
1,私钥=资产,EOA 的存在使得用户需要记住私钥或者助记词,丢私钥=丢资产
2,必须通过 EOA 签名授权增加了风险,用户为每笔交易支付 gas 会泄露隐私。
3,转账需要 gas,0 ETH 余额的地址需要其他地址转 ETH 以转移地址中的代币;不能代付 gas ,影响产品体验。
总得来说,双账户设计:
一方面会阻碍 EOA 实现合约账户的功能,另一方面阻碍合约账户实现 EOA 的功能,如 ECDSA 以外的签名验证方式、免助记词、多签管理、社会恢复、聚合签名、交易限制、隐私保护、gas 优化、gas 代付、异币 gas、应用聚合、自动收益等。
长远来看不利于链上行为(如交易)的可编程。
为了解决上述问题,以太坊开发者们提出一个概念:账户抽象(Account Abstraction),也可以说是账户统一。
简单来讲就是把 CA 和 EOA 统一为一个账户。让 CA 可以支付 gas 和执行交易,使之具备 EOA 的所有功能;或者反过来。
基于账户抽象的钱包就是合约钱包。