如何设计一个最简单的去中心化稳定币?
本文作者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
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
Justin Sun suspected to have purchased $160m in Ethereum
Justin Sun suspected to have purchased $160m in Ethereum