以太坊特点
? 以太坊是“世界计算机”,这代表它是一个开源的、全球分布的计算 基础设施 ? 执行称为智能合约(smart contract)的程序 ? 使用区块链来同步和存储系统状态以及名为以太币(ether)的加密 货币,以计量和约束执行资源成本 ? 本质是一个基于交易的状态机(transaction-based state machine) ? 以太坊平台使开发人员能够构建具有内置经济功能的强大去中心化应 用程序(DApp);在持续自我正常运行的同时,它还减少或消除了 审查,第三方界面和交易对手风险
以太坊的组成部分
? P2P网络 以太坊在以太坊主网络上运行,该网络可在TCP端口30303上寻址,并运行一个名为 DΞVp2p的协议。 ? 交易(Transaction) 以太坊交易是网络消息,其中包括发送者(sender),接收者(receiver),值(value) 和数据的有效载荷(payload)。 ? 以太坊虚拟机(EVM) 以太坊状态转换由以太坊虚拟机(EVM)处理,这是一个执行字节码(机器语言指令)的 基于堆栈的虚拟机。 ? 数据库(Blockchain) 以太坊的区块链作为数据库(通常是 Google 的 LevelDB)本地存储在每个节点上,包含 序列化后的交易和系统状态。 ? 客户端 以太坊有几种可互操作的客户端软件实现,其中最突出的是 Go-Ethereum(Geth)和 Parity。
以太坊中的重要概念
? 账户(Account) 包含地址,余额和随机数,以及可选的存储和代码的对象。 ? 普通账户(EOA),存储和代码均为空 ? 合约账户(Contract),包含存储和代码 ? 地址(Address) 一般来说,这代表一个EOA或合约,它可以在区块链上接收或发送交易。 更具体地说,它是ECDSA 公钥的 keccak 散列的最右边的160位。 ? 交易(Transaction) ? 可以发送以太币和信息 ? 向合约发送的交易可以调用合约代码,并以信息数据为函数参数 ? 向空用户发送信息,可以自动生成以信息为代码块的合约账户 ? gas 以太坊用于执行智能合约的虚拟燃料。以太坊虚拟机使用核算机制来衡量 gas的消耗量并限制计算资源的消耗。
以太坊的货币
以太坊的货币单位称为以太(ether),也可以表示为ETH或符号Ξ。 以太币的发行规则: ? 挖矿前(Pre-mine,Genesis) 2014年7月/8月间,为众筹大约发行了7200万以太币。这些币有的时候被称之为“矿 前”。众筹阶段之后,以太币每年的产量基本稳定,被限制不超过7200万的25% ? 挖矿产出(Mining) ——区块奖励(block reward) ——叔块奖励(uncle reward) ——叔块引用奖励(uncle referencing reward) ? 以太币产量未来的变化 以太坊出块机制从工作量证明(PoW)转换为股权证明(PoS)后,以太币的发行会 有什么变化尚未有定论。股权证明机制将使用一个称为Casper的协议。在Casper协 议下,以太币的发行率将大大低于目前幽灵(GHOST)协议下的发行率。 以太坊的挖矿产出 ? 区块奖励(Block rewards) 每产生一个新区块就会有一笔固定的奖励给矿工,初始是5个以太币,现在是3个。 ? 叔块奖励(Uncle rewards) 有些区块被挖得稍晚一些,因此不能作为主区块链的组成部分。比特币称这类区块为 “孤块”,并且完全舍弃它们。但是,以太币称它们为“叔块”(uncles),并且在 之后的区块中,可以引用它们。如果叔块在之后的区块链中作为叔块被引用,每个叔 块会为挖矿者产出区块奖励的7/8。这被称之为叔块奖励。 ? 叔块引用奖励(Uncle referencing rewards) 矿工每引用一个叔块,可以得到区块奖励的1/32作为奖励(最多引用两个叔块) ? 这样的一套基于POW的奖励机制,被称为以太坊的“幽灵协议”
以太坊区块收入
? 普通区块收入 — 固定奖励(挖矿奖励),每个普通区块都有 — 区块内包含的所有程序的 gas 花费的总和 — 如果普通区块引用了叔块,每引用一个叔块可以得到固定奖励的 1/32 ? 叔块收入 叔块收入只有一项,就是叔块奖励,计算公式为: 叔块奖励 = ( 叔块高度 + 8 – 引用叔块的区块高度 ) * 普通区块奖励 / 8
“幽灵”(GHOST)协议
? 以太坊出块时间:设计为12秒,实际14~15秒左右 ? 快速确认会带来区块的高作废率,由此链的安全性也会降低 ? “幽灵”协议:Greedy Heaviest Observed SubTree, ”GHOST” ——计算工作量证明时,不仅包括当前区块的祖区块,父区块,还要包括 祖先块的作废的后代区块(“叔块”),将他们进行综合考虑。 ——目前的协议要求下探到第七层(最早的简版设计是五层),也就是说, 废区块只能以叔区块的身份被其父母的第二代至第七代后辈区块引用,而 不能是更远关系的后辈区块。 ——以太坊付给以“叔区块”身份为新块确认作出贡献的废区块7/8的奖励, 把它们纳入计算的“侄子区块”将获得区块奖励的1/32,不过,交易费用不 会奖励给叔区块。
涉及工具
? MetaMask - 浏览器插件钱包 ? Remix - 基于浏览器的 Solidity 在线编辑器 ? Geth -以太坊客户端(go语言) ? web3.js – 以太坊 javascipt API库 ? Ganache – 以太坊客户端(测试环境私链) ? Truffle – 以太坊开发框架
环境准备
? Chrome浏览器(最新版本 70.0.3538.67) ? Linux 系统或虚拟机(ubuntu 16.04.3) 需要安装:go(1.9), git(2.7.4), node(9.0.0), npm(5.7.1) ? 文本编辑器(VisualCode) ? 科学上网工具
主要参考资料
? 《精通以太坊》( Mastering Ethereum ) https://github.com/ethereumbook/ethereumbook ? 《以太坊白皮书》 ( A Next-Generation Smart Contract and Decentralized Application Platform ) https://github.com/ethereum/wiki/wiki/White-Paper ? 《以太坊黄皮书》(《以太坊:一种安全去中心化的通用交易账本 拜占庭 版本》) ? 以太坊官方文档 ( Ethereum Homestead Documentation ) http://www.ethdocs.org/en/latest/index.html ? Solidity官方文档 https://solidity.readthedocs.io/en/latest/
|