使用 Plutus 構建區塊鏈應用程序一文最先出現在 Coinpedia Fintech News 上

介紹

區塊鏈通過其去中心化和透明的解決方案爲各個行業做出了貢獻。開發領域的進步對開發人員和社區產生了變革性的變化。區塊鏈的好處不僅限於去中心化。它節省了交易所需的時間,不需要任何第三方驗證,從而降低了欺詐和網絡攻擊的風險。作爲開發人員,瞭解如何構建區塊鏈應用程序很有價值,尤其是在使用 Plutus 等強大工具時。Plutus 是 Cardano 區塊鏈上的智能合約平臺。它爲開發人員提供了一個強大的框架來創建安全高效的去中心化應用程序 (DApps)。

卡爾達諾是什麼?

Cardano 由 Charles Hoskinson(以太坊聯合創始人)於 2017 年推出的區塊鏈平台。它使用比傳統機制更有效的權益證明機制。卡爾達諾擁有自己的加密貨幣 ADA,以艾達·洛夫萊斯 (Ada Lovelace) 命名。它有兩個獨立的層,一層處理交易和帳戶,另一層用於管理智能合約和計算。卡爾達諾旨在創建一個比其前身更安全、可擴展和適應性更強的區塊鏈平台,並用於各種應用,包括供應鏈管理、數位身分驗證和新興市場的金融服務

冥王星

Plutus 是一種用於編寫基於 Cardano 的智能合約的程式語言。 Plutus 是基於 Haskell,這是一種函數式語言。身為開發人員,您不需要編寫 Plutus Core,而是所有腳本都將由 Haskell 編譯器外掛程式產生。 Plutus 支援形式驗證,它提供了一種使用數學證明程式正確性的方法。因此增強了安全性並降低了智能合約中出現任何錯誤的可能性。

Plutus 原生整合到卡爾達諾區塊鏈中,讓開發人員直接與卡爾達諾的帳本和基礎設施互動。這可以幫助您建立和部署直接與卡爾達諾生態系統互動的智慧合約。 Plutus 提供的工具可協助您在沒有完整卡爾達諾節點的情況下模擬智慧合約,並在部署到主網上之前進行實驗。 Plutus 非常適合希望創建可靠且高效能的去中心化應用程式的開發人員。

觀眾

本文針對的是剛接觸區塊鏈開發、對基礎程式所知甚少的開發者。我們將引導您完成設定環境、了解區塊鏈概念以及使用 Plutus 建立簡單的區塊鏈應用程式的基本步驟。

設定開發環境

在開始開發之旅之前進行完美的設置至關重要。因此,建立一個支援 Plutus 的環境是本章的基石。

1.安裝普利拓斯

從官方儲存庫下載 Plutus: 

git 克隆 https://github.com/input-output-hk/plutus-apps.gitcd plutus-appsnix-shell

使用以下指令驗證安裝:plutus -v

2. 選擇IDE

在使用 Plutus 開發應用程式時,擁有合適的 IDE 至關重要。 Plutus 是基於 Haskell,因此建議使用支援 Haskell 的 IDE。以下是有關如何設定和使用這些 IDE 進行 Plutus 開發的擴充指南。

Visual Studio Code:VS Code 是一個非常靈活且多功能的程式碼編輯器,支援幾乎所有語言,並且具有非常有用的擴充功能。因此,它是開發人員最喜歡使用的編輯器。 VSCode 是開源的,提供廣泛的工具和功能來完成程式碼。

設定 VSCode 的步驟:

  • 從官方網站下載VSCode(根據您的作業系統)

  • 安裝軟體

  • Plutus 是基於 Haskell 建構的,因此您需要安裝 Haskell Platform,其中包括 Glasgow Haskell Compiler (GHC) 和 cabal(Haskell 的建置工具)。

  • 下載哈斯克爾

  • 在 VS Code 中安裝 Haskell 擴充功能(Haskero、Haskell 語法高亮等)

  • 配置擴展並設定其他擴展

  • 既然您已經安裝了 Plutus,那麼您就可以開始了!

Plutus Playground:Plutus Playground 是一款專門針對 Plutus 智慧合約的線上網頁編輯器。因此無需任何安裝,非常適合初學者在編碼時獲得一些信心。

您可以訪問 Plutus Playground 網站並開始使用!

這兩種環境都可以有效地用於 Plutus 開發,您可能會發現,將兩者結合起來(使用 VS Code 進行大型項目,使用 Plutus Playground 進行快速測試和原型設計)可以兩全其美。

3. 安裝所需的庫

使用 cabal 安裝 Plutus 開發所需的函式庫。

與 Plutus 一起了解區塊鏈概念  

區塊鏈是一種分散式的高級資料庫,以區塊的形式儲存交易記錄。每個區塊都需要使用加密原理相互連結。強大的機制用於保護區塊,因此人們無法更改先前的任何貨幣記錄,並且不會影響後續區塊。

區塊鏈有三個基本組成部分:

  • 區塊:區塊包含有關交易的資訊以及元資料。所有區塊透過雜湊相互鏈接,形成區塊鏈,因此稱為區塊鏈 

  • 交易:交易是區塊鏈內資料從一個實體到另一個實體的傳輸。在 Plutus 中,交易是用 Haskell 編寫的,涉及輸入和輸出 UTXO(未花費的交易輸出)。

  • 鏈:在普利拓斯中,鏈維護交易的順序並確保它們一旦確認就不可更改。

在下面的程式碼片段中我們可以看到Plutus中Block的結構:

塊的每個組件及其資料類型都被提及

  • 索引是一個整數,表示區塊的位置

  • 時間戳記是區塊創建的時間

  • 交易是特定區塊中包含的所有交易的字串或列表

  • 哈希是一種獨特的模式,也是識別區塊的主鍵

  • 前一個hash指的是連續性,是最後一個區塊的hash

在這段程式碼片段中,我們可以看到 Plutus 中交易的結構:

去中心化、不變性和共識機制:

區塊鏈的基礎依賴三個核心原則:去中心化、不變性和共識機制

去中心化:去中心化是一種屬性,沒有任何一個實體可以控制區塊鏈的資料庫,使得系統故障和偏見幾乎不可能發生。每個參與者設備(節點)都維護區塊鏈的副本,確保透明度並抑制集中故障或操縱。

不變性:一旦資料寫入區塊鏈,在不更改所有後續區塊的情況下就無法更改。這是在加密哈希的幫助下完成的。因此,一旦完成的所有更改都無法撤消,使其成為不可變的。

共識機制:一組管理區塊鏈所有必需品的協議。網路中的所有節點需要就這些方法達成一致。共識機制用於簡化節點並確保網路中的所有節點都在同一頁上。

使用 Plutus 建立簡單的區塊鏈

區塊是任何區塊鏈的基本單位。在此程式碼片段中,我們定義了區塊資料類型及其組件。

此外,在定義了區塊類別之後,我們需要確保區塊鏈的完整性,其中每個區塊必須具有唯一的雜湊值。因此,對於計算雜湊函數,我們在 Plutus 中使用 SHA256 流行的雜湊方法進行計算。

完成區塊的定義後,繼續在創世區塊的幫助下初始化您的區塊鏈,創世區塊是任何區塊鏈的第一個區塊。哇!您剛剛創建了一個區塊鏈,但僅此而已,您還需要添加新區塊並檢索最新區塊。

如果您需要任何幫助,請繼續參考下面的程式碼!

在普利拓斯中實施共識機制 

卡爾達諾利用 PoS 機制,同時首先採用了工作量證明。 Plutus 旨在與 Cardano 的 Ouroboros PoS 協定相容,為去中心化應用程式 (DApp) 提供可擴展性、能源效率和安全性。 

以下是可與 Plutus 配合使用的共識演算法的概述

  • Ouroboros:Ouroboros 是一種與 Plutus 高度相容的權益證明機制,它取決於驗證者願意承擔的 ADA 權益來驗證新區塊。 Plutus 合約與 Ouroboros 協議無縫交互,確保智能合約的執行保持安全和節能。

  • 工作量證明:PoW 是最古老的機制,廣泛應用於所有較舊的加密貨幣。對於普利拓斯來說,它仍然可以在紙上實現。在考慮教育目的和實驗目的等孤立場景時,這會更有用。

  • 委託工作證明和拜占庭容錯:這些機制與卡爾達諾不是特別相容,但理論上仍然可以在普利拓斯上實現。

在本節中,我們將探討如何在 Plutus 中使用工作量證明。

在工作量證明中,礦工需要及時競爭以解決密碼難題,才能成為新硬幣的驗證者。在這段程式碼中,工作量證明函數會搜尋一個隨機數,當與前一個區塊的雜湊值結合時,會產生一個帶有一定數量的前導零的雜湊值。這是 PoW 的基本實現,其中難度等級決定了找到有效隨機數的難度。

完成工作證明實施後,您需要更新區塊鏈以驗證挖掘的證明。

這是範例程式碼片段:

此功能確保只有在其證明有效的情況下才將新區塊添加到區塊鏈中,從而維護鏈的完整性。

使用 Plutus 創建簡單的區塊鏈 API  

在本章中,您將學習如何建立一個簡單的 API 來與使用 Plutus 建立的區塊鏈應用程式互動。該 API 將允許您添加區塊並透過 HTTP 請求查看區塊鏈。

建立API的步驟:

  • 設定API環境:安裝Haskel(已經完成),然後使用Cabal安裝Servant

  • 下載所有需要的庫:

    • Servant:創立API

    • Aeson 對 JSON 進行編碼和解碼: cabal install aeson plutus-core

    • Plutus 整合所有程式碼和邏輯 

要開始建立 API,我們需要先新增一個區塊並停用區塊鏈的當前狀態。這兩個步驟都已在上面的章節中執行過。 

現在您可以繼續定義端點:

{-# LANGUAGE DataKinds #-}{-# LANGUAGE TypeOperators #-}module BlockchainAPI whereimport Servantimport Control.Monad.IO.Class (liftIO)— 定義 Block 類型(請參閱第 3 章)data Block = Block { index   , timestamp    :: String  , dataField    :: String  , previousHash :: String  , hash         :: String  } deriving (S管Block” : > ReqBody '[JSON] 區塊:> Post '[JSON] Blockchain:<|> “chain” :> Get '[JSON] Blockchain — 區塊鏈的佔位符,最初僅從創世區塊開始genesisBlock = Block 0 “2024- 09-12 00:00:00” “Genesis Block” “0” “some_hash”initialBlockchain:: BlockchaininitialBlockchain = [genesisBlock]– API 端點的處理程序addBlockHandler :: Blockchain -> Block -> 處理程序 -BlockHanchain Blockchain Blockchain” newBlock = dolet newBlockchain = Blockchain ++ [newBlock]    liftIO $ putStrLn“區塊已新增!”    return newBlockchain— 用於擷取 chainviewChainHandler :: Blockchain -> Handler BlockchainviewChainHandler Blockchain = return Blockchain – 執行 APIapp :: Applicationapp = 服務的主入口點 (Proxy :: Proxy BlockchainAPI) (blockchainServer initialBlockchain) initialBlockchainAPI) (blockchainServer initialBlockchain)

上述程式碼的解釋:

  • 區塊的定義與前面的章節類似

  • Servant庫用於定義API的結構。有兩種方法可以定義 API 端點,GET 和 POST 分別表示檢索和新增區塊鏈。

  • 我們也定義了處理程序 (addBlockHandler) 來處理正在新增的新區塊,並定義了查看其他區塊的 viewChainHandler)

  • 最後,有一個 main 函數,它是程式碼的核心,將所有內容綁定在一起,並運行 API 伺服器。

API 定義後,您有兩種方法來新增端點和檢索區塊鏈端點資訊。

耶!您已經成功實現了本小節,現在您可以使用 cabal 朗讀 API,並且可以開始進行下一部分了。

運行和測試應用程式 

建構完區塊鏈 API 後,就該進行測試了。我們將使用 Postman 或curl 與API 互動並驗證其是否正常運作。

運行和測試應用程式的步驟:

  • 編譯程式並執行它: cabal build cabal run

  • 啟動伺服器:API 應在 http://localhost:8080 處可用

  • 測試並添加區塊端點

{  「index」:1,  「timestamp」:「這是我的新區塊」,  「previousHash」:「some_hash」,「這是我的新區塊」,  「previousHash」:「some_hash」,  「hash」:  」 new_block_hash ”}

查看區塊鏈

捲曲 http://localhost:8080/chain

透過執行這些步驟,您現在擁有一個簡單的區塊鏈應用程序,該應用程式使用使用 Plutus 構建的 API 運行。該 API 允許外部應用程式或用戶透過添加新區塊並查看當前區塊鏈狀態來與您的區塊鏈進行互動。 

使用 Plutus 建立區塊鏈應用程式的實例

上面的程式碼片段是以下步驟的逐步執行:

  • 步驟 1:使用 Plutus 語法建立具有必要屬性的區塊資料類型。

  • 步驟2:實作calculate_hash方法。

  • 步驟 3:定義區塊鏈資料類型並使用創世區塊對其進行初始化。

  • 步驟 4:使用 Plutus 實作新增區塊和檢索最新區塊的方法。

  • 步驟 5:將工作量證明功能新增至區塊資料類型並更新區塊鏈資料類型。

  • 步驟 6:設定 API 環境以使用 Plutus 處理請求。

  • 步驟 7:透過挖掘新區塊並使用 Postman 或 Curl 驗證區塊鏈來測試應用程式

恭喜!您已完成本模組並了解了 Plutus 的所有基礎知識。

當您與普利拓斯一起冒險進行區塊鏈開發時,您不僅僅是在編寫程式碼,您還在建立可以重新定義行業的去中心化系統的支柱。繼續學習並快樂編碼!

另請參閱:如何設計、開發和部署您自己的加密貨幣:逐步指南