开搞以太坊

关于区块链技术,fabric完成第一阶段目标

  • 目前关于区块链技术的主流实现,hyperledger fabric基本上可以从原理到流程上,在到环境构建,到基于fabric开搞项目,环境上也是折磨的死去活来,还好都搞定了。算是可入手项目开发学习阶段了。
  • fabric还有很多细节和需要深入学习的地方,继续深入学习和高级应用作为第二阶段学习目标。

为什么学习以太坊

  • 目的是更好理解区块链原理技术及应用
  • 理解以太坊和fabric的差异,更好理解业务场景和区块链结合落地

一,以太坊是什么

  • 以太坊是一个去中心化的,可以执行智能合约的平台(15年6月发行)
  • 比特币的定义是一种数字货币,而以太坊则是执行智能合约的平台。而以太币(ether)则是执行智能合约所需要的消耗品。可以把以太坊想象成一个平台,而在上边运行汽车(智能合约),就需要汽油(ether)
  • 现在我们接触的比较多的是app,而在区块链上搭建的app就叫dapp(decentralized application)。试想一下,如果一个合同的执行,不需要公证,不存在违约,过程公开透明,可追溯,永久存在,费用低廉。。太好。

以太坊历史

  • 在2016年6月,The DAO事件成为以太坊发展的关键点。在2016年6月,The DAO事件成为以太坊发展的关键点
  • 以太坊基金会最终的决定是执行硬分叉,于是也就有了ETC(以太坊经典)和ETH(以太坊)
  • 以太坊共分为4个阶段: 即Frontier(前沿)、 Homestead(家园)、 Metropolis(大都会)、 Serenity(宁静)。目前已经进行到了Metropolis阶段。前三个阶段采用工作量证明机制(POW),第四阶段会逐渐切换到权益证明机制(POS)。当切换至权益证明机制的时候,每一年以太坊的产量将降低,维持在0~200万左右。

以太坊术语

  • 以太币(Ether)
    以太币是以太坊中货币的名称。以太币是用来支付交易和以太坊交易的计算费用。 ether也认为是以太币的单位,另一个常用的单位是wei。 1ether=1e18wei (1,000,000,000,000,000,000wei)

  • 智能合约
    一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。

  • 以太坊虚拟机 EVM
    是以太坊中智能合约的运行环境。

  • Solidity
    是以太坊中用于开发智能合约的编程语言,目前开发智能合约用的最多的是Solidity。开发智能合约入门可参考智能合约开发环境搭建及Hello World合约。

  • Serpent
    一门智能合约的编程语言,语法类似Python,不再建议使用,建议转换到Viper。

  • Viper
    一门智能合约的编程语言,Vitalik最推崇的语言。取代Solidity的地位也是有可能的。 官方文档

  • Transaction 交易
    包含一系列价值的转移,从一个地址转到另一个。

  • 消息
    合约能够向其他合约发送“消息”。消息是虚拟的,不能序列化,存在于以太坊执行环境中。可以被理解为函数调用。

  • 以太坊客户端
    也称钱包,提供账户管理、挖矿、转账、智能合约的部署和执行等等功能,以太坊节点利用以太坊客户端接入到以太坊网络。 现在以太坊客户端主要有:Wallent/Mist , Geth, Parity, Harmony,pyethapp等

  • Geth
    开发中使用最广泛的客户端,使用Go语言实现。 了解geth命令用法

  • Parity
    另一个较为常用的客户端,用Rust实现。

  • web3.js
    web3.js是一个实现与以太坊节点JSON-RPC通信的JavaScript库。类似还有Java库web3j。 geth提供的JavaScript控制台中,就包含的web3.js库事例web3。

  • Gas
    以太坊上用Gas机制来计费,Gas也可以认为是一个工作量单位,智能合约越复杂(计算步骤的数量和类型,占用的内存等),用来完成运行就需要越多Gas。

  • etherbase
    在你的节点上的主账户默认名字,如果你在挖矿,那么挖矿的回报会被放到这个账户中。

  • coinbase 是一个和etherbase类似的概念,但是对于众多的加密货币平台而言coinbase是一个更通用的术语。

  • balance 账户余额

  • GHOST协议
    Greedy Heaviest Observed Subtree, GHOST协议就是让我们必须选择一个在其上完成计算最多的路径。一个方法确定路径就是使用最近一个区块(叶子区块)的区块号,区块号代表着当前路径上总的区块数(不包含创世纪区块)。区块号越大,路径就会越长,就说明越多的挖矿算力被消耗在此路径上以达到叶子区块。使用这种推理就可以允许我们赞同当前状态的权威版本。

  • 梅克尔帕特里夏树(MPT:Merkle Patricia Tree)
    一种数据结构,它会存储每个账户的状态(存储键值对关系)。这个树的建立是通过从每个节点开始,然后将节点分成多达16个组,然后散列每个组,然后对散列结果继续散列,直到整个树有一个最后的“根散列”。

  • Frontier(前沿)
    以太坊(路线图)的第一阶段,在2015年7月30日发布。

  • Homestead(家园)
    以太坊(路线图)的第二阶段,在2016年3月14日发布。

  • Metropolis(大都会)
    以太坊(路线图)的第三阶段,引入四大特性:zk-Snarks(基于”零知识证明”),PoS(Proof of Stake,即权益证明)早期实施,智能合约跟灵活和稳定, 抽象账户。 大都会又拆分为两个阶段实施(两个硬分叉):拜占庭(Byzantium)及君士坦丁堡(Constantinople)

  • 拜占庭
    拜占庭硬分叉在第437万个区块高度发生,时间是2017年10月16日,引入了zk-Snarks 及 抽象账户等。

  • 君士坦丁堡
    预计在2018年实施, 主要的特性就是平滑处理掉所有由于”拜占庭”所引发的问题,并引入 PoW 和 PoS 的混合链模式。

  • Serenity(宁静)
    以太坊(路线图)的第四阶段,

  • 零知识证明
    指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。 “零知识证明”实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。

  • PoS
    一种共识协议:作为验证节点,首先你必须拥有一定数量的以太币,根据以太币的数量和时间会产生用于下注验证区块的权益。只有拥有权益的节点才能有效验证区块,当你验证的区块被打包进链,你将获得和你权益成正比的区块奖励。如果你验证恶意或错误的区块,那么你所下注的权益将被扣除。

  • Casper 的共识算法
    以太坊中PoS协议的实现, 刚开始每100个区块将有一个采用PoS协议挖出

  • 抽象账户
    在的以太坊有两类账户:即外部账户和合约账户,以太坊正在试图模糊二者的界限,即你可以同时拥有合约账户和外部账户,这种做法本质上就是让用户按照合约账户的格式来定义外部账户。

  • 难度炸弹
    为了确保以太坊的矿工能加入到新链条中来,开发团队引入了”难度炸弹”机制。它会使难度系数呈指数增加以至于让挖矿变得几乎不可能的。

  • 以太坊硬分叉
    硬分叉是对以太坊底层协议的改变,创建新的规则,提高整个系统。协议改变在某个特定区块上被激活。所有的以太坊客户端都需要升级,否则将停留在遵循旧规则的老链上。

  • ERC-20
    代币合约标准,一系列通过以太坊智能合约发布的代币制定了代币发放的通用规则。该标准是目前通过ICO发行代币的基础准则。 该标准能够确保基于以太坊的代币在整个生态系统中以一种可预测的方式进行,使去中心化应用程序和智能合约可以在整个平台上彼此协作,所有代币都遵循一个固定的安全标准。

  • EIPs
    Ethereum Improvement Proposals - 以太坊改进协议

  • Ommer
    是一个区块的父区块与当前区块父区块的父区块是相同的。 由于以太坊区块生产时间(大概15秒左右)比比特币(大概10分钟左右)要快很多。更短的区块生产时间的一个缺点就是:更多的竞争区块会被矿工发现。 这些竞争区块同样也被称为“孤区块”(也就是被挖出来但是不会被添加到主链上的区块) Ommers的目的就是为了帮助奖励矿工纳入这些孤区块,Ommer区块会收到比全区块少一点的奖励。

  • 预言机
    通过向智能合约提供数据,它现实世界和区块链之间的桥梁。

  • 测试网络
    以太坊用来测试功能的网络,比如拜占庭分叉之前先在测试网络(Ropsten)上运行一段时间,稳定后再发布到公有链(正式网络)。 以太坊测试网络有:
1
2
3
4
5
6
7
Olympic测试网络 - 早期的一个(预发布版本)测试网络,已不再使用
Morden测试网络 - 以太坊第一个测试网络,已不再使用
Ropsten测试网络 - 使用Pow,和当前的公有链环境一致,2016/11发布。
Kovan测试网络 - 仅parity钱包支持,使用PoA共识
Rinkeby测试网络 - 仅geth钱包支持,使用PoA共识 不同网络的特点可进一步查看这个问答
DAO(decentralized autonomous organization)去中心自治组织
DAO是建立在区块链之上的合约(或一系列合约),旨在制定规则、强制执行或使组织工作自动化,包括治理、筹资、运营、支出和扩张。