dApp的主要特点
•开源:代码是公开的,任何人都可以查看、复制和审核。(这会随着新的dApps而改变,稍后会详细介绍)。
•智能合约[1]:它们自动在dApp上执行某些规则。
•公开:所有数据和记录,包括历史交易,都必须公开。
•去中心化:没有人可以阻止用户使用该应用程序,因此没有人完全负责。
DappTools是什么?DAPP系统开发详情:I35系统7O98开发O7I8
DappTools是一个类似于Hardhat和Brownie的框架,可以帮助智能合约开发者测试、部署和维护他们的代码。如果部署一个合约,你会将编译后的字节码存储在哪里?如何跟踪它的去向?重新部署新代码的难度如何?这些都是可以通过使用智能合约开发框架来解决的问题。
DappTools最初是用Haskell语言编写。然而最近,Paradigm团队采用了DappTools并用Rust重写了它,并称他们的新创造为Foundry。两者的工作方式相似,因为它们都以命令行为中心,高效,并且常常会涉及编写带有大量模糊测试的Solidity测试代码。
DappTools是许多业内领先协议的流行选择。
开始
一旦我们安装了这些工具,我们就可以克隆入门工具包仓库并开始使用它。
sh
git clone https://github.com/smartcontractkit/dapptools-starter-kit
cd dapptools-starter-kit
make#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,运行以下命令:
bash
ethsign import
现在将提示你输入私钥和密码。你可以从MetaMask等钱包中获取私钥。成功后,将私钥的地址添加到.env文件中的ETH_FROM变量下。有关示例,请参见.env.example文件。
可查看Makefile了解有关其背后工作原理相关的上下文。
如果你要部署到测试网,请确保你的钱包中有测试网ETH和LINK。你可以从Chainlink水龙头(https://faucets.chain.link/)中获取测试网LINK。
设置.env文件
你可以在.env.example中看到.env应该是什么样子的示例(部署到真实网络)。
ALCHEMY_API_KEY:可以通过获取Alchemy(https://www.alchemy.com/)帐户获取。
ETH_FROM:发送交易的钱包地址。你必须将要使用的地址的私钥加载到ethsign中,可参考上文。
ETHERSCAN_API_KEY:用于在Etherscan验证合约(可选)。
ETH_RPC_URL:用于在使用make deploy时有一个默认的部署网络(可选)。
测试网和主网部署
在.env文件中设置ETH_RPC_URL或ALCHEMY_API_KEY,然后运行以下命令中的一个:
计数器合约(Keeper兼容合约):
bash
make deploy CONTRACT=Counter
Price Feeds合约:
bash
make deploy CONTRACT=PriceFeedConsumer
Chainlink VRF消费者合约:
bash
make 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完成验证合约。