主页 > imtoken苹果手机不能下载 > 谈谈以太坊(四)

谈谈以太坊(四)

imtoken苹果手机不能下载 2023-02-26 07:27:07

奖励(过时的块/叔块)

2013年10月,Josena和Tel Aviv首先提出的GHOST协议是一项了不起的创新。 这是加速块生成时间的第一次认真尝试。 因为区块在网络中传播需要一定的时间,如果矿工A挖出一个区块并向全网广播,广播途中B也挖出这个区块,则B的区块已经过时,并且B 的这种挖矿对网络的安全没有贡献。 GHOST 的目的是解决过时挖矿导致安全性降低的问题。

另外还有一个中心化问题:如果A是矿池30%的算力,B有10%的算力。 A 有 70% 的时间产生过时区块(因为另外 30% 的时间会产生最新的区块,所以它会立即挖掘数据),而 B 有 90% 的时间产生过时区块。 如果出块的时间间隔很短,淘汰率会变高,A会以更大的算力让挖矿更有效率。 因此,如果出块速度过快,很容易造成网络算力大的矿池控制挖矿过程。

据 Josenna 和 Tel Aviv 介绍,GHOST 在计算哪条链是最长链的过程中解决了过时区块导致的网络安全性下降问题。 也就是说,不仅父块和更早的块为什么以太坊需要增加状态树,而且叔块也被添加到计算哪个块具有最大的工作量证明。

简单解释一下叔块的含义

叔块:A挖出块后广播的途中,B也挖出块(废弃块),此时区块链会分叉。 过时分叉上的块称为叔块。 不是本块的父块,而是父块的兄弟块(对等关系)

为了解决中心化问题,我们采用了不同的策略:对废弃区块也提供区块奖励:挖出一个废弃区块的奖励是该区块基础奖励的7/8; 挖掘一个包含过时区块的侄子区块将获得基本奖励的 1/32 作为赏金。 但是,交易费用不会奖励给叔叔块或侄子块。

在以太坊中,过期分叉上7代以内的相对区块可以称为过期区块。 之所以有这样的限制,首先是因为GHOST协议如果不限制废弃块的数量,会在计算废弃块的有效性上花费大量的金钱; 其次,对废弃区块的无限激励政策,会让矿工失去链上挖矿的热情; 最后,计算表明,第 7 层内过时的区块奖励政策限制提供了大部分预期效果,而没有负面影响。

区块时间算法的设计决策包括:

1)block time 12s:选择12s是因为这已经是最快的时间了,基本上比网络延迟要长。 在 2013 年一篇关于测量比特币网络延迟的论文中,确定 126 秒是新生成的区块传播到 95% 节点的时间; 然而,该论文还指出传播时间与块大小成正比,因此在更快的货币中,我们可以预期传输时间会大大减少。 传播间隔恒定在大约 2 秒。 然而,为了安全起见,在我们的分析中,我们假设块需要 12 秒来传播。

2)限制7个祖先块:这种设计的目的是只保留少量的块并清除更早的块。 七个块已被证明可以提供大多数所需的效果。

3) 限制1个后南块:如c(c(p(p(p(p(head)))) c=child, p=parent,因为它有2个后上块,所以不合法。在这种方式为了简单而设计,上面的模拟结果表明它不会带来很大的中心化风险。

4)叔块要求有效性:**叔块必须是一个有效的头部,而不是一个有效的块。 这样做也是为了简单起见,将区块链模型保持为线性数据结构。 但是,要求叔块是有效块也是合法的。

5)奖金分配:基础挖矿奖励的7/8分配给叔块,1/32分配给侄块,交易手续费为0%。 如果费用占主导地位,从中心化的角度来看,这将使叔块激励失效; 然而,这就是为什么只要我们继续使用 Pow,以太坊就会继续发行 Ether。

尤其重要的是 gas 和手续费的设计

比特币中的所有交易都大致相同,因此可以对它们的网络成本进行建模。 以太坊中的交易更为复杂,因此交易费用需要考虑账户的诸多方面,包括带宽成本、存储成本和计算成本。 尤其重要的是,以太坊编程语言是图灵完备的为什么以太坊需要增加状态树,因此交易使用任意数量的带宽、存储和计算成本。 这可能会导致成本计算过程中突然断电,计算被迫暂停。

以太坊交易费用的基本机制如下:

1)每笔交易必须指定一定数量的gas(即指定startgas的值),并支付每单位gas所需的费用(即gasprice)。 扣除;

2)交易执行过程中的所有操作,包括读写数据库、发送消息、每一步计算都会消耗一定的gas;

3)如果交易完成,消耗的gas值小于指定的limit值,交易正常执行,剩余gas值赋值给变量gas.rem; 交易完成后,发送方将收到返还的gas.rem * 以太坊价值gasprice,矿工奖励为(startgas- gas rem)*gasprice 价值以太坊;

4)如果交易执行过程中gas耗尽,所有执行恢复原状,但交易仍然有效,但交易的唯一结果是向矿工支付startgas * gasprice的价值,另一个保持不变;

5)当一个合约向另一个合约发送消息时,可以为该消息引起的子执行设置gas limit。 如果子执行用完 gas,子执行会恢复,但 gas 仍然会被消耗。

以太坊交易费用的基本机制如下:

1)每笔交易必须指定一定数量的gas(即指定startgas的值),并支付每单位gas所需的费用(即gasprice)。 扣除;

2)交易执行过程中的所有操作,包括读写数据库、发送消息、每一步计算都会消耗一定的gas;

3)如果交易完成,消耗的gas值小于指定的limit值,交易正常执行,剩余gas值赋值给变量gas.rem; 交易完成后,发送方将收到返还的gas.rem * 以太坊价值gasprice,矿工奖励为(startgas- gas rem)*gasprice 价值以太坊;

4)如果交易执行过程中gas耗尽,所有执行恢复原状,但交易仍然有效,但交易的唯一结果是向矿工支付startgas * gasprice的价值,另一个保持不变;

5)当一个合约向另一个合约发送消息时,可以为该消息引起的子执行设置gas limit。 如果子执行用完 gas,子执行会恢复,但 gas 仍然会被消耗。

还有一些特殊情况,比如

1) 如果交易没有指定 gas limit,那么恶意用户可能会发送一个具有数十亿步循环的交易。 没有人可以处理这样的交易,因为处理它可能需要很长时间,以至于无法提前通知网络上的矿工,这将导致拒绝服务漏洞。

2) 严格的气体计数、时间限制等的替代方案不起作用,因为它们太主观了。

3) startgas * gasprice 的全部值应该在一开始就设置好,这样交易就不会在交易执行过程中因为gas不足而终止交易。 请注意,仅仅检查账户余额是不够的,因为账户可以将余额发送到其他地方。

4)如果在gas不足的情况下,交易执行中没有恢复操作(回滚),合约必须采取强安全措施,防止合约发生变更。

5) 如果子限制不存在,恶意账号将通过与其他账号达成协议,对其他账号进行拒绝服务攻击。 在计算开始时插入一个大循环,向受害合约发送消息,或任何补救措施,都会使整个交易陷入僵局。

6) 要求交易发送者,而不是合约,支付

支付gas,大大增加了开发者的可操作性。 以太坊的早期版本通过合约支付 gas,这导致了一个相当严重的问题:每个合约都必须实施“守卫”代码以确保每个传入消息都有足够的以太币供其使用。

关于以太坊的内容就结束了,记得点赞哦!