# Flow

By [un.Block](https://paragraph.com/@un-block) · 2021-10-09

---

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

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

### **处理速度**

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

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

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

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

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

![](https://storage.googleapis.com/papyrus_images/f6d98b36df47b213db61ebf5729fb86ddc3e41fc41205799677db3e8883c31c0.jpg)

如上图所示，Flow 一共设置了 4 个角色：

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

共识节点所采用的是 Libra 使用的权益证明算法 [_HotStuff_](https://link.zhihu.com/?target=https%3A//tokens-economy.gitbook.io/consensus/chain-based-pbft-and-bft-based-proof-of-stake/hotstuff) 的变体

![](https://storage.googleapis.com/papyrus_images/93813af781fd6e9dc892521f644e088cd7787f7bc6d2e5e11d79d9394fdff4aa.jpg)

### **开发**

Flow 采用了 [_Cadence_](https://link.zhihu.com/?target=http%3A//play.onflow.org/) 作为它的智能合约编程语言。Cadence 使用面向资源的编程范式。资源指的是具有可编程性的安全数字资产。面向资源的编程范式给予开发者创建独一无二耐用数字资产的能力。资产的所有权则由语言本身追踪。这些特性听起来是专为 NFT 和游戏等特别专注于资产所有权的应用量身打造的。

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

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

![](https://storage.googleapis.com/papyrus_images/13692629f6764109af6fa75d46bfbbfaa25443310587d1686e59a7c8e2bd4ef0.jpg)

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

![](https://storage.googleapis.com/papyrus_images/f4fb020c3d13b82b67f9f57883d0e16eb5b043921872c4fc5a51a46c65478aa7.jpg)

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

除了 Cadence，Flow 还提供 Flow Go SDK，Flow JS SDK，VSC 插件，Flow Playground GUI，[_FTs_](https://link.zhihu.com/?target=https%3A//github.com/onflow/flow-FT) 和 [_NFTs_](https://link.zhihu.com/?target=https%3A//github.com/onflow/flow-FT) 两个标准。

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

为了方便用户使用，Flow 支持 [_Ramp_](https://link.zhihu.com/?target=https%3A//ramp.network/buy/%3FdefaultAsset%3DUSDC)。用户可以在 Ramp 上购买 Flow 网络的 fUSD。

**总结**

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

**相关阅读：**

*   [_Flow 入门必读_](https://link.zhihu.com/?target=https%3A//zh.onflow.org/primer)
    
*   [_Flow：为消费 Z 世代而生的高性能公链_](https://link.zhihu.com/?target=https%3A//www.chainnews.com/articles/893535894772.htm)
    
*   [_HotStuff: BFT Consensus in the Lens of Blockchain_](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1803.05069)
    
*   [_Resource-Oriented Programming_](https://link.zhihu.com/?target=https%3A//medium.com/dapperlabs/resource-oriented-programming-bee4d69c8f8e)
    
*   [_Resource-Aware Session Types for Digital Contracts_](https://link.zhihu.com/?target=http%3A//www.cs.cmu.edu/~balzers/publications/digital_contracts_as_session_types.pdf)

---

*Originally published on [un.Block](https://paragraph.com/@un-block/flow)*
