目的
- 直观理解以太坊运作规律理念。
- 便于下一步对技术更深入的理解。
以太坊特点
- 以太坊是“世界计算机”,这代表它是一个开源,全球分布的计算机设施。
- 每个节点都需要参与计算,其中一个矿工成功记账,其他的节点认可之后打包上链,则历史就无法篡改。
- 然而历史上有重大的以太坊安全事件,这样就会产生硬分叉,例如说要求删除某些不正常的节点并要求其他节点回退到以前的版本类似的。
- 执行称为智能合约(Smart Conrtact)的程序。
- 使用区块链来同步和存储系统状态以及名为以太币(Ether)的加密货币,以计算和约束执行资源成本。
- 本质是一个机遇交易的状态机(transaction-based state machine)。
- 由于交易(活动)产生新的状态,这其实就是一个状态机。
- 比特币只跟踪交易数据,而以太币跟踪所有的数据,所有的数据都是它状态的一部分。
- 以太坊的平台可以使开发人员能够构建具有内置经济功能的去中心化程序(DAPP)
以太坊的组成部分
P2P网络
- 以太坊在以太坊主网络运行,该网络刻在TCP端口30303寻址,并运行一个DEVp2p的协议。
交易(Transcation)
- 以太坊交易是网络信息,其中包括发送者(sender),接收者(receiver),值(value)和数据的有效荷载(payload)
以太坊虚拟机(EVM)
- 以太坊状态转换由以太坊虚拟机(EVM)处理,是一个执行字节码(机器语言指令)的基于堆栈的虚拟机。、
- 这个类似于JVM,它会把Java直接编译成字节码,这东西就可以跨平台了。
- EVM可以把智能合约编译成字节码,然后就可以跨平台【还提供堆栈】。
数据库
- 以太坊的区块链作为数据库(通常是Google的LevelDB)本地存储在每个节点上,包含序列化后的交易和系统状态。
客户端
- 以太坊有几种客户操作的客户端软件实现,其中最突出的是Go-Ethereum(Geth)和Parity。
以太坊中的重要概念
账户
包含地址,余额和随机数,以及可选的存储和代码的对象
- 普通账户(EOA),存储和代码均为空。
- 合约账户(Contract),包含存储和代码
地址(Address)
- 一般来说,这代表一格EOA或合约,它可以再区块链上接收或发送交易。更具体地说,它是ECDSA公钥的keccak散列的最右边160位。
交易(Transaction)
- 可以发送以太币和信息。
- 向合约发送的交易可以调用合约代码,并以信息数据为函数参数。
- 向空用户发送信息,可以自动生成信息为代码块的合约账户。
gas
- 以太坊用于执行智能合约的虚拟燃料。以太坊虚拟机使用核算机制来衡量gas的消耗量并限制计算资源消耗。
以太坊的货币
挖矿前(Pre-mine, Genesis)
- 2014年7月,为众筹大概发行了7200万以太币。这些币有的时候称为“矿前”。众筹阶段之后,以太币每年的产量基本稳定,被限制不超过7200万的25%。
- 挖矿产出(Mining)
- 区块奖励(block reward)
- 这笔钱是固定的,决定这笔钱也有一个相关的算法。
- 叔块奖励(uncle reward)
- 叔块引用奖励(uncle referencing reward)
- 区块奖励(block reward)
- 以太币产量未来的变化
- 以太坊出块机制从工作量证明(PoW)转换为股权证明(PoS)后,以太币的发型会有什么变化尚未有定论。股权证明机制将使用一个称为Casper的协议。在Casper协议下,以太币的发型率将大大低于目前(GHOST)协议下的发行率。[这个GHOST是当前发币的协议]
以太坊的挖矿产出
区块奖励
- 没产生一个新区块就会有一笔固定的奖励给矿工,初始是5个以太币,现在是3个(2019年)。
- 感觉比比特币少很多,为什么?因为以太坊本身出块速度比比特币快多了。[自己去调查]
- 感兴趣可以去翻原来的交易记录.
叔块奖励(Uncle rewards)
- 有些区块挖得比较晚,因此不能作为主区块链的组成部分。比特币称这些块为“孤块”,并且完全舍弃它。但是,比特币称他们为“叔块(uncles)”[因为实际上他们和主链的节点的父亲是一样的。],并且在之后的区块中,可以引用它们。如果叔块在之后的区块链中作为叔块被引用,每个叔块会为挖矿者产出区块奖励的7/8 [3*7/8]。这称为叔块奖励。
叔块引用奖励(Uncle referencing rewards)
- 以太坊不仅可以指定父节点是谁,还可以指定叔节点是谁;相当于指认一个并非首先得到大家确认的,同时也成功挖矿的节点作为叔节点。
- 矿工每引用一个叔块,可以获得区块奖励的1/32 [3*1/32](最多引用两个叔块)。
- 这一套基于POW的奖励机制,被称为以太坊的“幽灵协议”。
以太币供应量
- 中间大概是17年8月,这个曲线稍稍放缓了。
- 这是因为出币数量由五个变成了三个。
- 这个其实就是由大都会(metropolis)转移到拜占庭(byzantine)时期做的一个调整。
以太坊区块收入
普通区块收入
- 固定奖励(挖矿奖励),每个普通区块都有。
- 区块内包含的所有程序gas花费的总和。
- 如果普通区块引用了叔块,每个叔块可以得到固定奖励的1/32。[只要被人引用,就能够获得固定奖励的1/32]
叔块收入
- 只有一项,计算公式为
- 区块奖励 = (叔块高度+8-引用叔块的区块高度)*普通区块奖励/8
- 所以说和叔块7辈以内亲缘的都有奖励。
可以查询以太坊所有的交易
- https://etherscan.io/
解读一些参数
- HASH RATE代表着全网算力,DIFFICULTY代表着难度,TRANSACTION是交易数量。
区块信息
- Hash: 区块的哈希。
- Sha3Uncle: 叔块哈希。[叔块用的是Sha3算法,用的算法是不同的]
- Transactions: 打包的交易数量和合约数量。
- Mined By: 被谁挖了。
- Size: 区块大小(没有限制区块大小)
- 其实以太坊有特别的机制限制Size,就是Gas Limit。
- Gas是能源,是交易者提供的类似于手续费的东西,如果提供的gas不够,交易还有可能会失败。
- 为什么Gas利用率会高,因为我希望包括越多的GAS越好。
- Nounce相当于随机数。
- Block Reward: 它是由两个部分构成的,2是固定的,后面那串是手续费。
- 为什么没有叔区块奖励呢?很有可能的原因是叔区块更新得太快了,它引用的时候已经排在别人后面很多,所以没有成功引用到。
叔块参数
- 到时候还可以看看。
“幽灵”(GHOST)协议
- 以太坊出块时间:设计为12秒,实际14~15秒左右。
- 快速确认会带来区块的高作废率,由此链的安全性会降低。
- “幽灵”协议:Greedy Heaviest Observed SubTree, “GHOST”
- 计算工作量证明时,不仅包括当前区块的祖区块,父区块,还要包括祖先块的作废的后代区块(“叔块”),将他们进行综合考虑。
- 目前的协议要求下探到第七层(最早的简版设计是五层),也就是说,废区块只能以叔区块的身份被其父母的第二代至第七代后辈区块引用,而不能是更远关系的后辈区块。
- 以太坊付给以“叔区块”身份为新块确认作出贡献的废区块7/8的奖励,把它们纳入计算的“侄子区块”将获得区块奖励的1/31,不过,交易费用不会奖励给叔区块。
- 直观的理解:
- 以太坊出块速度非常快,这样分叉就会非常多,大家挖到的快,那么如果采取比特币只有一个人记账的方式,其他所有人的分叉都会作废。
- 举一个例子,A挖一个区块大概20秒,B挖一个要30秒。那么如果说A挖到了之后,打包好了,就要给广播给全网了,广播的时间里A又可以继续挖,例如广播的时间是8秒,那么B这个时候还没挖到,B在28秒的时候就又要重新开始挖,那么B就亏掉了那再广播的8秒钟。
- 所以以太坊就会导致优势算力的“抢跑”(而比特币由于它的区块的时间长,就不会有抢跑的问题)。
- GHOST协议就是为了防止“利用记账广播抢跑”的问题。
问题:这个“幽灵”协议为什么叫Greedy Heaviest Obseverved SubTree
- 其实有叔块,那其实就并不是一条链,而是应该叫一棵树,只是有主干而已。
- 以太坊你可以认为是一个区块树!
- 那么你如果算力差,你也能够获得一定的优势,你可以通过叔块赚取符合你算力的币。
以太坊和图灵完备
- 1936年,英国数学家艾伦·图灵(Alan Turing)创建了一个计算机的数学模型,它由一个控制器、一个读写头和一根无限长的工作带组成。纸带起着存储的作用,被分成一个个的小方格(可以看成磁带)﹔读写头能够读取纸带上的信息,以及将运算结果写进纸带;控制器则负责根据程序对搜集到的信息进行处理。在每个时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动纸带。
- 如果一个系统可以模拟任何图灵机,它就被定义为“图灵完备”(Turing Complete)的。这种系统称为通用图灵机(UTM)。
- 以太坊能够在称为以太坊虚拟机的状态机中执行存储程序,同时向内存读取和写入数据,使其称为图灵完备系统,因此成为通用图灵机。考虑到优先存储器的限制,以太坊可以计算任何可由任何图灵机计算的算法。
- 简单来说,以太坊支持循环语句,理论上可以运行“无限循环”的程序。
- 所以现在问题是,以太坊理论上可以运行“无限循环”的程序。[所以就引入了gas,来防止无限运行的程序]。
去中心化应用
- 基于以太坊可以创建智能合约(Smart Contract)来构建去中心化应用(Decentralized Application,简称为DApp)。
- 一台放的构想是称为DApps编程开发的平台
- DApp至少有一下组成:
- 区块链上的智能合约
- Web前端用户界面
以太坊应用
- 基于以太坊创建新的加密货币(CryptoCurrency,这种能力是2017年各种ICO泛滥的技术动因)
- 基于以太坊创建域名注册系统、博彩系统。
- 基于以太坊开发去中心化的游戏,比如2017年底的以太猫(CryptoKitties,最高单只猫售价1高达80W美元)。
代币(Token)
- 代币(token)也称作通证,本意为"令牌”,代表所有权的资产、货币、权限等在区块链上的抽象。
- 可替代通行证(fungible token):指的是基于区块链技术发型的,互相可以替代的,可以接近无线拆分的token。
- 非同质通证(non-fungible token):指的是基于区块链技术发行的,唯一的,不可替代的,大多数情况下不可拆分的token,如加密猫(CryptoKitties)。
我们这边直接点开来看看有哪些Token
- 目前网站有这些个代币。
- BNB(币安)
- Tether(泰达)
- 等
我们点开币安
- 这边先有一个面板作为汇总:
- 一些关于发行量,价格的内容,然后这里也包括了合约的地址。
- 下面的就是就是BNB的智能合约,也就约100行的代码,但是市值已经超过了20亿美元。
看一下当时历史非同质型代币的排名
- 大名鼎鼎的以太猫排名第十,当时售价到80美元,我们也可以看到它的源代码。
- 这个代码有上千行,就复杂的多:
- 它是继承了ERC721的标准。
名词解释
- EIP: Ethereum Improvement Proposals,以太坊改进建议。
- ERC: Ethereum Request for Comments的缩写,以太坊征求意见。一些EIP北欧标记成ERC,表示视图定义以太坊使用的特定标准的提议。
- EOA: External Owned Account,外部账户。由以太坊网络的人类用户创建的账户。
- Ethash: 以太坊1.0的工作量证明算法。
- HD钱包:使用分层确定性(HD protocol)秘钥创建和转账协议(BIP32)的钱包。
- Keccak256: 以太坊中使用的密码哈希函数。Keccak256被标准化为SHA-3。
- Nonce: 在密码学中,属于nonce用于指代只能使用一次的值。一台方使用两种类型的随机数,账户随机数和POW随机数。
主要参考:
https://www.bilibili.com/video/BV1NJ411D7rf?p=8&spm_id_from=pageDriver