# 建立你自己的去中心化借贷协议

By [BuildBear](https://paragraph.com/@buildbear-2) · 2023-06-13

---

去中心化借贷协议允许用户通过智能合约直接在区块链上借贷加密货币，无需银行等中介机构。 在本教程中，您将学习如何使用 Solidity 从头开始构建您自己的去中心化借贷协议。

到本教程结束时，您将对去中心化借贷协议背后的基本原则有深入的了解，包括如何增加流动性、借入资金和偿还贷款。 您还将获得在以太坊区块链上编写和部署智能合约的实践经验。

让我们开始吧！

先决条件 在开始之前，请确保您的系统上安装了以下先决条件：

NodeJS（版本 >= 10） 纱 混帐 入门 首先，导航到 [scaffold-eth x BuildBear](https://github.com/BuildBearLabs/scaffold-eth) 存储库。

这就是我们推荐使用 scaffold-eth x BuildBear 的原因：

它允许您直接从 CLI 轻松分叉 EVM 兼容链（例如 Ethereum、Polygon、Binance Smart Chain、Fantom、Optimism 和 Arbitrum Mainnet）。 为您节省宝贵的时间，否则这些时间将花费在搜索工作 RPC 上。 您可以使用 CLI 毫不费力地铸造原生和 ERC20 代币，无需浪费时间寻找功能性水龙头。 首先，单击“Fork”按钮以在您自己的 GitHub 帐户上创建存储库的副本。 在继续之前，请等待分叉过程完成。

接下来，打开一个终端并克隆分叉的存储库，其中包括构建去中心化应用程序所需的所有组件：

`git clone <paste the URL you fork repo>` `cd scaffold-eth`

要安装所有必需的包，请执行以下命令： `yarn install`

要分叉主网，请使用以下命令：选择您想要的区块链并输入您希望分叉的区块编号。 或者，您可以保留默认值。 `yarn fork-bb`

![](https://storage.googleapis.com/papyrus_images/7e011fa3d939422599cff2900a1099c008b0705c312835bc382575787d9aed1d.gif)

部署合约

`yarn deploy`

![](https://storage.googleapis.com/papyrus_images/cc53d05079b8e40633ed90ae3c9fead039812756b3aba757e768bda5769cd2df.png)

启动前端

`yarn start`

应用程序运行后，您可以通过 [http://localhost:3000](http://localhost:3000) 访问它，您应该会看到以下内容：

![](https://storage.googleapis.com/papyrus_images/ad87deada8cb1bfccff2991c53d99b628d5d451c6b2e169d41edc9b473aac2d8.png)

在深入研究智能合约之前，让我们先从探索 Lending 的功能开始。 首先，导航到借出页面。

![](https://storage.googleapis.com/papyrus_images/b8cda153a87604b4ca43f7c8a63d45ad79dfed221b55b246c962fa37a4a565fb.png)

要领取免费的 ETH，请连接您的钱包并点击从水龙头获取资金。

![](https://storage.googleapis.com/papyrus_images/082f6d473d03a9f7c6f45bae970e869b9700c0ff17225ded5cf639feb0faa095.png)

增加流动性

输入所需的代币数量。 输入代币数量后，单击批准代币，然后继续添加流动性 批准 Metamask 上的交易：将出现 Metamask 提示，请求您的批准。 提供的总流动性和流动性将被更新。

![](https://storage.googleapis.com/papyrus_images/1bd33ddc26d58310d56f92a80c303ca46261f9d39b404cdd04e7530253409309.png)

让我们深入了解智能合约

我们可以在 packages/hardhat/contracts 中找到 lending.sol 合约：

![](https://storage.googleapis.com/papyrus_images/eb00c67f1448f762f4706bd884949a52a22d88be8f4d17f6c0fb08836e803c76.png)

该合约使用 Solidity 版本 pragma ^0.8.0 并在 MIT 许可下获得许可。 该合约从 OpenZeppelin 库中导入一个外部合约：IERC20.sol。 这些合约提供标准化的 ERC20 代币功能。 addLiquidity(uint256 \_amount)：此函数允许用户将抵押代币存入合约。 \_amount 参数指定要存入的抵押代币数量。 该函数首先将抵押代币从用户转移到合约，然后将抵押代币添加到合约的流动性中。 此函数发出 LiquidityAdded 事件。 borrow(uint256 \_amount)：该函数允许用户使用他们存入的抵押代币作为抵押品从合约中借贷代币。 \_amount 参数指定要借入的借出代币数量。 该函数首先根据抵押比率和借出代币数量计算出所需的抵押金额，然后确保用户发送了足够的 ETH 来支付抵押和费用。 然后该函数将借出代币转移给用户并更新该用户的借入金额。 此函数发出 Borrow 事件。 repay(uint256 \_amount)：此函数允许用户偿还借入的借贷代币并取回其抵押代币。 \_amount 参数指定要偿还的借出代币数量。 该函数首先将借出代币从用户转移到合约，然后根据用户应取回的抵押代币数量减少合约的流动性。 最后，该函数将抵押代币从合约转移到用户。 此函数发出 Repay 事件。 withdraw(uint256 \_amount)：该函数允许用户从合约中提取他们存入的抵押代币。 \_amount 参数指定要提取的抵押代币数量。 该函数首先检查合约中请求的金额是否可用以及用户是否有足够的余额，然后将抵押代币从合约转移给用户，最后通过提取的抵押代币数量减少合约的流动性。 此函数发出 Withdrawal 事件。 getLiquidity()：此函数返回合约当前持有的抵押代币数量。 getCollateralRatio()：该函数返回合约当前要求的抵押品比率，即每借出借出代币所需的抵押品代币数量。 getCollateralToken()：该函数返回合约使用的抵押代币合约地址。 getOwner()：此函数返回合约所有者的地址。 getBorrowAmount(address \_user)：该函数返回指定\_user当前借出的代币数量。 getBalance(address \_user)：此函数返回指定\_user存入的抵押代币的当前余额。 恭喜

我们已经成功开发了一个基本的借贷协议，使用户能够进行借贷。

在 Twitter 和 LinkedIn 上分享您的项目并标记 BuildBear。

如果您欣赏我们正在做的事情，请在 [Twitter](https://twitter.com/_BuildBear) 和 [LinkedIn](https://www.linkedin.com/company/build-bear/) 上关注我们，如果您还没有关注我们，请加入电报群。

如果您喜欢我们的工作，请给我们一个鼓掌👏。

Github Repo：[Buildbear 教程](https://github.com/BuildBearLabs/scaffold-eth)

关于建筑熊：

BuildBear 是一个为团队大规模测试 dApp 的平台。 它为用户提供他们自己的私有测试网来测试他们的智能合约和 dApp，它们可以从任何 EVM 链中分叉出来。 它还提供了用于测试目的的水龙头、资源管理器和 RPC。

BuildBear 旨在构建一个工具生态系统，用于为团队大规模测试 dApp。

阅读我们过去的文章并继续学习：

---

*Originally published on [BuildBear](https://paragraph.com/@buildbear-2/Lu1eEG4sfOJ50RYDhZlq)*
