经济安全
充值入账的免费额度
每笔充值都需要零知识证明而产生费用,目前节点运营方会补贴这类费用,用户无需为充值付费。为了避免协议受到攻击,标准充值和高级充值都分别设定了免费补贴的次数,该数值随着充值入账完成而减少,并随着时间流逝线性增加。标准充值相关参数配置在节点,高级充值相关参数则配置在DeGate合约。
标准充值的交易链上确认后,会先检查补贴额度,如果额度正好完全用完了,需要等到用户支付一笔充值处理费后,节点才会继续处理充值入账。高级充值流程稍有不同的是需要用户在调用合约进行充值的交易不仅要支付交易原本需要的矿工费,还需要加上额外的充值处理费,否则交易可能会失败。所有充值处理费只能用ETH支付。
币种参数配置
所有中心化交易所都以人工管理币种资产和交易对列表,控制上币流程是交易所惯用的运营方法。而在DeGate,以无需许可的方式支持这些功能。任何人都可以注册和充值任意的ERC20币种,添加交易对后下单交易。资产注册后会被自动添加至全局币种列表。
免审核上币机制同样会带来一些问题,如假币、转账燃烧、以及数量会重置(Rebase)的非标准ERC20,会对正常使用造成影响;或者操作价格来攻击DeGate协议等。因此DeGate节点运营方为全局币种列表添加了额外的参数配置,以规避上述问题。
默认币种列表
节点运营方提供了默认币种列表,该列表内币种的图标、符号与合约地址通过了一致性验证,与coinmarketcap、tokenlists等网站数据一致。用户可放心交易这类资产,不必担心是假币。节点运营方会定期更新默认币种的配置,主流和常见的资产都会是默认币种。交易对的计价币种都是默认币种,包括ETH、USDC和USDT。
DeGate免审核上架的币种,不会自动进入默认币种列表。用户在交易此类币种时会看到风险提示。
两者区别见如下表格:
功能 | 默认币种列表 | 其他币种 |
---|---|---|
币种图标 | 有 | 显示问号图标 |
合约缩略地址 | 无 | 有 |
交易风险提示 | 无 | 有 |
资产列表显示非0资产 | 有 | 无 |
验证状态 | 已验证 | 非验证 |
如何区分默认币种与非默认币种?
主要通过图标和地址分辨,如图1是假币,图2是真币。
成交活跃和不活跃币种
DeGate开放上币和交易,如果对订单最小金额没有一定限制,会增加交易成本,也容易受到攻击。所以在DeGate需要满足最小订单价值才能够下单。该阈值相较于中心化交易所更高,为了能降低下单资金门槛,引入成交活跃币种,下单资金要求更低。是否成交活跃,其订单价值的计算方式不同。
支持标准划入的币种
DeGate提供了节省矿工费的标准划入方式,考虑到该方式可能带来的trustless问题,并非所有资产都可以用标准划入。一般来说,默认币种都支持标准划入。
交易对的计价币种
交易对由一个交易币种和一个计价币种组成,比如ETH/USDC交易对,ETH是交易币种,USDC是计价币种。DeGate协议允许用户任意注册币种,但除了ETH、USDC、USDT可以作为计价币种,其他只能作为交易币种出现。未来会以DAO形式新增计价币种。
交易时的矿工费需要以交易对计价币种支付。
例如:ETH/USDC交易对
买入ETH:买入需要USDC,可以用账户余额USDC支付矿工费
卖出ETH:卖出不需要USDC,账户余额加上交易后得到的USDC可以支付矿工费
如果任意两个币种可组成交易对
攻击者部署新币种XXX和YYY并组成交易对,交易时支付没有价值的XXX和YYY。DeGate协议仍要用ETH支付上链费用,遭受损失。
如果可以用交易币种来支付矿工费
攻击者部署新币种XXX,创建交易对XXX/USDC,通过卖单Maker和买单Taker完成自成交,可以只用XXX支付矿工费和手续费。DeGate协议收到没有价值的XXX,用ETH支付上链费用,遭受损失。
风险价格
目前一个交易币种可以创建三个交易对,分别为XXX/ETH,XXX/USDC,XXX/USDT。DeGate协议设计了3种价格类型:
风险价格:每个币种只有一个风险价格,根据该币种所有交易对的成交数据计算
实时价格:每个币种只有一个实时价格,根据该币种所有交易对的成交数据计算
最新价格:每个交易对有一个最新价格,是最近一次成交的价格
其中最重要的是风险价格,用于下单时计算订单的价值,从而决定能否下单。实时价格用于数据统计。最新价格在交易界面展示。
价格算法:
任意币种XXX,取其所有交易对的历史数据,每个小时统计一次,选出过去一段时间内平均成交金额最大的交易对P
XXX的风险价格为P的过去平均价格
XXX的实时价格为P的最新价格
最小订单价值
最小订单价值用于判断能否下单,由节点运营方设置,目前为$100,以后会基于以太坊网络成本和DeGate订单成交金额统计数据来酌情调整。
根据交易币种是否成交活跃,有不同的计算条件
成交活跃币种: 交易币种价值 >= 最小下单价值 或者 计价币种价值 >= 最小下单价值
非成交活跃币种:计价币种价值 >= 最小下单价值
其中币种价值 = 数量 * 风险价格
以ETH/USDC交易对为例
最小订单价值为$100
ETH是成交活跃币种
假设ETH风险价格为$2000
例A:
以1500的价格买入0.05 ETH,能够下单,因为
ETH价值 = $2000*0.05 = $100 >= 最小订单价值
USDC价值 = $1500*0.05 = $75 < 最小订单价值
即使计价币种 (USDC) 的价值不满足条件,仍然可以下单,因为交易币种 (ETH) 是成交活跃币种,其价值已满足最小订单价值条件。只需要有任何一个币种满足条件即可下单。
例B:
以2100的价格卖出0.04ETH,不能下单,因为
ETH价值 = $2000*0.04 = $80 < 最小订单价值
USDC价值 = $2100*0.04 = $84 < 最小订单价值
因为交易币种 (ETH) 和计价币种 (USDC)都没满足最小订单价值条件,所以无法下单。
以XYZ/USDC交易对为例
最小订单价值为$100
XYZ是非成交活跃币种
假设XYZ风险价格为$2
例C:
以1.5的价格买入40 XYZ,不能下单,因为
USDC价值 = $1.5*40 = $60 < 最小订单价值
因为计价币种 (USDC)没满足最小订单价值条件,所以无法下单。
例D:
以10的价格卖出20 XYZ,可以下单,因为
USDC价值 = $10*20 = $200 >= 最小订单价值
因为计价币种 (USDC)满足最小订单价值条件,所以能够下单。
创建网格策略也遵循以上规则,策略下的所有订单都需要满足最小订单价值才可以被创建。
如果最小订单价值设置很低,比如$10
中心化交易所下单最少金额一般在$5~10,为什么DeGate要求高那么多?这与DeGate的费用有关系。首先因为在DeGate内的每笔成交都需要支付从L2到L1的上链成本,其次Maker成交免费,交易成本都由Taker支付。所以攻击者可以无成本挂出大量小额订单。小额订单多意味着成交次数变多,Taker就需要支付更多的矿工费。
风险订单
每个DeGate账户可同时支持的进行中订单总数有上限,受两个参数影响:风险订单和电路约束。节点运营方负责参数配置,但不会修改电路约束。
风险订单
风险订单用于减少恶意挂单,该阈值会比较大,一般用户不太会触发。普通订单和网格订单共用此约束。订单满足最小订单价值条件后(币种价值 = 币种的风险价格 * 币种交易数量),还需以交易币种属性来判断是否为风险订单,规则如下:
1.交易币种是ETH、USDC或USDT
方向 | 条件 | 结果 |
---|---|---|
卖出 | 交易币种价值 >= 最小订单价值 并且 计价币种价值 >= 最小订单价值 | 非风险订单 |
卖出 | 交易币种价值 < 最小订单价值 并且 计价币种价值 >= 最小订单价值 | 风险订单 |
买入 | 计价币种价值 >= 最小订单价值 | 非风险订单 |
买入 | 交易币种价值 >= 最小订单价值 并且 计价币种价值 < 最小订单价值 | 风险订单 |
2.交易币种不是ETH、USDC或USDT,也不是活跃币种
方向 | 条件 | 结果 |
---|---|---|
卖出 | 所有卖单 | 风险订单 |
买入 | 所有买单,因为计价币种价值>=最小下单价值时才能下买单 | 非风险订单 |
3.交易币种是活跃币种,不是ETH、USDC或USDT
方向 | 条件 | 结果 |
---|---|---|
卖出 | 所有卖单 | 风险订单 |
买入 | 计价币种价值 >= 最小订单价值 | 非风险订单 |
买入 | 交易币种价值 >= 最小订单价值 并且 计价币种价值 < 最小订单价值 | 风险订单 |
电路约束
电路中每个账户下有16384个StorageID,表示最多有16384个进行中订单,普通订单和网格订单共用此约束。
其他约束
出于性能考虑,DeGate协议还有以下限制,由节点运营方设置。
单账户每分钟普通订单创建数量
单账户每分钟网格策略创建数量
黑名单
DeGate协议允许注册任意币种。有些非标准ERC20合约币种可以修改数量、冻结转账,出于保护用户和预防攻击的目的,加入了黑名单功能,应用于DeGate前端和后端服务。该名单由节点运营方维护。
在黑名单内的币种无法完成以下操作:
充值:无论通过degate.com还是直接调用合约、标准或是高级方式,充值不会到账。用户需联系Discord管理员协助取回资产。
转账:不允许转账给其他账户
添加交易对:不允许添加新的交易对
下单:不允许创建订单和网格策略
上币:不允许通过degate.com注册币种,但仍然能调用合约注册。
黑名单内币种可以:
查看币种余额
查看历史数据
提现
取消订单
取消网格策略
加入黑名单
除了节点运营方来维护黑名单,也有自动添加黑名单的功能,如下:
处理充值时进行检查,如果DeGate智能合约记录的充值数量与实际收到的数量不符,自动加入黑名单
向链上提交数据之前进行检查,如果链下余额大于链上资产,自动加入黑名单
从黑名单移除
节点运营方可以将币种移出黑名单
Last updated