# 以太坊 Ethereum

Ether 以太

# 区块链(公链)发展简史

  • 2008- 区块链 1.0 只是简单的记账 比特币
  • 2014- 区块链 2.0 智能合约 以太坊
  • 2017- 区块链 3.0 高性能,大吞吐量,开发者友好,用户友好 ?

# 以太坊的出现

比特币的定位:点对点的电子现金系统 以太坊的定位:下一代智能合约和去中心化应用平台

  • 2014-01,Vitalik Buterin 在自己任编辑的比特币杂志(Bitcoin Magazine)上发表了《以太坊:下一代智能合约和去中心化应用平台》(以太坊白皮书)(Ethereum: A Next-Generation Smart Contract and Decentralized Application Platform)(Dapp 去中心化应用)
  • 2014 年,迈阿密比特币会议中,Buterin 宣布以太坊项目,并提出多项创新性区块链技术,该年 7 月,启动以太坊众筹募资,募得 3.1 万枚比特币(当时约合 1840 万美元)
  • 2015.7.30,当时作为以太坊项目 CCO 成员 Stephan Tual 在官方博客正式宣布以太坊系统的诞生,以太坊主网上线

# 发展阶段

  • 前沿(Frontier)
  • 家园(Homestead)
  • 大都会(Metropolis)
    • 拜占庭
    • 君士坦丁堡
  • 宁静

# 重大分叉

  • Block #200,000 Ice Age - 引入指数难度增加的硬分叉,促使向 Proof-of-Stake 过度
  • Block #1,192,000 The DAO - 扭转了被攻击的 DAO 合约并导致以太坊和以太坊经典分裂成两个竞争系统的硬分叉
  • Block #2,463,000 Tangerine Whistle - 改变某些 IO 运算的 gas 计算,并从拒绝服务攻击中清除累计状态,该攻击利用了这些操作的低 gas 成本
  • Block #2,675,000 Spurious Dragon - 一个解决更多拒绝服务攻击媒介的硬分叉,以及另一种状态清除,此外,还有重放攻击保护机制

# 发展现状

  • 根据 State of DApps 的统计,目前运行在以太坊上的合约多达 47228 个,而以太坊的地址数也达到 4000w 以上

# 以太坊特点

  • 以太坊是“世界计算机”,这代表它是一个开源的、全球分布式的计算机基础设施
  • 执行称为智能合约(smart contract)的程序。(存储在世界计算机上,并能被其执行的程序)
  • 使用区块链来同步和存储系统状态以及名为以太币(Ether)的加密货币,以计量和约束执行资源成本
  • 本质是一个基于交易的状态机(transaction-based state machine)
  • 以太坊平台使开发人员能够构建具有内置经济功能的强大去中心化应用程序(DApp):在持续自我正常运行的同时,它还减少或消除了审查,第三方界面和交易对手风险

# 以太坊的组成部分

  • P2P 网络 以太坊在以太坊主网上运行,该网络可在 TCP 端口 30303 上寻址,并运行一个名为 DEVp2p 的协议
  • 交易(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)协议

  • 以太坊出块时间:设计为 12s,实际为 14~15s 左右
  • 快速确认会带来区块的高作废率,因此链的安全性也会降低

# “幽灵”协议:Greedy Heaviest Observed SubTree, "GHOST"

  • 计算工作量证明时,不仅包括当前区块的祖区块,父区块,还要包括祖先块的作废的后代区块(“叔块”),将他们进行综合考虑
  • 目前协议要求下探到第七层(最早的简版设计是五层),也就是说,废区块只能以叔区块的身份被其父母的第二代至第七代后辈区块引用,而不能是更远关系的后辈区块
  • 以太坊付给以“叔区块”身份为新块确认作出贡献的废区块 7/8 的奖励,把他们纳入计算机的"侄子区块"将获得区块奖励的 1/32,不过,交易费用不好奖励给叔区块

# 以太坊和图灵完备

  • 1936 年,英国数学家艾伦·图灵(Alan Turing)创建了一个计算机的数学模型,它由一个控制器、一个读写头和一根无限长的工作带组成。纸带起着存储的作用,被分成一个个的小方格(可以看成磁带);读写头能够读取纸带上的信息,以及将运算结果写进织带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动纸带。
  • 如果一个系统可以模拟任何图灵机,它就被定义为"图灵完备"(Turing Complete)的。这种系统统称为通用图灵机(UTM)。
  • 以太坊能够在称为以太坊虚拟机的状态机中执行存储程序,同时向内存读取和写入数据,使其成为图灵完备系统,因此成为通用图灵机,考虑到有限存储器的限制,以太坊可以计算任何可由任何图灵机计算的算法
  • 简单来说,以太坊支持循环语句,理论上可以运行“无限循环”的程序

# 去中心化应用

  • 基于以太坊可以创建智能合约(Smart Contract)来构建去中心化应用(Decentralized Application,简称 DApp)
  • 以太坊的构想是成为 DApps 编程开发平台
  • DApp 至少由以下组成
    • 区块链上的智能合约
    • Web 前端用户界面

# 以太坊应用

  • 基于以太坊创建新的加密货币(CryptoCurrency, 这种能力是 2017 年各种 ICO 泛滥的技术动因)
  • 基于以太坊创建域名注册系统、博彩系统
  • 基于以太坊开发去中心化游戏,比如 2017 年红极一时的以太猫

# 代币(Token)

  • 代币(token)也称为通证,本意为“令牌”,代表所有权的资产、货币、权限等在区块链上的抽象
  • 可替代性通证(Fungible token): 指的是基于区块链技术发行的,互相替代的,可以接近无限拆分的 token
  • 非同质通证(non-fungible token): 指的是基于区块链技术发行的,唯一的,不可替代的,大多数情况下不可拆分的 token,如加密猫(CryptoKitties)

# 名词解释

  • EIP: Ethereum Improvement Proposals, 以太坊改进建议
  • ERC: Ethereum Request for Comments 的缩写,以太坊征求意见
  • EOA: External Owned Account, 外部账户,由以太坊网络的人类用户创建的账户
  • Ethash: 以太坊 1.0 的工作量证明算法
  • HD 钱包: 使用分层确定性(HD protocol)密钥创建和转账协议(BIP32)的钱包
  • Keccak256: 以太坊中使用密码哈希函数,Keccak256 被标准化为 SHA-3
  • Nonce: 在密码学中,术语 nonce 用于指代只能使用一次的值,以太坊使用两种类型的随机数,账号随机数和 POW 随机数

# 以太币单位

  • 以太坊的货币单位称为以太,也称为 ETH 或 Ξ
  • ether 被细分为更小的单位,直到可能的最小单位,称为 wei;1ethet = 10^18wei
  • 以太的值总是在以太坊内部表示为以 wei 表示的无符号整数值
  • 以太的各种单位都有一个使用国际单位值(SI)的科学名称,和一个口语名称 eth01.png

# 以太坊钱包

以太坊钱包是我们进入以太坊系统的门户。它包含私钥,可以代表我们创建和广播交易

  • MetaMask: 一个浏览器扩展钱包,可以在浏览器上运行
  • Jaxx: 一款多平台、多币种的钱包,可以在各种操作系统上运行
  • MyEtherWallet(MEW): 一个基于 web 的钱包,可以在任何浏览器中运行
  • Emerald Wallet: 旨在已 ETC 配合使用,但与其他基于以太坊的区块兼容

# 私钥、公钥和地址

  • 私钥(Private Key) 以太坊私钥事实上只有一个 256 位随机数,用于发送以太的交易中创建签名来证明自己对资金的所有权
  • 公钥(Public Key) 公钥是由私钥通过椭圆曲线加密 secp256k1 算法单向生成的 512 位(64 字节)数
  • 地址(Address) 地址是由公钥的 Keccak-256 单向哈希,取最后 20 个字节(160 位)派生出来的标识符

私钥-》公钥-》地址

# 安全须知

  • keystore 文件就是加密存储私钥的,所以当系统提示你选择密码时,将其写到纸上。要访问账号,必须同时要有 keystore 文件和密钥
  • 助记词可以导出私钥,所以可以认为助记词就是私钥,用笔写在纸上,并妥善保管好

# 助记词

  • 助记词是明文私钥的另一种表现形式,最早由 BIP-39 提出,目的是帮助用户记忆复杂的私钥(256 位)
  • 技术上该提议可以在任意区块链中实现,
  • 支持 BIP39 提议的钱包也可以归类为 HD 钱包(Hierarchical Deterministic Wallet),Metamask 当属此类。

# 切换网络

  • Main Network(Network ID: 1) 主要的、公共的,以太坊区块链。真正的 ETH,真正的价值,真正的结果。
  • Ropsten Test Network(Network ID: 3) 以太坊公共测试区块链和网络,使用工作量证明共识(挖矿)。该网络上的 ETH 没 有任何价值。
  • Kovan Test Network(Network ID: 42) 以太坊公共测试区块链和网络,使用“Aura”协议进行权威证明 POA 共识(联合签 名)。该网络上的 ETH 没有任何价值。此测试网络仅由 Parity 支持。
  • Rinkeby Test Network(Network ID: 4) 以太坊公共测试区块链和网络,使用“Clique”协议进行权威证明 POA 共识(联合签 名)。该网络上的 ETH 没有任何价值。
  • Localhost 8545 连接到与浏览器在同一台计算机上运行的节点。该节点可以是任何公共区块链(main 或 testnet)的一部分,也可以是私有 testnet。
  • Custom RPC