5大去中心化的应用开发框架

531 阅读14分钟

随着最近去中心化应用程序,或称DApps的兴起,专门为缓解DApp开发而创建的框架已变得越来越普遍。

与前端开发者的框架一样,DApp框架是为构建软件而编写的代码片断,这有助于使构建区块链的应用程序更加容易。虽然使用框架不是必须的,但它确实有助于更好、更快地开发软件。

在这篇文章中,我们将比较区块链工程师普遍使用的几个流行框架,看看它们的好处、缺点和网络,包括:

但是,在我们进入这个问题之前,让我们讨论一下现有的DApps的类型。

什么是DApps?

去中心化应用(DApps)提供了一种与网络应用互动的新方式。

你可能听说过 "区块链是未来 "或 "未来是去中心化的";这种心态渗透在基于区块链的新技术的快速发布中,意味着开发者可以获得可靠的框架。

基于区块链技术的DApps在由几台电脑或服务器组成的点对点(P2P)网络上运行,而不是传统的中央服务器。这些应用程序是建立在智能合约和共识过程或机制的概念上

这意味着当一个应用程序是去中心化的时候,它首先是用底层区块链技术创建的,并推送到一个首选的区块链网络。

请记住,区块链网络是由几千台被识别为节点或服务器的计算机组成的集合,每台计算机由一个人拥有。然后每个节点、服务器和计算机成为一个分布式数据库,这意味着每一个其他服务器都有相同数据的副本。

考虑到这一切,建立DApp的几个好处是,他们没有任何停机时间,因为他们没有中央服务器。

它们也不容易受到网络攻击,不能被关闭,因为没有中央服务器,所有的服务器都是分布式的。如果一个分布式服务器被攻击,其他服务器也会被察觉。

它也是开源的,使它对开发者透明和开放。

总之,DApp不依赖于传统的中央服务器或服务提供商,如谷歌云、Heroku或数字海洋。相反,它在区块链上的部署使其透明,没有中央位置来存储数据,也没有第三方控制。

DApps的类型

可用的不同类型的DApps通常是通过一个DApp为解决的区块链技术解决方案的不同部门来看的。例如,有史以来第一个建立的DApp是在以太坊区块链上

同样,比特币建立的主要原因是为了在货币转移的过程中去除金融中间人(即银行)。有了比特币,货币转移可以不使用银行而进行P2P。

与比特币一样,还有许多其他部门的DApps发挥着深思熟虑的作用。

去中心化的金融(DeFi)

去中心化金融,或称DeFi,是指使用比特币或以太坊等去中心化货币进行操作的金融服务的术语。

传统上,我们的金融服务是使用中央机构进行操作,比如银行和政府,包括提供贷款、储蓄计划和保险等金融服务。

然而,许多人认为由中央机构执行这些金融业务是有风险的,因为存在欺诈、腐败和管理不善。这就催生了DeFi。

建立DeFi应用程序需要选择平台(这包括以太坊、Solana、Binance智能合约等)。DeFi的主要重点是去除中间人,同时提供透明度和去中心化。

DeFi应用于去中心化的交易所、保险和贷款服务,其应用包括Pancackeswap1inch等。

去中心化的自治组织(DAO)

一个去中心化的自治组织,或称DAO,是一个完全通过代码/智能合约运作的组织。这些组织根据给定的规则运作,然后完全按照这些条款运作。

因此,一个DAO可以在没有人类活动的帮助下运行一个公司,去中心化的董事会为DAO的运行创造规则,这意味着不需要重复的董事会会议。

DAO的一个可能的例子是一个无人驾驶的出租车公司。在这个例子中,我们可以有一个DAO Lyft或DAO Uber,完全在任何区块链上部署的智能合约集合上运行。

这将简化操作,比如把利润送到哪里,比如MakerDao如何运作,何时何地发送出租车,何时给汽车加油,等等。

商品管理

商品管理DApp最常与供应链流程和系统有关。传统的供应链不能为产品提供洞察力或透明度,这意味着我们并不总是知道一个产品的真正材质或它来自哪里。

然而,有了供应链中的区块链,产品的可追溯性就有了;你可以追踪产品的来源,因为储存在区块链中的数据是去中心化的。这方面的一个例子是GX区块。

比较DApp框架

现在让我们来看看构建DApp的最常见的框架。

Hardhat

Hardhat是一个构建智能合约的框架,为专业人士提供了一个开发环境。这个开发环境让用户可以编译、运行测试、检查智能合约的错误或调试,并部署去中心化的应用程序。

Hardhat的安装

要安装Hardhat,确保你的电脑上安装了Node.js。然后,用npm init -y ,初始化一个项目,并运行下面的命令。

$ npm install -D hardhat

如果安装正确,用这个命令执行Hardhat。

$ npx hardhat 

888    888                      888 888               888
888    888                      888 888               888
888    888                      888 888               888
8888888888  8888b.  888d888 .d88888 88888b.   8888b.  888888
888    888     "88b 888P"  d88" 888 888 "88b     "88b 888
888    888 .d888888 888    888  888 888  888 .d888888 888
888    888 888  888 888    Y88b 888 888  888 888  888 Y88b.
888    888 "Y888888 888     "Y88888 888  888 "Y888888  "Y888

Welcome to Hardhat v2.0.8

? What do you want to do? …
❯ Create a sample project
  Create an empty hardhat.config.js
  Quit

npx 在安装时随同Node.js一起,并帮助执行安装在你本地环境中的可执行文件。

为了确保Hardhat在你的项目中执行,再次运行该命令。

$ npx hardhat
Hardhat version 2.0.8

Usage: hardhat [GLOBAL OPTIONS] <TASK> [TASK OPTIONS]

GLOBAL OPTIONS:

--config A Hardhat config file.
--emoji Use emoji in messages.
--help Shows this message, or a task's help if its name is provided
--max-memory The maximum amount of memory that Hardhat can use.
--network The network to connect to.
--show-stack-traces Show stack traces.
--tsconfig A TypeScript config file.
--verbose Enables Hardhat verbose logging
--version Shows hardhat's version.

AVAILABLE TASKS:

accounts Prints the list of accounts
check Check whatever you need
clean Clears the cache and deletes all artifacts
compile Compiles the entire project, building all artifacts
console Opens a hardhat console
flatten Flattens and prints contracts and their dependencies
help Prints this message
node Starts a JSON-RPC server on top of Hardhat Network
run Runs a user-defined script after compiling the project
test Runs mocha tests

To get help for a specific task run: npx hardhat help [task]

This same command also checks the available tasks Hardhart offers. Hardhat also offers an ecosystem of plugins, meaning there are more libraries you must install when working with Hardhat, including the following:
npm install --save-dev @nomiclabs/hardhat-waffle ethereum-waffle chai @nomiclabs/hardhat-ethers ethers

这包括:

  • hardhat-waffle ,一个用于测试你的智能合约的插件
  • hardhat-ethers, 它允许你从前端与你的智能合约进行互动
  • chai, 一个Node.js测试库

Hardhat网络

请记住,智能合约不能像传统的应用程序那样部署到中央服务器;相反,它们必须部署到需要花费ETH货币的Ethereum区块链网络。

因为以太坊网络是服务器,所以确保你在部署到以太坊网络(也叫主网)之前测试你的智能合约。为了测试,我们需要一个本地区块链,Hardhat通过Hardhat Network为我们提供了这个区块链。

要开始这个网络,请运行以下命令:

$ npx hardhat node
Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/

Accounts
========
Account #0: 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 (10000 ETH)
Private Key: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80

Account #1: 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 (10000 ETH)
Private Key: 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d
...

在你的项目文件夹中,你应该在合同文件夹中看到Greeter.sol

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

import "hardhat/console.sol";

contract Greeter {
    string private greeting;

    constructor(string memory _greeting) {
        console.log("Deploying a Greeter with greeting:", _greeting);
        greeting = _greeting;
    }

    function greet() public view returns (string memory) {
        return greeting;
    }

    function setGreeting(string memory _greeting) public {
        console.log("Changing greeting from '%s' to '%s'", greeting, _greeting);
        greeting = _greeting;
    }
}

要编译这个,请运行以下内容:

npx hardhat compile

Hardhat的好处

使用Hardhat作为你的DApp框架的几个最常见的好处包括以下几点。记住,这些是最常见的,你可能也有个性化的好处。

首先,Hardhat正在积极维护,因为它是构建去中心化应用的最常用框架之一。

这可以归功于它的开源形式,由于GitHub上有超过17000个用户,以及在发布这篇文章时有4.6千名成员的活跃的Discord社区,所以有大量的社区支持。它正在持续开发并迅速成长。

而且,由于它的技术是基于JavaScript和TypeScript的,对于JavaScript开发人员来说,很容易上手。

Hardhat的缺点

Hardhat的一个主要缺点是,它显然是为专业人士而不是初学者准备的,因为它的文档对如何开始使用相当简短。构建DApps的初学者可能需要在研究Hardhat之前尝试其他框架,如Truffle。

Truffle

Truffle是另一个在Ethereum区块链上构建去中心化应用程序的框架。它是最受欢迎的框架之一,也是先锋框架之一。它提供了编译、部署和测试的帮助。

大多数其他框架都遵循Truffle的路线,如果你是DApp开发的新人,你很可能会遇到Truffle,因为它的初学者友好设置。

它也可用于其他兼容挣值管理(EVM)的区块链,如Binance Smart Chain、Hyperledger、Polygon等。它还支持Solidity和Vyper语言。

而且,如果你熟悉Node.js,那是一种优势,因为Truffle是用JavaScript编写的。

Truffle安装

你必须在你的电脑上安装Node.js才能开始。安装很简单,你只需在你的项目中运行这个命令:

$ npm install -g truffle

接下来,在你的项目中初始化Truffle:

$ truffle init

如果成功,这就是你应该看到的下文:

Starting init...
================

> Copying project files to /Users/macbookpro/Desktop/Projects/dapp-truffle

Init successful, sweet!

Try our scaffold commands to get started:
  $ truffle create contract YourContractName # scaffold a contract
  $ truffle create test YourTestName         # scaffold a test


该项目结构如下。

$ dapp-truffle ls -1
contracts
migrations
test
truffle-config.js

Truffle网络

Truffle提供了一个开发网络来运行和测试DApps,而不需要部署到主网,并作为一个本地开发区块链进行测试

truffle-config.js 文件中,网络对象带有开发和高级网络配置:

networks: {
  development: {
    host: "127.0.0.1",
    port: 8545,
    network_id: "*", // match any network
    websockets: true
  },
  live: {
    host: "178.25.19.88", // Random IP for example purposes (do not use)
    port: 80,
    network_id: 1,        // Ethereum public network
  }
}

开发配置是默认的网络,你在这里运行以下命令:

$ truffle migrate --network

为了编译你的智能合约,使用下面的命令。

truffle compile

Truffle的好处

由于其受欢迎程度和广泛的使用,Truffle得到了用户的广泛支持,在发布时有超过35k的GitHub用户

而且,与Hardhat一样,维护工作是持续的,以提供积极的支持,Truffle支持本地区块链、testnet,并可轻松部署到主网。

Truffle的缺点

在Truffle中调试不像Hardhat那样容易,因为Truffle需要你创建事件并将其抛入日志,使你寻找该事件。而在Hardhat中,你有一个console.log ,在终端上提示信息,使你的调试更快。

Embark

Embark是EVM区块链的另一个框架,被认为是一个全栈框架。这意味着该框架提供了同时构建整个去中心化应用的前端和后端的解决方案。

Embark观察你的Solidity智能合约和前端(HTML和JavaScript)代码的变化,并将它们重新部署到区块链网络中。

Embark的安装

在安装Embark之前,确保你的电脑上安装了Node.js。此外,Embark还要求您同时安装以下内容。

虽然这些是可选的,但仍然建议安装它们。

安装Embark是非常直接的:

$ npm -g install embark

要开始使用Embark,我们必须首先运行以下命令:

$ embark demo
$ cd embark_demo

这将创建一个具有所有所需文件夹的脚手架应用程序来进行工作。有了这个,你就可以运行该应用程序来启动以太坊和IPFS节点了。记住,Embark会观察你的代码的变化,所以它会重新部署。

$ embark run

Embark网络

记住,我们仍然必须连接到区块链网络,这样我们就可以通过互动来测试它;Embark可以与Geth或Parity等客户端一起工作。

config/blockchain.js 文件中,你可以配置你想要的区块链。下面的代码是Embark文件中的一个样本。

module.exports = {
  default: {
    enabled: true,
    client: "geth"
  },
  development: {  
    clientConfig: {
      miningMode: 'dev'
    }
  },
  testnet: {
    endpoint: "https://external-node.com",
    accounts: [
      {
        mnemonic: "12 word mnemonic"
      }
    ]
  }
}

Embark的好处

Embark在GitHub社区的星级比Hardhat略高,约为3.4k星。它还配有一个UI仪表盘,为那些对部署到网络而不是控制台感兴趣的人提供了Embark正在进行的流程调查。

而且,如前所述,它是一个帮助建立全栈解决方案的框架,而本文提到的其他框架无法做到这一点。

Embark的缺点

根据我的观察,当试图运行Embark时,我在安装时遇到了一些错误。之后,当我检查当前安装的版本时,我的终端上出现了警告。

另外,这个项目看起来很陈旧,因为在写这篇文章的时候,已经有14个月没有对它做出贡献了。

布朗尼

Brownie是一个为EVM构建应用程序的框架,但基于Python,这意味着它支持编程语言Vyper,一种Python智能合约语言。Brownie还支持Solidity。

与本文提到的其他框架不同,Brownie的测试语言是使用假设的Python。

总的来说,Brownie处理部署、测试和调试。当部署到本地或测试网区块链时,部署很容易。

Brownie还支持主网分叉,如果你想与本地或测试网区块链上没有的某些智能合约进行通信,主网分叉会获取当前区块链的实时快照。

布朗尼的安装

可以通过pipxpip 进行安装,但pipx 是Brownie推荐的方式。

如果你没有安装pipx

python3 -m pip install --user pipx
python3 -m pipx ensurepath

然后,安装Brownie:

pipx install eth-brownie

布朗尼网络

Brownie提供允许测试的开发和实时环境。这些环境可以通过一些命令在终端上进行配置。

要查看现有的网络,请使用以下方法:

$ brownie networks list
Brownie - Python development framework for Ethereum

The following networks are declared:

Ethereum
  ├─Mainnet (Infura): mainnet
  ├─Ropsten (Infura): ropsten
  ├─Rinkeby (Infura): rinkeby
  ├─Goerli (Infura): goerli
  └─Kovan (Infura): kovan

Ethereum Classic
  ├─Mainnet: etc
  └─Kotti: kotti

Development
  ├─Ganache-CLI: development
  └─Ganache-CLI (Mainnet Fork): mainnet-fork

要添加一个新的网络,请添加以下命令:

$ brownie networks add \[environment\] [id] host=\[host\] [KEY=VALUE, ...]

Brownie的好处

Brownie有一个用于项目互动的内置控制台,这是其他框架所不具备的。例如,通过控制台添加网络可以让你快速运行命令来添加网络,而不是在你的代码库中写它。

它也优于其他框架,因为它完全支持Solidity和Vyper,这是两种不同的智能合约语言。

而且,在运行测试时,由于它的互动模式,如果测试失败,它会停止并显示在控制台,提醒用户。

Brownie的缺点

因为Brownie是一个基于Python的框架,所以JavaScript开发人员将不能轻易使用该框架。

OpenZeppelin

OpenZepplin是一个工具包,它的插件可以帮助更快地构建智能合约。例如,它有主要的标准代币,如ERC-20和ERC-721的实现等等。

要使用OpenZeppelin中的任何智能合约,你必须将它们导入你自己的智能合约中。请注意,OpenZeppelin实际上是作为一个npm包分发的,这意味着你必须先安装Node.js。

OpenZeppelin的安装

要安装OpenZeppelin,请使用以下命令:

$ npm install @openzeppelin/cli

要建立一个OpenZeppelin项目,使用下面的命令:

$ npx openzeppelin init

用下面写的OpenZeppelin文档中的一个智能合约例子,我们必须编译以下代码:

// contracts/Counter.sol
pragma solidity ^0.5.0;

contract Counter {
    uint256 public value;

    function increase() public {
      value++;
    }
}

要编译,请运行以下程序:

$ oz compile

你可以使用openzeppelin compileoz compile ,但oz 只是一个简短的命令来挑选。

OpenZeppelin网络

部署我们的智能合约和编译它们一样简单;OpenZeppelin使用Ganache作为开发的网络,在那里你可以有一个本地的区块链。如果你还没有Ganache,你应该安装它:

$ npm install ganache-cli

要启动一个新的进程,运行以下程序:

$ npx ganache-cli --deterministic

然后,部署智能合约:

$ npx oz deploy
✓ Compiled contracts with solc 0.5.9 (commit.e560f70d)
? Choose the kind of deployment: upgradeable
? Pick a network: development
? Pick a contract to instantiate: Counter
✓ Added contract Counter
✓ Contract Counter deployed
? Call a function to initialize the instance after creating it?: No
✓ Setting everything up to create contract instances
✓ Instance created at 0xCfEB869F69431e42cdB54A4F4f105C19C080A601

OpenZeppelin的好处

OpenZeppelin有很多已实现的功能,比如创建ERC-20。因为这在OpenZeppelin内已经有了,所以你不需要重新发明轮子,在开发时节省时间。

它还有详尽的文档,帮助您了解OpenZeppelin提供的内容。它的大部分合同功能是可以升级的,这意味着你可以自己修改插件。

OpenZeppelin的缺点

OpenZeppelin提供了可升级的合同,但缺点是有一个管理员角色来处理实施,这可能会带来安全风险。

如何为你的DApp项目选择合适的框架

为项目选择正确框架的最好方法是了解你想建立什么,以及你需要什么必要的工具包。也许你想要的是基于Python的东西,这无疑表明Brownie框架是你唯一的选择。

在选择框架时要考虑的另一个方面是了解其社区和对所选框架的支持。如果有一个重大的错误怎么办?你和你的团队能修复它吗?或者社区是否足够强大来帮助修复它?

结论

随着最近DApps开发的兴起,更多的工具已经涌现出来,以帮助更快地建立应用程序。最常见和最常用的是Hardhat和Truffle,但这并不限于所有开发者。

如果你心中有一个项目,请略过每个框架的文档,看看哪个最适合你。请注意,这些框架正在不断进行维护,可能也需要你的支持,因为它们在Web3中是开源的。