跳到主要内容

PlaTrust钱包

前言#

Web3 无疑是近些年最热门的的技术话题。敲开Web3大门的钥匙就是一把私钥,而对于很多还停留在Web2的用户来说,习惯于使用账户名加密码的形式进行登录Web2,私钥则是阻碍Web2用户进入Web3的拦路虎,一长串的十六进制无规则字符或者长传无规则的助记词都会让人觉得头大,而私钥引入的另一个问题就是当私钥丢失后相当于在Web3中的资产丢失,故私钥安全存储就很堪忧。此外,随着公链生态的扩大,dapp越来越多导致gas fee也越来越高,普通用户直接就被巨额的手续费当在Web3的门外。那么在这种场景下有没有一种用户不需要记录私钥或者助记词 (seedless) 和不需要花费巨额手续费 (gasless) 的钱包呢?答案就是委托给别人去做。但是委托给别人就预示这自己在Web3的资产产生不信任危机。这时候,基于 EIP-4337 抽象账户的多签合约钱包就完美的解决了上述痛点了。

主要的应用有如下场景:

  1. 公司和合约可以安全地持有他们的资金,并要求大多数所有者接受转移资金。所以没有一个所有者可以带着钱跑。
  2. 公司可以在大多数所有者的共识下执行敏感交易。
  3. 个人可以使用multisig来拥有钥匙的冗余度。多重认证的一个特性是,如果你丢失了一把钥匙,你可以用剩下的两把钥匙恢复钱包。

什么是PlaTrust钱包#

PlaTrust钱包是一种遵循EIP-4337规范的多重签名合约钱包。它降低了Web2用户进入Web3的障碍,并提供以下主要功能:

  1. 基于阈值的多重签名: 基于指定的阈值以多重签名形式管理资产。
  2. 免多重签名session: 在特定时间窗口内启用免多重签名操作,为用户钱包操作提供便利。
  3. 钱包锁定: 允许在所有者怀疑其账户(设备)被篡改(丢失、被盗等)时对钱包进行锁定。
  4. 自定义模块: 支持用户定义的模块,可添加到钱包中引入自定义扩展。
  5. 钱包恢复: 通过其他所有者发起的多重签名来替换丢失的私钥,恢复钱包的所有权。
  6. 自定义角色控制: 用户可以定义不同的角色信息,以控制钱包中的资产操作权限。
  7. 无需gas: 用户可以在无需支付原生代币作为gas费用的情况下操作钱包。
  8. 钱包升级: 当出现新功能或重大漏洞时,可以升级钱包到最新版本。
  9. 账户白名单: 设置账户白名单,允许某些账户执行跨账户操作或转账而不考虑信任问题。
  10. 抵制审查: 用户完全控制其账户,无需依赖任何第三方服务。
  11. 多链支持: 兼容所有EVM兼容的公共区块链,确保在不同EVM兼容的区块链上具有相同的钱包地址。

功能概述#

1. 基于阈值的多重签名#

解释#

PlaTrust钱包是基于EIP-4337规范的多重签名合约钱包。它支持多个所有者,并根据多重签名阈值提供各种钱包操作。多重签名的概念如下所示:

对于每个钱包操作(特别是资产管理),必须由至少阈值数量的所有者签名。只有收集到所需数量的所有者签名,钱包操作才能成功执行。

功能和用例#

  1. 在丢失私钥时最大限度保护资产: 通过持有多个私钥,用户可以显著降低由于单个私钥丢失或被盗而导致资产丢失的风险。即使其中一个私钥受到威胁,资金仍然安全。
  2. 通过多重验证防止错误交易: 当用户发起交易时,其他私钥持有者可以通过拒绝签署交易来防止执行错误的交易。参与验证过程的人越多,发生错误交易的可能性越低。
  3. 便于集体决策和仲裁: 当许多联署人共同维护密钥时,资金控制变得更加安全和有组织。在这种格式下,只能形成和执行一致的决策,有效实施良好的决策。
  4. 分散窃取风险: 通过将密钥分布在不同的地理位置和多个设备上,用户创建了一个安全的环境。黑客无法破解多个分散的密钥,从而将加密资产安全地保留在用户手中。

2. 免多重签名 session#

解释#

在某些情况下,多重签名会为操作带来不便。每次执行钱包操作时,都需要满足多重签名阈值的签名才能生效。如果用户希望在特定时间窗口内执行多笔交易,并寻求豁免多重签名并获得其他所有者的许可,可以通过创建免多重签名 session来实现。session定义了由特定所有者持有的临时session key,只要session key有效,持有session的所有者就可以使用它绕过多重签名并执行任何钱包调用。session的持续时间由所有者在创建时定义,并且session key将在session结束时自动过期。

启动session需要满足多重签名阈值的签名。钱包的所有者可以在其过期之前随时关闭session。

功能和用例#

  1. 为特定时间窗口内的操作提供便利: 在有效时间窗口内,持有session的所有者可以在无需其他所有者参与多重签名的情况下操作钱包。
  2. 唯一性: 在给定的时间窗口内只能存在一个session,并且只有指定的所有者可以持有session,其他所有者不能豁免多重签名调用。
  3. 时效性: session具有特定的有效时间窗口,session key将在有效期结束后自动过期。
  4. 可中断: 在session的有效期内,持有session的所有者可以在无需多重签名的情况下关闭session,或者其他所有者可以通过多重签名关闭session。

3. 钱包锁定#

解释#

该钱包支持锁定功能,允许所有者在怀疑其帐户(设备)存在问题(丢失、被盗等)时发起锁定期。在钱包的锁定期间,只允许执行特定的受限操作,如解锁过程。所有其他操作(更改owner、更改多重签名阈值、资产转移等)都将被阻止。在安全期结束前解锁钱包,所有者需要发起多重签名解锁以触发钱包的解锁。

功能和用例#

  1. 保护资产安全: 当怀疑钱包存在安全问题时,可以锁定以防止潜在的资产转移。
  2. 限制钱包操作: 当钱包受到攻击时,可以锁定以限制钱包调用。

4. 自定义模块#

解释#

在PlaTrust钱包中,用户可以扩展自定义功能组件到钱包中。通过部署自定义模块合约,并通过"enable module"函数在钱包中启用它们,用户可以为钱包激活自定义功能组件。用户可以从自定义组件调用函数,并最终通过executeFromModule函数从模块对钱包进行调用。值得注意的是,每个钱包合约实例在创建时都将设置EIP-4337入口合约RelayerManager为默认模块,并且RelayerManager不能被移除。

功能和用例#

  1. 可扩展性: 用户可以向其钱包附加自定义功能组件,为钱包带来各种扩展。
  2. 即插即用: 除了内置的EIP-4337入口合约RelayerManager之外,其他自定义模块可以自由启用和禁用。

5. 钱包恢复#

解释#

合约钱包最终仍然需要一个外部拥有账户(EOA)来执行操作。如果控制合约所有者的私钥没有妥善保存,可能导致私钥丢失。当控制合约所有者的私钥丢失时,用户失去对钱包的控制权。为了防止这种情况发生,钱包包含了钱包恢复功能。当所有者的私钥丢失时,用户可以发起钱包恢复功能,用新的私钥替换旧的私钥,重新获得对钱包的控制权。更换新私钥需要来自钱包中其他所有者的多重签名,并且签名数量必须满足多重签名阈值。

功能和用例#

  1. 防止用户因为丢失所有者私钥而失去对钱包的访问。

6. 自定义角色控制#

解释#

在许多业务场景中,需要根据不同的权限精细划分钱包的功能,比如 admin用户可以做什么,manager用户可以做什么等。细粒度的功能权限有个优点,不同角色可以执行不同的功能,确保每个角色履行自己的责任。在PlaTrust钱包中,用户可以添加各种自定义角色和权限,并指定每个权限角色可以调用的功能,实现细粒度的功能权限控制。

功能和用例#

  1. 支持细粒度权限控制。
  2. 方便管理和扩展权限。

7. gasless#

解释#

PlaTrust钱包是基于EIP-4337的多重签名合约钱包,EIP-4337标准原生支持"元交易"。当钱包的所有者执行与钱包相关的功能时,他们会组装和签署所谓的"UserOperation"消息,然后将用户操作传递给相关的"Bundler"服务以进行组装和提交用户操作作为区块链交易。对于钱包所有者,他们只需要用相应的所有者私钥签署"UserOperation"消息,而无需发送实际的区块链交易。因此,他们不需要支付任何gas费用。对于Bundler服务,当收到用户操作并收集到所需的多重签名时,它会将用户操作和多重签名组装成区块链交易,并提交到链上,从而产生gas费用。Bundler提前支付的gas费用要么由钱包本身持有的代币支付,要么由付费人填充。因此,对于钱包用户(所有者),PlaTrust钱包具有无gas费的特性。

功能和用例#

  1. 当gas费用越来越高时,允许用户继续使用钱包而不受gas费用影响。
  2. 促进MEV(矿工可提取价值)的公平提取,鼓励社区加入构建第二层解决方案,特别是维护Bundler的运营者。
  3. 降低Web2用户使用钱包的障碍。

8. 钱包升级#

解释#

合约钱包本身是人类编写的智能合约,由人类编写的代码可能存在漏洞。一旦智能合约部署到链上,它对所有用户都是透明的,无法轻易修改或撤销。因此,在遇到重大的安全漏洞或恶意攻击时,升级是必要的,以修复缺陷。对于用户来说,钱包的链上地址保持不变,但功能已经切换到升级后的逻辑。

功能和用例#

  1. 功能变化的灵活性。
  2. 修复安全漏洞的能力。

9. 帐户白名单#

解释#

钱包的白名单旨在促进业务使用,并基于一定程度的信任提供用户的便利。白名单进一步分为dapp白名单和帐户白名单。添加到dapp白名单的合约地址可以直接以信任调用。同样,帐户白名单地址可以直接执行转账操作。

功能和用例#

  1. 提供便利性。
  2. 基于信任前提。

10. 抗审查性#

用户可以通过SDK将钱包的功能直接连接到自己的应用程序,无需依赖任何第三方,可以直接使用自己的钱包。

11. 多链支持#

钱包使用create2操作码部署,允许基于相同的输入参数创建相同的合约地址(也称为“反事实地址”)。这样的好处是在钱包合约实际部署在各种EVM兼容的区块链上之前就可以知道钱包地址,从而可以提前对钱包进行资金预留。此外,在许多跨链项目中,在多个不同的区块链上具有相同的合约地址有助于在不同链上实现钱包帐户管理。

参考#

  1. https://eips.ethereum.org/EIPS/eip-4337