简介
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))
数据:某聪明钱抛售约54万美元的SHIB,目前仍持有价值约228万美元的SHIB:6月18日消息,据Spot On Chain监测,此前从SHIB中赚取960万美元以上的某聪明钱地址,在过去16天中以0.00000712美元的均价抛售了754亿枚SHI(总价值约53.7万美元),并兑换成ETH和USDT。值得注意的是,SHIB价格在几乎每次在该地址抛售后出现明显下降。该地址当前仍持有3290亿枚SHIB(价值约228万美元)。[2023/6/18 21:45:20]
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值,算法可谓精妙简洁
Optimism与Lattice合作推出基于OP Stack的元宇宙游戏OPCraft:10月19日消息,据官方消息,游戏工作室Lattice宣布与Optimism合作推出3D自治元宇宙游戏OPCraft。OPCraft运行在基于Optimism昨日宣布推出的模块化组件OP Stack构建的自定义Rollup上,游戏中的每个元素都存在于链上,每个行为都是一笔以太坊业务。目前,该游戏的合约和客户端已经开源,支持玩家在其他EVM兼容链上进行部署。OPCraft世界将开放两周,北京时间11月1日7:59将停止运行,Rollup将被冻结,玩家在游戏中的创造将被永久保存。[2022/10/19 17:32:26]
同样的算法还用于_get_y函数计算y值
@view
@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
y_prev:uint256=0
以太坊2.0客户端Prysm发布v3.1.1版本:金色财经消息,Prysmatic Labs团队开发的以太坊2.0客户端Prysm发布v3.1.1版本,包含对硬分叉选择错误的修复,强烈建议在合并之前升级。(github.com)[2022/9/10 13:21:41]
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
@param_min_mint_amountMinimumamountofLPtokenstomintfromthedeposit
@returnAmountofLPtokensreceivedbydepositing
"""
巴西国际转账平台Remessa Online与Ripple、Modulr合作促进英国和欧洲跨境支付:6月12日消息,巴西国际转账平台Remessa Online宣布与Ripple和嵌入式支付平台Modulr达成合作,以加速巴西到英国和欧洲的跨境支付。(Fintech Finance News)[2022/6/12 4:20:25]
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
#Weneedtorecalculatetheinvariantaccountingforfees
#tocalculatefairuser'sshare
D2:uint256=D1
fees:uint256=empty(uint256)
mint_amount:uint256=0
iftoken_supply>0:#hunya#非首次添加流动性进行手续费扣出
#Onlyaccountforfeesifwearenotthefirsttodeposit
孙兴慜NFT地板价由0.085ETH涨至目前0.15ETH:据NFT数据统计网站NFTGO显示,过去24小时内,孙兴慜NFT成交量超过158笔,地板价由0.085ETH涨至目前的0.15ETH。
NFTSTAR为庆祝孙兴慜获得金靴奖公布了一系列活动,凡在5月29日北京时间下午6点时快照确认持有孙兴慜Fan Pass的钱包,都可以在六月初免费铸造一个3D立体纪念款金靴NFT,发行量为777个;同时所有持有纪念金靴NFT者,可参与MAYC、Adidas NFT、孙兴慜签名球衣的抽奖活动。
据官方介绍,NFTSTAR专注搭建知名球星元宇宙,签约球星包括足球明星内马尔、NBA篮球明星字母哥等人。[2022/5/26 3:44:04]
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在稳定对价资产交易领域中有着明显的竞争优势。
尊敬的XT.COM用戶:ECOT錢包升級維護已完成,XT.COM現已恢復ECOT充提業務。給您帶來的不便,請您諒解!感謝您對XT.COM的支持與信任!XT.COM團隊2022年2月28日http.
1900/1/1 0:00:00原文作者:RSC原文编译:BlockunicornNFT社区先驱。RCS:Carlos,我想首先问一下NFT领域早期的感觉,当时没有与现在相同的调解和守门形式.
1900/1/1 0:00:00根據Filecoin(FIL)官方消息,Filecoin(FIL)計劃在網絡區塊epoch#1594680時進行主網升級,預計時間2022年3月1日.
1900/1/1 0:00:00原文作者:SamMcCarthy关于去中心化治理所面临的挑战以及对未来的一些想法的概述。*关于加密货币去中心化治理现状系列文章的第1部分。这篇文章的后续是“治理作为价值的来源”.
1900/1/1 0:00:002月24日,俄乌冲突爆发。就像世界上任何其他金融市场一样,加密市场也陷入了困境。比特币、以太坊、BNB、XRP等所有主要加密货币均大幅下跌.
1900/1/1 0:00:00MantaNetwork简介Manta是使用zkSNARKs在波卡上建立了一个Layer1的平行链解决方案,从而为转账和交易等DeFi活动提供隐私保护.
1900/1/1 0:00:00