Flow

随着 NFT 和 Gamefi 的热度上升,这期我们为大家介绍 Flow - 专为 NFT 和游戏设计的一条链。

Flow 是 CryptoKitties 的开发团队专为游戏和 NFT 设计的一条公链。目前公链上有 NBA Top Shot,育碧 等项目。

处理速度

Flow 采用多角色的架构来提高处理速度。相较于常见的 Layer2,分片。Flow 认为分片使智能合约间的交互更加复杂,容易出错,损害可组合性,无法保证对事物状态的 ACID(原子性,一致性,隔离性和持久性) 的要求。

Flow 意识到验证节点处理不同任务的速度是不一样的。于是他们将验证节点的职责细分,让部分验证节点专注于一小部分的任务。

Flow 将任务分为非确定性任务和确定性任务。

  • 非确定性任务需要更少的计算资源,例如确定区块链中的交易是否存在以及他们的顺序

  • 确定性任务需要更多的计算资源,例如计算交易结果

这样的任务的划分实际上是将计算任务和共识分开。

post image

如上图所示,Flow 一共设置了 4 个角色:

  • 共识节点:确定交易的存在性以及顺序

  • 验证节点:监督执行节点

  • 执行节点:执行交易相关的计算

  • 收集节点:增强 Dapp 的网络连接和数据可用性

共识节点所采用的是 Libra 使用的权益证明算法 HotStuff 的变体

post image

开发

Flow 采用了 Cadence 作为它的智能合约编程语言。Cadence 使用面向资源的编程范式。资源指的是具有可编程性的安全数字资产。面向资源的编程范式给予开发者创建独一无二耐用数字资产的能力。资产的所有权则由语言本身追踪。这些特性听起来是专为 NFT 和游戏等特别专注于资产所有权的应用量身打造的。

在采用面向资源编程之前,Flwo 认为现有的编程环境可以追踪资产所有权,但是不能直接定义所有权。然而区块链公链就应该是为了管稀有资产的所有权。

以下这个例子应该可以让各位读者进一步了解面向资源的概念。

post image

上图是 CryptoKitty 合约的一个示例图。在使用 EVM 的以太坊上,所有的 Kitty 都存储在一个合约里面。想要知道谁拥有某只 Kitty,我们就要查询这个合约里的一个字典。想要更改某只 Kitty 的所有权,我们需要在这个合约里面进行更改。

post image

上图是面向资源的一个例子。我们使用 resource 对象来表示 Kitty。Kitty 直接存储在拥有者的账号里。这就更像是现实世界,拥有者直接拥有 Kitty,而不是得去一个中心化的机构进行查询所有权。

除了 Cadence,Flow 还提供 Flow Go SDK,Flow JS SDK,VSC 插件,Flow Playground GUI,FTsNFTs 两个标准。

Flow 的另一个特色便是智能合约的可升级性。开发者能够以测试状态部署智能合约,并允许逐步升级。在最后,开发者可以选择发布正式版,并放弃合约控制权。发布正式版后,代码将完全不能篡改。

为了方便用户使用,Flow 支持 Ramp。用户可以在 Ramp 上购买 Flow 网络的 fUSD。

总结

相比上周令人眼前一亮的三链架构,Flow 采用了多角色模型来保证交易速度,并采用面向资源的编程范式。我们可以明显感受到 Avalanche 和 Flow 是为了不同的目的而进行设置的。

相关阅读: