在消费者区块链的世界里,有两种常见的区块链密钥管理模式:用户保管(或自我保管)和应用保管。
用户监护被认为是Web3社区的默认和最佳选择。用户将自己的密钥保存在自己控制的设备上(通常是笔记本电脑或手机),对该密钥的访问由称为 "钱包 "的软件管理。向用户提供区块链服务的应用程序向钱包提出请求,钱包在执行之前审查并向用户提出请求供其批准。这具有自我主权的优势,它让用户对他们的资产有绝对的控制权,同时为他们提供充分的保护,避免因服务提供商失败或受到攻击而导致资产损失。
对于刚接触Web3的用户来说,设置自我托管是令人困惑的,并产生摩擦。用户在还没有使用需要钱包的应用程序之前,就被期望安装和配置他们的钱包软件。如果你已经在Web3领域工作了一段时间,你可能不记得被要求记住12个随机单词,然后将 "完全访问所有网站 "授权给一个你从未听说过的软件的混乱情况。这种情况在手机上更糟糕,用户习惯于在没有任何形式的账户创建的情况下开始使用(尤其是不需要安装第二个应用程序的账户!)。Dapper Wallet和其他公司已经尽力简化这一过程,但数据显示,这仍然是用户入职的一个主要落脚点。
为了消除这种摩擦,大量的应用开发商正在为他们的用户提供托管。"应用托管 "为用户提供了一个非常自然的、Web2风格的入职体验,并允许应用供应商使用传统的支付方式(如网络上的信用卡或移动端的原生应用内购买)销售他们的数字产品和服务。这种方法对于移动端和已经拥有账户登录的客户群的公司(如Netflix或Spotify)特别有吸引力。
应用托管还有一个好处:应用不需要通过钱包来纠缠用户的权限。应用程序软件可以直接管理他们为用户创建的账户内容。例如,如果用户在手机游戏中使用应用内购买(IAP)购买了一个链上项目,他们不希望每次与该项目互动时都要跳回他们的钱包来批准。
尽管应用托管在创造良好的入职体验和简化与游戏及其他应用服务的互动方面很有价值,但它导致每个应用成为一个孤立的岛屿。区块链资产的力量在于,用户可以把它们从最初创造它们的体验中拿出来,在其他兼容的应用中使用,比如点对点交易市场,或者在扩展现有体验的新产品中使用。
试图弥合这一差距的一种方法是要求用户从应用托管开始,当他们对Web3生态系统有足够的经验,让自己有一个自我托管的钱包时,他们可以将资产从应用管理的账户中转移到他们的私人钱包中。
这引入了自己的困难。应用内部的世界(应用托管账户)和应用外部的世界(用户托管账户)是断开连接的。应用程序世界看不到--甚至不能请求访问--用户托管账户中的资产。而且,如果不把Web3应用从应用托管账户中删除,用户就不能使用这些应用的世界,而这些应用在那里应该是非常有用的!最糟糕的是,如果应用程序提供商关闭,用户可能会失去应用程序托管账户中的所有资产,而且没有恢复的可能性。
幸运的是,有一种方法可以让我们两全其美。
通过使用账户抽象--具体而言,账户委托--一个区块链账户("子账户")可以将控制权委托给另一个账户("父账户")。按照惯例,子账户可以使用加密密钥进行访问,但父账户的所有者也可以直接访问子账户的资产。重要的是,授予授权的账户("子账户")必须明确提供这种访问,并可以在任何时候以任何理由撤销这种访问。
这种联系让我们创建了一个应用托管和自我托管的混合体,提供了两者的全部好处。一个新用户,如果没有自我监护账户,可以在没有任何钱包软件的情况下注册一个新账户。但是,当他们准备好自我托管时,他们可以将应用托管账户的控制权委托给自我托管账户。使用他们自己的钥匙,在他们自己的设备上,他们可以访问两个账户中的所有资产,同时仍然允许应用程序管理孩子账户中的资产,而无需调出钱包软件。
由于这种委托关系是在链上跟踪的,应用程序可以看到与父账户的连接,并可以看到该账户中的资产以及与之相关的其他子账户。它可以向钱包软件请求临时访问这些资产(使用标准的交易签名请求),甚至可以提议将这些资产转移到应用托管账户中,以允许持续访问。
要了解更多关于账户抽象化和Flow的混合托管的信息,请访问http://flow.com/hybrid-custody。