使用 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 的所有基础知识。

当您与普利拓斯一起冒险进行区块链开发时,您不仅仅是在编写程式码,您还在建立可以重新定义行业的去中心化系统的支柱。继续学习并快乐编码!

另请参阅:如何设计、开发和部署您自己的加密货币:逐步指南