摘要

本文介绍了一种基于供求关系的去中心化协议,该协议建立了由算法设定利率的货币市场,允许用户无摩擦地交换以太坊资产的时间价值。

1、介绍

加密货币和数字区块链资产的市场已经发展成为一个充满活力的生态系统,投资者、投机者和交易者交换数千种[1]区块链资产。不幸的是,金融市场的复杂性并没有跟上:参与者几乎没有能力交易资产的时间价值。

利率填补了拥有闲置资产的人与没有资产(指可用于生产或投资的资产)的人之间的差距;交易资产的时间价值对双方都有利,并能创造非零和财富。对于区块链资产来说,目前存在两个主要缺陷:

l  借款机制极其有限,这就导致了资产定价错误(比如估值深不可测的“骗子币”,因为没有办法做空它们)。

l  区块链资产有负收益,这是由于巨大的存储成本和风险(不管交易所内外),而没有自然利率来抵消这些成本。这加剧了波动性,因为持币是没有激励的。

中心化交易所(包括 Bitfinex、Poloniex 等)允许客户以保证金交易区块链资产,交易所内建有“借贷市场”。这些是基于信任的系统(你必须相信交易所不会被黑客入侵,不会偷走你的资产,也不会错误地平仓),仅限于特定的客户群体,也仅限于少数(最主流的)资产。最后,余额和头寸都是虚拟的;你不能移动链上的仓位,例如在智能合约或 ICO 中使用借来的以太坊和其它代币,这使得 dApps[2]无法访问这些设施。

点对点协议直接促进了市场参与者之间的抵押贷款和无抵押贷款。不幸的是,去中心化会给用户带来巨大的成本和摩擦;在每一个审查的协议中,贷款人都被要求发布、管理和(在有抵押贷款的情况下)监督贷款提供和主动贷款,贷款履行往往是缓慢和异步的(贷款需要时间筹措资金)[3-6]。

在本文中,我们将介绍一种去中心化的系统,用于无摩擦地借贷以太坊代币,不存在现有方法的缺陷,使适当的货币市场可以运作,并创造一个安全的正收益的方法来存储资产。

2、Compound 协议

Compound 是一种在以太坊区块链上创建货币市场的协议,这些市场是基于资产的供求关系,通过算法推导出利率的资产池。资产的供应商(和借款人)直接与协议交互,赚取(和支付)浮动利率,而不必与同行或交易对手协商诸如期限、利率或抵押品等条款。

每个货币市场对应唯一的一种以太坊链上资产(如ETH、ERC-20 稳定币(如 Dai)或 ERC-20 效用型代币(如 Augur)),并包含一个透明和可公开检查的账簿,记录所有交易和历史利率。

2.1 供应资产

在交易所或 P2P 平台,用户的资产是通过匹配的办法借给另一个用户,而 Compound 协议聚合了每个用户的供应;当用户提供一项资产时,它就变成了同质化的资源。这种方式提供的流动性比直接贷款大得多;除非市场上的所有资产被借光(见下文:协议激励流动性),用户可以随时提取资产,而不必等待特定的贷款到期。

供应给市场的资产由一个 ERC-20 代币余额(“cToken”)表示,该余额使所有者有权获得越来越多的底层资产。随着货币市场产生利息(这是一个关于借款需求的函数),cToken 可以兑换相比之前更多的底层资产。这样,赚取利息只需要简单地持有一个 ERC-20 cToken。

2.1.1 主要用例

长期投资于 ETH 和其它代币的个人(“HODLers”)可以使用 Compound 货币市场作为他们投资额外回报的来源。例如,拥有 Augur 的用户可以向 Compound 协议提供他们的代币,并获得利息(以 Augur 计值),而不必管理他们的资产、满足贷款请求或承担投机风险。

无论是 dApps、机器或者交易所,只要持有这些市场的代币余额,都可以把 Compound 协议当成一种货币化的来源,使用这些余额获取增量回报;这有可能为以太坊生态系统开启全新的商业模式。

2.2 借入资产

Compound 允许用户使用 cToken 作为抵押物,毫无摩擦地从协议中借用,在以太坊生态系统的任何地方使用。与 P2P 协议不同,从 Compound 借贷仅仅需要用户指定所需的资产;没有可协商的条款、到期日或融资期限;借款是即时且可预测的。与提供一种资产类似,每个货币市场都有一个由市场力量设定的浮动利率,它决定了每种资产的借贷成本。

2.2.1 抵押物价值

协议所持有的资产(由 cToken 的所有权表示)被用作从协议借款的抵押物。每个市场都有一个从 0 到 1 的质押率,它代表了底层资产价值中可以借到的部分。流动性差的市值较小的资产质押率比较低,它们不能作为好的抵押物。而流动性强的高市值资产有比较高的质押率。一个账户各种底层代币余额的价值乘以各自的质押率,等于用户的借款能力。

用户可借入不超过其借款能力的资产,而账户不得采取任何会使所借资产总值超过其借款能力的行为(例如,借入、转移 cToken 抵押物或赎回 cToken 抵押物);这可以保护协议避免违约风险。

2.2.2 风险与清算

如果账户未偿还贷款价值超过其借款能力,一定比例的未偿还贷款可以被别的账户偿还以换取该账户的 cToken 抵押品,且清算价格略优于市场价格,是以当前市场价格减去清算折扣;这激励了套利者的生态系统迅速介入,以降低借款人的风险敞口,并消除协议的风险。

清算系数,是指每次调用清算时,一次清算时可偿还的部分占借出资产的比例,范围从 0 到1,如 25%。清算程序可以继续进行,直到用户的借入的资金低于其借款能力为止。

任何拥有所借资产的以太坊地址都可以调用清算功能,以其资产换取借款人的 cToken 抵押品。由于用户、资产和价格都包含在 Compound 协议中,清算是无摩擦地,不依赖于任何外部系统或订单。

2.2.3 主要用例

能够无缝地持有新资产(无需出售或重新安排投资组合)给 dApp 的消费者、交易员和开发者带来了新的超能力:

l  不需要等待订单完成,也不需要进行链外操作,dApps 可以借代币并在以太坊的生态系统中使用,比如在 Golem 网络上购买算力。

l  交易员可以利用现有投资组合作为抵押物,通过借入 ETH 为新 ICO 投资提供资金。

l  希望做空代币的交易员可以借入代币,将其打到交易所,然后出售代币,从估值过高的代币下跌中获利。

2.3 利率模型

与单个资金供应方或借款人必须就条款和利率进行谈判不同,Compound 协议使用了一个利率模型,在每个货币市场中基于供求关系实现利率均衡。根据经济理论,利率(货币的“价格”)随需求函数而上升;当需求较低时,利率会下降。反之亦然。各市场的利用率将供给和需求统一成一个变量:

币世界-一文了解货币市场协议Compound需求曲线通过治理编制而来,并表示为利用率的函数。例如,借款利率可能类似于币世界-一文了解货币市场协议Compound

资金供应方赚取的利率是隐性的,等于借款利率乘以利用率。

2.3.1 流动性激励结构

该协议并不保证流动性;相反,它依靠利率模型来激励它。在对某项资产需求极度旺盛的时期,该协议的流动性(可提取或借入的代币)将下降;当这种情况发生时,利率会上升,刺激供应,抑制借贷。

3 实现与体系框架

货币市场的核心是一个账本,它允许以太坊账户提供或借入资产,同时计算利息,这是一个时间的函数。该协议的智能合约将对公众开放,机器、dApps 和用户都可以免费使用。

3.1 cToken合约

每个货币市场都被构造成一个智能合约,履行 ERC-20 代币规范。用户的余额表示为 cToken 余额;用户可以通过向市场提供资产来铸造mint(uint amountUnderlying) 或赎回 redeem(uint amount) cToken 来换取底层资产。 cToken 和底层资产之间的价格(汇率)随着时间的推移而增加,因为利息是由资产的借入方累积的,而且每个货币市场都是由履行 ERC-20 代币规范的智能合约构建的。用户的余额表示为 cToken 余额;用户可以:币世界-一文了解货币市场协议Compound

随着市场总借款额的增加(作为借款人利息累积的函数),代币与底层资产之间的汇率也会增加。

币世界-一文了解货币市场协议Compound

3.2 利率机制

Compound 货币市场的定义是对所有借款人统一适用的利率,随着供求关系的变化,利率会随着时间的推移而调整。

每个货币市场的每一种利率的历史都被一个  Interest Rate Index (利率指数)所记录,这个指数是在每次利率变化时计算出来的,它是由用户铸造、赎回、借款、还款或清算资产时产生的。

3.2.1 市场动态

每发生一笔交易,该资产的利率指数就被更新,以复利自前一项指数以来的利息,使用期间的利息,以 r * t计价,使用每一区块的利率计算

币世界-一文了解货币市场协议Compound

市场未偿还借款总额被更新,以包括自上一个指数以来的待付利息:

币世界-一文了解货币市场协议Compound

一部分累计利息被保留(预留)作为准备金,由 reserveFactor(准备金系数)决定,范围从 0 到 1:币世界-一文了解货币市场协议Compound

3.2.2 借款动态

借款人的余额,包括待付利息,就是一种比率,由当前指数除以用户余额在上次检查点时的指数计算得出。

每个借款人地址在 cToken 中的余额被存储为一个 account checkpoint(账户检查点)。一个账户检查点是一个 Solidity 元组 <uint256 balance, uint256 interestIndex>。这个元组描述最后一次利息被支付时的账户余额。

3.3 借款

希望借款并且有足够余额存储在 Compound 当中的用户,可以在相关的 cToken 合同中调用 borrow(uint amount) 函数。该函数掉用后,将检查用户的账户价值,如果账户内有足够的抵押物,将更新用户的借款余额,将代币转移到用户的以太坊地址,并更新货币市场的浮动利率。

借款计息与第 3.2 节中计算余额利息的方式完全相同;借款方有权在任何时候通过调用 repayBorrow(uint amount) 函数,来偿还一笔未偿还的贷款。

3.4 清算

如果因抵押品的价值下降,或借入资产增值,用户的借款余额超过其总抵押品价值(借款能力),公共函数 liquidate(address target, address collateralAsset, address borrowAsset, uint closeAmount) 可以被调用,调用者将会以略优于市场价格的条件,将自己的资产与借方的抵押物进行交换。

3.5 喂价

Price Oracle(价格预言机)维持每个支持资产的当前汇率;Compound 协议将设定资产价值的能力委托给一个委员会,该委员会将前 10 名的交易所的价格集中在一起。这些汇率被用来决定借款能力,抵押物需求,以及所有需要计算账户估值的职能。

3.6 审计官

Compound 协议不默认支持某些特定的代币;相反,市场必须被列入白名单。这是通过一个管理函数,supportMarket(address market,address interest rate model) 来完成的,该功能允许用户开始与资产交互。为了借入资产,必须从价格预言机里取一个有效的价格;要使用资产作为抵押物,必须要有一个有效的价格和质押率。

每个函数调用都通过策略层进行验证,策略层称为 Comptroller(审计官);在允许用户进行操作之前,该合约确认抵押物和流动性。

3.7 治理

Compound 将从对协议的中心化控制开始(例如选择每个资产的利率模型),随着时间的推移,过渡到完全由社区和利益相关者控制。协议中的以下权限由管理员控制:

l  创建一个新的 cToken 市场。

l  更新每个市场的利率模型。

l  更新预言机的地址。

l  提取某个 cToken 的准备金。

l  选择新管理员,就像一个由社区控制的 DAO;因为这个 DAO 本身可以选择新的管理员,管理层将基于利益相关者的各个决定随着时间的推移而演化。

4 总结

l  Compound 为以太坊资产创造了正常运转的货币市场。

l  每个货币市场的利率由底层资产的供给和需求决定;当借入资产的需求增加,或者供给减少,利率就会上升,从而刺激额外的流动性。

l  用户可以向货币市场提供代币以赚取利息,而无需信任中心方。

l  用户可以使用协议中的余额作为抵押来借入代币(用于使用、出售或再出借)。