Ethereum ETH的奖励机制

简介: 区块链由于是一种去中心化的技术,全世界所有的矿工同时工作,各自独立的挖掘满足要求的区块。由于是各自独立的工作,就有可能出现两个独立的矿工先后发现了两个不同的满足要求的区块

🍁作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道TOP1🏅 阿里云ACE认证高级工程师🏅

✒️个人主页:小鹏linux

💊个人社区:小鹏linux(个人社区)欢迎您的加入!image.gif

目录

临时分叉

叔块(Uncle Block)

驱动着程序运行的汽油(Gas)

以太坊的区块奖励

实践一下


除了购买矿机、连接矿池、卖币套现之外,是否有人关注过以太坊的奖励机制呢?

临时分叉

区块链由于是一种去中心化的技术,全世界所有的矿工同时工作,各自独立的挖掘满足要求的区块。由于是各自独立的工作,就有可能出现两个独立的矿工先后发现了两个不同的满足要求的区块,就像下面这种情况,被称为临时分叉

注:箭头指向某区块代表它保存了前一个区块的Hash

image.gif

两位矿工都发现了高度2的区块,那么该采用谁的呢?

于是撕逼开始,区块链是个势利眼,只承认最长的链,黄色和绿色的区块谁先有后继区块,变成最长的链,谁就会被承认,失败的就会被抛弃。为了成为最长的链,两个矿工都拼命的把自己挖到的区块通过广播的方式告诉更多的节点,并希望他们能把自己的区块传播得更广,从而使更多的矿工在自己挖出的区块下挖掘下一个区块,最终让自己的区块变成最长链的一部分。

然而,胜利者只有一个,胜利者写历史,失败者将被抛弃,其中的交易会重新被打包到之后的区块中。下面这张图就是绿色区块获得了胜利,黄色区块成为孤儿区块,被抛弃。

image.gif

这种事其实每时每刻都在上演,并不罕见。区块如果被废弃了,其中包含的挖矿奖励怎么办呢?对比特币来说,赢者通吃,失败者一无所有,竹篮打水一场空。挖出黄区块的矿工心都要碎了,他在哭泣?。

叔块(Uncle Block)

以太坊创造了一个新的名词叔块(Uncle Block)。对高度3的区块来说,绿色区块是他的父区块。黄色区块虽然失败了,但好歹也是高度1的区块的子区块,绿区块的兄弟区块。于是,高度3的区块就尊称这个黄区块为叔叔,叔块就是这么得名的。

注意:虚线部分仅仅用来陈述关系,不表示有实际连接。

image.gif

不能成为主链一部分的孤儿区块,如果有幸被后来的区块通过uncles字段收留进区块链就变成了叔块。如果一个孤儿区块没有被任何区块收留,这个孤儿区块还是会被丢弃,不会进入区块链,也就是说孤儿区块被收留后才会变成叔块。

以太坊的设计比比特币人性的多,叔块也是可以获得奖励的,矿工们再也不用担心白忙乎了。而且以后的区块谁要是把叔块收留了,收留了叔块的区块还有额外的奖励,收留叔块也被称为包含叔块。

下图就是高度3的区块包含了一个叔块,不过叔块也就仅仅是被包含而已,叔块中的交易会重新回归交易池,等待重新打包。一个区块最多只能包含2个叔块。

image.gif

以太坊为什么要这么设计呢?因为以太坊的区块时间是20秒左右,相对于比特币,更容易出现临时分叉和孤儿区块。而且较短的区块时间,也使得区块在整个网络中更难以充分传播,尤其是对那些网速慢的矿工,这是一种极大的不公平。为了平衡各方利益,才设计了这样一个叔块机制。叔块在全部挖掘出来的区块中占的比例叫叔块率,目前叔块率在9.7%左右。

image.gif

数据来源:The ethereum blockchain explorer

驱动着程序运行的汽油(Gas)

以太坊是一个运行智能合约的去中心化平台,提供了一个以太坊虚拟机(Ethereum Virtual Machine),简称EVM,开发者可以在其上开发各种应用。你可以把这个EVM想像成你的电脑,它能够运行一些以太坊定义的指令。与比特币的脚本引擎不同,以太坊的EVM功能非常强大,号称“图灵完备”。先不管什么是“图灵完备”,你只要知道“图灵完备”的虚拟机可以实现循环语句,有了循环就一定会有小坏蛋或者不合格的程序员弄出死循环,电脑死循环了大不了死机,重启就好,不过以太坊是去中心化的,EVM要是死循环了,可没法重启。

有没有办法能解决这个问题呢?

很遗憾,这个问题很多年前就有人研究过了,叫图灵停机问题(The Halting Problem),已经证明不存在一种能够检测程序是否会死循环的方法。

既然不能检测,还有没有别的方法阻止死循环呢?

如果让EVM上的程序的每条指令都要消耗一点儿“资源”,“资源”用光了,无论程序执行完没有,都会被强行终止,这样无论是不是死循环都没关系了。

这个执行程序时要消耗的资源就被称为汽油(Gas),每一条指令都要消耗不同数量的汽油。

举几个例子:

  • ADD:加法操作 3Gas
  • MUL:乘法操作 5Gas
  • SUB:减法操作 3Gas
  • DIV:除法操作 5Gas
  • HASH:计算哈希值 30Gas
越复杂的运算,需要消耗的Gas越多,只要给程序加上一个消耗Gas的上限,就可以防止程序出现死循环而不能停止的情况了。同时,以太坊还给每个区块包含的程序消耗的总Gas设定了上限,以免区块中包含的程序过多,影响一些性能比较弱的节点。每个区块能消耗的Gas上限也是可以调整的,由矿工们进行投票决定,目前是6725538Gas,也就是下图中的GAS LIMIT部分。

数据来源:Ethereum Network Status

image.gif

汽油在现实生活中不是免费的,在以太坊中也不是,要用以太币购买Gas。每个程序都会给出他们愿意用多少以太币购买1单位的Gas,这被称为汽油价格(Gas Price)。

每个程序需要为Gas支付的以太币可以用如下公式计算:

        Gas花费 = 消耗的Gas数量 x Gas的价格

你愿意支付的Gas价格越高,你的交易就会越快被矿工打包,这和比特币的交易费很类似。

以太坊的区块奖励

前面介绍了叔块和Gas,下面进入核心部分,以太坊的奖励机制。前面已经说过了,以太坊的区块有两种,普通区块和叔块,我们需要分情况来讨论每种区块的奖励。

普通区块奖励:

  • 固定奖励5ETH,每个普通区块都有
  • 区块内包含的所有程序的Gas花费的总和
  • 如果普通区块包含了叔块,每包含一个叔块可以得到固定奖励5ETH的1/32,也就是0.15625ETH。

叔块奖励

叔块的奖励计算有些复杂,公式为:

        叔块奖励 = ( 叔块高度 + 8 - 包含叔块的区块的高度 ) * 普通区块奖励 / 8

实践一下

以太坊区块浏览器Ethereum Blocks Information,这个浏览器可以很详细的查看每个区块的奖励。

我们来看一个刚挖出来的区块4222300,由于我们是在主链上看到它的,所以它是普通区块。

image.gif

它的奖励包含三部分:

        固定奖励:5ETH

        Gas总花费(也有人称之为交易费):0.281837168043699381ETH

        将两个叔块包含进来的奖励:5 * ( 1 / 32 ) * 2 = 0.3125ETH

这里有一点要注意,官方文档中的原文是“an extra reward for including uncles as part of the block”,我在2015年刚接触以太坊时不少网上的文章直接说成了“包含叔块奖励”,使我误以为是得到与挖掘出这些叔块得到的奖励等同数额的奖励,也就是上图中的Uncles Reward:8.75ETH,这是错误的,“包含叔块奖励”指的是将叔块包含进区块链这个行为的奖励,希望大家能够避免踩进这个坑。

我们再来看一个叔块0x1c2cbba0403f1079dcdb70e5971a87ce0fbc03d4572be30e2d17e4e4a0f136d5,是不是看着挺别扭,叔块不方便用高度来表示,因为同一个高度上已经有了个主链区块,就是这么惨。其实叔块也是有高度的,叔块的父区块的高度+1就是叔块的高度

image.gif

直接代入公式:

( 4222271 + 8 - 4222272 ) * 5 / 8 = 4.375ETH

👑👑👑结束语👑👑👑

image.gif

目录
相关文章
omni_usdt钱包文件keypoolsize是否持续为100个地址测试
omni_usdt钱包文件keypoolsize是否持续为100个地址测试
|
安全 IDE 区块链
BTC比特链/ETH以太链/BSC币安链/TRX波场链/Matic马蹄链智能合约系统开发稳定版丨指南步骤丨源码详情
Developing a smart contract system is actually the process of writing and executing code on a specific blockchain (such as Bitcoin, Ethereum, Binance Smart Chain, Tron, or Polygon (Matic)). These codes (conventions) have the ability to automatically execute and facilitate transactions without interm
TRX链丨BSC链丨ARB链发行代币合约项目DeFi/IDO/DAO/DApp/LP/Swap去中心化交易所兑换底池系统开发实现技术详细规则及案例源码
Private key management and security: To ensure the secure storage and management of private keys, hardware wallets or multi-signature mechanisms can be considered to increase security.
|
存储 区块链 数据安全/隐私保护
BSC链DAPP合约技术系统开发指南与需求
最重要的事情是为团队提供充分的理由说明去中心化是有意义的
|
存储 安全 区块链
跨链资产(BTC/ETH/EOS)转换平台特点及开发规则解析
跨链资产(BTC/ETH/EOS)转换平台特点及开发规则解析
|
安全 JavaScript 前端开发
TRON波场链USDT合约开发源码规则部署
TRON波场链USDT合约开发源码规则部署
|
人工智能 开发框架 JavaScript
深入分析以太链ETH智能合约DAPP系统开发详情及源码
以太坊最上层的是DApp。它通过Web3.js和智能合约层进行交换。所有的智能合约都运行在EVM(以太坊虚拟机)上,并会用到RPC的调用。在EVM和RPC下面是以太坊的四大核心内容,包括:blockChain,共识算法,挖矿以及网络层。除了DApp外,其他的所有部分都在以太坊的客户端里,目前最流行的以太坊客户端就是Geth(Go-Ethereum)
|
SQL 存储 NoSQL
DAPP币安链BSC/波场链TRC/以太链ETH智能合约代币流动性质押挖矿分红系统开发详细及逻辑
 用户合约在创建时,系统会自动创建一个新的数据库给该合约,所以不同的用户合约的状态数据以数据库进行区隔。在创建合约对应的数据库后,系统会执行合约init_contract函数中的SQL语句,包含非数据库事务的DDL语句,出于安全考虑,一个创建合约的交易或升级合约的交易将会被单独打包到区块中,不能与其他普通合约调用的交易一起打包。
|
存储 SQL 监控
浅谈ETH以太链丨BSC币安链智能合约系统开发实现技术及源码分析
据存储【由于gas成本高,智能合约目前不适合存储大量数据。因此,大多数DApps将利用去中心化存储(如IPFS或Swarm)来存储和分发大型静态资产,如图像,视频和客户端应用程序(HTML,CSS,JavaScript)。内容的哈希值通常使用键值映射存储为智能合约中的字节。然后,通过你的前端应用程序调用智能合约检索资产,以获取每个资产的URL。
|
存储 测试技术 区块链
波场链trc丨币安链bsc丨以太链eth开发案例,波场链trc丨币安链bsc丨以太链eth系统开发技术原理及分析
以太坊是一个全球性的、分布式的、开源的区块链,充当使用智能合约的去中心化应用程序(Dapps)的平台。您可以将以太坊视为一台世界计算机,它允许任何人出于任何目的构建、部署和使用应用程序,创建互联网的下一阶段,或许多人称之为Web 3.0的内容。