D3Maker#
D3Maker是一个依赖于价格控制模型的DeFi协议。Maker可以设置代币价格和其他价格参数来控制交换。关键部分是D3Maker中的MakerState和D3MM中的flag参数。MakerState包含代币价格、数量和交换费用。特别是对于频繁调整的代币价格,我们使用一个插槽通过依赖价格数组压缩3个代币价格。D3MM中的flag决定了该代币的累积交易量是否发生变化,这意味着重置累积交易起点。每个函数都应该重置累积交易量。
Maker不能删除代币功能。
初始化#
function init(
address owner,
address pool,
uint256 maxInterval
) external
使用所有者地址、池地址和最大间隔初始化合约。
参数:
名称 | 类型 | 描述 |
---|---|---|
owner | address | 所有者地址 |
pool | address | 池地址 |
maxInterval | uint256 | 最大间隔 |
获取池中代币的TokenMMInfo#
function getTokenMMInfoForPool(
address token
) external view returns (Types.TokenMMInfo tokenMMInfo,
uint256 tokenIndex)
返回给定代币的TokenMMInfo。
参数:
名称 | 类型 | 描述 |
---|---|---|
token | address | 代币地址 |
返回值:
名称 | 类型 | 描述 |
---|---|---|
tokenMMInfo | struct Types.TokenMMInfo | 代币的TokenMMInfo |
tokenIndex | uint256 | 代币的索引 |
获取单个代币价格设定#
function getOneTokenPriceSet(
address token
) public view returns (uint80 priceSet)
此函数返回给定代币的价格设定。
参数:
名称 | 类型 | 描述 |
---|---|---|
token | address | 代币地址 |
返回值:
名称 | 类型 | 描述 |
---|---|---|
priceSet | uint80 | 代币的价格设定 |
获取单个代币原始索引#
function getOneTokenOriginIndex(
address token
) public view returns (int256)
获取单个代币的索引。奇数表示非稳定代币,偶数表示稳定代币,真正的索引 = (tokenIndex[address] - 1) / 2
参数:
名称 | 类型 | 描述 |
---|---|---|
token | address | 代币地址 |
获取稳定代币信息#
function getStableTokenInfo() external view returns (uint256 numberOfStable,
uint256[] tokenPriceStable,
uint256 curFlag)
获取所有稳定代币的信息。
返回值:
名称 | 类型 | 描述 |
---|---|---|
numberOfStable | uint256 | 稳定代币的数量 |
tokenPriceStable | uint256[] | 稳定代币的价格插槽数组,每个数据包含最多3个代币价格 |
curFlag | uint256 | 所有代币在一个插槽中的当前标记 |
获取非稳定代币信息#
function getNSTokenInfo() external view returns (uint256 number,
uint256[] tokenPrices,
uint256 curFlag)
获取所有非稳定代币的信息。
返回值:
名称 | 类型 | 描述 |
---|---|---|
number | uint256 | 非稳定代币的数量 |
tokenPrices | uint256[] | 非稳定代币的价格插槽数组,每个数据包含最多3个代币价格 |
curFlag | uint256 | 所有代币在一个插槽中的当前标记 |
设置价格粘合#
function stickPrice(
uint256 priceSlot,
uint256 slotInnerIndex,
uint256 priceSet
) public pure returns (uint256 newPriceSlot)
用于在一个价格插槽中构造多个价格。
参数:
名称 | 类型 | 描述 |
---|---|---|
priceSlot | uint256 | 原始价格插槽 |
slotInnerIndex | uint256 | 插槽中的代币索引 |
priceSet | uint256 | 需要更新的代币信息 |
检查心跳#
function checkHeartbeat() public view returns (bool)
检查心跳
从Maker获取池中代币列表#
function getPoolTokenListFromMaker() external view returns (address[] tokenlist)
获取池中的代币列表
多合一调用#
function multicall(
bytes[] data
) external returns (bytes[] results)
Maker可以使用multicall在一个交易中设置不同的参数。
参数:
名称 | 类型 | 描述 |
---|---|---|
data | bytes[] | 要调用的calldata的列表 |
设置新代币#
function setNewToken(
address token,
bool stableOrNot,
uint80 priceSet,
uint64 amountSet,
uint16 kAsk,
uint16 kBid
) external
Maker设置新的代币信息。
参数:
名称 | 类型 | 描述 |
---|---|---|
token | address | 代币地址 |
stableOrNot | bool | 描述该代币是否稳定,true为稳定代币 |
priceSet | uint80 | 打包的价格,[中间价格(16位) |
amountSet | uint64 | 描述卖出和买入数量和K,[卖出数量(16位) |
kAsk | uint16 | 卖出曲线的K |
kBid | uint16 | 买入曲线的K |
设置代币价格#
function setTokensPrice(
address[] tokens,
uint80[] tokenPrices
) external
设置代币价格
参数:
名称 | 类型 | 描述 |
---|---|---|
tokens | address[] | 代币地址集合 |
tokenPrices | uint80[] | 代币价格集合,每个数字打包一个代币的所有价格。每个格式与priceSet相同[中间价格(16位) |
设置非稳定代币价格插槽#
function setNSPriceSlot(
uint256[] slotIndex,
uint256[] priceSlots,
uint256 newAllFlag
) external
用户设置PriceListInfo.tokenPriceNS的价格信息,仅适用于非稳定代币。
Maker应对数据可用性负责。
参数:
名称 | 类型 | 描述 |
---|---|---|
slotIndex | uint256[] | tokenPriceNS的索引 |
priceSlots | uint256[] | tokenPriceNS的价格信息,每个数据已打包了所有3个代币的价格信息 |
newAllFlag | uint256 | Maker更新代币累积状态的标记,对于allFlag,tokenOriIndex表示allFlag中的位索引。例如:tokenA的原始索引为3,那么(token >> 3) & 1 = token3的标记。标记为0表示重置累积量,标记为1表示不重置累积量。 |
设置稳定代币价格插槽#
function setStablePriceSlot(
uint256[] slotIndex,
uint256[] priceSlots,
uint256 newAllFlag
) external
用户设置PriceListInfo.tokenPriceStable的价格信息,仅适用于稳定代币。
Maker应对数据可用性负责。
参数:
名称 | 类型 | 描述 |
---|---|---|
slotIndex | uint256[] | tokenPriceStable的索引 |
priceSlots | uint256[] | tokenPriceStable的价格信息,每个数据已打包了所有3个代币的价格信息 |
newAllFlag | uint256 | Maker更新代币累积状态的标记,对于allFlag,tokenOriIndex表示allFlag中的位索引。例如:tokenA的原始索引为3,那么(token >> 3) & 1 = token3的标记。标记为0表示重置累积量,标记为1表示不重置累积量。 |
设置代币数量#
function setTokensAmounts(
address[] tokens,
uint64[] tokenAmounts
) external
设置代币数量
参数:
名称 | 类型 | 描述 |
---|---|---|
tokens | address[] | 代币地址集合 |
tokenAmounts | uint64[] | 代币数量集合,每个数字打包一个代币的所有数量。每个格式与amountSetAndK相同[卖出数量(16位) |
设置代币的K值#
function setTokensKs(
address[] tokens,
uint32[] tokenKs
) external
设置代币的K值
参数:
名称 | 类型 | 描述 |
---|---|---|
tokens | address[] | 代币地址集合 |
tokenKs | uint32[] | 代币的k_ask和k_bid,结构类似于[kAsk(16位) |
设置心跳#
function setHeartbeat(
uint256 newMaxInterval
) public
设置可接受的设置间隔,如果设置间隔 > maxInterval,则交换将回滚。
参数:
名称 | 类型 | 描述 |
---|---|---|
newMaxInterval | uint256 | 新的最大间隔 |