与传统意义上的钱包账户不同, AA账户本身实现了账户和签名器的分离,所以钱包地址不再是我们理解的签名器的地址,而是一个专门的账户地址,而且值得注意的是,这个账户地址因为是一个智能合约,所以他需要被部署到区块链上才能使用。但幸运的是,ERC4337定义了标准,让账户地址在账户只能合约部署之前就能得到。
这篇文章讲详细解释ERC 4337账户的创建以及部署:
账户的创的目的是得到一个账户地址。整个过程需要一下模块的交互:
账户工厂:账户工厂的作用是用来创建账户的,但往往创建过程不是直接的账户工厂的调用。账户工厂未来保证创建账户地址的可预测性,会使用CREATE2方法来创建
Example:

他需要一下步骤来完成:
getAccountInitCode:通过链接账户得到账户工厂的address,以及账户工厂账户创建的callData,把这两个数据组合到一起得到账户initCode

调用EntryPoint → getSenderAddress,传入initCode,getSenderAddress内部会解析这个initCode,并且解析工厂合约的地址和callData,用call方法来执行账户创建并得到相应的地址

部署账户调用EntryPoint的handleOps 来完成,这是所有transaction的入口。账户部署和其他的transaction的区别在于:账户部署时,提交的UserOperation里边包含账户的initcode:
下边是账户部署提交的UserOperation的示例:


