Algofans | Algorand爱好者

Algorand的代码第三方评审和测试——InCodeWeTrust团队

VOBCVOBC 2019-05-23 93 次 收藏0

【本文为InCodeWeTrust第三方团队测评和测试:】

Algorand是由密码学先驱、麻省理工学院教授、图灵奖得主SilvioMicali创建的,它的目标是通过一个平台,在无需许可的网络参与条件下提供去中心化、可扩展性以及安全性来解决经典的“区块链不可能三角难题”。

Algorand的无需许可、纯粹股权证明协议(pureproof-of-stake protocol)给为数十亿用户构建系统所需的规模、参与开放和交易终结性提供了支持。

Algorand渴望成为第一个提供完整和即时交易的区块链,并且不需要分叉。这将消除其他区块链中存在的不确定性,并可以为基于Algorand平台的企业提供交易完整性。

Algorand最近向公众开放了它的TestNet,以及他们发布的Java/JavaScript和GolangSDKs。

TestNet资源被收集在一个完美的结构开发网络上(https://developer.algorand.org),并且包含了以开发为目的的用来运营独立节点和设置私人测试网络的所有东西。虽然源代码还没有公开发布在网络上(除了几个安装脚本文件),但是InCodeWeTrust已经获得了访问Algorand的私有代码库的许可,而这就是本篇文章的目的。

ALGORAND网络原则

Algorand的新协议旨在提高速度。从理论上讲,通过只在一轮投票中确定区块是最有效的。因此,应该大大增加每秒的交易量,并且保证每一个区块都立刻被完成。

由于没有安全性的速度并不能提供任何实际价值,Algorand将设计网络协议的重点放在“能够抵御长时间的网络分区,并从这些分区中快速恢复,从而解决现实世界中的许多攻击”上。网络分区是网络级攻击(与协议级攻击相反),攻击者将目标对准用户之间的通信链接,使用户很难或不可能进行交互。网络攻击可以在任何去中心化的系统上执行。无论区块链是如何设计的,如果攻击者足够强大到可以永远停转一个网络分区,那么就不会有任何区块被产出。我们能做的最好的方法就是增加攻击者的区块链停止成本。

在PoW中,最坏的情况是相当糟糕的。两条链将会生成,每个分区各一条。当分割愈合时,较小的链就会消失。出现在那条链的所有交易都将被还原。网络攻击可以说是非常狡猾的。一个熟练而强大的对手可能会允许除特定协议信息之外的所有流量不受干扰地通过,这使得分区检测几乎不可能。

Algorand使用拜占庭协议,但针对全球规模和高性能进行了优化。(传统的BA最多有12个用户,要求参与者预先确定和公开。)这在大于三分之二的多数诚实条件下有效,并且不依赖于参与者有同步时钟。当诚实的信息被传递时,如果当选的领导人是恶意的,那么最坏情况下的延迟协议将在固定数量的步骤后达成,如果当选的领导人是诚实的,那么这个延迟协议将在两个步骤后达成。

该协议对任意长度未知的网络分区都具有较强的恢复能力,并且在分区解析和消息延迟修复后恢复速度较快。因为几乎瞬间从分区中恢复的功能,Algorand 协议使得停转区块链在经济上非常昂贵(因为攻击者需要频繁地为破坏网络付出费用)。

当一个诚实的领导者提出一个交易块时,第一个投票步骤与区块传播并行进行(即网络参与者在收到区块后立即投票)。实际上,在区块通过所有参与节点传播之后,只需要投票这一个步骤就可以生成证书。

为了将共识扩大到更多的网络参与者,Algorand使用了一种基于可验证随机函数的新机制,这个机制允许参与者私下检查他们是否被选中参与下一个区块的协议,而对他们选择的证明也会被包含在网络消息中。

在Algorand的协议中,用户除了私钥之外不保留任何私有状态,这就允许了Algorand可以在参与者发送消息后立即替换他们。这减少了在选定的参与者的身份暴露后而针对他们的攻击。

即使攻击者实现了对网络的完全控制,并指定哪个用户何时接收哪些消息,Algorand协议也不会分叉,用户的余额也将保持安全。

Algorand被设计为在完全无需许可的环境中高效而安全地工作,在这种环境中,任意数量的参与者都可以在任何时候加入或离开网络,而无需任何审查或任何类型的许可。

源代码审查

下面的代码评审完全基于Algorand私有存储库,目前还没有对公众开放。我们要感谢Algorand为我们提供访问权限,让我们作为第一个外部方执行此审查。由于存储库的私有状态,我们不能详细讨论代码逻辑。

代码结构和架构:

• 代码结构良好
•功能清晰
•代码短小
•无workarounds或黑客

代码格式和注释:
•适合13英寸的屏幕,无需水平滚动
•评论是描述性的
•没有代码注释,也没有代码碎片

可维护性:
•代码是自解释的,并为变量/函数命名适当的名称
•可重用性和可测试性得到了很好的支持

代码遵循面向对象的分析和设计原则。文件很短(通常少于300行),并且有重点。开发很直接了当,代码质量也很高。代码遵循可配置性方法,并单独保存可配置值,因此即使值频繁更改,也不需要更改代码。

只需对现有代码进行最小的更改就可以很容易地添加扩展,并且代码是模块化的,因此可以很容易地替换组件。从性能的角度来看,所有使用的数据类型都非常适合它们的用途——例如StringBuilder泛型集合类。

公共区块链项目总是要求高水平的安全性,我们很高兴得看到Algorand在身份验证、授权和数据输入验证方面使用了最佳的实践方法来抵御安全威胁。特别是可以在安全的外部机器上运行的kmd(KeyManagement Daemon密钥管理守护进程)将这个项目提升到了一个更高的层次。

源代码被有组织性地保存在命名优秀和解释恰当的文件夹中。进一步查看选定的文件:

如上例所示,这种类型的注释经常出现在源文件中。它非常准确地解释了逻辑关系,不存在任何被误解的余地,这使得我们对逻辑的进一步预排变得无用武之地。代码遵循典型的开闭原则和SRS(SingleResponsibility Principle 单责任原则)。函数和类构建良好,依赖项作为package来链接。另一点值得一提的是,用于开发中的项目的私有存储库通常没有良好的文档记录,并且缺少自述文件。但Algorand并非如此,即使是私有存储库也有优秀的记录文档。

如此看来团队已经为储存库的公开发布做好了充分的准备。另外我们还注意到存储库使用了docker来统一安装过程。

该项目有2171提交和142个分支,发展得非常好。

在service.go,Algorand将服务定义为协议的实例。这个代码是Algorand共事的核心。

同样,代码也得到了很好的开发和注释。团队还使用TODO标记,它为开发人员创建一个自动的ToDo-list,这使团队易于管理源代码开发。

结论

Algorand由密码技术先驱、麻省理工学院教授SilvioMicali创建,由一群在技术、商业领袖和受人尊敬的技术投资者方面卓有成就的领导者们领导。这显然给Algorand带来了很高的期望,这与我们在规划蓝图的这个阶段从他们的产品中看到的完全匹配。

Algorand业务合作伙伴TOPNetwork是一个在全球拥有6000万用户的全栈去中心化式云通信服务,它积极参与了AlgorandTestNet,并在最近宣布与Algorand合作,为其用户基础构建下一代Layer-2产品。金融和房地产行业的其他现实世界采用案例也在进行中,这告诉我们,Algorand是一款来自客户真实需求的产品,凭借扎实的管理和资金,进入市场的时候将不会有任何问题。
Algorand之前为区块链生态系统引入了几个关键组件,现在已被广泛采用,它通过引入用于网络分区攻击的恢复机制进一步改进了区块链技术,使对手在任何时间中断网络的代价都变得异常高昂。

在测试体验方面,Algorand给人留下了深刻的印象,显示的小故障甚至比来自苹果和微软等全球供应商的软件还少(我们在日常的各种客户项目中都有经验)。就产品成熟度而言,对于TestNet来说,它无疑是我们在区块链领域迄今为止所以、见过的最好的。

良好文档化的代码和开发站点是一个项目的特征,该项目非常重视实际应用,并通过向开发人员和操作人员提供精益体验来支持这一点。我们相信Algorand在技术上和商业上都将取得巨大成功,一旦MainNet发布,Algorand将成为我们有兴趣作为节点运营商参与的为数不多的区块链平台之一。(InCodeWeTrust团队)

 

来自Future小哥哥,微信号ID:Algorand666

本文系作者个人观点,转载请注明出处!
喜欢 0
支付宝扫码打赏
微信打赏

相关文章

更多