V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gitandgit
V2EX  ›  区块链

用 Clarity 语言编写更好的智能合约程序

  •  
  •   gitandgit · 2022-05-21 09:04:39 +08:00 · 1278 次点击
    这是一个创建于 902 天前的主题,其中的信息可能已经有所发展或是发生改变。

    该文章的原英文地址: https://www.hiro.so/blog/write-better-smart-contracts-with-the-programming-language-clarity

    该文章的作者是 Sarala B ,目前任职 Hiro 公司的开发总监

    用 Clarity 语言编写更好的智能合约程序

    Stacks 生态系统有自己的智能合约编程语言,叫做 Clarity 。在这篇文章中,我将解释为什么 Stacks 生态系统推出了一种新的编程语言,以及探索一些正在用 Clarity 编写的创新型智能合约程序,以及 Clarity 开发者有哪些资源可以使用。

    我现在在 Hiro 工作了 6 个月,作为工程总监,我负责管理开发人员和开发人员的工具。我经常被新的开发者问到的一个问题是 "为什么 Stacks 区块链有自己的编程语言?"

    事实上,在我了解 Stacks 区块链之前,我就知道Clarity,而且这个语言是我决定加入这个生态系统的一个影响因素。我想把一些想法写下来,说明为什么我认为 Clarity 是如此强大的力量,是整个生态系统的宝贵财富。

    这篇文章的灵感也来自于我和 Stacks 基金会的技术负责人 Marvin Janssen 的谈话。我们在 Bitcoin Unleashed 上个月在迈阿密举行的 Stacks 活动中坐下来,讨论了 Clarity 。下面的一些想法是他的,其他一些想法是我的。如果你感到好奇,你可以在这里观看我们的谈话

    为什么需要一种新的编程语言?

    发明一种编程语言需要大量的工作。当你决定进行这项工作时,你必须找到一个很好的理由。一些在 Stacks 工作的天才们认为需要一种新的编程语言,在这之前,还没有一种编程语言是针对智能合约程序和区块链技术的现实情况而优化的。这就是 Clarity 的由来。

    在 Clarity 的众多好处中,我最喜欢的是以下三点。

    1. 它是解释语言,而不是编译语言。
    2. 该语言是可判定的。
    3. 它不允许重入。

    下面,让我们进一步了解一下。

    Clarity 是一种解释性的语言

    许多流行的智能合约编程语言都是编译的,这意味着人类可读的代码会被编译成机器语言,我一直认为在一个宣扬 "信任,但要验证 "的氛围下,这是一个奇怪的设计原则。如果你不能阅读代码,你如何能验证?

    Clarity 是一种解释性语言,这意味着代码是人类可读的。根据设计,Clarity 还要求智能合约在区块链上发布其源代码。这种选择带来了一些好处。

    它让用户相信智能合约的代码与源代码是一样的(在编译语言中,这更难验证)。它允许用户验证该代码(它是人类可读的),并且它使 Stacks 区块链成为'智能合约的 GitHub'。有了区块链上每个智能合约的可读源代码,开发者有了更多的工具来构建和创新。

    Clarity 是一种可判定的语言

    简而言之,可判定性意味着你知道未来会发生什么。在执行代码之前,你知道它将在哪里终止。该逻辑是可预判的。静态分析的这种能力还可以让你提前确定代码中的运行时成本和数据使用。

    这与图灵完备语言(如 Solidity )形成鲜明对比,后者的代码执行可以采取你无法预先确定的路径。这使得你的代码不那么安全,更容易被攻击。Clarity 故意避免了这种图灵完备性,这使得它更加安全。例如,递归是非法的,循环只通过 map 、filter 和 fold 进行。

    这种可判定性使得智能合约程序的调试更加容易。在测试环境中,你有 REPL 、打印循环和其他可判定语言的功能,使你更容易对代码进行推理并解决任何问题。

    Clarity 不允许重入

    重入是编程语言的一个方面,在调用智能合约程序中,任何正在执行的调用都可以执行额外的线程或图形。这引入了一种不安全因素,而 Clarity 完全避免了这种因素。

    在一个非常简单的例子中,重入性允许出现以下情况。合约程序 A 调用合约程序 B ,而合约程序 B 同时又调用合约程序 A ,这就是重入。一个合约重新进入并再次做同样的功能。

    如果你对合约程序 A 的操作顺序不是很小心,重入性会使你的代码做一些不应该做的事情。例如,如果合约程序 A 是一个简单的转移功能,它的操作顺序将是这样的:1->核查用户余额 2->从该余额中扣除要转移的代币 3->转移代币。

    现在你可以想象这样的情景:如果合约程序 B 没有仔细设置,它可以回调到合约程序 A ,并扰乱该操作顺序。例如,它可能导致代币从一个用户那里被扣除两次。或者,也许代币还没有被扣除,但合约程序 B 能够触发一个应该在扣除之后才会发生的动作。

    Clarity 在设计上不允许你这样做。如果语言检测到重入,它就会中止交易,而它之所以能检测到重入,是因为语言是可提前预判的。

    在 Clarity 开发过程中出现的创新案例

    我已经列举了几个例子来说明 Clarity 语言的强大,但让我们来看看这些力量在实践中的一些表现。开发者在用这种语言做什么?

    我们在 Stacks 区块链上看到了大量的创新应用,从使用区块链共识机制的创新用例(例如:Arkadiko的自我偿还贷款或CityCoins的城市币)到完全去中心化和非托管的 NFT 市场(STXNFT)。

    这样的案例很多,但我将强调两个项目,它们正在推动 Clarity 的可能性的边界。

    Catamaran Swaps

    Catamaran Swaps将原生比特币兑换引入 Stacks 生态系统,允许用户用比特币兑换 Stacks (STX)加密货币以及未来的其他资产。通过 Catamaran Swaps ,用户可以不受信任地互换资产。没有第三方或托管服务。没有 KYC 身份认证,没有交易对方违约的风险。

    Clarity 可以读取比特币的全球状态,你可以编程对其做出反应的智能合约。这些兑换的迷人之处在于,你可以从 Clarity 智能合约中验证 BTC 交易。

    在 Catamaran Swaps 上,用户向一个特定的地址发送 BTC ,智能合约检查 BTC 是否以正确的数量发送到正确的地址,以及该交易是否已经被矿工确认,如果这些条件是真实的,它将 STX 发送到一个指定的地址。

    Boombox

    Boomboxes项目对我来说很有趣,因为他们以一种独特的方式利用了 Stacks 的转移证明( PoX )共识机制。Boomboxes 是具有 STX 抵押品的 NFT ,它们通过 PoX 产生收益。

    实际上,这些 NFTs 允许用户参与 "委托质押",NFTs 作为 STX 抵押品所产生的奖励的索赔证书。如果 NFT 被转让给其他人,奖励也会被转让。因此,在 PoX 奖励发行时,无论谁持有该资产,都将获得报酬。

    有收益的 NFT 。这为现实世界的应用开启了新的可能性,开发者可以利用这个概念建立新的 NFT 用例。这很酷。

    程序员应该从哪里开始?

    Stacks 基金会有许多项目供开发者通过 Clarity Universe 快速掌握 Clarity ,其中包括以下内容:

    • Clarity 训练营:一个为期 6 周的教育课程,学习 Clarity ,可以接触到 Stacks 生态系统中的专家和领导者。
    • Clarity Starters:一个随时可以使用的模板和智能合约库。
    • Clarity Talent:一个与 Clarity 相关的工作市场。
    • Clarity Lab:一个新的孵化器,旨在推动 Clarity 可能的边界,探索一系列前沿的主题,如 DAO 、半同质化代币、签名信息、原生包装的 BTC 等等。

    当然,为了构建开发者需要工具,这就是 Hiro 公司的作用。我们专注于所有的开发者工具。

    我们最受欢迎的工具之一是 Clarinet ,它是本地智能合约开发的首选工具,让开发者轻松测试和调试他们的合约程序。它有几个强大的功能,比如检查器,它可以检查代码中是否有不可信任的数据来源,还有一个内联调试器,它有一个静态分析工具,允许你在调试过程中介入和退出代码。

    这些功能都在 CLI 版本的 Clarinet 中。我们计划在本季度将内联调试器发布到 Clarinet 的 VSCode 版本中。

    VSCode 扩展比 CLI 更强大,并且可以填充错误的亮点。它带有你在其他语言中看到的典型的 ID 插件,并在开发过程中帮助到你。

    结论

    我相信 Clarity 语言是 Stacks 生态系统的最大优势之一,任何开发者都应该探索这种编程语言的好处。在智能合约的世界里,我想你会发现你想要一种为透明和安全而优化的语言。如果你正在寻找更多的资源来开始,请在这里查看Clarity 的文档,在这里查看Hiro 的文档,并通过订阅 Hiro 的开发者通讯,在你的收件箱中接收最新的资料。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1945 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:17 · PVG 00:17 · LAX 08:17 · JFK 11:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.