# Hydro协议

经过简单分析,DDEX协议有两部分组成:

# Hybrid Excange

该部分主要实现Hydro协议功能,包括但不限于以下功能:

  • EIP712
  • 签名验证
  • 订单
  • Relayer
  • 折扣
  • Exchange

# EIP712

计算EIP712哈希值, 即根据订单数据计算它的EIP712的哈希值。 需要注意的是,得到的这个哈希值需要用私钥签名,并将签名后得到的vrs,和订单一并发送给Relayer,才能进行交易。 在签名验证环节会根据订单数据和vrs来验证该订单是否为原交易订单(没有被改动过)。
只要私钥保存好,不被其他第三方拿到,我们就不需要担心有人篡改订单。 订单数据中任何一个bit位被改动,都会导致得到的EIP712哈希值变动,最终导致签名验证失败。 换句话说,就是篡改过的订单和签名vrs验证得到的交易账户和订单中的交易账户不一致,签名验证失败。

# 签名验证

正如EIP712所讲,签名验证过程就是根据订单数据生成EIP712哈希值,然后根据与订单一起发来的vrs经计算可以得到交易用户的账户,然后用该账户和原订单中国的交易账户作比较,如果一致,则订单没有被改动过,否则改订单就被篡改过。
签名验证还支持另外一种签名方式,即ether.sign,其实和EIP712一样,只是多了一次ethereum的结构哈希。其它完全一样。这个方便我们直接用ether.sign进行签名。

# 订单

集合了对订单的操作。包括获取订单hash值(EIP712)、版本、有效时间、买卖单、费率等信息

# Relayer

Relayer的操作。relayer是否加入激励系统,会影响交易用户的费率。这个点很有意思,可以说DDEX比较支持个人或者其他组织加入进来,这应该也能促进DDEX线下撮合的速度。
另外一点是为Relayer提供了一个代理功能,即允许Relayer通过智能合约向Exchange提交撮合成功的订单。

# 折扣

即费率的折扣。Hydro的一套折扣计算方式,简单讲就是根据交易用户手中持有的HOT数量对费率进行打折,持有HOT越多,折扣力度越大,默认最大应该可以打6折。 费率折扣是可以随时设置的,合约的创建者拥有修改该权限。
这里有个有意思的设定,即如果Relayer没有加入激励系统,那不论交易方持有多少HOT,都不会打折的,这可能是激励更多的人持有HOT,并通过加入激励系统的Relayer进行交易。

# Exchange

这是整个Hydro的核心入口,通过该部分提供的接口,Relayer向Exchange提交撮合成功的订单。
这部分比较庞大,简单来说就是:
Relayer提交订单-->Hydro验证订单(包括签名和价格)-->Hydro计算费率-->Hydro修改各个订单的匹配额度-->最终转账交易token和报价token/ether。
其中修改订单匹配额度是指在以太坊上记录每个订单的已经匹配的token数目,防止同一个订单多次匹配造成的超额。

# Proxy

代理是DDEX在Hydro的基础上修改出来的一个功能,主要包含两个部分:

  • 白名单机制
  • 代理功能

# 白名单机制

这是一个很有趣的机制,经常接触以太坊的都知道,要想对某账户中ERC20类的Token进行转账,必须拥有该账户或者获取该账户的授权。 从上面Hybrid Exchange部分,可以看到,交易的最后一步是完成转账,而完成转账的部分必定是需要合约来代理完成的,否则是不能成功转账Token的。 在DDEX上进行交易之前,所有交易者都必须对DDEX的Proxy进行授权,而授权的额度貌似是个极大值(待确认),这样Proxy协议就可以转账交易者账户中的token了。
而能操作Proxy协议的,只有白名单才可以,所以Hybrid Exchange要想完成交易,必定是要被加入白名单的。当然,从Proxy协议也可以看到,白名单管理是由Owner(也就是合约的创建者)控制的, Owner已经将Hybrid Exchange加入了白名单。

值得注意的是,Hydro Protocol的原协议是没有白名单机制的,它的代理就是Hydro Protocol本身,交易者只需给Hydro Protocol授权一定的额度即可(通常是授权一个极大值)。也可以理解成Hydro Protocol原协议有且仅有一个代理,就是它本身。

# 代理功能

代理功能即完成所有交易账户的转账操作,包括以太币和所有符合ERC20的Token。正如上面所述,只有白名单才能操作该代理功能。

# 总结

总结下DDEX的交易流程
交易方(用户)对交易订单进行签名 ---> 将订单和签名发送给Relayer ---> Relayer收集订单并线下撮合 ---> 将符合价格规则的订单发送给HybridExchange ---> HybrideExchange验证签名、价格、有效期等信息 ---> 计算费率 ---> 更新订单匹配额 ---> 通过Proxy代理完成最终转账。