EOS多链方案探索

EOS声称最终能达到百万TPS,但目前单链只有几千,即使后续并发做好了,估计也就几万,怎样才能达到百万呢?最可行的方案就是多链。而且就EOS设计的轻量级交易证明来看,也是有为多链做准备的。下面就来探讨下可能的多链方案。(这里多链其实就是分片,下面可能同时出现这两种叫法,其实都是同一个东西)

  1. 全分片方案
    全分片方案就是CPU、内存、存储、带宽全部都分担到不同链上的方案。只有这四个方面的压力全部分摊,才不至于某个方面成为瓶颈,真正做到性能线性扩展。(为什么需要全分片,请看https://zhuanlan.zhihu.com/p/46766111)。
    对EOS来说,最自然的分片方法是按账户分,账户名实际是个uint64数字,将其直接按数字大小分即可。不同的账户被分到不同的子链上,当要执行合约时,钱包自动判断需要到哪个链执行,并向该链发送action。各个链只保存自己链上的账户信息(合约、multi-index等),只处理自己链上保存的账户需要处理的消息。
    如果能做到的话,这是最理想的方案,可以认为全链总TPS就是各个链的TPS之和,唯一限制是单链上能处理的TPS和内存容量等是受单链限制的。但对于目前业界来说,这是个无解的问题,即使全分片方案如monoxide也无法解决该问题。
    但是EOS在执行合约时,经常会修改其他账户(如调用者)的内存。而调用者内存当跨链时是存在另一条链上的,本链内取不到,当然也写不了。如果非要跨链传输这些数据,也会因为同步性问题造成安全隐患。那能不能像monoxide那样把一个动作拆分成多个动作,各自保证安全性,最终达到一致性呢?理论上可以,但实际上是非常困难和复杂的,而且问题非常多。想一想就可以放弃了。
    DPOS也会导致该方案有风险。多链需要保证每条链的安全性不能有明显降低,防止发生1%攻击。而DPOS是单链内选举产生21个BP来出块和对块做验证。当只有一条链时,攻击者想要控制这条链上21个BP中的15个是比较困难的,而当多链时,币的价值会被分散到各个链上,此时想要控制该链上的BP,就容易多了,即使全部自己给自己投票,成本也比单链时低很多。而当一个子链的安全性降低后,多链系统整体的安全性就会降低了。因此如果各个子链都用DPOS,整个体系安全性会下降。
    综上,就我看来全分片方案在EOS上难度大,安全性可能会降低。不是可行的方案。
  2. 主链的币跨链到侧链,在侧链上执行交易
    当主链上的资源不足(其实是太贵)时,可以把币转到自己信任的侧链上(如BOS等),在侧链上完成期望的动作。转币可以跨链(如IBC,cosmos),也可以交易所。先说说优缺点。
    优点:
    简单。用交易所的话,不需要任何额外的开发,现在就可以做到了。
    用币跨链的话,能给EOS币带来增值。能直接调用侧链的资源,当然价值变大了。
    缺点:
    不能跨链调用。如币跨链到BOS上,则只能调用BOS上的合约,不能调用主链的。
    安全性需要权衡。因为EOS各个链的安全性是由其BP保证的,因此BP的自觉性对EOS体系的安全性有重要作用。
    可能会对侧链自身币的价值带来损害。但这可能通过合理的设计让其反而增加侧链币的价值。
    需要用户做部分额外操作,门槛高。

    如果用交易所跨链的话,现在就可以直接做到了。问题是需要承受侧链币价波动带来的风险,对大部分用户来说,不值得冒险。
    用IBC等跨链机制的话,可以避免侧链币价波动影响,会是合理的选择,下面讨论下这种方式实现要做的工作(都以BOS为例):
    2.1 币跨链。BOS上已经实现IBC,可以从EOS跨链到BOS,也可以推广到其他侧链。另外适配cosmos等也可以达成。
    2.2 EOS跨到BOS上后,只是个普通的币而已,并不能购买链上资源(RAM,CPU,NET),需要BOS链做一定开发工作,允许其购买资源,或者将其转换为BOS后,才可以使用。
    如何合理的设计让跨链来的币可以实用本链资源呢?需要考虑的因素如下:
    a. 需要让用户多少币进来,如果没有交易/占用资源(如RAM),就能多少币出去。(最低的资源消耗部分需要消耗一点币,可忽略)。
    b. 需要满足子链的利益需求,如被占用的资源多了,币价有上涨需求。不能只干活不拿工资。
    c. 跨链来的币能有与本链原生币一样的能力和安全性,如能购买资源。
    d. 整个过程中,侧链币不能增发。
    怎样做到呢?如下是我认为的可行方案:
    设计一个特殊的班科协议,这个协议可以用于对转进来的EOS能换到多少XBOS定价。(其中XBOS是相当于BOS能力的代币,但不等于BOS),并且记录当前的转换价格(或者记录转入的EOS数量,如果分多次转入,则记录总量即可),当要转回到EOS时,销毁对应的XBOS,并将等于转入时量的EOS转回到主链。如果在使用BOS侧链过程中占用了资源,如RAM,则需要扣除相应比例的XBOS。且在EOS主链上将扣去消耗掉的比例后的EOS还给用户。需要注意此情况下,BOS链上有XBOS没被销毁,而EOS主链上,部分EOS不能被用户提走,要留在BOS的跨链账户中。此时相当于用户用主链上的EOS购买了侧链上的部分XBOS。(为什么使用班科?一个是为了公平,另一个是为了鼓励EOS用户跨链到BOS上使用)
    在BOS侧链上,如何把XBOS跟BOS对应起来呢?此时不能增发BOS(显然),不能直接让XBOS购买资源(这相当于增发),只能用REX。可以让用户使用XBOS购买REX资源,这样相当于让外来者(跨链来的币)只能租用BOS的资源,如果他想持有BOS,应该通过交易所买入。REX的租赁收入现在就变为BOS和XBOS两种。其中XBOS对应着EOS主链上的EOS币,即REX此时的租赁收入是原本的BOS加EOS主链币。为达到闭环还需要设计两个市场:
    1. BOS出租者回收BOS租金时,怎样合理将XBOS作为收入赎回到其账户。
    2. XBOS持有者怎样卖出XBOS(此时XBOS要销毁),得到主链上的EOS。(算是交易所之外的另一个交易渠道吧,可以考虑班科,但这未必公平)
    至此整个将EOS跨链到BOS侧链,并在侧链上使用资源的设计可以闭环。但是各个转换环节应如何设计才能既保证公平、安全,又能鼓励EOS用户将币转到BOS上使用,还需要仔细设计。需要注意XBOS不能被转账,因为大家的成本不同(需再仔细考虑这一点)。
    另外这个跨链其实不限于EOS到BOS,也可以是BTC、ETH到BOS,因此最前面跨链EOS到BOS的班科,以及XBOS到EOS的市场,也应该考虑到其他币,做一个多币种通兑同一个币的班科/市场,这就有点难了,而且公平性很难保证。期望后续能有合理方案。
  3. 类plasma,侧链commit到主链
    侧链与主链相比,最大的劣势在于信任度不够。怎样才能提高侧链的信任度呢?可以考虑让侧链周期性的将其不可逆区块内容hash后,提交到主链,当主链包含该提交的区块也达到不可逆后,就认为侧链上的对应提交达到了主链上不可逆区块的可信度。此时可以通过主链上的轻量级交易验证方法对侧链交易进行验证。
    此方案与2的缺点一样,不能调用主链上的合约。而且只能提高不可逆区块的安全性,对于正在进行的交易/不可逆区块,无法提升其安全性。另外此方案需要占用主链资源,有成本支出。
    此方案的优点是比2简单可行。需要做的是:
    a. 在EOS主链上部署合约,抵押购买资源。合约只需要不停更新主链上最新不可逆块的hash等必要信息即可。RAM里需要记录几个块的,要仔细设计。如果记录太少,如只记录最新的1个,则需要每个不可逆块都向主链commit,耗费大量CPU,如果记录比较多,如10个,则侧链上的块能迅速进入主链得到安全提升的速度就变慢。所以这需要仔细权衡。
    b. 在侧链上需要设计新的plugin,合理安排BP的任务,将设计好的不可逆块信息提交到主链合约中。并在后续主链相应区块达到不可逆后,将对应的主链区块hash取回到侧链,记录下来。
    c. 侧链上需要设计接口,给出轻量级交易验证证明路径,让用户可以根据此路径在主链上验证侧链的交易。
  4. 上述2和3结合

    上述方案都是我闭门造车的,希望能跟大家交流改进,最终对EOS生态做出贡献。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值