智能合约钱包(Smart Contract Wallet)是指用合约账户作为地址的钱包,例如目前市面上比较知名的Gnosis Safe和Argent。最近,智能合约钱包又因为账户抽象(Account Abstraction)提案EIP-4337的重大进展而再次成为了热议的话题。
我们需要先了解以太坊的账户类型。
1.以太坊的账户类型
在以太坊,一共有两种账户:外部账户(Externally Owned Account,EOA)和合约账户(Contract Account,CA)。
外部账户是目前大多数普通用户使用的账户。外部账户由私钥和公钥组成。私钥代表了控制权,而公钥代表了账户地址。谁掌握了私钥,谁就有了对外部账户的控制权,若私钥一旦丢失、被盗,账户内的资金将无法找回。外部账户可以主动发起交易,并通过ECDSA私钥签名算法的方式验证交易,也可以发起部署智能合约的行为。
与外部账户不同,合约账户没有私钥,只有地址。因此,合约账户转出以太币并不使用私钥签名的方式。合约账户是由代码控制,它不能主动发起交易,只有在被触发后按照预先编写的代码执行交易,而且代码一旦生成,不可修改。
由此可以看出,外部账户和合约账户有个很显著的区别:有无私钥。私钥是普通用户使用外部账户时面临的一个痛点,因为私钥不仅很难记住,而且一旦泄露,账户就将面临被盗窃的风险。如果私钥不慎遗忘,用户也无法恢复账户,账户里的资金无异于石沉大海。
用户
2.智能合约账户与账户抽象
账户抽象是解决上述私钥问题的一个方法。账户抽象是指将签名者与账户分离开来,账户将有自己的逻辑来定义什么是有效交易,不需要用ECDSA私钥签名算法来定义有效交易。
智能合约账户可以很好的达到账户抽象,智能合约钱包可以通过设置代码逻辑,使用非ECDSA的验证算法进行验证,用户不需要面对长长的密钥对和助记词,且可以根据用户的需求进行定制其他功能。
一旦实现了账户抽象,用户可以:
只需更改智能合约代码即可每周更改帐户的签名者。
只需更改智能合约代码即可授权多签。
只需更改智能合约代码即可将交易签名方案从ECDSA更改为任何其他算法。
由此可见,账户抽象将大大提升钱包的用户体验。以太坊对于账户抽象的期望是改变目前大多数人都在使用外部账户的现状,希望用户转向只能合约账户,并且把生态对外部账户的依赖完全去除。