怎样去设计一个最简单的去中心化稳定币?
本文作者Jacob Eliosoff为加密货币基金Calibrated Markets的管理负责人,Calibrated Markets是Trevi Digital Assets Fund的GP,该基金研究比特币和相关加密货币,并进行长期投资。
Calibrated由Jacob Eliosoff进行管理,Jacob Eliosoff是一位计算机程序员,自2013年秋季以来一直从事该基金的工作。
文章经白计划Yaoyao编译整理,内容有所删减。
一段时间以来,这个问题一直萦绕在我的脑海中。直到上周,受到MakerDAO和Uniswap等项目的启发,我茅塞顿开,在这篇文章中,我将回顾以下部分:
1.计划的稳定币设计,这里称为USM(“极简美元”);
2.它极简的四种操作:mint/burn(创建/兑换USM稳定币)和fund/defund(创建/兑换相关的“投资代币”FUM);
3.我遇到的最大设计障碍,以及我提出的解决方案;
4.一个大约200行Python的概念证明实现。
这只是为了做个有趣的尝试,只要它不会无辜损失用户的钱,成为一个真实实现的话会很酷。
(注:本文仍为草稿,可能会有所修改。)
A.基本理念:无风险的USM +高风险的FUM
最简单的可行的稳定币是依靠ETH池创建/赎回代币。将价值n美元的ETH(在铸造时)存入池中,铸造出n个新的“USM”稳定币,或者从池中烧掉m个USM换取价值m美元的ETH(在燃烧时)。
(为了方便,将使用Ethereum,但设计是与平台无关的。)
为什么这个方案行不通呢?
首先,要想知道x个ETH值n美元,你需要一个或多个价格预言机。这一点我们稍后再谈,几乎所有的稳定币都需要这个,所以即使是最简单的设计也需要它。而更大的问题是ETH的价格波动。
假设ETH是200美元,在池中存入10ETH就能铸造出2000USM。假设ETH跌至150美元,烧掉你的2000USM,但是,池中已经没有足够的ETH(你应该得到2000/150=13.33ETH,但池中只有10ETH)。
抵押品池的价值下降,以至于无法清算未偿付的债权(代币)。这对稳定币投资者和金融业来说是一个非常熟悉的问题。当你的伞不断地收缩和膨胀时,你如何保持干燥?
最简单的解决方案也很常见:对池进行超额抵押—给它一个安全缓冲,用更多的ETH赎回未偿还的USM。
这样做,我们的系统需要一种方式,让其他参与者—“投资者”—把ETH加入到池中(以换取第二个代币FUM),并激励他们这么做。
让我们尝试两种激励方式:
手续费:对铸币/烧钱操作收取少量费用,并分红给投资者。 杠杆:可以建立一个有市场风险的ETH池(它的价值随ETH的价格涨跌),支持一堆USM代币,这些代币的唯一目的就是避免这种风险(价格保持在1美元)。
所以我们将把所有的市场风险都抛给投资者:
稳定币用户存入有风险的ETH,收回无风险的USM; 投资者存入风险较大的ETH,收回风险更大的FUM。
这又是一个熟悉的金融技巧——“分级”风险。
现在,在创建/赎回USM代币的mint(ETH->USM)和burn(USM->ETH)操作之上,我们添加了fund(ETH->FUM)和defund(FUM->ETH)操作来创建/赎回FUM。
B. 一个简单的例子
ETH价格200美元:
A将10ETH存入池中,铸成2000USM。(我们暂时不计算手续费) B进行投资操作,存入另外5个ETH以换取1000个FUM,初始定价为1美元。
-池包含15个ETH(10个和5个加在一起),价值3000美元 - A拥有价值2000美元的2000USM - B有价值1000美元的1000FUM
ETH涨到220美元:
- 15ETH的池现在价值3300美元 - A的2000USM仍然值2000美元 - B的1000FUM值1300元
ETH跌至170美元:
- 15ETH值2550美元 - A的2000USM值2000美元 - B的1000FUM值550美元
ETH跌至100美元:
- 15ETH值1500美元 - A的2000USM值2000美元 - B的1000FUM值-500美元
面对ETH价格的大幅下跌,B的资金被证明是不足的:
无论如何池都缩水了(pool_value < usm_outstanding),不再有足够的ETH来赎回A的所有USM,加上B也损耗了。
C. 为什么缩水是不好的
这意味着并不是所有的USM持有者都可以赎回他们的USM来为ETH兑换:
稳定币不再是“完全支持的”。只要用户不同时全部撤出(“银行准备金业务”),那就没问题,但是…
实际上延迟兑换者最终可能会两手空空,这一事实激励持有人更早的兑换——导致潜在的银行挤兑。
FUM投资者B的损失,同样也可能会促成一个糟糕的反馈循环,一旦出现下跌迹象,他们就会选择退出。
由于FUM的价格已如此之低,甚至是负值,新投资者可能会以极低的价格购买FUM,这会严重地削减了早期投资者的资金。
这篇文章剩下的大部分内容都是关于如何避免这些情况,这是有意义的,因为除了“保持1美元”外,防止/处理抵押品贬值和基金投资人出局是稳定币设计中最基本的挑战。
D.更多关于mint/burn/fund/defund的细节
这个系统有三个动态部分:
ETH价格上下变化,改变池的价值。 mint/burn操作,创建/销毁USM(同时向池中添加/从池中删除ETH)。 fund/defund操作,创建/销毁FUM(同时添加/移除ETH)。
有关这些操作的更多详情:
锚定美元:注意在正常运行的情况下(特别是:不低于1美元,价格预言机准确),mint and和burn应该保持USM与美元挂钩,让用户在任何时候可以立刻用1美元兑换价值1美元的ETH,除了少量手续费。这个过程挑战在于如何保持系统资本化。
债务比率是这方面的关键度量:usm_outstanding / pool_value。
当这个比率超过100%(或者超过我们指定的MAX_DEBT_RATIO,比如80%)时,系统可以通过禁用撤资和烧币操作来限制它,直到它下降,例如因新的投资者进入。
但以这种方式取消赎回,无论是频繁的还是偶尔短期的,都将损害用户对金融体系和价值锚定的信任。USM在交易所的交易价格可能开始低于1美元……可能会有所缓解,但也可能不会。没有人会把赌注押在一个实验系统上。
铸币/烧币的具体机制很简单:投入n美元的ETH,收回nUSM(减去手续费),反之亦然。投资/撤资的机制更为巧妙。
基本模型是,这些操作会改变FUM的数量,但不会改变它的单价,它只是池的多余缓冲区的美元价值:
buffer_value=pool_value-usm_outstanding/fum_outstanding。
例如(还是不计算手续费):
假设池中有15个ETH,ETH价格为220美元,池的总价值为3300美元,未偿付的USM为2000枚,FUM为1000枚。
然后:
-负债比率= $2000/$3300=60.61% -缓冲值=$3300-$2000=$1300 -FUM单价=$1300/1000=$1.30
C将另外13个ETH(价值2860美元)投入池中,得到2860美元/1.30美元=2200个新铸造的FUM。现在:
-池中有28ETH,价值6160美元 -仍有2000USM未偿付 -3200个FUM未偿还 -负债比率=$2000/$6160=32.47% -缓冲值=$6160-$2000=$4160 -FUM单价=$4160/3200=$130
当ETH价格降到200美元:
-28ETH价值5600美元 -2000USM未偿还,3200FUM未偿还 -负债比率=$2000/$5600=35.71% -缓冲值=$5600-$2000=$3600 -FUM单价=$3600/3200=$1.125(下跌)
C取走其2200个FUM中的1000个(价值:1000*$1.125=$1125),收回$1125/ $200=5.625ETH:
-22.375ETH价值4475美元 -2000USM未偿还,2200FUM未偿还 -负债比率=$2000/$4475=44.69% -缓冲值=$4475-$2000=$2475 -FUM单价=$2475/2200=$1.125(不变)
E.FUM的价格
当池的资金缩水时,在第一个例子中,FUM的单价暴跌到-0.50美元。我们不能以负的价格或接近0美元的价格投资/撤资。
在这种情况(例如,当债务比率>MAX_DEBT_RATIO)下最简单的处理方式是:
1禁用撤资(池需要资金) 2为了基金运营的目的,在资金价格上加一个溢价,保持资金价格>$0。
但思考良久后会发现,有很多不同的方式来定义这种溢价,我在整个系统工作的7天里有5天是用来探索它们的。细节不在这篇文章的讨论范围之内,但简而言之,到目前为止我最喜欢的规则是:
当债务比率>MAX_DEBT_RATIO时,投资操作(投入ETH换取新的FUM)需要至少按min_fum_buy_price计算支付,即在债务比率超过MAX_DEBT_RATIO时对应的以ETH计算的FUM单价。
一旦债务比率回落到低于MAX_DEBT_RATIO, min_fum_buy_price将被清除,基金操作将再次以正常的FUM价格进行(buffer_value/fum_outstanding)。
如果你想知道所有细节,可以了解这个例子(如果不是,你可以跳过它):
再从15个ETH计算,ETH价格$220,价值:$3300,包含2000USM, 1000FUM:
-负债比率=$2000/$3300=60.61% -缓冲值=$3300-$2000=$1300 -FUM单价=$1300/1000=$1.30
ETH价格跌至100美元:
-15ETH价值1500美元 -2000USM未偿还,1000FUM未偿还 -负债比率=$2000/$1500=133.33% -缓冲值=$1500-$2000=-$500 -FUM理论单价=-$500/1000=-$0.50
因为债务比率已经上升到MAX_DEBT_RATIO=80%以上,我们设置min_fum_buy_price为ETH下跌至80%时。
在这个例子中,当ETH价格达到$166.67时,当buffer_value是(15*$166.67)- $2000=$500,因此FUM价格是$500/1000=$0.50=0.003 ETH。
此时D投入$600的ETH。因为min_fum_buy_price=0.003,D支付0.003 ETH(0.30美元)每FUM的单价,而不是负理论价格-0.50美元。所以D得到6/ 0.003=2000枚新铸造的FUM:
-此时ETH价格$100,21ETH价值$2100 -2000USM未偿还,3000FUM未偿还 -负债比率=$2000/$2100=95.24% -缓冲值=$2100-$2000=$100 -理论上的FUM价格=$100/3000=$0.0333 -min_fum_buy_price=0.003ETH(计算约为$0.30)
如果ETH进一步下跌至60美元:
-21ETH价值$1260 -2000USM未偿还,3000FUM未偿还 -负债比率=$2000/$1260=158.73% -缓冲值=$1260-$2000=-$740 -FUM理论价格=-$740/3000=-$0.2467 -min_fum_buy_price=0.003ETH($0.18)
D再次投入6ETH=$360,同样得到6/0.003=2000FUM。
以ETH计算,D的融资利率与以前相同(即min_fum_buy_price=0.003ETH),但当ETH降至60美元时,以美元计算的利率更便宜(0.003ETH=0.18美元,之前是0.30美元):
-此时27ETH价值$1620 -2000USM未偿还,5000FUM未偿还 -负债比率=$2000/$1620=123.46% -缓冲值=$1620-$2000=-$380 -理论上的FUM价格=-$380/$5000=-$0.076 -min_fum_buy_price=0.003ETH($0.18)
无论如何,最简洁、最安全的确保投资者投入合理的(主动的)资金的方式,还有进一步研究的空间。目前大致的方式是,当系统资金不足时,FUM的价格应该低到足以吸引新的投资者进入,但又不能低到彻底折损老的投资者。
(Elliot Olds的一个伟大建议:在这些情况下,债务比率>MAX_DEBT_RATIO,即系统需要资金时,使FUM购买价格随时间下降。
这样就避免了min_fum_buy_price高于投资者的预期系统因缺乏资金而消亡。随着价格的不断下降,投资最终会到位,即使其价格会大大削减现有FUM持有者的风险/回报。新资金到位后,USM的烧币将会恢复,这应该会让USM持有者安心,并对锚定美元的汇率抱有信心。)
F.系统其他部分
预言机使用什么价格(ETH/USD,系统依赖的唯一外部数据),这是一个其他人可能更想了解的问题。在我的思考中,我建议使用Uniswap的其他几个稳定币价格的平均值:USDT,USDC,PAX,DAI,TUSD。
投资USM->FUM:让投资支持USM作为一种投资方式(因此,USM->FUM),连同ETH (ETH->FUM),可能是个好主意。特别是当ETH的价格下降时,也就是当投资者花费USM可能比ETH更好的时候。
(请注意,USM->FUM投资操作对ETH池中的金额没有影响,即使扣除了手续费。它只是销毁了一些用户的USM,并给予他们新铸造的FUM作为回报,而不动ETH池。)
限价购买订单:该设计的一个有前景的补充是一个投资选项,用户可以以“6ETH铸造2000FUM”或“600USM铸造2000FUM”的选项下限价购买,如果价格下降到指定的比率就会触发。
这相当于在投资op中添加了一个可选参数:
max_price_in_eth/max_price_in_usm。
这样的设计可以在资金池的缓冲区之上,提供第二道防线。而且,由于ETH和FUM的价格很可能是密切相关的,以美元计价的投标应该比较稳定。
按照我们这里的目标(以及Uniswap)的精神,治理应该是最小化的:“部署后就忘记”。
设计中没有包含冻结/撤回功能:如果需要修复这个部分,应该启动一个新的智能合同,用户可以选择迁移到新版本。我能想到的唯一受管理员限制的操作是指定一个“自愿升级”合同,这样用户就可以选择将他们的财产自动转移。
其他非美元挂钩的币种应该比较容易:唯一的挑战是找到一个好的价格来源,例如,ETH/EUR。事实上,比特币比欧元硬币更容易使用,因为ETH/BTC很容易从Uniswap获得。存入ETH时需要选择:
a)造币厂:0.025(或当时ETH/BTC的汇率)“BTC-pegcoins”,与BTC挂钩,就像USM与美元挂钩一样;
b)基金:1 ETH的“比特币基金”——押注ETH/比特币,就像FUM是押注ETH/美元一样。
G .面对攻击
只是一些初步想法:
预言机操纵价格。如果攻击者可以操纵价格来源,他们可以打破锚定,低买高卖,抽干资金池。
预言机是该系统最明显的弱点,随着ETH在池中的增长,它将成为更大的目标。对我们有利的是,这是许多其他系统/智能合同的共同弱点,所以我们可以利用这一点。
一个明显的处理方式是使这四种操作中的一部分或全部延迟:例如burn的逻辑可以是“给USM,等一个小时,拿回ETH”,而不是“给USM,拿回ETH”。这虽然影响用户体验,但可以对抗价格操纵,值得一试。
USM系统对实时价格非常敏感。一些可能的方法可以降低这种灵敏度:
a)启动和执行之间的延迟,如上所述。 b)随机分配这个延迟,例如,“你的铸币将在下一个小时的随机时间以ETH/USD的价格进行加工。” c)取较大数量的源价格的平均数:例如,多个平台上的多个稳定币。 d)更高的手续费。下面示例代码中的往返买卖手续费为0.6%,但这只是一个概念证明。 e)一般来说,在某种程度上,是许多连锁系统共同面临的挑战,值得遵循它们的最佳实践。
当ETH的价格下降。抵押品担保体系崩溃最明显的方式就是抵押品贬值。然而,在这个系统中,贬值似乎在一定程度上得到了控制。在超过MAX_DEBT_RATIO的情况下,赎回被禁止,如果ETH暴跌,系统就会停止,直到注入新的资金。
FUM持有者当然会损失大部分资金,但这是一种补偿风险,就像借款人拖欠贷款一样,而不是像大型保险公司破产那样的系统性失败。
特别是,只要1预言机的价格仍然准确,2新的投资者总持续出现,USM的锚定美元的会应该可以抵御ETH的价格下跌。所以预言机的价格似乎更脆弱。
H.概念验证实施
我编写了一个简单的Python命令行实现,虽然会有bug,还需要进一步的修改,但它已经足够让您了解系统是如何工作的。下面是一个来自上面例子的副本镜像操作示例:
原文链接: https://medium.com/@jacob.eliosoff/whats-the-simplest-possible-decentralized-stablecoin-4a25262cf5e8
微信扫描关注公众号,及时掌握新动向
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场