比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > DOT > Info

淺談Curve:最強大的穩定幣兌換協議_INT

Author:

Time:1900/1/1 0:00:00

簡介

Curve協議,一種基于以太坊平臺的去中心化交易所,主要聚焦于穩定幣、封裝資產等的交易。相對于其他DEX,Curve提供的交易對更集中,擁有極低的滑點和手續費,可以滿足巨額的資產交易需求。極低的滑點和手續費以及crv的生態,都使得Curve在眾多DeFi協議中能占據重要的一席之地。

StableSwap

StableSwap是Curve在白皮書中設計提出的一種穩定幣交易模型,該模型能提供極低的交易滑點和無限的流動性。

做市函數

StableSwap模型的恒定函數做市商曲線如下:

該設計理念基于融合恒定和與恒定積兩種做市模型,兼具了恒定和的低滑點以及恒定積的無限流動性的特點

推導

假設現共有n個穩定幣,則有:

給恒定和部分添上杠桿系數,并加上恒定積部分,則有:

其中系數X引入了偏度的概念,由放大系數和偏度構成,其中偏度用來衡量流動池中各代幣的平衡程度

結合以上兩式化簡即可得出公式(1)

特點

StableSwap模型的曲線兼具恒定和與恒定積的特點,在各穩定幣相對平衡的情況下,公式由恒定和占主導,曲線趨于直線,滑點較低;當在極端情況下,各穩定幣不平衡,則公式由恒定積占主導,曲線與坐標軸無交點,不會出現流動性枯竭的情況

Basepool

basepool為Curve推出的基礎兌換池,最常見的有3pool,由三種穩定幣DAI、USDC、USDT組成

basepool合約實現了基本的StableSwap交易模型

參數計算

StableSwap模型的做市曲線公式(1)中,有兩個重要的參數A與D,其中參數A為放大系數,由官方調整設置每個池子的放大系數;而參數D則為池中代幣總量,是動態變化的。在basepool合約中,參數D的計算由_get_D函數實現:

@pure

@internal

def_get_D(_xp:uint256,_amp:uint256)->uint256:

"""

Dinvariantcalculationinnon-overflowingintegeroperations

iteratively

A*sum(x_i)*n**nD=A*D*n**nD**(n1)/(n**n*prod(x_i))

zkSync Era PancakeSwap 上的 TVL達到100萬美元:金色財經報道,去中心化交易協議PancakeSwap表示,zkSync Era PancakeSwap 上的 TVL 已達到 100 萬美元。[2023/7/30 16:07:28]

Convergingsolution:

D=(A*n**n*sum(x_i)-D**(n1)/(n**nprod(x_i)))/(A*n**n-1)

"""

S:uint256=0

Dprev:uint256=0

for_xin_xp:

S=_x

ifS==0:

return0

D:uint256=S

Ann:uint256=_amp*N_COINS

for_iinrange(255):

D_P:uint256=D

for_xin_xp:

D_P=D_P*D/(_x*N_COINS)#Ifdivisionby0,thiswillbeborked:onlywithdrawalwillwork.Andthatisgood

Dprev=D

D=(Ann*S/A_PRECISIOND_P*N_COINS)*D/((Ann-A_PRECISION)*D/A_PRECISION(N_COINS1)*D_P)

#Equalitywiththeprecisionof1

ifD>Dprev:

ifD-Dprev<=1:

returnD

else:

ifDprev-D<=1:

returnD

#convergencetypicallyoccursin4roundsorless,thisshouldbeunreachable!

#ifitdoeshappenthepoolisborkedandLPscanwithdrawvia`remove_liquidity`

raise

_get_D函數的算法將做市函數公式(1)以D為變量,通過牛頓迭代法計算出合適的D值,算法可謂精妙簡潔

同樣的算法還用于_get_y函數計算y值

@view

Arbitrum社區正對AIP-1.1和AIP-1.2提案進行投票,目前支持票占優:金色財經報道,Snapshot投票頁面顯示,Arbitrum社區正在對關于擴大ARB代幣持有人監督和治理權力的兩項提案(AIP-1.1和AIP-1.2)進行投票,這兩項投票于4月11日開始,并均將于4月18日凌晨截止。

提案AIP-1.1建議將基金會剩余的7億ARB置于“智能合約控制的鎖定”中,四年內解鎖。根據提案,在社區成員批準代幣分配預算之前,基金會將無法使用代幣。此外,Arbitrum 基金會還發布了一份關于該組織如何成立的透明度報告。

提案AIP-1.2旨在修改Arbitrum生態系統的幾個治理文件,包括將在鏈上發布改進提案所需的ARB代幣數量的門檻從500萬降低到100萬。目前該兩項提案的支持率均在98%以上。[2023/4/17 14:08:20]

@internal

def_get_y(i:int128,j:int128,x:uint256,_xp:uint256)->uint256:

"""

Calculatexifonemakesx=x

Donebysolvingquadraticequationiteratively.

x_1**2x_1*(sum'-(A*n**n-1)*D/(A*n**n))=D**(n1)/(n**(2*n)*prod'*A)

x_1**2b*x_1=c

x_1=(x_1**2c)/(2*x_1b)

"""

#xintheinputisconvertedtothesameprice/precision

asserti!=j#dev:samecoin

assertj>=0#dev:jbelowzero

assertj<N_COINS#dev:jaboveN_COINS

#shouldbeunreachable,butgoodforsafety

asserti>=0

asserti<N_COINS

A:uint256=self._A()

D:uint256=self._get_D(_xp,A)

Ann:uint256=A*N_COINS

c:uint256=D

S:uint256=0

_x:uint256=0

Marathon Digital:依然持有超過11000枚比特幣:金色財經報道,Marathon Digital 表示,可以使用 Signature Bank 持有的 1.42 億美元現金存款,該銀行周日被州監管機構關閉。可以出于財務管理目的使用這些資金,并在正常業務過程中支付所有發票。Marathon還持有超過 11,000 個比特幣,該公司認為這為其提供了超越傳統銀行系統的金融選擇權。

另外,Marathon 證實它與硅谷銀行沒有直接業務關系,該銀行已于周五被當局關閉。[2023/3/13 13:01:35]

y_prev:uint256=0

for_iinrange(N_COINS):

if_i==i:

_x=x

elif_i!=j:

_x=_xp

else:

continue

S=_x

c=c*D/(_x*N_COINS)

c=c*D*A_PRECISION/(Ann*N_COINS)

b:uint256=SD*A_PRECISION/Ann#-D

y:uint256=D

for_iinrange(255):

y_prev=y

y=(y*yc)/(2*yb-D)

#Equalitywiththeprecisionof1

ify>y_prev:

ify-y_prev<=1:

returny

else:

ify_prev-y<=1:

returny

raise

流動性

Curve池的流動性添加不同于Uniswap必須添加交易對的兩種資產,basepool可以僅添加池中某一種資產

@external

@nonreentrant('lock')

defadd_liquidity(_amounts:uint256,_min_mint_amount:uint256)->uint256:

"""

@noticeDepositcoinsintothepool

@param_amountsListofamountsofcoinstodeposit

Stronghold公布一項去杠桿化交易以減少債務并加強資產負債表:1月3日消息,比特幣礦企Stronghold Digital Mining宣布,與公司經修訂和重述的10%票據持有人簽訂交易協議,所有約1790萬美元的根據票據到期應計的未償付債務本金和利息將被清償,換取面值約為2310萬美元的新可轉換優先股(C系列優先股)。C系列優先股將以每股0.40美元的轉換價格轉換為公司A類普通股的股份,或可以為A類普通股股份行使的預融資認股權證。根據交易協議,最遲交易完成日期為2023年2月20日。

截至2022年12月31日,Stronghold手頭約有1240萬美元的無限制現金和約6枚比特幣。(Globenewswire)[2023/1/3 9:49:51]

@param_min_mint_amountMinimumamountofLPtokenstomintfromthedeposit

@returnAmountofLPtokensreceivedbydepositing

"""

assertnotself.is_killed#dev:iskilled

amp:uint256=self._A()

old_balances:uint256=self.balances

#Initialinvariant

D0:uint256=self._get_D_mem(old_balances,amp)#hunya#初始狀態D0

lp_token:address=self.lp_token

token_supply:uint256=CurveToken(lp_token).totalSupply()

new_balances:uint256=old_balances

foriinrange(N_COINS):

iftoken_supply==0:

assert_amounts>0#dev:initialdepositrequiresallcoins

#balancesstoreamountsofc-tokens

new_balances=_amounts

#Invariantafterchange

D1:uint256=self._get_D_mem(new_balances,amp)#hunya#添加流動性后理論D1

assertD1>D0

Mark Cuban旗下Web3娛樂平臺Fireside任命新高管以進軍體育和電子競技市場:10月8日消息,NBA達拉斯獨行俠隊老板Mark Cuban旗下Web3娛樂平臺Fireside任命前World Wrestling Entertainment(WWE)娛樂關系副總裁Kevin Endsley擔任體育、游戲和新聞合作伙伴關系負責人,旨在將業務拓展到體育和電子競技市場。

此前報道,Fireside于今年五月與以太坊側鏈SKALE合作推出了一項價值1億美元的加密貨幣創作者基金。(Recentlyheard)[2022/10/8 12:49:27]

#Weneedtorecalculatetheinvariantaccountingforfees

#tocalculatefairuser'sshare

D2:uint256=D1

fees:uint256=empty(uint256)

mint_amount:uint256=0

iftoken_supply>0:#hunya#非首次添加流動性進行手續費扣出

#Onlyaccountforfeesifwearenotthefirsttodeposit

fee:uint256=self.fee*N_COINS/(4*(N_COINS-1))

admin_fee:uint256=self.admin_fee

foriinrange(N_COINS):

ideal_balance:uint256=D1*old_balances/D0

difference:uint256=0

new_balance:uint256=new_balances

ifideal_balance>new_balance:

difference=ideal_balance-new_balance

else:

difference=new_balance-ideal_balance

fees=fee*difference/FEE_DENOMINATOR

self.balances=new_balance-(fees*admin_fee/FEE_DENOMINATOR)

new_balances-=fees

D2=self._get_D_mem(new_balances,amp)#hunya#扣除手續費后的D2

mint_amount=token_supply*(D2-D0)/D0#hunya#LP鑄幣量

else:

self.balances=new_balances

mint_amount=D1#Takethedustiftherewasany

assertmint_amount>=_min_mint_amount,"Slippagescrewedyou"

#Takecoinsfromthesender

foriinrange(N_COINS):

if_amounts>0:

#"safeTransferFrom"whichworksforERC20swhichreturnboolornot

_response:Bytes=raw_call(

self.coins,

concat(

method_id("transferFrom(address,address,uint256)"),

convert(msg.sender,bytes32),

convert(self,bytes32),

convert(_amounts,bytes32),

),

max_outsize=32,

)

iflen(_response)>0:

assertconvert(_response,bool)#dev:failedtransfer

#end"safeTransferFrom"

#Mintpooltokens

CurveToken(lp_token).mint(msg.sender,mint_amount)

logAddLiquidity(msg.sender,_amounts,fees,D1,token_supplymint_amount)

returnmint_amount

Metapool

metapool為basepool基礎上擴展衍生的新池,用作將新型的穩定幣向basepool的LP代幣錨定。basepool池的流動性提供者可以將basepool的LP代幣再次在metapool中添加流動性,進一步賺取額外的交易手續費收益。

metapool合約中,間接耦合了新型穩定幣和基礎池的穩定幣,在提供了不同穩定幣之間的兌換功能的同時,一定程度上分隔了新型穩定幣的風險。

穩定幣兌換

metapool合約中的exchange_underlying函數實現了穩定幣之間的相互兌換功能

@external

@nonreentrant('lock')

defexchange_underlying(i:int128,j:int128,_dx:uint256,_min_dy:uint256)->uint256:

....

#Usebase_iorbase_jiftheyare>=0

base_i:int128=i-MAX_COIN

base_j:int128=j-MAX_COIN

meta_i:int128=MAX_COIN

meta_j:int128=MAX_COIN

ifbase_i<0:

meta_i=i

ifbase_j<0:

meta_j=j

dy:uint256=0

...

ifbase_i<0orbase_j<0:#hunya#兌換中包含meta池代幣

old_balances:uint256=self.balances

xp:uint256=self._xp_mem(rates,old_balances)

x:uint256=0

ifbase_i<0:#hunya#輸入代幣為meta池代幣

x=xpdx_w_fee*rates/PRECISION

else:#hunya#輸入代幣為base池代幣

#iisfromBasePool

#Atfirst,gettheamountofpooltokens

base_inputs:uint256=empty(uint256)

base_inputs=dx_w_fee

coin_i:address=self.coins

#Depositandmeasuredelta

x=ERC20(coin_i).balanceOf(self)

Curve(base_pool).add_liquidity(base_inputs,0)#hunya#base池添加流動性

#Needtoconvertpooltokento"virtual"unitsusingrates

#dxisalsodifferentnow

dx_w_fee=ERC20(coin_i).balanceOf(self)-x

x=dx_w_fee*rates/PRECISION

#Addingnumberofpooltokens

x=xp

...

#Withdrawfromthebasepoolifneeded

ifbase_j>=0:#hunya#輸出代幣為base池代幣

out_amount:uint256=ERC20(output_coin).balanceOf(self)

Curve(base_pool).remove_liquidity_one_coin(dy,base_j,0)#hunya#base池移除流動性

dy=ERC20(output_coin).balanceOf(self)-out_amount

assertdy>=_min_dy,"Toofewcoinsinresult"

else:#hunya#純base池代幣兌換,直接調用base池exchange函數

#Ifbotharefromthebasepool

dy=ERC20(output_coin).balanceOf(self)

Curve(base_pool).exchange(base_i,base_j,dx_w_fee,_min_dy)

dy=ERC20(output_coin).balanceOf(self)-dy

...

logTokenExchangeUnderlying(msg.sender,i,_dx,j,dy)

returndy

若兌換情況涉及basepool代幣和metapool池代幣,則會通過basepool的LP添加或移除流動性來做中間流程;若只是basepool代幣的兌換,則直接調用basepool的exchange函數進行兌換。

總結

總的來看,無論是白皮書的理論設計還是代碼的算法實現都是十分優秀的,理論設計巧妙夯實,代碼算法高效簡潔。這些優秀的實現都使得Curve在穩定對價資產交易領域中有著明顯的競爭優勢。

Tags:INTUINBASBASEIntexcoinBabyPenguinsBAS幣DotBased

DOT
Gate.io 非首發上線Startup項目KOK(KOK)及免費認購規則公告(免費瓜分13,793 個KOK)_KOK

關於Gate.ioStartup免費空投計劃爲回饋平臺用戶,Gate.io上線“免費空投計劃”,在Startup區不定期進行區塊鏈項目的免費空投計劃.

1900/1/1 0:00:00
Gate.io 已開啓ALU、SQUID、SOLO、SFM、SGB(自動做市商AMM模式)新版流動性礦池獎勵,當前流動性挖礦年化收益率最高達2,072.09%_Gate.io

Gate.io今日已正式上線ALU、SQUID、SOLO、SFM、SGB多個幣種USDT、ETH、BTC交易對礦池,並開啓新版流動性礦池獎勵.

1900/1/1 0:00:00
Bankless:加密寒冬必備的DeFi可持續收益耕種指南_PRO

原文作者:BenGiove,Bankless分析師 原文編譯:DeFi之道 2020-2021年加密牛市的一個決定性特征是,在DeFi中能夠賺取令人難以置信的高收益.

1900/1/1 0:00:00
上線即登OpenSea交易榜首,Invisible Friends究竟有何魅力?_INV

撰文:Karen,ForesightNewsInvisibleFriends這個敘事性強、有靈性的2D動畫NFT項目因其插畫師影響力、藝術特征以及營銷策略備受社區關注,在今日6點開放鑄造后.

1900/1/1 0:00:00
解決三個最為緊迫的問題,讓去中心化治理再次偉大_EFI

原文作者:SamMcCarthy關于去中心化治理所面臨的挑戰以及對未來的一些想法的概述。*關于加密貨幣去中心化治理現狀系列文章的第1部分。這篇文章的后續是“治理作為價值的來源”.

1900/1/1 0:00:00
Gate.io Startup首發上線MetagamZ(METAG) 及免費分發規則公告(免費瓜分20,000,000 個 METAG)_Gate.io

關於Gate.ioStartup免費空投計劃爲回饋平臺用戶,Gate.io上線“免費空投計劃”,在Startup區不定期進行區塊鏈項目的免費空投計劃.

1900/1/1 0:00:00
ads