背景
Eth包含两类账户, 外部账户和合约账户。
外部账户由私钥控制, 合约账户由合约代码控制。
对于外部账户,发送的每一笔交易,需要包含特定的椭圆曲线(secp256k1)签名,以及nonce,来预防重放攻击。
以太坊的账户抽象,是指统一两种账户类型,以后只有合约一种账户类型。
因此,交易中的需要验证的签名和nonce,不再成为协议的一部分(hard-coded in tx process)。而是由账户通过合约代码自己来保障交易的安全。
The goal of “account abstraction”, is to reduce the number of account types from 2 (EOA and contract) to 1 (just contract), and to move functionality such as signature verification, gas payment and replay protection out of the core protocol and into the EVM.
比如ECDSA 验证合约,提供和当前以太网络类似的交易验证工作。
通过账户抽象,下面是一些可以创新的方向,
- Bitcoin-sytle mutisig, 账户可以同时验证多个签名,而不是每次存储一个签名到内存。
- 其他的椭圆曲线。ed25519。
- 其他的签名算法。环签名/门限签名。
- 其他的Nonce验证逻辑。
- UTXO-based token
- 交易手续费的支付方式。对于dapp而言,相对于交易发送者支付fee,合约账户支付fee 是更合理的模式。通常情况,dapp的用户并没有eth。Dapp合约可以将付费逻辑编码,矿工通过静态的代码分析,从而确保他们会获得交易手续费。
技术规范
EIP 101
- Account 只包含code和storage。
- Ether 不再存储在Account中。Ether是一个合约token,合约部署在0地址中。
- msg.value 不再存在。
- Tx 的结构
现在的Tx,包含9个部分。通过RLP编码后传输。
[nonce, gasprice, startgas, to, value, data, v, r, s]
未来的Tx,包含4个部分。
[to, startgas, data, code]
startgas - max amount of gas allowed for tx
[expire, ref_block, ref_block_prefix, delay_sec...]
进展
EIP101, in discussion
https://ethresear.ch/t/tradeoffs-in-account-abstraction-proposals/263
EIP101方案,代价比较大,包括开发/迁移/额外存储/兼容等等。
几种折中方案,在讨论。
Lazy full abstration/ Remove nonce abstraction/ 等9种方案。
V主推 gasprice + PANIC , 缺点是牺牲gas payment的抽象,从而无法支持ERC20作为gas费用。
时间点, 君士坦丁堡硬分叉
TBD.