使用 Cadence 在 Flow 區(qū)塊鏈上進行智能合約編程的新手指南
譯文由于去中心化應用程序 (DApps) 的需求不斷增長,智能合約編程最近也獲得了極大的歡迎。智能合約是在區(qū)塊鏈網(wǎng)絡上運行的自動執(zhí)行協(xié)議,其中以太坊是非常熱門的一種。然而,隨著對更具可擴展性和效率的區(qū)塊鏈解決方案的需求不斷增長,新的區(qū)塊鏈網(wǎng)絡(如 Flow)正在出現(xiàn)。
Flow 是一個專為 DApp 和數(shù)字資產設計的區(qū)塊鏈網(wǎng)絡。它由 CryptoKitties 的創(chuàng)建者 Dapper Labs 創(chuàng)建,并在 NFT 領域越來越受歡迎。Flow 建立在一種名為 Cadence 的獨特編程語言之上,該語言旨在使智能合約編程更易于訪問、更安全。
在本文中,我們將提供有關 Flow 區(qū)塊鏈上 Cadence 和智能合約編程的速成課程。我們將介紹 Cadence 的基礎知識,并解釋如何在 Flow 網(wǎng)絡上編寫智能合約。我們還將討論將 Flow 用于 DApp 和數(shù)字資產的好處。
什么是Cadence?
Cadence 是一種安全可靠的編程語言,專為 Flow 區(qū)塊鏈上的智能合約和 DApp 而設計。它是一種面向資源的語言,專注于提高智能合約編程的安全性和效率。Cadence 使用一種易于閱讀和理解的語法,即使對于非程序員也是一樣簡單。
Cadence 的主要特性之一是面向資源的編程。資源是程序操作的主要對象,是具有狀態(tài)并且可以由帳戶擁有的對象。Cadence 還支持引用類型的使用,引用類型是不屬于任何帳戶的對象,可以在不同資源之間共享。
Cadence 的主要特性之二是類型系統(tǒng)。Cadence 擁有強大的類型系統(tǒng),可確保類型安全并消除常見的編程錯誤,如防止空指針異常和類型不匹配錯誤等。
以上兩種特性使得編寫安全高效的智能合約變得容易。
在 Flow 網(wǎng)絡上編寫智能合約
要在 Flow 網(wǎng)絡上編寫智能合約,您需要對 Cadence 有基本的了解。在本節(jié)中,我們將引導您完成在 Flow 網(wǎng)絡上編寫簡單智能合約的步驟。
創(chuàng)建一個新的智能合約
在 Flow 網(wǎng)絡上編寫智能合約的第一步是創(chuàng)建一個新的智能合約。為此,您需要在計算機上設置開發(fā)環(huán)境。您可以使用多種開發(fā)環(huán)境在 Flow 網(wǎng)絡上編寫智能合約,包括 Visual Studio Code 和 Atom。
設置開發(fā)環(huán)境后,您可以創(chuàng)建一個新的智能合約文件。在 Visual Studio Code 中,您可以通過單擊資源管理器窗格中的“新建文件”按鈕來創(chuàng)建新文件。在 Atom 中,您可以通過單擊文件樹中的“新建文件”按鈕來創(chuàng)建新文件。
在您的新智能合約文件中,您需要使用 Cadence 語法定義合約。Cadence中定義智能合約的基本語法如下:
pub contract MyContract {
// 定義合約變量
var myVariable: Int
// 定義一個讀取變量的公共函數(shù)
pub fun getMyVariable () : Int {
return myVariable
}
// 定義一個設置變量的公共函數(shù)
pub fun setMyVariable (newValue: Int ) {
myVariable = newValue
}
}
在這個例子中,我們定義了一個名為“MyContract”的新智能合約。我們正在定義一個名為“myVariable”的存儲變量,它是 Int 類型。該合約還包括兩個公共函數(shù):“getMyVariable”和“setMyVariable”。
“getMyVariable”函數(shù)是一個只讀函數(shù),返回“myVariable”的當前值。該函數(shù)不會修改合約的狀態(tài)。
另一方面,“setMyVariable”函數(shù)是通過將“myVariable”的值設置為輸入?yún)?shù)“newValue”來修改合約狀態(tài)的函數(shù)。
數(shù)據(jù)類型
與 Solidity 一樣,Cadence 也有許多變量數(shù)據(jù)類型。一些數(shù)據(jù)類型包括:
- Int- 任意大小的有符號整數(shù)
- UInt- 任意大小的無符號整數(shù)
- Bool- 布爾值true和false
- String- 任意長度的文本字符串
- Address- 一個 20 字節(jié)的以太坊式地址
- Character- 單個 UTF-8 字符
- Array- 相同類型的元素列表
- Dictionary- 鍵值對的集合,其中鍵是一種類型,值可以是另一種類型
Flow Playground
Flow Playground 是一個在線代碼編輯器,允許您編寫、測試和部署 Cadence 智能合約,無需設置本地開發(fā)環(huán)境,使用更方便。
要使用 Flow Playground,您需要使用 Flow 創(chuàng)建一個帳戶。創(chuàng)建帳戶后,您可以訪問 Flow Playground 并創(chuàng)建新項目。在項目中,您可以為您的 Cadence 智能合約創(chuàng)建一個新文件。
下面是 Cadence 中一個簡單的智能合約示例,它存儲一個值并允許檢索它:
pub contract SimpleStorage {
// 聲明一個公共變量來存儲一個整數(shù)值
pub var value: Int
// 公共函數(shù)用于設置值
pub fun setValue (newValue: Int ) {
self.value = newValue
}
// 公共函數(shù)用于獲取值
pub fun getValue () : Int {
return self.value
}
}
在這個智能合約中,我們聲明了一個公共的變量value來存儲一個整數(shù)值。我們還有兩個公共函數(shù)setValue和getValue,它們允許我們設置和檢索值。
部署 Cadence 智能合約
要部署 Cadence 智能合約,您需要擁有 Flow 帳戶并設置開發(fā)環(huán)境。您還需要安裝 Flow CLI,這是一個用于與 Flow 區(qū)塊鏈交互的命令行界面工具。
設置開發(fā)環(huán)境并安裝 Flow CLI 后,您可以使用以下命令將智能合約部署到 Flow 區(qū)塊鏈:
flow project deploy --network NETWORK_NAME
在 Flow 上編寫和部署智能合約
現(xiàn)在我們已經(jīng)介紹了 Cadence 的基礎知識和 Flow 區(qū)塊鏈上的智能合約編程,讓我們來看看在 Flow 上編寫和部署簡單智能合約的過程。
對于這個例子,我們將創(chuàng)建一個簡單的合約,允許用戶存儲和檢索字符串消息。
首先,我們將創(chuàng)建一個新的項目目錄并使用 npm 對其進行初始化。
mkdir my-project
cd my-project
npm init -y
接下來,我們將安裝 Flow CLI 并創(chuàng)建一個新的 Flow 項目。
npm install -g @onflow /cli
flow init
這將創(chuàng)建一個新 Flow 項目,并創(chuàng)建flow.json,該文件指定網(wǎng)絡配置和合約路徑。
下面,讓我們在cadence目錄中創(chuàng)建一個新的合約文件Message.cdc。
mkdir cadence
touch cadence/Message.cdc
我們將定義一個簡單的合約來存儲和檢索消息。
// cadence/Message.cdc
pub contract Message {
// 定義公共字段來存儲消息
pub var message: String
// 設置消息的公共函數(shù)
pub fun setMessage (_message: String ) {
self.message = _message
}
// 讀取消息的公共函數(shù)
pub fun getMessage () : String {
return self.message
}
}
該合約定義了一個公共字段message來存儲消息,以及兩個公共函數(shù)setMessage,getMessage分別設置和檢索消息。
接下來,我們將把合約部署到 Flow 模擬器上進行測試。首先,我們需要啟動模擬器。
flow emulator start
這將在localhost:3569啟動模擬器。
接下來,我們將使用 Flow CLI 部署合約。
flow project deploy --network emulator
這將編譯合約并將其部署到模擬器。CLI 將輸出合約地址,我們將使用該地址與合約進行交互。
現(xiàn)在,讓我們使用 Flow CLI 與合約進行交互。
首先,我們將使用該函數(shù)設置一條消息setMessage。
flow transactions send ./cadence/transactions/set-message.cdc --signer emulator-account
這將向合約發(fā)送消息以設置交易。CLI 將提示我們輸入消息。
接下來,我們將使用該函數(shù)檢索消息getMessage。
flow scripts execute ./cadence/scripts/get-message.cdc --signer emulator-account
這將執(zhí)行一個腳本來檢索消息。CLI 將輸出消息。
恭喜!您剛剛使用 Cadence 在 Flow 區(qū)塊鏈上編寫并部署了一個簡單的智能合約。
結論
在本文中,我們介紹了 Cadence 的基礎知識和 Flow 區(qū)塊鏈上的智能合約編程。我們討論了使用 Cadence 進行智能合約編程的好處,并探討了該語言的關鍵概念和語法。我們還介紹了在 Flow 上編寫和部署簡單智能合約的過程。
隨著 Flow 生態(tài)系統(tǒng)的不斷發(fā)展,Cadence 正成為希望在平臺上構建去中心化應用程序的開發(fā)人員越來越重要的工具。無論您是經(jīng)驗豐富的區(qū)塊鏈開發(fā)人員還是剛剛開始智能合約編程,學習 Cadence 都是您工具包中的一項寶貴技能。
我們希望本次速成課程為您提供了 Cadence 和 Flow 智能合約編程的堅實基礎。
譯者介紹
張業(yè)貴,51CTO社區(qū)編輯,從事企業(yè)信息化建設多年,致力于信息集成、數(shù)據(jù)治理和人工智能應用等。
原文標題:A Beginner’s Guide to Smart Contract Programming on the Flow Blockchain with Cadence,作者:Lea Lobanov