Clarity(智能合约语言)
一种旨在可读且可预测的智能合约语言。

前往 Clarity 速成课程 以构建你的第一个 Clarity 智能合约。
Clarity 是一种 可判定的 智能合约语言,旨在优化可预测性和安全性,专为 Stacks 区块链设计。从零开始构建,使开发者更容易编写安全、可靠的智能合约。Clarity 具有若干独特特性,使其成为编写智能合约的理想选择。
Clarity 的设计决策在很大程度上基于从常见的 Solidity 漏洞中吸取的教训,并创建了一个以安全为目的而专门构建的语言。
是什么让 Clarity 与众不同
以下章节节选自 Clarity 书籍:
智能合约语言的数量逐年增加。对于初学者来说,选择第一种语言可能具有挑战性。选择在很大程度上取决于你感兴趣的生态系统,尽管有些语言适用于不止一个平台。每种语言都有其优缺点,本书不可能涵盖所有语言。相反,我们将重点讨论使 Clarity 与众不同的因素以及为什么如果你需要极致的安全性和透明度,它是首选。
Clarity 的核心原则之一是其设计即安全。设计过程通过审视智能合约工程领域普遍存在的陷阱、错误和漏洞来指导。有无数现实案例显示开发者失误导致大量代币丢失或被盗。举两个重要例子:被称为 Parity 漏洞的问题导致数百万美元以太坊不可挽回的损失;其次,对 The DAO(“去中心化自治组织”)的黑客攻击造成了巨大的财务损失,以至于以太坊基金会决定发起有争议的硬分叉来撤销这次盗窃。这些以及许多其他错误本可以在语言设计阶段被预防。
Clarity 是解释执行而非编译
Clarity 代码按原样被解释并提交到链上。Solidity 和其他语言在提交到链上之前会被编译为字节码。编译型智能合约语言的危险有两方面:第一,编译器增加了一层复杂性。编译器中的错误可能导致生成的字节码与预期不同,从而带来引入漏洞的风险。第二,字节码不可读,这使得验证智能合约实际行为非常困难。问问你自己,你会签署你无法阅读的合同吗?如果答案是否定的,那么智能合约为什么可以不同?使用 Clarity,所见即所得。
Clarity 是可判定的
可判定语言具有这样一个性质:仅通过代码本身,你就可以确定程序会做什么。这避免了像停机问题之类的问题。使用 Clarity,你可以确定对于任何输入,程序都将在有限步内终止。简单来说:程序执行保证会结束。可判定性还允许对调用图进行完全静态分析,从而在执行前获得准确的确切成本估算。Clarity 的调用不可能在调用过程中“耗尽 gas”。我们将在关于可判定性的安全深度解析中更详细地探讨这个概念,并讨论图灵完备性。
Clarity 不允许重入
重入是指一个智能合约调用另一个合约,而该合约随后回调第一个合约——调用“重新进入”相同逻辑。这可能允许攻击者在合约有机会更新其内部余额表之前触发多次代币提现。Clarity 的设计将重入视为一种反特性,并在语言层面禁止它。
Clarity 防护溢出和下溢
溢出和下溢发生在计算结果超出可存储的最大或最小数值时。这些事件会使智能合约陷入混乱,并可能被攻击者在写得不好的合约中故意触发。通常这会导致合约被冻结或代币被清空。在 Clarity 中,任何类型的溢出和下溢都会自动导致事务中止。
内建对自定义代币的支持
发行自定义的可替代和不可替代代币是智能合约的常见用例。自定义代币功能已内置于 Clarity 语言中。开发者无需担心创建内部余额表、管理供应或发出代币事件。创建自定义代币将在后续章节中详尽介绍。
在 Stacks 上,交易通过事后条件得到保护
为了进一步保护用户代币,可以将事后条件附加到交易上,以在交易完成后断言链上状态已以特定方式发生变化。例如,调用智能合约的用户可以附加一个事后条件,声明在调用完成后,恰好 500 个 STX 应从一个地址转移到另一个地址。如果事后条件检查未通过,则整个交易将被回滚。由于自定义代币支持已直接内置于 Clarity,事后条件也可以以同样的方式用于保护任何其他代币。
返回的响应不能被忽视
公共合约调用必须返回所谓的响应,指示成功或失败。任何调用另一个合约的合约都必须正确处理该响应。未能如此处理的 Clarity 合约是无效的,不能部署到网络上。像 Solidity 这样的其他语言允许使用低级调用而不强制检查返回值。例如,如果开发者忘记检查结果,代币转移可能会静默失败。在 Clarity 中无法忽略错误,尽管这显然会阻止开发者出现有缺陷的错误处理。响应与错误处理将在函数和控制流章节中广泛讨论。
组合优于继承
Clarity 采用组合优于继承的原则。这意味着 Clarity 智能合约不像 Solidity 等语言那样相互继承。开发者改为定义 trait(特性),然后由不同的智能合约实现这些特性。它允许合约更灵活地遵从不同接口,无需担心复杂的类树和具有隐式继承行为的合约。
访问基础链:比特币
Clarity 智能合约可以读取比特币基础链的状态。这意味着你可以在智能合约中将比特币交易作为触发器!Clarity 还提供了若干内建函数来验证 secp256k1 签名并恢复公钥。
最后更新于
这有帮助吗?