原文标题:《DeFi Lending Concepts Part 1: Lending and Borrowing》
原文作者:Tal
原文编译:Kxp,Blockbeats
这篇文章是三系列文章的第一篇,讨论 DeFi 贷款协议的工作原理——它们的关键组成部分、公式和用例。在这个过程中,我们将强调,尽管协议使用不同的创造性命名方法,但它们倾向于重复、迭代和分享核心概念。其中一篇博客详细介绍了如何使用它 ERC20 Token代表用户在贷款池中的份额。我们将从分析这些协议的独特元素开始,并提供技术概念来区分它们的工作方式。
借贷池
传统金融(或 TradFi)其中,贷款由第三方金融机构调整。这些金融机构被委托执行两项关键任务:强制贷款人向贷款人支付利息,并评估和防止被认为是不可信的当事人参与这些活动。
相比之下,去中心化金融(或 DeFi)在中国,第三方借款人和贷款人不值得信赖。这种缺乏信任激发了在链条上促进贷款过程的创新设计。
贷款池是智能合同。DeFi 协议用户可以存入资产(通常 ERC20 Token),目的是利用合同借出他们存入的资产。其他用户可以与贷款池互动,享受即时贷款,即在池中抵押资产。
与传统的金融方法相比,借贷池在借贷方面有一些重大优势,如:
·在 DeFi 贷款不受贷款资金和贷款金额的影响 1:1 限制可用性。相反,协议中所有用户的资金都存入池中,从而创建足够大的Token库存,以立即满足贷款需求。
·DeFi 不需要还款计划。贷款是根据之前存入的抵押品进行的,用户可以随时选择还款。
这时,你可能会想,「如果我不得不提供相同价值(甚至高估)的资产作为抵押品,为什么要在贷款协议中借入资产?我不应该出售抵押品并购买我借来的资产吗?」
实际上,这个 DeFi 贷款协议似乎只允许完全抵押贷款(或超额抵押贷款)作为一种有趣的贷款「交易」打开大门的方法:杠杆。
假设你对 WBTC 非常乐观,非常确定它的价值会飙升!你可以在你最喜欢的贷款协议中存储一些 WBTC(价值 1000 然后用它借入一些稳定的货币(比如美元) USDC),然后用这些稳定币在交易所购买更多 WBTC(对于我们的场景,假设你初始存款的一半,也就是说 500 美元)。在这种情况下,你暴露在外 WBTC 的价值为 1500 美元,你的初始存款只有 1000 美元。
但是,如果你把你的 500 美元的 WBTC 抵押品存入协议借入更多 USDC 呢?这个过程被称为超额杠杆,你可以一直这样做,直到你超出借款能力,协议政策会阻止你这样做。
假设你在类似的情况下是对的 WBTC 持悲观态度(毕竟现在是) Crypto 冬天)。您可以在我们之前的场景中采取相反的操作 USDC 作为抵押品存入协议借入 WBTC,然后立即用更稳定的货币替换它。假如你的预测是现实的,WBTC 当价格下跌时,你可以以更便宜的价格在交易所购买相同数量的价格 WBTC,偿还贷款并获得额外的贷款并获得额外的贷款 USDC,打开(并关闭)WBTC 空头头寸。
Token的份额
与传统金融一样,将资产存入贷款池的用户将受到长期保留资金的激励,并获得存款利息。利息随时间积累,按协议中用户存款的百分比计算,并由相应的存款用户声明。用户在贷款池中保留资产的时间越长,他们获得的利息就越多。
该协议如何记录每个用户在池中的份额?当用户将资产存入池中时,他们「份额」该协议将稀释所有用户的份额,并相应地反映这一点。然而,该协议不会直接跟踪和更新每个用户的池份额,而是只处理存款人份额的变化,并在每次提取或存储时主动更新其他用户的份额。
你可能会认为这个协议可以让你既有蛋糕又吃蛋糕。但事实并非如此:
该协议通过铸造和销毁 ERC20 Token来处理利息分配,我们称之为「Token的份额」,它代表了贷款池中一个贷款人的份额(或存款资产的比例)。这种「Token的份额」自动调整其他设计「股东」以反映的股份稀释「份额」铸造和销毁与其基本资产的存款或提取成比例。
下面,我们将提供如何使用不同的协议「Token的份额」实际示例,并讨论它们的相似之处。
aToken:AAVE 的「Token的份额」
aToken 是 AAVE Token的收入是由贷款池在存入和提取资产时铸造和销毁的。
aToken 是集成到 AAVE 类似于协议 ERC20 Token,所以用户可以进入的每个不同市场(存入抵押品)都有一个相应的 aToken。
假如我们查一下 AAVE 当用户将资产存入池中时,我们可以看到贷款池合同的基本操作:
我们可以看到与用户存入的市场相对应 aToken 将被称为「铸造」函数。
我们可以看到,铸造的实际数量是:
如上图所示,在这个例子中,用户加入了一个已经在以前的存款中获得了一些利息的市场。上述方程式帮助我们理解这一点,因为它显示了如何使用整体指数来考虑所有用户的利息积累,该指数将在各种操作(存款、提款等)中更新。
当用户提取基本资产时,liquidityIndex 用作乘数来计算交易中欠Token的数量。
以下是贷款池合同的相关代码片段:
在这里,aToken 合约的 balanceOf 函数有点奇怪。毕竟,我们刚刚决定铸造 aToken 数量不同于存入的基本资产。调用 IAToken(aToken).balanceOf(address(user)) 如何产生用户即将提取的基本资产数量(如函数底部所示)?原因如下:
·当用户提取他们的资产时,他们的 aToken 它将被销毁。这些被销毁的 aToken 保持其他用户所拥有的 aToken 总量与用户资产提取后的份额成比例。
·每次提取都会更新用户提取资金的市场利率。
正如我们之前所说,aToken 是类似于 ERC20 Token。我们强调它们是「类似」ERC20 Token,因为它们的 balanceOf 函数具有独特的属性。常规 ERC20 Token中,balanceOf 函数返回地址所拥有的Token数量。
由于 aToken 代表池的份额,而不是直接价值,所以 aToken 的 balanceOf 函数返回协议欠用户基本Token的数量,以补偿其存款。
在此,该 balanceOf 函数覆盖继承 aToken 合约中的 balanceOf 函数。结果,在这个例子的逻辑中 balanceOf 逻辑被执行,而不是用户Token数量的常规(继承)映射搜索。
然后乘以上述Token的数量 getReserveNormalizedIncome 因此,该函数执行以下逻辑:
这里的分支我们可以识别:
·如果保留数据已经在该块中更新:返回市场 liquidityIndex 值,因为它已经更新了。
·否则:我们需要看看 calculateLinearInterest 找出下一个过程中发生了什么。
当前市场的 ReserveData 对象中的 currentLiquidityRate 和 lastUpdateTimestamp 函数的结果如下:
让我们更好地理解这个方程式的组件 linearInterest 值的要点:
·currentLiquidityRate:它可以被视为我们市场的年利率(APY)
·block_{timestamp} - lastUpdatedTimestamp:自上次更新以来的时间
注:因为我们在那里 getNormalizedIncome 选择了第二个分支,所以此时保证该值为正值。
因此,我们可以将这种利息应计机制视为一种简单的利息复合机制,它在每个区块中复合。现在,我们已经确定了为用户累计的利息金额,我们只需要乘以流动性指数,然后在 balanceOf 用户在函数中的标准化收入乘法:
现在我们知道了 aToken 背后的逻辑,但我们仍然需要解决 liquidityIndex 工作原理之谜。
在下面的例子中,liquidityIndex 可定义为在一定时间内储备积累的利息:
回顾前面提到的 liquidityRate 变量 - 现在我们将讨论它的计算 liquidityIndex 使用中文。只有当 liquidityRate 大于 0 只有这样,利息才会积累 - 换句话说,只有市场上有任何东西 APY 只有积累利息。这是有意义的。
让我们快速回顾一下 calculateLinearInterest 实际操作:
上述逻辑可以转换为以下方程式:
就像我们能在那里一样 DefaultReserveInterestRateStrategy.sol 在合同中看到的,liquidityRate 定义如下:
因此,可以写为:
整体贷款利率(overallBorrowRate)定义如下:
我们可以写成:
利用率(utilizationRate)可定义为:
在定义利用率时,我们更容易考虑储备中的流动性(当前借出的流动性)与市场中的总流动性之间的比率,可以简化为:
现在我们可以用这两个定义来编写流动性指数的方程式:
由于 totalBorrows 它存在于分子和分母中,所以我们可以写成:
关于流动性指数的方程式,现在已经说够了,以后再讨论这个定义。
cToken:Compound 的「Token的份额」
让我们继续我们的下一个贷款协议示例,Compound。
Compound 使用称为 cToken 的「Token的份额」处理贷款和贷款。这个Token是为了 Compound 协议中所有可用于用户贷款的资产都可以记账。
与我们在 AAVE V2 类似于中讨论,Compound 的「Token的份额」铸造并用于赎回基本资产。
Compound 使用的汇率相似 AAVE V2 为了确定应该铸造多少流动性指数 cToken。这个汇率就是这样一个函数:
让我在这里解释一下关键术语:
·totalCash:cToken 账户拥有的 ERC20 基本Token的数量。
·totalBorrows:借款人在市场上借钱 ERC20 基本Token的数量。
·totalReserves:一定数量的保留 ERC20 基本Token可以通过治理提取或转移。
·totalSupply:返回 cToken 总供应量 ERC20 函数。
有了这个背景,我们就可以写了 Compound 汇率方程:
当用户存入 ERC20 当Token时,汇率决定了铸造多少 cToken 作为回报:
要铸造的 cToken 数量由以下方程定义:
eToken:Euler 的「Token的份额」
为了进一步巩固这些协议之间的相似性,让我们分析另一个贷款协议 Euler,看看它是如何处理贷款的。
在下面的例子中,deposit 允许用户存储函数 ERC20 以换取Token eToken。
正如我们所看到的,internalAmount 为此转移铸造 eToken 数量。
与 Compound 名称和函数 exchangeRate 又一次直接重叠。
让我解释一下计算汇率的关键参数:
·poolSize:使用基本资产 ERC20 在合同中,以池合同地址调用 balanceOf(address)函数的结果。
·totalBorrows:借出的 ERC20 目前,基本Token的总量不在池中。
·totalBalances:所有 eToken 持有人的总余额。
因此,方程式将是:
总结
我们已经涵盖了 3 个人贷款协议:
·AAVE V2
·Compound
·Euler
我们已经检查了「Token的份额」铸造方式,以及他们如何通过贷款池交换存款资产。
我们提出的三个方程可以概括为一个简单的方程:
请记住,汇率可以按照协议定义的任何方式定义。这些任何汇率都可以增加铸造的代币数量(如果小于 1),如果大于 1 会减少数量。
在 AAVE V2 和 Compound 我们已经看到了 someRate 变量的一些相似之处。在 Compound 中,someRate 是:
而对于 AAVE V2,someRate 定义如下:
流动性指数的定义如下:
虽然我们不能将每个协议的汇率归纳为一种公式,但对于 AAVE2 和 Compound,我们知道汇率是市场上总流动性的函数。回到我们的方程式,给定 totalLiquidity 是市场中 ERC20 基本Token的总量,所以在 exchangeRate 表达分子中和 liquidityRate 分母中的分子功能相同。
Fluid协议:DeFi碎片化流动性解决方案
作者:Sirius,Go2MarsCapital 来源:X(原推特)@sirius_zzzz Fluid协议概述 Fluid由 @instadapp 团...
Neo将推出EVM兼容、抗MEV的侧链,旨在提升DeFi友好度
2023年10月27日,在Neo主网发布七周年后,Neo创始人达鸿飞宣布了Neo的一项重大新举措:Neo正在创建一条能够抵制矿工可提取价值(MEV)攻击、兼容以...
万字长文:全景解析 DeFi 代币经济学
撰文:Carolina Goldstein、Tiago Fernandes,Three Sigma;编译:Frank,Foresight News 介绍 ...
全景解析DeFi代币经济学:如何塑造DeFi协议的当前格局?
原文作者:Carolina Goldstein、Tiago Fernandes,Three Sigma 原文编译:Frank,Foresight News ...