【问题标题】:How to create a custodial wallet per user on a plateform with Solidity?如何使用 Solidity 在平台上为每个用户创建一个托管钱包?
【发布时间】:2023-01-04 02:52:42
【问题描述】:

我是区块链社区的新人,我要实现一个web 3.0项目。

在这个项目中,我们有一个 ERC20,对于在我们平台上注册的每个用户,我必须创建一个附加到该用户的托管钱包。

用户 A 希望能够将令牌发送给用户 B。

我没有在谷歌上找到具体的东西......所以我可能走错了方向。

我的问题是:是否可以在 Solidity 中使用智能合约来做那种类型的托管钱包,你能解释一下怎么做吗?

【问题讨论】:

    标签: blockchain solidity erc20


    【解决方案1】:

    另外要实现这一点,您将需要 3 个智能合约:

    • 工厂:这是一个智能合约,它有一个函数deployWallet,只能由特定地址调用,很可能是部署者地址。这样做是部署另一个合约的新实例WalletProxy,并将地址存储在到 UUID 字符串的映射中,您可以使用该 UUID 字符串来识别链下数据库中的每个客户。
    • 钱包实现:此合约包含您希望钱包执行的操作,例如 transferERC20、stake、swap 等,可以是任何内容。这将是一份合同,您可以随时换掉并使用另一个具有更新功能的合同,但要小心,您需要理解how upgrades work in smart contracts并设计好版本 1。对于每个创建的新版本,该合约只会部署一次。
    • 钱包代理:这是每次通过调用Factory.sol合约中的deployWallet函数创建新钱包时部署的合约,只能由特定地址调用。它作为每个用户的钱包,它只是一个使用 delegatecall 从 WalletImplementation 调用函数的代理合约,因此在未来,如果有任何更新,如 WalletImplementation V2,它总是可以访问它。棘手的部分还在于以这样一种方式编写它,即只有特定地址才能调用所有已部署的钱包代理合约。

    参考合约:

    当被问及如何使用智能合约创建托管钱包时,我出于相同的演示目的创建了以下合约。

    我还做了一个live session,我在其中使用上述模式构建了一个简单的交换。你也可以在这里浏览完整的代码库https://github.com/CeloTAs/cXchange

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 1970-01-01
      相关资源
      最近更新 更多