了解以太坊&零知识
1.以太坊到底是什么?
什么是以太坊?实际上,以太坊就是一个保存数字交易永久记录的公共数据库。重要的是,这个数据库不需要任何中央权威机构来维持和保护它,相反的它以一个“无信任”的交易系统来运行 —— 一个个体在不需要信任任何第三方或对方的情况下进行点对点交易的架构。
💎以太坊的特点
以太坊是“世界计算机”,这代表它是一个开源的、全球分布的计算基础设施。
-
执行称为智能合约(smart contract)的程序;
-
使用区块链来同步和存储系统状态以及以太币(ether),以计量和约束执行资源成本;
-
本质是一个基于交易的状态机(transaction-based state machine);
-
以太坊平台使开发人员能够构建具有内置经济功能的强大去中心化应用程序(DApp);
-
在持续自我正常运行的同时,它还减少或消除了审查,第三方界面和交易对手风险;
💎以太坊的组成部分
-
P2P网络 :以太坊在以太坊主网络上运行,该网络可在TCP端口30303上寻址,并运行一个名为DEVp2p的协议
-
交易(Transaction) :以太坊交易是网络消息,其中包括发送者,接收者,值和数据的有效载荷
-
以太坊虚拟机(EVM):以太坊状态转换由以太坊虚拟机处理,这是一个执行字节码的基于堆栈的虚拟机
-
数据库(Blockchain) :以太坊的区块链作为数据库本地存储在每个节点上,包含序列化后的交易和系统状态
-
客户端:以太坊有几种可互操作的客户端软件实现,其中最突出的是Go-Ethereum(Geth)和Parity
2.以太坊必备知识点&零知识
💎账户
账户是包含地址,余额和随机数
,以及可选的存储和代码的对象。
普通账户(EOA):被私钥控制且没有任何代码与之关联
合约账户(Contract):被它们的合约代码控制且有代码与之关联
📕如何区分?
⭐我们在钱包创建的账户就属于EOA,掌握了EOA的私钥,就掌握了EOA的全部。
⭐而我们购买以太币这样的虚拟货币,就是向以太坊的合约账户Tranfer以换取等价的以太币。
💎地址
一般来说,这代表一个普通账户地址(EOA)或合约账户地址(Contract),它可以在区块上接受或发送交易。
更具体地说,它是ECDSA公钥的keccak散列的最右边的160位
💎交易
- 可以发送以太币和信息
- 向合约发送的交易可以调用合约代码,并以信息数据为函数参数
- 向空用户发送信息,可以自动生成信息为代码块的合约账户
如下就是一笔交易的详情:
💎区块(Block)
所有的交易都被组成一个”块”。一个区块链包含了一系列这样的链在一起区块。
在以太坊中,一个区块包含:
- 区块头
- 关于包含在此区块中交易集的信息
- 与当前块的ommers相关的一系列其他区块头
让我们再回到区块的问题上。我们前面提到每个区块都有一个“区块头”,但这究竟是什么?
📕区块头
区块头是一个区块的一部分,包含了(适当了解):
- parentHash:父区块头的Hash值(这也是使得区块变成区块链的原因)
- ommerHash:当前区块ommers列表的Hash值
- beneficiary:接收挖此区块费用的账户地址
- stateRoot:状态树根节点的Hash值(回忆一下我们之前所说的保存在头中的状态树以及它使得轻客户端认证任何关于状态的事情都变得非常简单)
- transactionsRoot:包含此区块所列的所有交易的树的根节点Hash值
- receiptsRoot:包含此区块所列的所有交易收据的树的根节点Hash值
- logsBloom:由日志信息组成的一个Bloom过滤器 (数据结构)
- difficulty: 此区块的难度级别
- number:当前区块的计数(创世纪块的区块序号为0,对于每个后续区块,区块序号都增加1)
- gasLimit:每个区块的当前gas limit
- gasUsed: 此区块中交易所用的总gas量
- timestamp:此区块成立时的unix的时间戳
- extraData:与此区块相关的附加数据
- mixHash:一个Hash值,当与nonce组合时,证明此区块已经执行了足够的计算
- nonce:一个Hash值,当与mixHash组合时,证明此区块已经执行了足够的计算
💎gas费
以太坊用于执行智能合约的虚拟燃料。
以太坊虚拟机使用核算机制来衡量gas的消耗量并限制计算资源的消耗。
📕gas费用在哪?
买入卖出数字货币,转账,创建合约账户(即创建新的虚拟货币)等等。在以太坊的世界里,gas费就是你要交的税。
💎以太坊的货币
以太坊的货币单位称为以太(Ether),也可以表示为ETH。
📕以太币的发行规则
挖矿前:2014年7月/8月间,为众筹大约发行了7200万以太币。这些币有的时候称之为“矿前”。众筹阶段之后,以太币每年的产量基本稳定,被限制不超过7200万的25%
📕挖矿产出
挖矿产出分为:区块奖励,叔块奖励,叔块引用奖励。
💎以太坊的挖矿产出
-
区块奖励:每产生一个新区块就会有一笔固定的奖励给矿工,初始是5个以太币,现在是3个
-
叔块奖励:有些区块被挖得稍晚一些,因此不能作为主区块链的组成部分。比特币称这类区块为“孤块”,并且完全舍弃它们。但是,以太币称它们为“叔块”,并且在之后的区块中,可以引用它们。如果叔块在之后的区块链中作为叔块被引用,每个叔块会为挖矿者提供产出区块奖励的7/8。这被称之为叔块奖励。
-
叔块引用奖励:矿工每引用一个叔块,可以得到区块奖励的1/32作为奖励(最多引用2个叔块)
📕以太坊区块收入
普通区块收入:固定奖励,每个普通区块都有,区块内包含所有程序的gas花费的总和,如果普通区块引用了叔块,每引用一个叔块可以得到固定奖励的1/32
叔块收入:叔块收入只有一项,就是叔块奖励,计算公式为:
叔块奖励 = (叔块高度 + 8 − 引用叔块的区块高度) ∗ 普通区块奖励 / 8 (最多给到 7 级) 叔块奖励=(叔块高度+8-引用叔块的区块高度)*普通区块奖励/8 (最多给到7级) 叔块奖励=(叔块高度+8−引用叔块的区块高度)∗普通区块奖励/8(最多给到7级)
常用网站:ETHSCAN
💎幽灵(GHOST)协议
以太坊出块时间:设计为12秒,实际14~15秒左右
快速确认会带来区块的高作废率,由此链的安全性也会降低
幽灵协议:Greedy Heaviest Observed SubTree 因此诞生
📕简单描述
计算工作量证明时,不仅包括当前区块的主区块,父区块,还要包括祖先块作废的后代区块,将他们综合考虑。
目前的协议要求下探到第七层,也就是说,废区块只能以数区块的身份被其父母的第二代至第七代后辈区块引用,而不能是更远关系的后辈区块。
以太坊付给以“叔区块”身份为新块确认作出贡献的废区块7/8的奖励,把它们纳入计算的“侄子区块”将获得区块奖励的1/32,不过,交易费用不会奖励给叔区块。
💎以太坊应用
基于以太坊创建新的加密货币
基于以太坊创建域名注册系统、金融系统
基于以太坊开发去中心化的游戏,如以太猫
💎代币(Token)
代币也称作通证,本意为“令牌”,代表有所有权的资产、货币、权限等在区块链上的抽象。
📕可替代性通证
指的是基于区块链技术发行的,互相可以替代的,可以接近无限拆分的token
📕非同质通证
指的是基于区块链技术发行的,唯一的,不可替代的,大多数情况下不可拆分的token,如加密猫。
💎预言机(Oracle)
预言机(Oracle)是区块链中非常重要的一个功能,但很少有人讨论,并且很多人并不了解。
📕关于预言机的误解
或许你会以为预言机是用来预测什么东西的,然而它和预言毫无关联——预言机:是一个将数据从区块链外传输到区块链内的机制。
这么说可能更容易理解,预言机:是一个将数据从区块链外传输到区块链内的工具。
📕为什么叫预言机
预言机的英文是“Oracle”,意为神谕。这个词也是源于一个希腊神话,据说在子民遭遇到困境的时候,会向奥林匹斯山上的众神祈求神谕,众神会给出一些指引,给子民提供解决问题的“信息”。
预言机也是引申的这个神话,是可信的数据提供商。预言机是链上链下相互链接的中间件,是区块链与现实世界数据交互的一个连接点。
📕链外到链内——交互的连接点
人们提起区块链,总是说它所有交易记录链上可查,安全透明,但是要知道区块链是一个确定性的,封闭式的系统,运行在区块链上的智能合约是无法直接从外部获取数据的,只能在一个封闭、孤立的环境中执行任务。而预言机就是一个能将链外数据真实输入到链内,保障链上数据真实性的工具。
区块链的闭环链式结构决定了其是一个封闭的环境,是无法主动获取链外现实世界的真实数据的。区块链技术要真正落地应用,就需要网络外部的信息来执行交易并提供人们真正可以获利的服务,这个提供信息的中间件就是预言机。
预言机主要做的事情就是处理区块链里智能合约提供的请求,把一些链外的信息和数据传递到链内。因此,预言机被认为是去中心化协议和区块链外部数据之间的桥梁,这也是为什么预言机是必不可少的原因。
从底层技术逻辑来看,预言机已经成为区块链世界的基础设施构件,区块链应用场景的拓展有赖于预言机的发展和它的数据维度的拓展。
💎相关名词
- DAPP(去中心化应用):基于以太坊可以创建智能合约来构建去中心化应用(Decentralized Application)
- ERC:以太坊征求意见。一些EIP被标记为ERC,表示试图定义以太坊使用的特定标准的提议
- Ethash:以太坊1.0的工作量证明算法
- HD钱包:身份钱包,使用分层确定性密钥创建和转账协议的钱报
- Keccak256:以太坊中使用的密码哈希函数。Keccak256被标准化为SHA-3
- Nonce:密码学中,nonce用于指代只能使用一次的值。以太坊使用两种类型的随机数,账户随机数和POW随机数。