EOS如何防止DDoS攻击

in #eos7 years ago

玩过Ethereum的小伙伴们都知道,以太坊上合约的每一步执行都是需要消耗一定量的gas,这个gas的量精细到EVM虚拟机的每一步执行(具体地可以看Ethereum的代码)。gas有一定的价格,通过这个价格转化成一定量的ETH,将合约的ETH转到胜出矿工的帐下。这个过程说白了就是没执行一步都是要花费ETH的,通过这种方式来防治智能合约的泛滥执行,进而来防治DDoS攻击节点。

在EOS中,完全是另外的哲学了。EOS是根据合约所占据的EOS的数量来分配带宽资源的,包括CPU,网络带宽,存储资源等。假设EOS总量100,我发了一个智能合约C,给他分配了30个EOS,那么这个合约C在被哥哥节点执行的时候就只能占据这个节点30/100的带宽资源,剩下的70%,留给其他智能合约。这个时候即使节点们有多余空闲的资源,理论上也不会拿来给这个合约C使用的。只有某个合约X占据了100%的EOS,那么它才会占据所有带宽资源。所以EOS的哲学是,权益 = EOS = 带宽资源。

反观Ethereum,假设其上的某个合约Y的执行逻辑需要消耗大量的带宽,几乎需要占据节点的所有带宽,但是合约Y却没有几乎全网的所有ETH,但是足够支付执行费用。这个交易一旦被挖矿节点接受并加载到EVM里执行,那么节点是有可能拒绝其他的交易的执行一段时间的,直到gas或者说ETH消耗完毕。

Sort:  

按照占有的EOS数量来分配带宽? 计算资源呢?存储资源呢?

这里的带宽不是我们传统意义上说的网络带宽,而是指合约执行所需的所有资源。

如果按照持有的EOS 来分配带宽资源的话,那就意味着会很多的带宽资源会白白浪费掉。因为会有很大比例的EOS会被用户冻结或其他因素而不能参与到智能合约资源的分配中来。

这样的花,合约的执行是不需要消耗EOS的,但是要部署合约,首先得有EOS。

EOS执行智能合约或交易不需要消耗任何EOS,这样会存在问题。使用者占有带宽并持续利用这些资源做垃圾输出,是对资源的浪费和消耗。