# NerveDEX模块

# 为什么要有NerveDEX模块?

纵观当前整个加密资产市场,中心化交易平台凭借良好的用户体验,对互联网用户的使用习惯比较友好,中心化的资产交易对平台已经成为业内主流的交易方式。随着行业的快速发展,中心化交易所变得越来越多,然而实际上很多交易平台没有自己的技术团队和资产管理能力。中心化交易所需要负责持有和保管所有用户的资产,他们必须管理一些控制巨额资产的中心化钱包。这种巨大财富的集中使得交易所成为黑客攻击的目标。过去几年,黑客累计窃取了价值数十亿美元的数字资产,这些交易所也因为不能承受其损失纷纷跑路,突显出整个行业面临的一个巨大安全风险。另外一个层面,中心化交易所需要不断地盈利来促进业务地发展,在中心化地交易市场中,其数据是不透明的,部分中心化交易所借平台优势,掌握用户交易行为来获取市场暴利。

随着行业的发展,去中心化交易的需求日益增加,而区块链的底层技术也在不断进步,去中心化交易所逐步成为一种趋势。如果所有的交易都是完全点对点的,例如去中心化交易平台就不再需要持有和管理用户的资金,使整个行业更加安全;用户也不再需要像以前一样去交易所注册,然后频繁的充值和提现,再等待交易所确认后才可以正常交易。用户可直接使用自己的链上地址挂单交易,大大简化了交易过程,提升用户体验,进而促进更多币圈投资人使用。此外所有交易数据都公开透明,用户可更放心的投资加密资产,从而促使整个行业的生态往更良性的方向发展。

几乎所有区块链领域的人都认为,去中心化交易平台是加密货币交易的未来。NerveDEX旨在让区块链回归本质,让数字资产透明的流通和交易,为用户提供一套完全去中心化的加密资产交易平台。确保从资产交易对的创建,到用户委托挂单,再到最终的撮合匹配成交,所有信息均会存储在NerveNetwork公链上,数据完全公开透明。我们还提供DEX-API模块,允许更多人或第三方机构来搭建NerveDEX去中心化交易所节点,并对外开放API接口,允许第三方通过DEX-API定制他们自己的链上去中心化交易平台,同事保证用户能够方便快捷的在节点上委托交易,提升用户体验。

# DEX模块要做什么?

  • 底层支持交易协议。包含交易对创建协议、用户委托挂单协议、用户撤销委托挂单协议、撮合成交协议、撤销单确认协议。

  • 创建交易对盘口。新的交易对创建协议被打包确认后,系统自动创建交易对盘口。

  • 委托挂单维护。用户新发起的委托挂单交易被打包确认后,系统会自动根据交易协议规则放入交易对盘口。

  • 委托单撮合成交。共识节点在出块时,会依次将交易对盘口内的委托单取出,撮合匹配。匹配成功后,生成成交交易

  • 撤销单确认。用户在发起委托挂单后,由于价格未能匹配成功的交易。用户可以通过发送撤销委托交易取消委托单。共识节点在打包时,会依次根据打包交易的顺序来处理。若在处理撤销单之前,发现有新的委托单能撮合成交,则优先撮合成交,再将剩余未成交部分撤销后解除委托单锁定;若没有可匹配的委托单,则直接撤销委托单。

  • 更新盘口。每次确认新区块打包的交易后,都要更新盘口数据。将已撮合成功或已撤销的委托单移除,再加入新增的委托单。

# NerveDEX的特点

目前市场上的一些去中心化交易平台,由于以太坊链上的资产众多,其中绝大多数去中心化交易所只关注以太坊生态资产,只在ERC20令牌之间进行交换。这些DEX的局限性太大,受智能合约的限制,会缺少整个交易流程中的若干环节(交易的整个环节:交易对创建--用户挂单委托买卖--盘口数据维护--用户撤销委托单--盘口撮合成交);且交易过程受以太坊网络制约,交易效率低下。

整个行业中专注于非以太坊生态的DEX协议仍然很少。NerveDEX是基于NerveNetwork区块链底层,在此基础上新增的DEX模块。DEX模块负责资产兑换交易的创建与验证,负责资产对盘口的挂单维护与撮合,最终确保整个交易流程形成闭环。相较于其他去中心化交易所,NerveDEX拥有以下特点:

  • 不依赖于单链的资产。NerveNetwork本身是一条公链,DEX模块通过在底层新增交易协议,来处理整个资产交易流程。

  • 交易效率高。NerveNetwork公链更关注于去中心化交易所的效率提升。整条链上,除少量转账交易外,只会有资产相关交易协议的数据信息。底层不执行复杂的其他逻辑,所有处理逻辑已经在底层模块中编写,执行效率会更高,所有发出的交易都可以在2S内完成确认。

  • 对接更容易。合作伙伴只需要理解DEX模块的交易协议,然后通过RPC接口查询区块,再依次解析区块中的交易数据,就能获取想要的信息。以DEX-API模块为例,该模块为用户提供了一个可视化的去中心化交易平台。用户可在上面查看资产信息、查看盘口信息、查看K线图信息、委托挂单、查看成交记录等。该模块会依次获取每个区块,解析完区块打包的交易信息后,将数据存放在关系型数据库里,再对外提供交易所所需API接口,实现数据的可视化。

  • 支持多链资产的交易。NerveNetwork本身是属于NULS公链的一条平行链,因此NULS生态内的所有链资产,都可以通过跨链协议,直接跨链转到NerveNetwork链上。在创建好资产交易对后用户即可挂单买卖。此外,NerveNetwork还通过特有的异构跨链网络,允许将其他公链的资产转到NerveNetwork和NULS生态内。这样NerveDEX也能支持其他公链资产的交易。

  • 用户私钥完全私有化。用户可通过NerveNetwork钱包等工具,生成NVT地址和私钥或keystore,私钥由用户自己保管。用户可以轻松的登录到官方或第三方节点提供的可视化去中心交易所,导入私钥或keystore后,即可开始挂单交易。

  • 数据公开透明。所有挂单交易信息、撤单交易信息、成交交易信息都会打包到区块链上,用户可随时查询并监控,不会出现虚假交易。

  • 超低手续费交易。用户每次委托挂单和委托撤单,虽然都会收取少许手续费,这是链上交易为了网络安全的必要,在NerveDEX底层只会收取0.02%的撮合手续费,其中50%将会被用于兑换NVT进行销毁。

# DEX模块交易协议

创建交易对协议

创建资产交易对是用户能够正常挂单买卖的前提。只有先创建了资产交易对,才会有盘口信息,用户才可以挂单操作。

限制条件:

  • 链上必须有该资产交易对信息,例如想创建NULS/NVT资产交易对,NerveNetwork上就必须有这两种资产。
  • 资产交易对不可重复创建。例如用户已经创建了NULS/NVT资产交易对,就不能再发送新的交易创建另外一个NULS/NVT资产交易对或NVT/NULS资产交易对。
  • 创建资产交易对时,需支付特定手续费(目前暂定为20000NVT)。
  • 资产交易对必须设置交易币种和计价币种的最小交易单位。

委托挂单协议

  • 资产交易对创建好后,用户可以下单操作,挂单交易被打包后,会加入到盘口中等待撮合。

限制条件:

  • 用户每发送一次委托挂单交易,系统会收取0.001NVT作为手续费。
  • 委托挂单数量不能少于最小交易单位。

委托撤单协议

​ 用户挂单委托后,长时间未能成交,用户可撤销委托。

限制条件:

  • 用户每发送一次撤销委托挂单交易,系统会收取0.001NVT作为手续费。
  • 撤销委托不能只撤销委托单的一部分。

交易对修改协议

资产交易对创建好之后,创建者可对资产交易对信息做修改。

限制条件:

  • 只能是创建者本人可以修改。
  • 只能修改最小交易单位和最小可视化小数位。交易对本身的信息不能修改。例如:不能将NULS/NVT交易对修改为BTC/NVT交易对。
  • 用户每发送一次交易对修改协议,系统会收取0.001NVT作为手续费。

成交协议

成交协议为系统协议,是节点在打包区块时,根据当前盘口数据,进行撮合匹配。匹配成功后生成成交交易协议一并打包到区块内。

限制条件:

  • 只能由共识节点打包区块时生成。
  • 共识节点撮合成交的顺序必须严格遵守NerveDEX模块撮合规则(具体规则后文会详细讲述),所打包的区块会全网验证,验证不通过,区块不会被打包。
  • 交易撮合成功后,NerveDEX API运营方会收取买卖双方成交额的0.06%作为撮合手续费。
  • 若用户是在第三方节点提供的可视化去中心交易所发起的委托挂单操作,待撮合成交后,第三方节点可根据其配置额外收取买卖双方成交额的(最低)0到(最高)0.98%作为服务费。

撤销单确认协议

用户在发起撤销委托交易后,并不是一定就能撤销委托。

节点在打包区块时,可能在处理用户撤销委托交易前,先打包了一个委托挂单交易,新的委托挂单恰好能和用户需要撤销的委托单撮合。这时系统会先撮合生成成交交易,成交后委托单还有剩余,则会将剩余的委托撤销;若委托单完全成交,则此次撤销委托视为无效。此交易最终确认用户的撤销委托是否生效,无论是完全撤销,还是部分撤销还是撤销无效,都在此交易中明确记录。

限制条件:

  • 只能由共识节点打包区块时生成。
  • 共识节点撤销单确认的顺序必须严格遵守NerveDEX模块撮合规则(具体规则后文会详细讲述),所打包的区块会全网验证,验证不通过,区块不会被打包。

# NerveDEX模块底层实现机制

交易广播与确认

用户可通过钱包或者去中心化交易所发起委托单交易。交易首先会通过本节点的确认,若确认失败会直接返回错误详情。确认成功后,节点会将交易广播到全网其他节点。最终由共识节点确认后,打包到区块内。待区块经过拜占庭投票确认后,最终持久化存储。

打包交易的确认顺序

NerveNetwork公链采用的是POCBFT共识机制,由最少15个最多35个共识节点组成共识网络,共识节点会依次出块,每2秒一个块,每轮每个节点只会出一块,且区块会经过共识节点的拜占庭投票,达成66%一致后才被最终确认。

由于是去中心化撮合交易机制,可能用户新发送的挂单交易,还未能广播到轮到此次打包出块的共识节点,节点就已经出块。因此交易的确认顺序不是已交易的创建时间排序,而是已共识节点收到交易后并打包到区块内的先后顺序排序。

盘口维护与撮合规则

买单:价格越低,越远离盘口;价格越高,越靠近盘口,优先成交;价格相同,先被打包确认的委托买单先成交;

卖单:价格越高,越远离盘口;价格越低,越靠近盘口,优先成交;价格相同,先被打包确认的委托卖单先成交;

打包撮合成交与撤销确认

共识节点在打包区块时,会根据本次打包的挂单交易的先后顺序,再按照撮合规则去匹配生成成交交易。生成的成交交易也会按照顺序依次添加到打包区块里。

每一次成交都会生成一笔成交交易。目前NerveNetwork一个区块接受的最大容量是允许打包200个成交交易。若出现一笔挂单吃掉了盘口超过200个委托单,则会分批次打到连续的若干个区块内。

若一个挂单还未成交或未完全成交时,节点打包到一个用户的撤销委托,则根据挂单剩余委托数量,生成撤销确认交易,并按照顺序添加到打包的区块里。

区块的确认

共识节点在打包区块后,会首先广播到其他共识节点。其他共识节点收到区块,会依次验证区块内打包的挂单委托交易和撤单委托交易。并根据挂单委托交易,按照撮合规则生成成交交易,再和区块内的成交交易进行比对。比对必须要完全一致才视为区块合法。最后由共识节点达成拜占庭一致确认。

区块确认后,最终做数据的持久化保存,这时才能最终的更新盘口内的数据,撤销已成交的委托挂单和已撤销的委托挂单,再加入新增的委托单。

# NerveDEX发展方向

  • 持续优化底层协议,提升交易处理效率与区块打包效率。
  • 持续优化DEX-API模块,提供更多接口供用户使用,持续优化交易界面功能点,给用户更好的体验。
  • 提供DEX-API服务,为三方提供去中心化数字资产交易平台定制化云服务。
  • 异构跨链支持更多的公链资产(目前暂只支持NULS/NRC20和ETH/ERC20,未来逐步增加例如BTC、EOS、BNB主链等)。

# 其他

  • NerveDEX模块新增的交易协议的详细信息、协议验证逻辑、模块配置说明、以及盘口维护与撮合的具体逻辑实现,见NerveDEX设计文档。

  • DEX-API模块对外提供交易所RPC接口,见NerveDEX-API接口文档。