在阅读本文前主张先阅读Synthetix Litepaper和一文读懂Defi抢手项目Synthetix。这儿先简单的介绍几个术语,Synthetix是一个Defi项目的名称,SNX是一种扩展了ERC20协议的代币,也是Synthetix的鼓励代币。Synth是指组成财物,比方sUSD、sBTC、iBTC等都是组成财物,其间s最初的是指做多,i最初的是指做空。债款池是指一切Synth的汇总,在Synthetix引进超量典当假贷之后,要扣减假贷产生的Synth。债款池对应的典当物SNX能捕获Synthetix买卖合约产生的费用以及活动性挖矿产生的SNX,因而典当SNX是有利可图的。

SNX

Synthetix的运转需求SNX,那么SNX是怎么产生的呢?根据icodrops的数据SNX在2018年3月启动ICO,初始发行100000000个,其间60%经过公开市场销售。

研究 | 深入Defi系列之Synthetix

从2019年3月开始Synthetix启动了钱银供给方案到2023年8月SNX的总供给量将会从100000000个增长到260263816个。新增的SNX会按份额分配给典当了的SNX持有者,SNX奖赏的细节会在后文讲述。

Synth

Synth有三种途径产生:

  • 第一种是经过超量典当铸造,这种方法的典当物只要SNX,产生的Synth只要sUSD。

  • 第二种是经过超量典当假贷,这种方法现在的典当物只要ETH,产生的Synth有sUSD和sETH。

  • 第三种是经过买卖。比方当你经过SNX典当出sUSD之后假设想持有sBTC,那么能够在Synthetix的买卖合约中先毁掉sUSD然后铸造出sBTC,sUSD兑换sBTC的价格由Oracle供给。

典当和买卖产生Synth没有数量限制,而假贷产生的Synth有数量限制。假贷产生的债款不会进入债款池,也无法享有买卖产生的手续费和活动性挖矿奖赏。

SNX超量典当铸造

SNX经过超量典当能够铸造出sUSD,典当后的SNX无法被搬运,然后经过毁掉sUSD能够解锁SNX使其从头能够流转,假设SNX的典当率缺乏则会面对被清算的危险。

铸造

典当账户上的SNX铸造sUSD的公式如下:

amount(sUSD) = amount(SNX) * price(SNX) * I-Ratio

Synthetix中许多运算(比方超量典当铸造、核算账户的债款总量等)上都是以sUSD作为计价单位,而I-Ratio(Issue Ratio)是发行率(现在是0.2)。假定SNX的价格是100,那么典当100个SNX(总价值是10000sUSD)产生的sUSD是2000个。

账户上一切可用来典当的SNX由三个部分组成:

collateral(SNX) = amount(synthetix) + amount(synthetixEscrow) + amount(rewardEscrow)

amount(synthetix)是指SNX合约的余额,amount(synthetixEscrow)是指SNX保管合约的余额,amount(rewardEscrow)是指SNX奖赏合约的余额。

典当的SNX是被搬运到哪个合约上了吗?不是的,典当之后账户的SNX合约余额仍然不会产生变化。可是当需求搬运账户上的SNX时,合约会判别能够被搬运的SNX数量。

tranferable(SNX) = amount(synthetix) - debt(SNX)

debt(SNX)是指以SNX作为计价单位的债款数量。由于债款池中的财物价格是在波动的,所以债款池的总债款数量也会波动,为了核算当时时间账户的债款数量需求记载账户在债款池中的占比ownership。

debt = ownership * totalDebt

比方说账户在t0时间的ownership是10%,totalDebt是100sUSD,则在t0时间账户的debt是10sUSD。当t1(t1>t0)时间totalDebt上升到200sUSD,则账户的debt变成了20sUSD。债款总量上升一般是债款池中财物价格的上涨导致的。debt(SNX)上升会导致tranferable(SNX)下降,账户的债款比上升。账户的债款比上升到必定程度就无法从FeePool中提取手续费和活动性挖矿奖赏。当账户的债款比上升到必定程度的时分任何人都能够对这笔债款进行清算。

为了记载每个账户的债款占比,Synthetix引进了两个关键性的数据结构:IssuanceData和debtLedger

研究 | 深入Defi系列之Synthetix

issuanceData记载每个账户的债款信息。initialDebtOwnership是指账户的债款在债款池中的占比,debtEntryIndex是debtLedger中对应的index。任何时分对账户进行新增债款或许毁掉债款操作都会延展debtLedger,并从头设置账户的initialDebtOwnership和debtEntryIndex。

令在debtLedger的index=i时的总债款为t(i),debtLedger[i]为d(i),账户A的债款为d(A),在index=i+1时

initialDebtOwnership(A) = d(A)/t(i+1)
debtEntryIndex(A) = i + 1

d(i+1)的递推公式为:

d(i+1)=d(i)*[t(i)/t(i+1)], i > 0
d(0)=1, i = 0

如下图所示账户A给体系新增第一笔债款100sUSD,体系总债款是100sUSD,账户A的债款占比是1

研究 | 深入Defi系列之Synthetix

然后当B添加900sUSD之后,d(1)=d(0)*t(0)/t(1)=0.1,如下所示

研究 | 深入Defi系列之Synthetix

此刻账户A的债款占比核算公式为:

debtOwnership(A) = [debtLedger(1)/debtLedger(0)] * initialDebtOwnership(A) = [0.1/1] * 1 = 0.1

现实上当账户A的debtEntryIndex为i,关于任意debtLedger的index为j(j>i)时核算账户A的债款占比公式为:

debtOwnership(A)= [debtLedger(j)/debtLedger(i)] * initialDebtOwnership(A)

公式右侧的推导进程如下:

[debtLedger(j)/debtLedger(i)] * initialDebtOwnership(A) = [d(j)/d(j-1)] *  [d(j-1)/d(j-2)] * .. * [d(i+1)/d(i)] * initialDebtOwnership(A)  = [t(j-1)/t(j)] * [t(j-2)/t(j-1)] * .. * [(t(i)/t(i+1))] *  initialDebtOwnership(A)   = [t(i)/t(j)] * [d(A)/t(i)] = d(A)/t(j)

而d(A)/t(j)正好便是账户A在index=j时的债款占比。

毁掉

一般状况下铸造sUSD之后再毁掉会有一个等候期,这个等候期现在是1天。毁掉sUSD能下降debt(SNX),然后使tranferable(SNX)变大。毁掉的进程跟铸造类似,比方账户B毁掉200个sUSD,体系总债款变为800sUSD,B的债款占比变成0.875

研究 | 深入Defi系列之Synthetix

而A的债款占比根据公式核算为0.125

debtOwnership(A)= [debtLedger(2)/debtLedger(0)] * initialDebtOwnership(A)=[0.125/1]*1=0.125
debtOwnership(A)=d(A)/t(2)=100/800=0.125

清算

账户的债款比C-Ratio是指账户的债款(以SNX为单位计价)与账户上可用的SNX之间的比值:

C-Ratio=debt(SNX)/collateral(SNX)

债款池中的财物的报价单位都是以sUSD,因而debt(SNX)会同时遭到财物价格和SNX价格的影响。也便是说假设SNX价格不变,债款池中的财物价格上涨则debt(SNX)会变大。相对的,假设SNX价格跌落,而债款池中的财物价格不变,debt(SNX)也会变大。

当账户的C-Ratio超越必定的阈值(现在是0.5)会被清算,任何人都能够对C-Ratio超越阈值的账户进行清算。可是清算有一个缓冲期(现在是3天),在缓冲期内等候被清算的账户仍然能够经过添加collateral(SNX)(比方购买SNX)或许毁掉必定的债款来下降C-Ratio。

被清算的账户会施加必定比率的罚金p(现在这个值是0.1)。假定被清算账户是A,清算账户是B,清算进程是将B的sUSD毁掉,然后将A的(1+p)倍等值的SNX搬运给B,因而B的清算收益率是p。清算的目标是使账户A的C-Ratio康复到初始的I-Ratio。令账户A的债款为D,典当物为C,罚金比率为p,I-Ratio为r,需求清算掉的债款为F,则F必需求满意如下公式:

(D-F)/(V-(1+p)*F) = r
然后得到
F = (D-V*r)/(1-(1+p)*r)

ETH超量典当假贷

经过典当ETH能够从Synthetix体系中借出sETH和sUSD,典当1个ETH能够借出0.8个sETH或许借出0.67个sUSD。为了操控危险,借出的sETH和sUSD总量是有上限的,sETH最多能借出5000个,sUSD最多能借出1000万个。赎回债款需求支付必定的利息,产生的利息会转换成sUSD注入到FeePool中分配给SNX的典当持有者。假设ETH价格跌落导致典当率缺乏,则债款会面对被清算的危险。

Synthetix买卖

在Synthetix中除了sUSD和sETH能够经过铸造或许假贷发行外,其它的Synth都是经过买卖产生的。Synthetix买卖对以(src,dest)来表明,src指将会毁掉的Synth,dest指将会发行的Synth,比方(sUSD,sBTC)意味着毁掉sUSD然后发行sBTC。这点跟订单簿或许AMM差异很大,由于没有对手方所以Synthetix也不会有滑点和深度的问题,但危险就在于活动性或许缺乏,举个极点的比方:

研究 | 深入Defi系列之Synthetix

体系总债款暴升到10100sUSD之后,A和B别离承当5050sUSD的债款。为了保证债款比契合0.2的要求账户A必需求补充价值24750sUSD的SNX,对A来说这是没啥意义的,也不会有人愿意清算这笔债款。账户B能够毁掉5050sUSD的债款来解锁价值500sUSD的SNX,可是剩下的4950sUSD只要名义上价值500sUSD的SNX作为典当,使得sUSD基本上毫无价值,所以这笔获利也无法实现。

除了活动性问题还有另外一个问题,那便是单个买卖对产生报价过错会导致全体SNX典当者极大的丢失。比方上面那个BTC价格暴升的比方,或许实在的价格是101,可是由于报价过错导致价格暴升了100倍。假设典当的SNX足够多,则B就获利巨大,而丢失则由全体SNX持有人承当。再加上没有深度限制,B假设发现Oracle还在mempool中的买卖价格为10000,而实在价格为101,则B能够提早(也便是通常所说的抢跑)以100的价格买入足够多的sBTC,比及Oracle的报价上链,再以10000的价格卖出sBTC,这个进程SNX典当者的丢失会无限放大。也许Oracle是诚笃的,但Oracle也或许犯错,然后上报一个跟实在价格差异巨大的价格。

为了防止这个问题SIP-65引进了一种价格维护机制,Synthetix会记载每个Synth上一次买卖的报价lastExchangeRate,运用lastExchangeRate与当时买卖时的报价currentRate进行对比。假设倍数(currentRate/lastExchangeRate或许lastExchangeRate/currentRate)超越必定的阈值(现在这个值是3)买卖会失利,这个买卖对会被暂停直到protocalDao查明原因再从头康复买卖。

正常状况下行情不会在短时间内有一个超越3倍的插针,所以由于价格维护机制导致买卖对被暂停实践上是十分罕见的状况。可是由于以太坊拥堵导致Oracle的价格不能及时的上链倒是或许经常产生。一旦价格不能及时上链就会有被套利的空间,比方

研究 | 深入Defi系列之Synthetix

在上图所示进程中先观察到未上链的Oracle报价会比链上最新的报价高10%,所以立即买入1sBTC(经过提高TX的网络手续费率或许与矿工合谋使得TX0比Oracle的报价买卖更早上链),然后等Oracle的报价买卖上链再以这个价格卖出1sBTC,这样就能够无危险套利10%。为了缓解这个问题SIP-37引进了买卖批改机制,经过买卖得到的dest必须等候一个买卖窗口期(现在是6分钟)之后才干卖出。比方上面这个比方假设在买卖窗口期内t1时间Oracle的报价上链了,那么再卖出1sBTC时需求先对TX0的买卖进行批改。TX0会从头以1sBTC=110sUSD的价格来核算,账户需求给体系交还100*(1/100-1/110)约为0.09个sBTC。之所以说是缓解而不是处理是由于Oracle的报价或许过了窗口期都没能上链,那么套利还是会产生。反过来假设链上价格比实践价格高,那么购买1个sBTC就亏了,这个时分体系会将差价返还给账户。买卖批改除了在买卖进程中会引进,但凡需求转出或许毁掉Synth的当地都会引进,比方转出Synth、铸造sUSD、毁掉债款、清算债款。

FeePool

FeePool担任搜集买卖产生的费用和活动性挖矿产生的奖赏,费用和奖赏的分配要依照SNX典当者在债款池中的债款占比来决议。比方产生了100sUSD的买卖费用,账户A的债款占比是10%,那么账户A就能够分配10sUSD的买卖费用。假设账户A刚发行债款把奖赏取走,然后就立即把债款毁掉,那A就基本上不必承当债款池胀大的危险而取得收益。实践上这个危险就由其它一向进行SNX典当的账户在承当,明显这对其它账户来说是不公平的。

为了处理这个问题FeePool引进了结算周期的概念(现在每个结算周期是7天),结算周期有两类,一类是已经关闭的结算周期,一类是敞开的结算周期。关闭的结算周期内的费用和奖赏能够收取,敞开的不行。一个敞开的结算周期到达7天后就能够敞开新的结算周期,然后这个敞开的结算周期就变成了关闭的结算周期,而之前关闭的结算周期内的费用和奖赏延展到这个新产生的关闭结算周期中。结算周期的数据结构如下:

研究 | 深入Defi系列之Synthetix

研究 | 深入Defi系列之Synthetix

FeePool会缓存账户的债款占比信息,然后找到离费用周期完毕的debtLedger index最近的债款占比来核算费用和奖赏。如下图所示,F0和F1是已经关闭且延展过的的结算周期,F2是能够提取奖赏和费用的结算周期,F3是正在敞开的结算周期,d10是F2完毕时间对应的debtLedger,d0是由账户A的债款改变引发的。

研究 | 深入Defi系列之Synthetix

账户A假设提取奖赏和费用,其占比的核算公式为:

p = (d10/d0) * initialDebtOwnership(A)

也便是核算账户A在d10时的债款占比。假设账户A有多次债款改变操作,比方d0和d5

研究 | 深入Defi系列之Synthetix

则p的核算公式为:

p = (d10/d5) * initialDebtOwnership(A)

也便是说取尽或许离d10近的债款改变操作对应的debtLedger值。

FeePool这种作业形式会带来一个问题,假设F0和F1有未提取的费用和奖赏延展到F2,那么能够在F2中发行债款,然后等F2进入关闭期提取费用。令F0、F1和F2未提取的费用别离为f0、f1和f2,账户A在F2期间的费用占比为p,则账户A能够提取非费用为

f = p * (f0 + f1 + f2)

也便是说尽管账户A在F0和F1期间对体系不承当任何债款,但仍然能拿到一部分费用。所以当费用周期完毕后应该尽或许的把账户上的费用和奖赏提取干净,否则会廉价后面周期发行债款的账户。

提取费用和奖赏的前提是账户的债款比不能过高,这个阈值现在是1.01*I-Ratio。费用是直接打到账户地址上,而SNX奖赏是放在了第三方保管合约上。

SNX供给方案

SNX奖赏由SNX供给方案合约注入到FeePool,然后FeePool发放给SNX保管合约,被保管的奖赏要推迟一年才干收取。为什么要给典当SNX的账户奖赏呢?首要咱们看一下比特币的鼓励机制,比特币给矿工奖赏,矿工经过挖矿来保证比特币网络的安全。在比特币总量没有到达2100万个之前,比特币跟央行的法币一样是一个通胀币,只不过通胀速率逐年下降罢了。那为什么持有者认为比特币是有稀缺性呢?原因在于通胀预期是固定的,也即一切人都知道比特币的发行规律,而且知道当发行完2100万个之后就不再发行。所以一个去中心化的鼓励机制中,必定时间内的钱银发行并不可怕,只要钱银发行是对网络的核心价值有用,然后发行方案是有预期(不会随意调整)那么对整个网络便是有正面意义的。

在SNX网络中最核心的价值便是典当物,只要足额的典当物才干有更多的做多和做空买卖(典当物太少,赚了钱也没法实现),才干产生更多的买卖手续费然后提升网络的价值形成一个正向循环。基于此SNX从2019年3月敞开了投进SNX的方案,这个投进方案类似于比特币也是按周期奖赏折半:

研究 | 深入Defi系列之Synthetix

但钱银新增突然断崖式的下降会或许会对体系产生一个不可猜测的不好结果。比方在比特币网络上假设折半周期叠加币价低迷,那么折半周期到来时许多老的矿机由于无利可图而关机,这个会导致比特币算力呈现断崖式下降。为了防止这个问题,Synthetix后来又优化了钱银投进方案:

研究 | 深入Defi系列之Synthetix

这个优化首要是让钱银供给速率平缓下降,其次是在钱银供给方案完毕后持续以2.5%每年的速率增发SNX。

Synth价格

Synth分为做多的Synth(比方sBTC)和做空的Synth(比方iBTC),sBTC的价格便是Oracle的报价,其间sUSD的价格总是1。做空的价格跟基准报价有关:

研究 | 深入Defi系列之Synthetix

研究 | 深入Defi系列之Synthetix

如图所示,黑色的箭头表明sBTC的价格走势,红色的箭头表明iBTC的价格走势。当sBTC的价格为120时,iBTC的价格为200-120=80;

当sBTC的价格为10时,iBTC的价格为200-10=190,但由于190超越的upperLimit,所以最终iBTC的价格为180。假设frozenAtUpperLimit为false,则iBTC的价格不会被确定在上鸿沟,比及sBTC价格上升时,iBTC的价格会回落。反之,iBTC的价格就会一向被确定在上鸿沟。

反向价格信息由体系供给,而且反向价格信息也能够根据需求更新,比方说从头设置基准价。

完毕语

Synthetix是一个十分优秀的Defi项目,它能够让咱们买卖各种财物的危险敞口,由于是与体系对赌所以买卖的深度极佳。以太坊的特性使得开发一个杂乱的Defi项目变得十分困难,在这个黑暗森林里不仅仅面对合约逻辑过错这种基础性危险,还面对买卖抢跑、Oracle报价推迟、报价过错等业务性危险。Synthetix在这方面做了十分多的努力,比方经过买卖熔断来操控单个买卖对报价过错的危险、经过买卖批改来缓解Oracle报价不及时的问题。Synthetix对去中心化项目的鼓励问题理解的也十分深入,为什么鼓励?怎么鼓励?这些都需求想清楚,而不仅仅是增发token去割韭菜,鼓励进程也要留意减少一些不必要的经济学博弈。在项目的开发上,Synthetix对Gas的优化也做了一些努力,比方缓存全局债款总量来减少核算量。

Synthetix也有一些需求改善的当地,在费用和奖赏的分配上更有利于巨鲸账户,这点倒是能够参考sushi的分配方法进行优化。运用Proxy的形式尽管便于搬迁,可是业务上需求向后兼容容易带来代码的杂乱性。跟着功用的越来越杂乱,代码呈现逻辑过错的或许性也会越来越大。

视野开拓

商品一般出卖的实际价格称为市场价格。 所有具体商品的市场价格,都取决于实际送到市场的数量与愿意支付商品自然价格的人(有效需求者),即愿意支付将商品送入市场所必需的地租、劳动(工资)和利润全部价值的人的需求的两者比例。-《国富论》

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注