这是 Cyfrin Foundry Solidity 课程的一部分。
这个项目是一个稳定币系统,用户可以存入 WETH 和 WBTC,交换一个与 USD 锚定的代币。
- git
- 确保可以运行
git --version
,并且能够看到类似git version x.x.x
的响应。
- 确保可以运行
- foundry
- 确保可以运行
forge --version
,并且能够看到类似forge 0.2.0 (816e00b 2023-03-16T00:05:26.396218Z)
的响应。
- 确保可以运行
git clone https://github.com/Cyfrin/foundry-defi-stablecoin-cucd foundry-defi-stablecoin-cu
forge build
如果你不能或不想在本地安装和运行,可以选择在 Gitpod 上使用这个仓库。这样,你可以跳过 clone this repo
部分。
-
最新版本的
openzeppelin-contracts
在ERC20Mock
文件中有一些更改。为了跟随课程,您需要安装版本 4.8.3,可以通过以下命令安装:forge install openzeppelin/openzeppelin-contracts@v4.8.3 --no-commit
而不是:
forge install openzeppelin/openzeppelin-contracts --no-commit
make anvil
这将默认部署到本地节点。你需要在另一个终端窗口运行该节点,以便它能够进行部署。
make deploy
我们在视频中讲解了 4 个测试层级:
- 单元测试
- 集成测试
- 分叉测试
- 阶段测试
在本仓库中,我们覆盖了第 1 类单元测试和模糊测试。
forge test
forge coverage
覆盖率测试:
forge coverage --report debug
-
设置环境变量
你需要将SEPOLIA_RPC_URL
和PRIVATE_KEY
设置为环境变量。你可以将它们添加到.env
文件中,格式与.env.example
相似。 -
获取测试网 ETH
访问 faucets.chain.link 获取一些测试网 ETH,并确保它们出现在你的 MetaMask 中。 -
部署
make deploy ARGS="--network sepolia"
你可以直接使用 cast
命令与合约交互,而不需要编写单独的脚本。
例如,在 Sepolia 测试网上:
- 获取 WETH
cast send 0xdd13E55209Fd76AfE204dBda4007C227904f0a81 "deposit()" --value 0.1ether --rpc-url $SEPOLIA_RPC_URL --private-key $PRIVATE_KEY
- 批准 WETH
cast send 0xdd13E55209Fd76AfE204dBda4007C227904f0a81 "approve(address,uint256)" 0x091EA0838eBD5b7ddA2F2A641B068d6D59639b98 1000000000000000000 --rpc-url $SEPOLIA_RPC_URL --private-key $PRIVATE_KEY
- 存入并铸造 DSC
cast send 0x091EA0838eBD5b7ddA2F2A641B068d6D59639b98 "depositCollateralAndMintDsc(address,uint256,uint256)" 0xdd13E55209Fd76AfE204dBda4007C227904f0a81 100000000000000000 10000000000000000 --rpc-url $SEPOLIA_RPC_URL --private-key $PRIVATE_KEY
你可以通过运行以下命令来估算 Gas 消耗:
forge snapshot
你将看到一个名为 .gas-snapshot
的输出文件。
运行代码格式化:
forge fmt
slither . --config-file slither.config.json
一些用户曾经困惑 Chainlink-brownie-contracts
是否为官方的 Chainlink 仓库。以下是相关信息:
Chainlink-brownie-contracts
是官方的仓库。该仓库由 Chainlink 团队拥有和维护,且会按照正式的 Chainlink 发布流程进行发布。你可以看到它仍然位于 smartcontractkit
组织下。
Chainlink-brownie-contracts GitHub 仓库
“官方”发布流程是 Chainlink 将其包发布到 npm。因此,直接从 smartcontractkit/chainlink
下载是错误的,因为它可能包含未发布的代码。
因此,你有两个选择:
- 从 NPM 下载并将其作为 Foundry 的外部依赖。
- 从
chainlink-brownie-contracts
仓库下载,它已经从 NPM 下载并将其打包,便于你在 Foundry 中使用。
chainlink-brownie-contracts
是由 Chainlink 团队维护的官方仓库。- 它会按照 Chainlink 的正式发布周期(使用 npm)进行打包,便于在 Foundry 中使用。