如何使用DAppTools

  • Chainlink
  • 更新于 2022-04-07 08:48
  • 阅读 2573

在本篇DappTools教程中,你将学习如何通过DappTools框架创建、测试以及部署智能合约。

本文含有大量链接,需要查看具体内容的小伙伴请查看原文:https://blog.chain.link/how-to-use-dapptools/

在编写智能合约时,开发者只需要了解一种语言,例如Solidity、Vyper或Rust。但是,选择一个框架并围绕该框架学习所有的语言可能会很棘手。

学习像DappTools这样的简约命令行框架可以避免这些问题,且能使得Web3开发者的生活更加轻松。

在本篇DappTools教程中,你将学习如何通过DappTools框架创建、测试以及部署智能合约。

下面是本教程随附的视频教程:

2.png

视频详情:https://youtu.be/csTWByu481I

DappTools是什么?

DappTools是一个类似于Hardhat和Brownie的框架,可以帮助智能合约开发者测试、部署和维护他们的代码。如果部署一个合约,你会将编译后的字节码存储在哪里?如何跟踪它的去向?重新部署新代码的难度如何?这些都是可以通过使用智能合约开发框架来解决的问题。

DappTools最初是用Haskell语言编写。然而最近,Paradigm团队采用了DappTools并用Rust重写了它,并称他们的新创造为Foundry。两者的工作方式相似,因为它们都以命令行为中心,高效,并且常常会涉及编写带有大量模糊测试的Solidity测试代码。

DappTools是许多业内领先协议的流行选择。

为什么使用 DappTools?

如果你是热爱Linux、bash脚本、追求高效、以命令行为中心来编码的开发者,那么这绝对是你应该尝试的智能合约框架。此外,如果你不熟悉JavaScript 或Python,这对你也很有用!

我们在学习什么?

在本教程中,我们将学习如何:

  1. 使用DappTools
  2. 使用dapptools-starter-kit部署由Chainlink驱动的混合型智能合约

以下是通过此入门工具包使用Chainlink服务的一些示例:

安装

要求

首先,我们需要安装一些东西。

你可能已经安装过make命令,如果没有的话,你需要make。可以按照这些步骤检查你是否已安装make。

开始

一旦我们安装了这些工具,我们就可以克隆入门工具包仓库并开始使用它。

shgit clone https://github.com/smartcontractkit/dapptools-starter-kitcd dapptools-starter-kitmake # This installs the project's dependencies.make test

现在你有了这些文件,我们来看看所有的东西是做什么的:

  • Makefile:放置脚本的文件。DappTools是基于命令行的,makefile能帮助我们运行只需要输入几个字符的大型命令。
  • lib:此文件夹用于存放外部依赖项,例如OpenZeppelin或ds-test。
  • out:编译代码的去向。类似于 Brownie 中的 build 文件夹或 Hardhat 中的 artifacts 文件夹。
  • src:这是智能合约文件所在的位置。类似于Brownie和Hardhat中的contracts文件夹。

测试

现在我们做一些测试!要进行测试,我们可以运行make test或dapp test。

来自DappTools的所有命令都可用于此仓库,包括dapp build、ethsign和dapp test等。

导入外部依赖

假设我们想使用OpenZeppelin标准创建一个 NFT。要安装外部合约或包,我们可以使用dapp install命令。我们需要指定GitHub仓库的组织和要安装的仓库名称。

首先,我们需要提交到目前为止的更改。DappTools将外部包作为git子模块引入,因此我们需要先提交。

运行:

git add .git commit -m ‘initial commit’

然后,我们可以安装我们的外部包。例如,对于OpenZeppelin,我们将使用:

dapp install OpenZeppelin/openzeppelin-contracts

现在应该可以在lib文件夹中看到一个标有openzeppelin-contracts的新文件夹,因为它是从 GitHub 下载的。这个仓库已经包含OpenZeppelin合约,所以会有一些重复,但我们仍然需要了解它是如何工作的。

部署

要进行部署,首先需要设置ethsign和.env文件。

设置你的帐户/ethsign

要将你的私钥导入DappTools,可以使用keystore或ethsign。ethsign附带dapptools的安装。对于ethsign,运行以下命令:

bashethsign import

现在将提示你输入私钥和密码。你可以从MetaMask等钱包中获取私钥。成功后,将私钥的地址添加到.env文件中的ETH_FROM变量下。有关示例,请参见.env.example文件。

可查看Makefile了解有关其背后工作原理相关的上下文。

如果你要部署到测试网,请确保你的钱包中有测试网ETH和LINK。你可以从 Chainlink水龙头(https://faucets.chain.link/)中获取测试网 LINK。

设置.env文件

你可以在.env.example中看到.env应该是什么样子的示例(部署到真实网络)。

  1. ALCHEMY_API_KEY:可以通过获取 Alchemy (https://www.alchemy.com/)帐户获取
  2. ETH_FROM:发送交易的钱包地址。你必须将要使用的地址的私钥加载到ethsign中,可参考上文。
  3. ETHERSCAN_API_KEY:用于在Etherscan验证合约(可选)。
  4. ETH_RPC_URL:用于在使用make deploy时有一个默认的部署网络(可选)。

测试网和主网部署

在.env文件中设置ETH_RPC_URL或ALCHEMY_API_KEY,然后运行以下命令中的一个:

计数器合约(Keeper兼容合约):

bashmake deploy CONTRACT=Counter

Price Feeds合约:

bashmake deploy CONTRACT=PriceFeedConsumer

Chainlink VRF消费者合约:

bashmake deploy CONTRACT=VRFConsumer

你可以在scripts文件夹中各自的deploy文件中改变其部署参数。所有的构造器参数都在./src/helper-config.sh文件夹中创建。在这里你可以为不同网络分配不同的构造器参数。

本地测试网

在一个终端上

dapp testnet

将你的ETH_RPC_URL改为http://127.0.0.1:8545

然后运行你的部署脚本。

在Etherscan上进行验证

部署完合约后,你可以在Etherscan上对该合约进行验证:

ETHERSCAN_API_KEY=<api-key> dappverify-contract<contract_directory>/<contract>:<contract_name><contract_address>

例如:

ETHERSCAN_API_KEY=123456765 dapp verify-contract ./src/Counter.sol:Counter 0x23456534212536435424

可查看DappTools文档以了解如何通过DappTools完成验证合约。

与合约交互

为了与我们的合约交互,我们使用seth命令。假设我们已经将 PriceFeedConsumer.sol 部署到 Kovan,现在我们要调用 getLatestPrice 函数。我们要怎么做呢?

ETH_RPC_URL=<YOUR_RPC_URL> seth call <YOUR_CONTRACT_ADDRESS> "getLatestPrice()"

例如:

ETH_RPC_URL=https://alchemy.io/adsfasdf seth call 0xd39F749195Ab1B4772fBB496EDAF56729ee36E55 "getLatestPrice()"

我们会得到类似 0x0000000000000000000000000000000000000000000000000000004c17b125c0的输出,这是 326815000000 的十六进制表示。

这是调用交易(不是花费gas)。要更改区块链的状态(消耗gas),我们要使用seth send。

假设我们部署了一个 VRFCConsumer 合约,我们想要调用getRandomNumber:

首先,我们需要在 Kovan 链上向我们的合约发送一些 LINK:

ETH_RPC_URL=<YOUR_RPC_URL>ETH_FROM=<YOUR_FROM_ADDRESS> seth send <LINK_TOKEN_ADDRESS>"transfer(address,uint256)" <VRF_CONSUMER_ADDRESS>1000000000000000000

如:

ETH_RPC_URL=https://alchemy.io/adfasdfETH_FROM=0x12345 seth send 0xa36085F69e2889c224210F603D836748e7dC0088"transfer(address,uint256)" 0xa74576956E24a8Fa768723Bd5284BcBE1Ea03adA100000000000000000

这里100000000000000000 = 1 LINK

然后,我们可以调用 getRandomNumber 函数:

ETH_RPC_URL=<YOUR_RPC_URL>ETH_FROM=<YOUR_FROM_ADDRESS> seth send <VRF_CONSUMER_ADDRESS>  "getRandomNumber()"

稍等一会后,读取结果:

ETH_RPC_URL=<YOUR_RPC_URL> seth call<VRF_CONSUMER_ADDRESS> "randomResult()"

可以看到,将这些脚本放在我们的脚本文件夹中会很好用。如果你也想参与贡献,请提交PR(Pull Request)!

资源列表

本教程的一些有用资源:

  • DappTools
  • Hevm Docs
  • Dapp Docs
  • Seth Docs
  • Chainlink
  • awesome-dapptools

总结

DappTools 是一个非常强大的应用程序,可以帮助你构建颠覆性的dApp。我们建议你了解并尝试一下,看看你能够利用Chainlink去中心化服务来创造一些什么作品。

获取更多关于Chainlink的信息,请访问chain.link或在docs.chain.link阅读文档。要讨论集成问题,请联系专家。

本文首发于:https://mp.weixin.qq.com/s/IqxW3bMZs5gatmwhnjp5bw

点赞 1
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Chainlink
Chainlink
顶尖的智能合约去中心化预言机网络解决方案 https://chain.link/