原文标题:《Introducing Clarity, a language for predictable smart contracts》

作者:Aaron Blankstein

译者:FYJ

本文转自区块律动

Blockstack 发布了针对预测类智能合约的安全性进行了专项优化的脚本语言 Clarity。截至目前,140多个Blockstack应用程序已经可以直接在其产品中部署智能合约。

Clarity目前正面向开发人员试用。请在 Github 上查看文档和SDK,他们正渴求开发者社区的反馈,并欢迎任何bug报告。

智能合约允许开发人员在区块链上实现基本的业务逻辑。这些合同以开放,可验证和安全的方式执行, 而没有必要通过第三方。智能合约是一种实用的编程范式,但它只在特定情况下是不可或缺的。不用智能合约同样可以构建许多有用的应用程序,我们强大的开发者社区已经在Blockstack上构建了140多个应用程序(仍在增长!),而未涉及任何智能合约技术。

今天,我们通过引入Clarity(Blockstacks的智能合约语言),为Blockstack应用程序启用智能合约功能迈出了第一步。

Clarity 的设计哲学

就像原生支持并发编程、精心设计的智能合约可以防止bug发生,而设计不合理的合约在调试中可能会出现难解的bug。鉴于智能合约为人们管理着数十亿美元,我们为 Clarity 制定的设计哲学是——所见即所得,Clarify 的语义能让我们更清晰地窥见智能合约的行为、开销与性能。

Clarity 是一种可判定语言,如果你可以确定地从代码本身知道程序将产生怎样的执行效果,那么这种编程语言就是可判定的。Clarity 有意被设计为图灵不不完备,因为它避免了“图灵复杂性”。这使得对于给定的智能合约,我们可以对其的整个执行调用逻辑进行完整的静态分析。此外,我们对类型和类型检查器的支持可以消除所有类型的错误,如无意的强制类型转换,重入锁错误和未初始化值的读取。最后,你可以分析Clarity代码的运行时的成本和数据使用情况。这使开发人员能够预测给定的Clarity程序将如何执行,以及它的性能花销。

区块律动BlockBeats注:图灵完备性指,具备顺序、判断和循环三种执行逻辑,并能够在理论上能够实现所有复杂计算的算法的性质,以太坊的智能合约语言Solidity就是一种图灵完备的语言,因此容易受到循环逻辑炸弹等类型的黑客攻击。)

当DAO被黑客攻击时,解决方案往往是一个有争议的硬分叉。如果使用像Clarity这样的可判定语言,便会避免这样的错误。 Solidity 是 DAO 的实现语言,是一种不可判定的语言:如果没有可判定性,就不可能准确地知道合约准确的执行情况。两类的编程语言各有优势,但智能合约锁定着数十亿美元的资金,因此最大限度地降低风险至关重要。

除了作为一种可判定语言,Clarity同时也是一种解释性语言。合约源代码本身由链上节点发布和执行。去除任何便于快速编译的表达(例如,用于Solidity的EVM byte ),进一步最小化错误产生的可能性。发布合约源代码还可以提升可理解性。合约 bug 在区块链技术中的破坏力是分两层的,即使代码在编译期没有错误,但在区块链的网络系统中运行的时候还是可能会导致错误。任何此类错误都会导致硬分叉,这一点急需解决。

Clarity 智能合约案例

这是一份 Clarity 写的合约与以太坊 Solidity写的合约之间的比对

Clarity 的代码在实现一个”退款“功能的时候我们能更清楚地定位资金来自哪里和可能出现的错误。

相比之下,Solidity 的代码虽然简短却并不容易看懂,这导致了在开发大规模项目的时候,出现漏洞的可能性大大增加。

Clarity 是使用传统互联网应用程序无法实现的功能构建应用程序的一步。 对于想要构建新型应用程序的开发人员,Clarity 提供了可以实现链上逻辑的工具,同时可以有效减少bug。

当你把可靠的智能合约与不作恶的应用程序结合起来并让用户获得解放的时侯,你就拥有了一个安全实验的环境。 可预测的智能合约使更多的创业者能够构建用户喜爱的优质产品,同时最大限度地减少对信任的需求。