# Alpaca Finance 自动化金库研究 **Published by:** [mazemax](https://paragraph.com/@mazemax/) **Published on:** 2022-05-13 **URL:** https://paragraph.com/@mazemax/alpaca-finance ## Content 1. 项目简介 Alpaca Finance(羊驼金融)是部署在BSC和Fantom上的DeFi项目,主要融合了借贷(lending)、流动性挖矿(Yield Farming)等内容,其特点是为用户提供了杠杠流动性挖矿(Leverage Yield Darming, LYF)服务且结合自身代币经济体系为用户带来更高的挖矿收益。Alpaca Finance采用开杠杆的方式为DeFi世界解决两个问题。首先,小资金量用户参与流动性挖矿收益低,而使用杠杆来允许用户从借贷池中贷出一部分资金参与挖矿,放大了小资金量用户的收益。第二,不同于Compound, Aave等主流Lending协议采用的超额抵押,杠杆的方式同样增加了借贷池中的资金利用率。另外,使用杠杆的同时放大了用户的挖矿收益,但同时也放大了用户的风险。例如在借出资产价格波动性行情下,用户的贷款价值(Debt Value)接近其头寸(Position Value)价值,导致其被强制平仓,从而本金遭受损失。 在新版本中,为最大程度降低杠杆挖矿中用户被清算的风险,同时保持稳定的挖矿收益。Alpaca Finance推出了最新的“自动化金库”服务,采用同时开立多空两个仓位对冲资产价格波动导致的杠杆风险。“自动化金库”主要使用了两种策略,包括市场中性策略(Delta Neutral Vault)和Saving Neutral Vault。目前,市场中性策略已经被部署使用,允许用户最多开立8倍杠杆进行流动性挖矿。 (1) 术语 **Ib Token:**计息代币,用户向借贷池中提供流动性的凭证,随着用户持有的时间越长,ib Token的价值越高,也就是累计的利息收益越高。Ib代币是fork Compound协议中的cToken的实现。 **Position Value:**仓位价值,也就是头寸价值。挖矿仓位的价值, 保证金 + 借入的资产 + 挖矿产出价值(LP代币价值)。 **Debt Value:**债务价值。债务本金和借款利息的总和。 **Equity Value:**权益价值。指如果平仓后以借入的资产能够期望获得的资产价值,也就是保证金价值。权益价值 = 仓位价值 - 债务价值 **Debt Ratio:**债务比率 = 债务价值/仓位价值 **Liquidation Threshold:**清算阈值。债务比率的临界值,一旦超过这个临界值,仓位进入清算环节。由于不同代币的价格波动性差异,相对稳定的代币对的清算阈值设定较高,例如BNB-ETH-LP为83.3%,而USDT-BUSD-LP挖矿的清算阈值为92%。(2) 示例 a. Alice 使用 3 倍杠杆建立 BNB-USDT 挖矿仓位 b. 她提供了 10 个BNB的自有资产(价值 3000 USDT),这是她的保证金,也就是权益价值。 c. 她借了 6000 USDT(是她提供的2倍),这是她的债务价值。 d. Alpaca协议将所有存入和借入的代币转换为 50:50 的比例,以创造用于挖矿的 LP 代币:15 BNB + 4500 USDT或总价值 30 BNB,这是她的仓位价值。由于是卖出了其中的1500 USDT来买入5 BNB,所以这个仓位的净风险是做多了15 BNB。 e. Alice 此时仓位的债务比率(负债/仓位价值)是约 66%(20 BNB/30 BNB)。如果在某一时刻,BNB价格下跌 > 36%,那么 Alice 的债务比率将超过 83.3%(BNB-USDT 池的清算阈值)。然后,清算机器人将调用智能合约来关闭她的仓位,偿还贷款和利息,并将任何剩余的资产以借来USDT的形式返还至她的钱包。2. 旧版本 (1) 技术架构 a. Alpaca代币产出Alpaca代币产出合约为FairLaunch,该合约是fork MasterChef合约挖矿逻辑实现的。为了鼓励用户向资金池中提供流动性,用户可以把流动性质押凭证ib Token质押在FairLaunch中,然后根据每个区块和质押权重给予用户Alpaca代币奖励。FairLaunch合约支持多种单币和LP代币,且每个质押池挖矿效率不同。 struct PoolInfo { address stakeToken; // 该池子质押代币地址 uint256 allocPoint; // 该池子的Alpaca代币产出权重值,除以totalAlloPoint为挖矿效率uint256 lastRewardBlock; // 上一次触发分配奖励的时间戳 uint256 accAlpacaPerShare; // 每枚质押代币累计的Alpaca挖矿奖励 uint256 accAlpacaPerShareTilBonusEnd; // 在前期奖励周期中每枚代币的Alpaca累计奖励 } b. 杠杆挖矿角色: Vault:代币金库合约。允许用户出借或赎回代币,发放ib Token作为质押凭证(Shares) FairLaunch:Alpaca代币挖矿合约。开通了多个代币质押挖矿池,产出Alpaca代币作为出借人或杠杆挖矿收益。 Liquidator:清算人。实时监听仓位健康度,必要时执行仓位清算。 Worker:仓位管理员合约。代替用户执行杠杆流动性挖矿开仓、平仓等操作。对于一个代币&一个DEX,都有一个专门的Worker接入。 Reinvestor:复投管理员。将DEX挖矿收益卖出并复投进资金池。 Strategy:策略合约。执行开仓、调仓、平仓时的策略逻辑,由Worker合约触发。 DEX:Alpaca对接的主流DEX协议,基本是fork Uniswap V2的实现。由策略合约触发DEX的Router合约,来实现添加代币对流动性,兑换代币等功能。 (2) 清算细节Vault:Worker: Liquidate(uint256 id)Worker: _removeShare(uint256 id)Strategy: (3) 风险点: l **坏账:**在市场价格的高波动情况下,没有来及被清算的仓位会导致杠杆挖矿的净资产为负,从而导致借贷池中出借人的资产损失。 l 解决方案:在清算阈值到权益价值为0%之间设立了一个缓冲区间buffer。例如清算阈值为83.3%,缓冲区间为16.7%,一旦债务比率超过这个阈值之后,立即进去清算阶段。同时给予清算人5%的激励,以快速清算高风险仓位。 l **出借人无法回收资产:**在资金池利用率非常高的情况下,如果出借人在某一时刻大量提出资产,可能会发生无法提款的情况。 l 解决方案:Alpaca使用了“三阶模型”的利率模型来优化资金利用率到达 90% 时候的情况。当资金利用率急剧上升超过了 90% 时 (利率范围为20% - 150%),借贷利率也会飙升,这将鼓励更多的出借人存入资金,以及借款人及时归还未偿还的贷款,优化资金池利用率,使利用率保持在低于90%左右的水平。 l **杠杆放大滑点损失:**由于开闭仓需要卖出部分资产,所以当资金量较大,且DEX资金池流动性相对较低的情况下,卖出滑点损失会较大。例如DEX资金池中BUSD流动性为1亿美金,Alice卖出100万美金BUSD来配平资产,此时会损失4%的滑点价格。 l 解决方案:用户可以分别开立多个仓位,且不要频繁的关闭仓位。另外,对于较大仓位的用户,Alpaca也提供了一种”Minimize Trading”策略来减小滑点。 l **APY为负:**这是可能发生的情况。当借款利率高于流动性挖矿收益的时候就会发生,会导致仓位被清算。原因为贷款池资金利用率过高或者流动性挖矿产出代币(例如Pancake Swap中的Cake代币)价格过低。 l 解决方案:用户及时平仓或追加抵押保证金(使权益价值增加,负债比率降低),且不要向资金利用率过高的资金池中贷款。Alpaca官方可能会临时调整借款利率,鼓励更多的出借人添加流动性、更多的贷款人归还资产,从而降低资产利用率。 l **清算:**当权益价值接近仓位价值,也就是债务比例达到了清算阈值的时候,仓位可能被清算。 l 解决方案:用户可以选择低杠杆来降低风险,且实时关注资产价格波动变化,及时平仓。Alpaca也提供了新的对冲策略“自动化金库”来降低被清算风险。 l **智能合约代码漏洞:**常见的DeFi合约攻击手法例如重入攻击、闪电贷攻击、恶意操纵预言机攻击、管理员私钥被盗等,导致项目几乎全部资金流动性被转移。 l 解决方案:Alpaca项目智能合约已经过十几次专业机构审计,已安全稳定运行一年,目前尚无发现严重漏洞,有待进一步观察。 3. 新版本:自动化金库 (1) 市场中性策略 为了降低杠杆挖矿中用户仓位被清算的风险,同时保证正常的杠杆挖矿收益。Alpaca推出了市场中性策略,使用同时开立两个仓位同时做多和做空波动性资产来对冲价格波动。同时实时监控价格波动,采用重新平衡机制重新开立仓位来保持资产风险敞口为零。该策略不需要也不存在清算机制,于是用户无需担心杠杆被清仓的风险,同时保持较高的挖矿APY收益。例如:对于3倍杠杆,同时开立1/4多头和3/4空头仓位。如下图所示,BNB 的多头敞口(最左边) 和空头敞口 (最右边) 大小相同。 Alice有4 BNB,且此时1 BNB = 100 USDT,开3倍杠杆。 仓位1: 抵押1BNB,借入200USDT。卖出50USDT,获得0.5BNB。 配平1.5 BNB:150 USDT,开始质押挖矿。 风险敞口:做多1.5 BNB & 做空50 USDT 仓位2: 抵押3BNB,借6 BNB。卖出4.5BNB,获得450 USDT。 配平4.5 BNB:450 USDT,开始质押挖矿、 风险敞口:做空1.5 BNB & 做多450 USDT 假设USDT价格锚定美金的不变的情况下,两仓位BNB总的风险敞口为零。 重新平衡: 随着时间的推移,由于复投的累积、借贷利息和波动性资产的价格变动,仓位不会保持中性。自动化的市场中性策略,允许仓位在窄幅范围内波动,以免重新平衡过于频繁,但一旦敞口超过预定的阈值,自动化金库将触发重新平衡以重置敞口回到零。平衡阈值的设置是根据过去一年的市场数据回测设定的。但是过于频繁地重新平衡会产生更高的交换费用,并造成仓位的无常损失。优势: 与手动执行类似策略相比,自动化金库的仓位不会连接清算机器人,也不允许清算。同时该策略能保证对贷方的坏账风险实际上为0,因为该策略中的两个仓位相互对冲,即使在资产价格大幅波动之后,权益价值的百分比变化也很小。此外,一旦价格变动,平衡机器人会把仓位价格重新平衡至中性。例如对3倍杠杆的设置,波动性资产的价格在重新平衡之前可以向任一方向移动 40%,而权益价值只会变化小于 7.5%。并且通过重新平衡,权益价值的变化会小得多 (主要是因由交换滑点损失和重新平衡的无常损失)。https://docs.google.com/spreadsheets/d/15pHFfo_Pe66VD59bTP2wsSAgK-DNE_Xic8HEIUY32uQ/edit#gid=650365877(2) 实现细节DeltaNeutralVault:depositDeltaNeutralWorker:workDeltaNeutralVault:rebalanceBNB-BUSD-x3 LYF config contract: https://www.bscscan.com/address/0x5640ce665c4fAc707885A04059449DadAbe56Cf2#readProxyContract(3) 风险点 l **再平衡延迟:**当资产价格波动导致需要再平衡时,执行操作的延迟导致资产价格偏离预期,造成资产损失。可能原因:1. 区块链堵塞造成再平衡交易延迟落块。2. Alpaca自动化平衡机器人Rebalancer故障。 l 解决方案:Alpaca提供的基础设施能安全稳定的运行各种机器人。例如清算机器人已平稳运行了1年。当链上发生拥堵时,机器人也会调节gas策略,确保再平衡交易及时执行成功。 l **稳定币脱锚:**由于市场中性策略是为了对冲掉波动资产(如BNB)价格波动产生的风险敞口,但同时也放大了稳定币(如USDT)价格波动的风险敞口。在极端情况下,稳定币价格脱锚会导致仓位权益价值下降,但自动化金库策略又不提供清算服务,这可能会导致资金池坏账。 l 解决方案:使用Saving Neutral Strategy(但同时也会做多1倍BNB) 4. 总结 Alpaca推出的全新产品自动化金库,类似于链上对冲基金,当用户杠杆挖矿时自动分配一个多头和一个空头仓位,使波动性资产的总风险敞口为零,对冲其市场价格变化导致的清算风险。同时使用自动平衡机器人,实时监听市场价格,当负债比率超过平衡阈值时,执行链上重新平衡操作,使仓位价格回归中性。总体来讲,Aplaca Finance推出的这一产品很好的降低了用户仓位被清算的风险,同时保证了稳定的杠杆挖矿收益。目前产品只支持两个代币对都包含主流稳定币(BNB-USDT和BNB-BUSD),从这个角度看来,自动化金库能相对稳定运行。 但是从风险角度来看,自动化金库严重依赖于平衡机器人的稳定与安全性。由于不存在清算环节,如果平衡机器人在极端市场行情下发生故障,也可能导致代币价格严重偏离市场中性,用户杠杆仓位资不抵债,而造成真实的坏账情况。另外,由于市场中性策略进一步放大了稳定币的风险敞口,那么在稳定币价格脱锚的情况下,会造成更严重的权益价值损失,造成更严重的坏账风险。总之此产品运行时间不长,有待市场进一步验证。 5. References Official Doc:https://docs.alpacafinance.org/ Yield Farming Calculator:https://docs.google.com/spreadsheets/d/15pHFfo_Pe66VD59bTP2wsSAgK-DNE_Xic8HEIUY32uQ/edit#gid=0 BNB-BUSD Market Neutral Test Data:https://docs.google.com/spreadsheets/d/1GdXCzQMdAGspJbGIfF6Yr-4VpRMcmIXQ4AS1QMNzZeQ/edit#gid=1215699436 Deployed Contract Addresses:https://github.com/alpaca-finance/bsc-alpaca-contract/blob/main/.mainnet.json Alpaca Finance:https://app.alpacafinance.org/ Architecture:https://alpaca-doc.s3.ap-southeast-1.amazonaws.com/lyf/Export-849cfdb0-24b6-4655-a19b-1734b8a1c2b3/Contract+Documentation+4c48a0c0db7442c6aa0268dd110e6b80.html ## Publication Information - [mazemax](https://paragraph.com/@mazemax/): Publication homepage - [All Posts](https://paragraph.com/@mazemax/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@mazemax): Subscribe to updates