Wallet创建
我们还没有解决的是每个用户的钱包合约最初是如何在区块链上结束的。部署合约的“传统”方式是使用 EOA 发送包含合约部署代码的且没有收件人的交易。这在这里会非常令人不满意,因为我们刚刚做了很多工作来实现它,所以有人可以在没有 EOA 的情况下与链交互。如果用户需要他们自己的 EOA 才能开始,那这一切是为了什么?
需要明确的是,想要钱包但还没有钱包的人最终应该能够在链上得到一个全新的钱包,要么用 ETH 支付他们自己的 gas(即使他们没有一个钱包)或通过找到一个支付他们gas的出纳员(我们在第 2 部分中介绍过),他们应该能够做到这一点而无需创建 EOA。
还有一个不太明显的目标也很重要。
当我创建一个新的 EOA 时,我可以在本地生成我的私钥并在不发送任何交易的情况下认领我的账户。
在我自己发送交易之前,我可以告诉别人我的地址并开始接收 ETH 或代币。
我们希望我们的钱包具有相同的属性,这意味着我们应该能够在我们实际部署钱包合约之前告诉人们我们的地址并接收资产。
Prerequisite: Deterministic contract addresses with CREATE2
在我们实际部署合约之前能够在我们的地址接收资产这一点暗示了我们需要如何实现