深入了解dYdX,去中心化衍生品协议的基本构成是怎样的?

dYdX协议(又称"Solo")由运行在以太坊区块链上的智能合约组成,正是这些合约,在支持去中心化保证金交易及借贷操作。

前言:在当前的DeFi生态系统当中,借贷应用牢牢占据着主导地位,诸如Maker、Compound都属于此类,而衍生品交易应用则处于第二梯队,而dYdX就属于其中之一。

此前,译者已简单介绍了dYdX项目的概念与情况。

而在这篇文章中,我们将深入了解dYdX协议的基本构成。

dYdX协议(又称"Solo")由运行在以太坊区块链上的智能合约组成,正是这些合约,在支持去中心化保证金交易及借贷操作。

目前,trade.dydx.exchange已经在使用Solo协议。

基于账户

Solo是基于账户的,Solo支持的每个资产账户都有余额,而余额可以是正的(表示资产的净供应),也可以是负的(表示资产的净借入),另外,账户必须维持一定水平的抵押品,否则将被清算。

例子

以太坊地址0x6b5Bb4E60821eCE7363CaFf836Be1A4f9e3559B3在其账户号123456中拥有以下这些余额:

  1. ETH: 1,000
  2. DAI: -10,000
  3. USDC: -5,000

这表示这个账户借了10,000 DAI以及5,000 USDC。而这些借款是通过抵押1,000 ETH来实现的。该账户将获得ETH的利息,并支付DAI以及USDC的利息。

(Market)市场

Solo为其支持的每个ERC20代币资产提供了一个市场。每个市场都规定了价格预言机(Price Oracle)(用于确定其资产价格),以及决定市场利率是多少的利率设定合约。

目前Solo只支持了以下几个市场,并由数字ID来表示:

深入了解dYdX,去中心化衍生品协议的基本构成是怎样的?

利率

Solo系统中的利率是动态的,每个市场的设定也会不同。每一个市场利率都是根据市场(总借款)/(总供给)的比率自动按算法设定的。当账户余额为正时,其将持续赚钱利息,而当余额为负时,其将持续支付利息。

利息是连续赚取/支付的,协议中的费率以年百分率表示。

Wei & Par

在Solo中有两种类型的余额:Wei 和 Par。

1、Wei

Wei是指账户中持有实际资产代币的金额,随着余额利息的增加,Wei的数额不断变化。例如,如果Bob将10 DAI存入一个Solo账户,其Wei余额最初将为10,而随着Bob开始在DAI上获得利息,其余额将开始每秒增长。

大多数时候,你很可能会想用Wei余额来显示自己的资产变化。

2、Par

Par是指利息调整后金额,该金额是静态的,在协议中不会有变化。

这些是实际存储在协议智能合约中的余额。协议使用当前市场指数(见下文)将Par值转换为Wei值。

指数

每个市场都有一个全球借贷指数和供应指数,这些指数被用于转换Par Wei值(使用以下公式):

借款Wei余额 = (借款Par余额)*(借款市场指数)

以及

供给Wei余额 = (供给Par余额)* (供给市场指数)

在市场加入到协议后,指数是从1开始的,它们会根据资产的累积利息而增加。例如,在加入USDC后,USDC的借款指数和供给指数均为1。比方说,在下一个月,借款人将获得2%的利息,贷款人将获得1%的利息。之后,供给指数为1.01,而借款指数则为1.02。这些指数将随累积利息的增加而增加。

例子:

Alice向协议存入了10 个DAI (则其Wei余额为10 DAI),目前DAI的供给指数为2。使用供给Par余额 = (供给Wei余额)/(供给市场指数)= 10/2 = 5,协议将5 Par 余额记入Alice的账户。

后来,协议累积了DAI利息,现在DAI的供给指数为3。现在,Alice提走自己的DAI,而她的DAI Par余额仍然是5(Par不会随时间变化)。现在,协议计算供给Wei余额 = (供给Par余额)* (供给市场指数)= 5*3 = 15,并将15个 DAI发送给Alice。

Action(操作)

帐户的所有状态更改都是通过Action(操作)进行的。Action(操作)可以修改一个或多个帐户的余额。Solo中没有所谓的“借款”Action操作,如果账户余额减少,Action可自动借入资金。Solo支持以下Action(操作):

Deposit(存款)

将资金存入账户,资金从发送者或批准地址那转移到Solo,账户的余额递增。

Withdraw(提款)

从帐户中提取资金,资金从Solo发送到指定的地址,然后账户的余额递减。

Transfer(转移)

在两个Solo账户之间内部转移资金。

Buy(购买)

使用一种资产在一家去中心化交易所上购买资产。使用dYdX的与不同的去中心化交易所(DEX)进行交互。导致购买资产的余额上升,而用于购买的资产余额下降。示例:使用DAI在eth2dai上购买1个WETH。

Sell(出售)

在去中心化交易所将一项资产出售换取另一项资产。使用dYdX的交易所封装器与不同的DEX进行交互。导致售出资产余额下降,而收到资产余额上升。示例:在eth2dai上出售1个WETH,换取DAI。

Trade(交易)

在Solo系统内部与另一个账户进行资产交易。实际上不会移动任何代币,但账户余额会发生更新。使用AutoTrader接口,允许指定智能合约,该合约被调用以确定交易价格。

Call(调用)

通过帐户的上下文调用ICallee接口指定的函数,不修改账户余额。如何使用它的一个例子是,设定 Expiry合约的到期日。

Liquidate(清算)

清算抵押不足的账户。对两个账户进行操作:清算账户以及抵押不足账户。该操作不会传输任何代币,而是在系统内部更新账户余额。以示例指定的价格进行清算:

起始帐户余额:

清算账户(L):+100 DAI       抵押不足账户(U): -1 ETH,+150 DAI    ETH预言机(oracle)价格: $125     DAI 预言机(oracle)价格 : $1       清算价差 : 5%

清算行动导致1 ETH 从L转移至U,1 ETH * (($125/ETH) / ($1/DAI)) * 1.05 = 131.25 DAI 从U转移至L。清算后余额为:

清算账户(L): +231.25 DAI , -1 ETH 抵押不足账户(U) : +18.75 DAI

Vaporize(汽化)

从保险基金中提取资金,使一个只有负余额的“水下账户”(underwater account,指已清算账户)实现再抵押。

Operation(操作)

对协议的每个状态更改操作,都是通过Operation发生的。Operation包含一系列Action,每个操作对一个帐户执行。

在一个Operation中,可以将多个Action串接在一起,以实现与协议更复杂的交互。例如,在Solo上执行做空ETH,可通过包含以下Action的Operation来实现:

Sell ETH for DAI Deposit DAI

重要的是,抵押只在operation操作结束时检查,因此允许在一次Operation的范围内对账户进行暂时性的欠抵押。这允许像Sell -> Trade这样的Operation操作,在这种操作中,首先出售资产,然后将抵押品锁定为Operation中的第二个Action。

Amount(金额)

Solo中的金额按以下三项命名:

1、value 金额的数值 2、reference AmountReference.Delta: 指相对于现有余额的金额 AmountReference.Target: 表示绝对金额 3、denomination AmountDenomination.Wei:指被转移代币实际单位的金额(见Wei) AmountDenomination.Par:表示金额以本金计价,Solo在其内部会计中使用这些类型的金额,并且它们不会随时间的推移而改变(见Par)

需要注意的是,金额总是与账户余额的变化有关,而不是与所发生的Action数量有关。例如使用[伪代码] withdraw(-10),当你取款时,账户余额就会减少。

本文来自,仅作分享,存在异议请联系平台删除。本文观点不代表刺猬财经 - 刺猬区块链资讯站立场。

(0)
上一篇 2019年10月17日 下午3:30
下一篇 2019年10月17日

相关推荐