由于去中心化应用程序 (DApps) 的需求不断增长,智能合约编程最近也获得了极大的欢迎。智能合约是在区块链网络上运行的自动执行协议,其中以太坊是非常热门的一种。然而,随着对更具可扩展性和效率的区块链解决方案的需求不断增长,新的区块链网络(如 Flow)正在出现。
Flow 是一个专为 DApp 和数字资产设计的区块链网络。它由 CryptoKitties 的创建者 Dapper Labs 创建,并在 NFT 领域越来越受欢迎。Flow 建立在一种名为 Cadence 的独特编程语言之上,该语言旨在使智能合约编程更易于访问、更安全。
在本文中,我们将提供有关 Flow 区块链上 Cadence 和智能合约编程的速成课程。我们将介绍 Cadence 的基础知识,并解释如何在 Flow 网络上编写智能合约。我们还将讨论将 Flow 用于 DApp 和数字资产的好处。
什么是Cadence?
Cadence 是一种安全可靠的编程语言,专为 Flow 区块链上的智能合约和 DApp 而设计。它是一种面向资源的语言,专注于提高智能合约编程的安全性和效率。Cadence 使用一种易于阅读和理解的语法,即使对于非程序员也是一样简单。
Cadence 的主要特性之一是面向资源的编程。资源是程序操作的主要对象,是具有状态并且可以由帐户拥有的对象。Cadence 还支持引用类型的使用,引用类型是不属于任何帐户的对象,可以在不同资源之间共享。
Cadence 的主要特性之二是类型系统。Cadence 拥有强大的类型系统,可确保类型安全并消除常见的编程错误,如防止空指针异常和类型不匹配错误等。
以上两种特性使得编写安全高效的智能合约变得容易。
在 Flow 网络上编写智能合约
要在 Flow 网络上编写智能合约,您需要对 Cadence 有基本的了解。在本节中,我们将引导您完成在 Flow 网络上编写简单智能合约的步骤。
创建一个新的智能合约
在 Flow 网络上编写智能合约的第一步是创建一个新的智能合约。为此,您需要在计算机上设置开发环境。您可以使用多种开发环境在 Flow 网络上编写智能合约,包括 Visual Studio Code 和 Atom。
设置开发环境后,您可以创建一个新的智能合约文件。在 Visual Studio Code 中,您可以通过单击资源管理器窗格中的“新建文件”按钮来创建新文件。在 Atom 中,您可以通过单击文件树中的“新建文件”按钮来创建新文件。
在您的新智能合约文件中,您需要使用 Cadence 语法定义合约。Cadence中定义智能合约的基本语法如下:
pub contract MyContract {
// 定义合约变量
var myVariable: Int
// 定义一个读取变量的公共函数
pub fun getMyVariable () : Int {
return myVariable
}
// 定义一个设置变量的公共函数
pub fun setMyVariable (newValue: Int ) {
myVariable = newValue
}
}
在这个例子中,我们定义了一个名为“MyContract”的新智能合约。我们正在定义一个名为“myVariable”的存储变量,它是 Int 类型。该合约还包括两个公共函数:“getMyVariable”和“setMyVariable”。
“getMyVariable”函数是一个只读函数,返回“myVariable”的当前值。该函数不会修改合约的状态。
另一方面,“setMyVariable”函数是通过将“myVariable”的值设置为输入参数“newValue”来修改合约状态的函数。
数据类型
与 Solidity 一样,Cadence 也有许多变量数据类型。一些数据类型包括:
- Int- 任意大小的有符号整数
- UInt- 任意大小的无符号整数
- Bool- 布尔值true和false
- String- 任意长度的文本字符串
- Address- 一个 20 字节的以太坊式地址
- Character- 单个 UTF-8 字符
- Array- 相同类型的元素列表
- Dictionary- 键值对的集合,其中键是一种类型,值可以是另一种类型
Flow Playground
Flow Playground 是一个在线代码编辑器,允许您编写、测试和部署 Cadence 智能合约,无需设置本地开发环境,使用更方便。
要使用 Flow Playground,您需要使用 Flow 创建一个帐户。创建帐户后,您可以访问 Flow Playground 并创建新项目。在项目中,您可以为您的 Cadence 智能合约创建一个新文件。
下面是 Cadence 中一个简单的智能合约示例,它存储一个值并允许检索它:
pub contract SimpleStorage {
// 声明一个公共变量来存储一个整数值
pub var value: Int
// 公共函数用于设置值
pub fun setValue (newValue: Int ) {
self.value = newValue
}
// 公共函数用于获取值
pub fun getValue () : Int {
return self.value
}
}
在这个智能合约中,我们声明了一个公共的变量value来存储一个整数值。我们还有两个公共函数setValue和getValue,它们允许我们设置和检索值。
部署 Cadence 智能合约
要部署 Cadence 智能合约,您需要拥有 Flow 帐户并设置开发环境。您还需要安装 Flow CLI,这是一个用于与 Flow 区块链交互的命令行界面工具。
设置开发环境并安装 Flow CLI 后,您可以使用以下命令将智能合约部署到 Flow 区块链:
flow project deploy --network NETWORK_NAME
在 Flow 上编写和部署智能合约
现在我们已经介绍了 Cadence 的基础知识和 Flow 区块链上的智能合约编程,让我们来看看在 Flow 上编写和部署简单智能合约的过程。
对于这个例子,我们将创建一个简单的合约,允许用户存储和检索字符串消息。
首先,我们将创建一个新的项目目录并使用 npm 对其进行初始化。
mkdir my-project
cd my-project
npm init -y
接下来,我们将安装 Flow CLI 并创建一个新的 Flow 项目。
npm install -g @onflow /cli
flow init
这将创建一个新 Flow 项目,并创建flow.json,该文件指定网络配置和合约路径。
下面,让我们在cadence目录中创建一个新的合约文件Message.cdc。
mkdir cadence
touch cadence/Message.cdc
我们将定义一个简单的合约来存储和检索消息。
// cadence/Message.cdc
pub contract Message {
// 定义公共字段来存储消息
pub var message: String
// 设置消息的公共函数
pub fun setMessage (_message: String ) {
self.message = _message
}
// 读取消息的公共函数
pub fun getMessage () : String {
return self.message
}
}
该合约定义了一个公共字段message来存储消息,以及两个公共函数setMessage,getMessage分别设置和检索消息。
接下来,我们将把合约部署到 Flow 模拟器上进行测试。首先,我们需要启动模拟器。
flow emulator start
这将在localhost:3569启动模拟器。
接下来,我们将使用 Flow CLI 部署合约。
flow project deploy --network emulator
这将编译合约并将其部署到模拟器。CLI 将输出合约地址,我们将使用该地址与合约进行交互。
现在,让我们使用 Flow CLI 与合约进行交互。
首先,我们将使用该函数设置一条消息setMessage。
flow transactions send ./cadence/transactions/set-message.cdc --signer emulator-account
这将向合约发送消息以设置交易。CLI 将提示我们输入消息。
接下来,我们将使用该函数检索消息getMessage。
flow scripts execute ./cadence/scripts/get-message.cdc --signer emulator-account
这将执行一个脚本来检索消息。CLI 将输出消息。
恭喜!您刚刚使用 Cadence 在 Flow 区块链上编写并部署了一个简单的智能合约。
结论
在本文中,我们介绍了 Cadence 的基础知识和 Flow 区块链上的智能合约编程。我们讨论了使用 Cadence 进行智能合约编程的好处,并探讨了该语言的关键概念和语法。我们还介绍了在 Flow 上编写和部署简单智能合约的过程。
随着 Flow 生态系统的不断发展,Cadence 正成为希望在平台上构建去中心化应用程序的开发人员越来越重要的工具。无论您是经验丰富的区块链开发人员还是刚刚开始智能合约编程,学习 Cadence 都是您工具包中的一项宝贵技能。
我们希望本次速成课程为您提供了 Cadence 和 Flow 智能合约编程的坚实基础。
译者介绍
张业贵,51CTO社区编辑,从事企业信息化建设多年,致力于信息集成、数据治理和人工智能应用等。
原文标题:A Beginner’s Guide to Smart Contract Programming on the Flow Blockchain with Cadence,作者:Lea Lobanov