以太坊双账户设计:EOA+CA

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 的所有功能;或者反过来。

基于账户抽象的钱包就是合约钱包。

4337在账户抽象中的地位