DODO 文档中心

D3Maker#

D3Maker是一个依赖于价格控制模型的DeFi协议。Maker可以设置代币价格和其他价格参数来控制交换。关键部分是D3Maker中的MakerState和D3MM中的flag参数。MakerState包含代币价格、数量和交换费用。特别是对于频繁调整的代币价格,我们使用一个插槽通过依赖价格数组压缩3个代币价格。D3MM中的flag决定了该代币的累积交易量是否发生变化,这意味着重置累积交易起点。每个函数都应该重置累积交易量。

Maker不能删除代币功能。

初始化#

function init(
    address owner,
    address pool,
    uint256 maxInterval
) external

使用所有者地址、池地址和最大间隔初始化合约。

参数:

名称类型描述
owneraddress所有者地址
pooladdress池地址
maxIntervaluint256最大间隔

获取池中代币的TokenMMInfo#

function getTokenMMInfoForPool(
    address token
) external view returns (Types.TokenMMInfo tokenMMInfo,
    uint256 tokenIndex)

返回给定代币的TokenMMInfo。

参数:

名称类型描述
tokenaddress代币地址

返回值:

名称类型描述
tokenMMInfostruct Types.TokenMMInfo代币的TokenMMInfo
tokenIndexuint256代币的索引

获取单个代币价格设定#

function getOneTokenPriceSet(
    address token
) public view returns (uint80 priceSet)

此函数返回给定代币的价格设定。

参数:

名称类型描述
tokenaddress代币地址

返回值:

名称类型描述
priceSetuint80代币的价格设定

获取单个代币原始索引#

function getOneTokenOriginIndex(
    address token
) public view returns (int256)

获取单个代币的索引。奇数表示非稳定代币,偶数表示稳定代币,真正的索引 = (tokenIndex[address] - 1) / 2

参数:

名称类型描述
tokenaddress代币地址

获取稳定代币信息#

function getStableTokenInfo() external view returns (uint256 numberOfStable,
    uint256[] tokenPriceStable,
    uint256 curFlag)

获取所有稳定代币的信息。

返回值:

名称类型描述
numberOfStableuint256稳定代币的数量
tokenPriceStableuint256[]稳定代币的价格插槽数组,每个数据包含最多3个代币价格
curFlaguint256所有代币在一个插槽中的当前标记

获取非稳定代币信息#

function getNSTokenInfo() external view returns (uint256 number,
    uint256[] tokenPrices,
    uint256 curFlag)

获取所有非稳定代币的信息。

返回值:

名称类型描述
numberuint256非稳定代币的数量
tokenPricesuint256[]非稳定代币的价格插槽数组,每个数据包含最多3个代币价格
curFlaguint256所有代币在一个插槽中的当前标记

设置价格粘合#

function stickPrice(
    uint256 priceSlot,
    uint256 slotInnerIndex,
    uint256 priceSet
) public pure returns (uint256 newPriceSlot)

用于在一个价格插槽中构造多个价格。

参数:

名称类型描述
priceSlotuint256原始价格插槽
slotInnerIndexuint256插槽中的代币索引
priceSetuint256需要更新的代币信息

检查心跳#

function checkHeartbeat() public view returns (bool)

检查心跳

从Maker获取池中代币列表#

function getPoolTokenListFromMaker() external view returns (address[] tokenlist)

获取池中的代币列表

多合一调用#

function multicall(
    bytes[] data
) external returns (bytes[] results)

Maker可以使用multicall在一个交易中设置不同的参数。

参数:

名称类型描述
databytes[]要调用的calldata的列表

设置新代币#

function setNewToken(
    address token,
    bool stableOrNot,
    uint80 priceSet,
    uint64 amountSet,
    uint16 kAsk,
    uint16 kBid
) external

Maker设置新的代币信息。

参数:

名称类型描述
tokenaddress代币地址
stableOrNotbool描述该代币是否稳定,true为稳定代币
priceSetuint80打包的价格,[中间价格(16位)
amountSetuint64描述卖出和买入数量和K,[卖出数量(16位)
kAskuint16卖出曲线的K
kBiduint16买入曲线的K

设置代币价格#

function setTokensPrice(
    address[] tokens,
    uint80[] tokenPrices
) external

设置代币价格

参数:

名称类型描述
tokensaddress[]代币地址集合
tokenPricesuint80[]代币价格集合,每个数字打包一个代币的所有价格。每个格式与priceSet相同[中间价格(16位)

设置非稳定代币价格插槽#

function setNSPriceSlot(
    uint256[] slotIndex,
    uint256[] priceSlots,
    uint256 newAllFlag
) external

用户设置PriceListInfo.tokenPriceNS的价格信息,仅适用于非稳定代币。

Maker应对数据可用性负责。

参数:

名称类型描述
slotIndexuint256[]tokenPriceNS的索引
priceSlotsuint256[]tokenPriceNS的价格信息,每个数据已打包了所有3个代币的价格信息
newAllFlaguint256Maker更新代币累积状态的标记,对于allFlag,tokenOriIndex表示allFlag中的位索引。例如:tokenA的原始索引为3,那么(token >> 3) & 1 = token3的标记。标记为0表示重置累积量,标记为1表示不重置累积量。

设置稳定代币价格插槽#

function setStablePriceSlot(
    uint256[] slotIndex,
    uint256[] priceSlots,
    uint256 newAllFlag
) external

用户设置PriceListInfo.tokenPriceStable的价格信息,仅适用于稳定代币。

Maker应对数据可用性负责。

参数:

名称类型描述
slotIndexuint256[]tokenPriceStable的索引
priceSlotsuint256[]tokenPriceStable的价格信息,每个数据已打包了所有3个代币的价格信息
newAllFlaguint256Maker更新代币累积状态的标记,对于allFlag,tokenOriIndex表示allFlag中的位索引。例如:tokenA的原始索引为3,那么(token >> 3) & 1 = token3的标记。标记为0表示重置累积量,标记为1表示不重置累积量。

设置代币数量#

function setTokensAmounts(
    address[] tokens,
    uint64[] tokenAmounts
) external

设置代币数量

参数:

名称类型描述
tokensaddress[]代币地址集合
tokenAmountsuint64[]代币数量集合,每个数字打包一个代币的所有数量。每个格式与amountSetAndK相同[卖出数量(16位)

设置代币的K值#

function setTokensKs(
    address[] tokens,
    uint32[] tokenKs
) external

设置代币的K值

参数:

名称类型描述
tokensaddress[]代币地址集合
tokenKsuint32[]代币的k_ask和k_bid,结构类似于[kAsk(16位)

设置心跳#

function setHeartbeat(
    uint256 newMaxInterval
) public

设置可接受的设置间隔,如果设置间隔 > maxInterval,则交换将回滚。

参数:

名称类型描述
newMaxIntervaluint256新的最大间隔