http://www.7klian.com

深入理会ViteX内置合约设计

链上存储的本钱是很高的,为了只管淘汰存储数据,我们采纳了以下三种手段。第一,通过Protobuf来实现工具的序列化,从源头淘汰数据量。第二, 不反复存储稳定的数据,制止冗余,这里主要表此刻挖矿和分红相关的指标处理惩罚部门,假如指标恒久稳定,则只存储最早的一个指标,只有改观的时候才存储新值。第三,及时清理和按时清理相团结。对付挖矿、分红中累计的多版本指标数据,对付已经计较完功效的指标及时删掉数据。按时清理则是针对订单数据,为了制止订薄弱无限膨胀,会为所有订单配置超时失效时间戳,按时通过批量接口清理这些失效订单,,实现链上订单的转动清理。
ViteX生意业务所要实现订单笼络僻静台经济模子的两个焦点成果,假如放在一个合约内里实现,未便于问题的聚焦,会造成问题的开拓人员及外部接口利用人员的狐疑,很自然的想到把他们拆分。别的,笼络引擎从观念上是基本成果,从设计之初并差池外直接袒露接口,和经济模子解耦后,便于后续的笼络引擎进级。详细拆分的两个合约是dexFund和dexTrade,dexTrade实现订薄弱存储及订单笼络的成果,dexFund完成资产、挖矿及分红等ViteX经济模子相关成果。
要晋升笼络机能就必需要能快速的匹配待笼络订单,常用的做法是将头部订单可能全部订单都放入内存来实现高效的会见。可是对付链上合约来说,因为受限于链底层提供的接口本领会见存储,不能做到订薄弱常驻内存。这时候可以思量方法是充实操作底层存储的特点,担保订薄弱有序存储,这样笼络进程只需要依次简朴迭代会见就可以了。由此我们获得了《ViteX内置合约设计与实现简介》所先容的订单id的设计方案,通过把价值作为订单id的一部门,而订单id是底层key有序levelDB的存储key,这样订薄弱在底层存储就是价值有序,通过简朴的key顺序遍历即可完成笼络进程。这样的实现足够简朴也很是高效。

因为订薄弱的存储是在dexTrade合约,撤单直接和订薄弱交互,所以最初的撤单进口也是放在dexTrade。可是下单成果因为会涉及到资金冻结所以是以dexFund合约为进口的,这就导致了下单和撤单有差异的进口。在合约实际执行的进程中会呈现订单下单后因为链上共鸣延迟没有写入dexTrade订薄弱就举办撤单的环境,此时撤单操纵会因为不能从订薄弱查到订单而导致执行失败。为此,我们在dexFund合约新增了撤单进口,对同一个订单来说因为是同一个用户发出的生意业务,通过用户链的生意业务顺序性担保撤单操纵必定会在下单后上链执行,有效的撤单必定可以正确执行。比拟两个撤单进口可以或许发明,dexTrade合约的撤单进口因为制止dexFund合约的转发所以越发直接和轻量级,而dexFund合约因为颠末尾dexFund合约会需要特另外开销,可是该进口提供了署理撤单的先验操纵,所以假如是署理撤单就必需走dexFund合约来撤单, 详细来说dexTrade撤单进口适合及时性要求不高的普通用户,而dexFund撤单进口适合对及时性要求较高的自动化挪用。

5.淘汰存储占用的一些步伐

这是第三篇给各人先容关于ViteX的技能文章,本篇文章主要从ViteX整体设计、机能优化及系统靠得住性三个方面先容了vDex内置合约的设计配景、思路及方案。但愿各人能更深入的领略ViteX运行机制。
6.vDex如何提高靠得住性
ViteX作为去中心化生意业务所,通过内置合约vDex实现笼络引擎及ViteX经济模子的相关成果,在实现高机能的同时分身实现的简捷,简朴的系统更结实。在之前的一篇文章《ViteX内置合约设计与实现简介》中我们已经就内置合约的要害设计细节举办了先容,本篇文章从几个较量有代表性的问题入手先容一下相关的设计配景、思路及方案。
1.vDex为什么要分两个合约来实现

通过以上几个问题,我们从整体设计、机能优化及系统靠得住性三个方面先容了vDex内置合约的设计配景、思路及方案,这些设计细节浮现了ViteX为了告竣简朴、高效、透明的方针所做的实践,但愿以上先容可以辅佐各人理清ViteX的去中心化运行机制。

《ViteX内置合约设计与实现简介》先容过订单id的具体设计,该订单id是为了最大化机能诉求而设计的,实现链上订单有序存储和高效的笼络,在这里记为baseOrderId。后续我们还添加了用户链下单tx的hash作为key的订单id,这里记为hashOrderId,和baseOrderId依赖于合约拼接生成差异,hashOrderId在用户下单的一刻就能生成,客户端可以直接把这个id暂存下来而不必期待vDex的输出,便于举办订单后续状态的追踪和操纵,从这个角度看hashOrderId是客户端友好的订单id。两种订单id别离都有本身合用的场景,实现了机能和用户体验的分身。
2.为什么会有两种订单id

4.订单笼络机能问题
作为内置合约,vDex每行代码的实现都是协议,要担保协议的执行正确性,除了通过测试发明问题外,从设计之初就思量如何提高模块的靠得住性。vDex在最初设计的时候,一条重要的原则就是要分身简捷和高机能,过于巨大的设计会成倍提高代码量,同时堕落概率也会相应增加。以简捷为原则,我们的相关数据布局都只管精简字段,不相关的信息不做存储,可能放到链下存储,链上只处理惩罚凡是不会改变的焦点数据布局,极力制止信息冗余,通过链下配套处事来实现传统生意业务所的多维度的富厚查询和展示。代码实现层面,节制单个函数的代码行数,当令举办拆分和经心定名,节制巨大度的同时也极大淘汰了反复代码的呈现,布局更公道之后,每个实现细节也就更清晰,便于领略而不容易堕落。最后,通过《ViteX内置合约设计与实现简介》提到的对账机制,我们也可以或许从别的一个角度验证代码执行的正确性,同时担保用户资产的安详。
3.撤单为什么有两个进口

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。