Flow Community Rewards are here. Earn points for engaging in the ecosystem, spend points on prizes. Learn more.
开发者生态
2023年2月16日
Flow的账户模式为用户提供真正的所有权
Ramtin Mehdizadeh Seraj
Flow的账户模式为用户提供真正的所有权

本文包括Ramtin Mehdizadeh Seraj和Layne Lafrance的贡献。

真正的所有权
是一种承诺,即个人可以随时随地通过广泛的服务提供商获得他们所重视的东西。这一承诺的价值首先通过比特币得到了验证,并再次通过以太坊得到了验证--两者都提供了一个无缝获取价值的机会。但是,不幸的是,两者都不能完全实现我们现在知道的需要填补的承诺......15年后。 

比特币的所有权仅限于账本上可以捕捉到的东西(UTXO模型),这意味着它可以将你的钥匙附加到一个值上,而且只有你的钥匙可以提交交易来改变这个值,但是,如果你失去了你的钥匙,你就会沉没。

基于EVM的区块链,如以太坊,采取了不同的方法,采用了合约模式,让开发者使用区块链来管理更复杂的用户价值关系,可以严格地在账本上捕获。这改进了真正的所有权承诺,因为它扩大了用户可用的价值;较小的加密货币(如2017年臭名昭著的ICO期间发行的货币)能够代表和捕捉一小群人的具体需求和愿望,并确保该小群人能够在他们之间执行可赎回性,即使更广泛的网络代币(这些例子中的ETH或BTC)的接受度急剧下降。这是一个巨大的进步!

然而,合约模式存在一个重大缺陷--它重新创造了一个加密货币最初旨在避免的经济体系--一个由小伙伴决定你的价值命运的体系。智能合约为开发者提供了很多自由,既可以为客户提供服务,也可以偷窃客户,不幸的是这就是合约模式的本质。在以太坊上,与任何你有价值的东西互动都需要核心合约的批准,而核心合约是为你持有价值的--你的所有权是由那些开发者定义的规则和对其核心智能合约的参考来决定的,而不是真正的加密控制。

真正的所有权 在数字领域,归根结底是一个项目的不可撤销性,从你的占有,没有你的明确同意。换句话说,它是一种权利、自由和能力,可以在没有另一方(例如你使用的应用程序)的批准下访问你拥有的物品。 不可撤销性在形式上由一个独立于任何单一政府或机构的系统来保证--公共区块链倾向于填补这一空白。Flow就是这样一个系统,一个公共区块链(又称平台),它支持、执行并实现对数字项目的不可撤销的访问。Flow对其他链的改进之处在于,确保对这些物品的访问最终完全属于用户的权力和权利--而不是任何为其服务的应用程序。 Flow旨在为所有参与者提供真正的所有权--不可撤销的、自主的(数字)物品访问权,在这篇文章中,我们将解释它是如何做到这一点的。但是,如果你正在寻找 

Tl;dr

账户模型是一种定义所有权和访问权的方式,这样一来,价值总是可以被用户使用,受到系统中一流的安全保护,并且开发者可以安全地访问--这意味着他们可以利用用户账户提供服务,但在提供该产品或服务的过程中,未经用户明确许可,他们不能从用户的账户中删除价值。Flow的账户模型建立在合同模型的重要理念之上,并且在很大程度上仍然以智能合约为中心,但有一些重要的区别我们将详细介绍导致Flow重新考虑行业标准的观察和动机,并在下面详细介绍Ethereum基于EVM的合约模型和Flow基于FVM的账户模型之间的差异。 

1.访问管理

与目前基于EVM的账户支持的内容(如Ethereum、Polygon、Avalanche上的账户)相比,Flow账户的好处之一是强大的访问管理功能。这些原生支持的账户管理功能通过设计解决了许多问题,并确保开发者和用户在默认情况下能够获得最佳的安全实践。下面是一些属性的列表。

支持每个账户的多个密钥 

每个Flow账户可以由多个公钥控制。每个附属于账户的公钥都被分配了一个唯一的紧凑型ID,用于交易(账户地址和密钥索引的组合)。这允许在不同账户上重复使用相同的公钥。使用Flow账户上的有效密钥,用户可以在任何时候添加/撤销密钥。这允许用户轮换他们的钥匙,并撤销一个其私钥可能有风险的钥匙。 

在基于EVM的账户中,只有一个公钥被允许控制一个账户,这个公钥在设置时就被设定好了,不能被旋转或改变。在一个密钥存在潜在风险的情况下,用户必须建立一个新的账户,并且必须将所有资产转移到新的账户,这是一个非常昂贵和耗时的过程。 

支持每个账户的多个密钥的另一个好处是从多个地点控制一个账户。目前,从多个设备上控制一个EVM账户的唯一方法是将私钥种子从一个设备上提取出来,并将其转移到其他设备上。这引入了不必要的风险,而且在现代设备上的签名硬件模块领域,如安全飞地,也可能不是一个理想的选择。与其把你的钥匙从你的笔记本电脑复制到你的手机上(这使它们暴露在许多形式的恶意软件面前),你的笔记本电脑和手机在每个设备上都有私人钥匙生成,这些钥匙永远不需要离开。

原生支持关键权重 

当一个应用需要多方协调时(如DOA),某些操作在执行前需要多个密钥的签名往往是有用的。

让不同权重的钥匙参与控制一个账户,既支持技术上的冗余(多人授权在一个组中进行修改),也支持财务上的安全(例如,要求一个账户的多个持有人在提取资金前签字)。这不是EVM原生支持的,但已被证明是现代web3堆栈中的一个必要功能,Gnosis Safe和Argent Vault的流行就是证明。

每个连接到Flow账户的公钥都有一个固定的权重(范围:1-1000),如果一个账户拥有超过1000个有效签名的权重,那么它就被授权用于交易的背景。支持权重可以实现许多应用,如阈值签名(例如,一个账户有5把钥匙,每把钥匙的权重为335,可以分配给5个实体,允许阈值签名为5个中的3个)。

EVM账户缺乏对这些属性的原生支持,迫使用户部署和依赖智能合约钱包,而这些钱包的部署和使用通常非常昂贵,而且大多数时候会导致安全风险,如 Parity的多签名钱包黑客,或 Parity用户触发的钱包冻结。 

原生支持工业标准的签名算法和设置

流动账户被设计为支持使用各种加密签名算法(如ECDSA、EdDSA...)和不同的设置(如不同的曲线)进行授权。 

正如你可能已经注意到的,大多数区块链的最先进的安全性需要购买一个定制的硬件设备来进行密钥管理(Ledger是最著名的例子)。

也许是由于历史上的一个意外,比特币和其他区块链选择了使用一种不太常见的密钥签名设置(secp256k1曲线),这使得他们的密钥与今天广泛使用的签名算法(P-256曲线)不兼容。在比特币推出后的几年里,安全研究人员已经得出结论,"加密流行 "曲线和 "行业标准 "曲线都可以安全使用。Flow决定让用户决定他们更喜欢哪个。

因此,Flow与Ledger和其他加密专用硬件加密设备配合得很好,但它与你口袋里已有的硬件加密设备也同样配合得很好!这就对了。Flow允许你使用几乎所有智能手机甚至许多现代笔记本电脑中包含的硬件安全飞地。完整的、军事级别的硬件安全,与你已经拥有的设备一起使用。

缺乏EVM对各种设置的原生支持,限制了用户和开发者只能在链上实现签名验证,这非常昂贵,有时甚至不可能在单笔交易中实现,因为它可能导致高达一百万的气体消耗,而交易的最大气体限制远远小于此。

以太坊社区也在 "账户抽象 "的总称下朝着这些功能发展,并计划通过智能合约引入这些功能。我们期待看到这一提议的最终确定和采纳,以便以太坊用户能够获得这一功能,尽管在智能合约层面实施这一功能的额外气体成本仍不清楚。

2.地址分配

如上一节所述,Flow账户允许每个账户拥有多个密钥,自然与基于EVM的账户地址不同,Flow的地址不是从公钥派生出来的,每个Flow账户在创建账户时都被分配了一个独特的、可验证的地址。这提供了许多好处,下面将讨论。

独特、紧凑和可核查的

每个分配的Flow地址在设计上都有一个强大的方法来验证地址烘托的正确性。每个地址都由一个16进制字符(不区分大小写)和内部校验和表示,以防止在输入账户时出现意外错误。由于网络分配了这些唯一的地址,所以没有必要有很长的地址。 

相比之下,EVM地址来自于公钥,为了防止账户地址的潜在碰撞机会,它必须被表示为一个非常长的40-hex字符串。 虽然有一种对账户地址进行校验的方法,但它需要以适当的区分大小写的方式发送地址,而这在大多数情况下不是被开发人员和用户所知,就是签署交易的平台经常接受小写版本。这导致了资产转移到错误的地址没有人持有任何钥匙。如果你检查 这个以太坊账户,你会发现,当不小心把目的地留空时,有人不小心把资产发送到这个账户,这是很频繁的错误。许多资产最终都在这个账户中,使其成为一个大彩票,当某人成功生成一个可以拥有该公共地址的私钥时,可能会赢得1天。这在Flow上是不可能的,因为并不是每一个十六进制字母的组合都是有效的地址,如果一个用户不小心试图将资产发送到一个无效的地址,交易会优雅地失败,资产不会被锁定或丢失。 

针对网络的分配

Flow地址的另一个好处是它是针对网络的,也就是说,在Flow的Mainnet网络上有效的地址在Flow的Testnet上是无效的。
请注意,这并不意味着你不能在多个网络上使用同一公钥,你仍然可以将同一公钥附加到多个网络上的多个账户上,但它通过设计提高了Flow账户的安全性,同时保持了灵活性。 

如前所述,EVM地址来自公钥,如果公钥在多个网络上使用,它们会产生相同的地址。我们已经看到很多时候,开发者或用户不小心将交易发送到以太坊主网而不是测试网络,导致资金的不幸损失。

缓解虚假账户创建问题

许多区块链应用及其开发者每天都要处理假账户。无论是做代币投放作为对应用的早期用户的感谢,还是通过多样化的代币分配来保证DAO的安全,都要假设账户不是假的。但不幸的是,生成公钥/私钥对任何人都 没有成本,因此,任何愿意用这些账户做什么的人都会构建大量的账户。如此多的账户被创建,没有任何资产,只是为了从代币掉落中获益,引来了Sybil对dapp的攻击。

这一点已经通过Flow的存储模型得到了解决--Flow账户地址在账户创建时分配,前提是新创建的账户已经存入了FLOW(Flow网络的本地代币)的最低余额。这种存款是相对于账户使用的存储而言的,但有一个最低限度,这缓解了前面提到的大量账户创建和相应的攻击问题。 

3.合同存储

流动合约存储模型在实用性、安全性和可组合性方面极大地推动了智能合约的发展极限。列出了其中的一些特点。

每个账户存储多个合同 

每个Flow账户可以存放任意数量的合约。每个合约都被储存在一个账户下的唯一名称下。这使得像NBATopShot这样的信誉良好的账户上的智能合约的可信度检查变得更加容易。与EVM模式相比,Flow的合约存储模式更加自然和灵活,在EVM模式中,每个账户只能是以下一种类型:不能持有任何合约的外部账户,或者只能持有单个合约的合约账户。在EVM世界中,如果你需要部署多个合同,你必须创建多个合同账户。 

开放源码的智能合约

Flow上的每个合约都以源代码的形式存储在Cadence中,并对外界任何人公开提供。源代码的链上存储,而不是编译的字节码,使开发人员和用户更容易审查合同的内容,防止恶意活动。它还为可组合性打开了空间。在以太坊等基于EVM的区块链上,合约代码不存储在链上。只有合约的编译程序存储在链上,这需要外部应用程序接受来自社区的源代码,并将其与存储在链上的字节码进行交叉引用。这有时为恶意活动打开了大门,使实际代码不被用户发现。人们可以声称这可以为程序提供隐私,尽管根据我们的经验,几乎每一个字节码都可以被分析和反编译,但比你对 "公共、开放的区块链 "所期望的更加努力和复杂。

可升级性

修复漏洞的更新和解决漏洞的补丁是维护任何软件的安全和活力的必要行动,web3应用程序也不例外。Flow提供了一种安全的方式来升级智能合约,同时保护用户资产。一个智能合约是一个代码(其功能)和数据(其状态)的集合。在Flow上,数据直接存储在用户账户下,而不是住在合约内,这使得可以选择更新代码而保护数据。对代码的更新也必须遵循一套特定的规则,以防止意外的错误和恶意的行为。随着时间的推移,一个去中心化的应用程序的基础变得更强大,没有错误,而且项目的社区也在增长,合同所有者可以选择锁定合同,以备将来更新。 

在EVM的世界里,每个合同都是永远不可改变的,而且不能升级。对合同的唯一可能的改变是通过调用 "自我毁灭 "来删除,这可能会导致用户资产的损失,看来它的危害比好处更大。 

待续...

这些设计决策还有更多内容,特别是账户如何存储数据(代码和数据的分离,存储路径,能力,仅举几例),以及交易如何形成(支付方和授权方的分离,支持多个授权方,过期),这将在一系列后续文章中涉及。