un.Block

Posted on Oct 09, 2021Read on Mirror.xyz

Flow

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

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

处理速度

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

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

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

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

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

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

  • 共识节点:确定交易的存在性以及顺序
  • 验证节点:监督执行节点
  • 执行节点:执行交易相关的计算
  • 收集节点:增强 Dapp 的网络连接和数据可用性

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

开发

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

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

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

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

上图是面向资源的一个例子。我们使用 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 是为了不同的目的而进行设置的。

相关阅读: