随着 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,FTs 和 NFTs 两个标准。
Flow 的另一个特色便是智能合约的可升级性。开发者能够以测试状态部署智能合约,并允许逐步升级。在最后,开发者可以选择发布正式版,并放弃合约控制权。发布正式版后,代码将完全不能篡改。
为了方便用户使用,Flow 支持 Ramp。用户可以在 Ramp 上购买 Flow 网络的 fUSD。
总结
相比上周令人眼前一亮的三链架构,Flow 采用了多角色模型来保证交易速度,并采用面向资源的编程范式。我们可以明显感受到 Avalanche 和 Flow 是为了不同的目的而进行设置的。
相关阅读: