Cadence 一瞥

Tags
Tech
Flow
Published
Mar 11, 2022 03:30 AM
Language
ZH
原作者:Benjamin Ebner 原文链接: Cadence at a Glance
Cadence 编程语言通过引入资源和功能来加速和简化安全智能合约编程,支持资源嵌套和组合等高级用例。 同时 Cadence 也支持 Flow 上的事务和查询。
notion image

通过资源管理所有权

Cadence 很容易学习,因为它与 Rust、TypeScript 和 Swift 等其他编程语言有许多相似之处。最大的区别在于Cadence 总是资源第一
资源很容易理解,因为它们是真实的东西 —— 一个代币的金库,一个 NBA Topshot 瞬间而且它们存储在所有者的帐户中。这就是为什么 Cadence 代码易于阅读、维护和讨论的原因。
pub resource NFT {
    pub let id: UInt64
    pub var metadata: {String: String}
    ...
}
从技术的角度来说,资源类型类似于类 —— 它们表示数据和函数的集合。但它们对开发人员如何处理它们引入了严格的规则:
  • 资源在同一时间只能存在于一个确切的位置
  • 资源无法被复制
  • 资源必须被明确的销毁
这可以防止资源的有害复制和意外删除,使其非常适合区块链应用程序。移动操作符是用于传输资源的特殊操作符,它在处理资源时提供直观的视觉提示。
let myResource <- create NFT(...)
资源还支持高级用例,如组合和嵌套。要对资产进行分组,只需创建一个集合资源作为包装器。这使得批量传输(同时传输多个资源)—— 变得易于实现。

访问控制的能力

能力(Capabilities)类似于权限:它们控制用户可以对给定资源执行的操作。如果要调用资源的方法,则需要具有有效的能力。
能力是通往资源的网关。与 REST API 一样,能力也有一条路径。如果该路径位于帐户的公共域中,则任何人都可以获得该能力;私有域中的能力只能由该帐户的所有者访问。
无论是在公共域还是私有域,能力始终链接到目标。此目标可以是整个资源,也可以只是其方法的子集。对于后者,接口可以作为能力的目标。这就是功能允许细粒度和人类可读的访问控制的方式。
要与资源交互,首先必须在借用其基础资源之前获得特定的能力,这可以在事务中完成。
account.getCapability<...>(/public/MyCapability).borrow()

与事务和脚本交互

Transactions allow you to mutate on-chain data. On Flow, transactions are written in Cadence. They usually consist of two stages: Prepare and execute.
事务允许你改变链上的数据。在 Flow 网络,事务以 Cadence 编写。 它们通常包括两个阶段:准备(prepare)和执行(execute)。
transaction {
  prepare (acct: AuthAccount) {
    ...
  }
  execute {
    ...
  }
}
对于交易的每个签名者,相应的 AuthAccount 被传递到交易的 prepare 阶段,提供对存储以及签名帐户的私有域和公有域的完全访问。
如果你只想查询链上数据而不改变它,那么可以运行脚本。在 Cadence 中,脚本由执行时运行的公共函数main组成:
pub fun main () {
  log("Hello world!")
}

进一步阅读

如果你想快速开始使用 Cadence 构建,请查看官方教程系列,在该系列中,你将为整个市场编写同质化和非同质化代币的集成代码。
当你需要更全面、更深入的语言文档时,请查看完整的 Cadence 参考资料:
任何时候,如果你想尝试 Cadence 而不必设置本地开发环境,请使用 Cadence playground: