随着比特币的成功,人们逐渐意识到区块链技术的潜力,并随之出现了迅速的发展,各种区块链协议、应用程序和平台相应产生。
需要指出的是,在这种多元的局面下,很多项目迅速失去了它们的吸引力。事实上,有不少项目只是打着创新的幌子,在玩 ”击鼓传花“ 的古老把戏或者干脆就是 “骗局”。根据 Dead Coins 网站的统计,超过 70% 数字货币都已经没有什么成交量或市值彻底归零,大量区块链项目都已经死亡或者名存实亡。当然,也有一些项目已经成功地在自己的领域创造了稳固的地位。
1. Kadena
Kadena 是一个私有区块链,它已成功地解决了区块链系统中的可伸缩性和隐私问题。Kadena 还引入了一种新的图灵不完备语言,称为 Pact,可以开发智能合约。Kadena 的一项关键创建是其可伸缩 BFT 共识算法,它有潜力扩展到数千个节点而不会降低性能。
1.1 可伸缩性和机密性
可伸缩 BFT 算法基于原始的 Raft 算法,是 Tangaroa 和 Juno 的后继产品。Tangaroa 因具有容错功能的 Raft (BFT Raft) 的实现而得名,其开发目的是解决由于 Raft 算法中拜占庭节点的行为而引起的可用性和安全性问题,Juno 是 Tangaroa 的分支,由 JPMorgan 开发。
这两个算法都有一个基本的局限性--它们无法在保持高水平、高性能的同时进行扩展。因此,Juno 无法获得太大的吸引力。私有区块链具有随着节点数量增加而保持高性能的更理想的属性,但是上述算法缺乏此功能。 Kadena 则通过专有的可伸缩 BFT 算法解决了这一问题,它可以扩展到数千个节点,而不会降低性能。
此外,Kadena 还解决了机密性问题,它使在区块链上保持交易的隐私性成为可能。通过结合使用密钥轮换(Key Rotation)、对称链上加密(Symmetric On-Chain Encryption)、增量哈希(Incremental Hashing) 和 Double Ratcher 协议即可实现此安全服务。
密钥轮换可用作确何私有区块链安全的标准机制。最好的做法是,通过定期更改加密钥来阻止试图破坏密钥的任何攻击。Pact 智能合约语言可对密钥轮换提供本地支持。
对称链上加密允许对区块链上的交易数据进行加密。特定私人交易的参与者可以自动解密这些交易。
Double Ratcher 协议可用于提供密钥管理和加密功能。
1.2 Kadena 的共识机制
可伸缩 BFT 共识协议可确保在智能合约执行之前已实现足够的复制和共识。通过循环以下过程即可达成共识。
交易在网络中发起和流动的方式如下:
(1) 新交易由用户签名并在区块链网络上广播,由领导者节点接管,并将其添加到其不可变日志中。
在这个阶段,还将为日志计算增量哈希。增量哈希是一种哈希函数,它允许在这样场景中计算哈希消息:如果已被哈希的先前的原始消息略有更改,则根据已经存在的哈希计算新的哈希消息。与传统的哈希函数相比,该方案更快,资源占用更少。在传统的哈希函数中,即使原始消息仅发生了很小的变化,也需要生成一个新的哈希消息。
(2)领导者(Leader) 节点将交易写入日志后,它将签署复制和增量哈希,并将其广播到其他节点。
(3)其他节点在收到交易后,验证领导者节点的签名,将交易添加到自己的日志中,并向其他节点广播自己计算出的增量哈希(法定证明)。最后,在从其他节点收到足够数量的证明后,交易将永久被提交到帐本。
下图显示了此过程的简化版本,其中领导者节点将记录新交易,然后将它们复制到跟随者(Follower)节点。
原文 | 译文 | 原文 | 译文 |
USER | 用户 | REPLICATE | 复制 |
TRANSACTION | 交易 | NODE | 节点 |
BLOCKCHAIN | 区块链 | VERIFY | 验证 |
LEADER NODE | 领导者节点 | OTHER NODES | 其他节点 |
LEDGER | 帐本 |
1.3 Pact 语言
一旦达成共识,就可以开始执行智能合约并采取许多步骤,如下所示:
(1)验证消息的签名
(2)Pact 智能合约层接管。
(3)Pact 代码已编译
(4)交易初始化并执行智能合约中嵌入的任何业务逻辑。如果发生任何故障,将立即回滚,将状态恢复到执行开始之前的状态。
(5)交易完成并更新相关日志。
注意: Pact 已由 Kadena 开源,其下载地址如下: https://kadena.io/pact/downloads.html |
可以下载提供 Pact 语言的 REPL 的独立二进制文件。下图显示了一个示例,通过在 Linux 控制台中发出 ./pact 命令来运行 Pact。
用 Pact 语言编写的智能合约通常由 3 个部分组成:键集、模块和表。对这些组成部分的描述如下:
- 键集(Keyset):本部分定义了表和模块的相关授权方案。
- 模块(Module):本部分以函数和 Pact 的形式定义了包含业务逻辑的智能合约代码。模块内的 Pact 由多个步骤组成,并按顺序执行。
- 表(Table): 本部分是模块内定义的访问控制的构造。只有在管理员键集中定义的管理员才能直接访问此表。默认情况下,模块中的代码被授予对表的完全访问权限。
Pact 允许若干种执行模式。这些模式包括合约定义、交易执行和查询。对这些执行模式的描述如下:
- 合约定义(Contract Definition):此模式允许通过单个交易消息在区块链上创建合约。
- 交易执行(Transaction Execution): 此模式需要执行代表业务逻辑的智能合约代码模块。
- 查询(Querying): 此模式仅涉及探测数据合约,并且由于性能原因在节点上以本地方式执行。Pact 使用类似于 LISP 的语法,并在代码中准确地表示将在区块链上执行的内容,因为它人类可读的格式存储在区块链上。这与以太坊的 EVM 相反,后者被编译为字节码以供执行,这使得区块链上正在执行的代码很难验证。Pact 是图灵不完备的,支持不可变变量,并且不允许空值,从而提高了交易代码执行的整体安全性。
以下示例显示了一个简单的加法模块,该模块定义了一个名为 addition 的函数,该函数带有 3 个参数。执行代码后,它将 3 个值相加并显示结果,如下图所示:
运行代码时,它将产生如图所示的输出: