首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从几个典型币看区块链的发展(一)-以太坊

之前老王花了几个篇幅介绍过比特币的工作机制及部分关键代码,不清楚的读者可以点击以下链接。

距离上一次发文已过去大半年了,在这过去的半年多,币圈实实在在经历了一场大牛市到熊市,其中最重要的比特币从最高点19000美元跌至现在3000多美元,更别提其他币了。很多人感慨币圈一天,人间一年,由牛转熊只在转眼之间,让人感叹不已。

抛开币圈的暴富神话不说,老王更看重的是区块链的社会学意义,在老王心中,区块链可以说是人类最新一次的乌托邦社会实践,其对现有金融体系的冲击和对理想社会的思考更令人着迷。

本系列文章老王将分成3篇,为大家挑选几个很有意思的典型加密币,并对其底层的区块链结构做一介绍。内容如下:

一. Ethereum(简写ETH,中文以太坊)

以太坊于2015年7月正式启动,推出之后一直被称为区块链2.0(比特币1.0)目前市值约1300万USD,市值排名第二。

二. Bitshares/steemit/EOS

计划放到第二篇来介绍。之所以把这3个放一起,因为它们都是出自BM之手,底层链结构都是基于graphene(中文石墨烯)项目。Bitshares(中文比特股)于2014年上线,steemit于2016年启动,这两者市值目前均在排名50名,EOS于2017年启动,目前排名第5。

三. IOTA

计划在第三篇中介绍。IOTA号称提供了一种物联网的区块链解决方案,于2015年创建,目前市值排名第12。

声明:

本文是老王对加密币的个人理解,如有理解不正确之处,欢迎留言指正。也欢迎转发,转发请注明出处。

好了,正文开始。

在讲ETH之前,我们先来回忆下Bitcoin是如何运行的:

1.在用户交易驱动下,系统会产生很多Transactions(下文都简写tx)

2.选取一些tx打包成Block(中文称块,区块)

3.使用链表结构将这些Block串联成BlockChain(中文成区块链),后面一个块包含前一个块的身份ID

那ETH又是怎么做的呢?我们也按上述的1,2,3步骤来叙述。

第1步:ETH将交易类型从基本的转账扩展到了更多的交易类型,同时ETH对bitcoin用于检查tx合法性的script脚本扩展成智能合约(这是以太坊最大的亮点)。

在进一步介绍前,先简要说下智能合约。假设A和B打赌明天天气,如果是晴天A要给B 5美元,否则B给A 5美元。这就是一个简单的contract(中文合约),要完成这个合约,首先需要双方都拿出5美元由中间人保管,第二天中间人去查天气,晴天则给10美元给A,否则给B。该合约以计算机自动执行的方式便称之为智能合约。

拿ETH来说,首先要支持创建合约,于是ETH发明了图灵完备性(相比bitcoin的script主要也就是多了loop特性。Loop指的是一段程序代码可以循环执行)的新编程语言sodility,以及用于解释sodility语言的虚拟机EVM(Ethereum Virtual Machine)。同时还会需要合约市场的概念,因为A和B打赌使用的合约并不一定要是A或B创建。

创建合约后,接下来就需要在合适的时机触发该合约。于是ETH将用户帐户分离成user account(用户帐户)和contract account(合约账户),当A需要发起一个5美元的赌约(该触发动作便是一种新的tx类型),ETH会从A和B的账户各扣除5美元(实际稍多于5美元,因为还包括一些费用)存于各自的合约账户,第二天ETH会去公开的天气源(为了支持这点,因此需要公开的datasource feeding)查询天气结果并自动执行该合约,将赌注发给获胜方。

刚我们提到说ETH的合约是支持循环结构的图灵完备的,因此为了避免陷于死循环,ETH规定了每个动作的gas(中文燃料)消耗,以及每个合约的最高燃料限制。

目前智能合约的发展已远远超过最初的设想,它是目前区块链领域最重要的特征。

在介绍第二步创建Block前,我们再来简要看下tx会有哪些数据

Tx={

Type m_type = NullTransaction;

u256 m_nonce;

u256 m_value;

Address m_receiveAddress;

u256 m_gasPrice;

u256 m_gas;

bytes m_data;

boost::optional m_vrs;

int m_chainId = -4;

mutable h256 m_hashWith;

mutable Address m_sender;

}

上述字段中,m_data字段就是ETH新增的字段,很多新特性数据都存在这里。

Tx组装完成后,我们便来到了第2步创建Block,打包出块。在generate block(中文叫出块)这一步最关键的问题就是该由谁来出块。

比特币使用了PoW算法,通过算力证明和一定的运气来决定由谁出块。比特币使用的PoW算法由于所消耗的能源过多,挖矿已变成拼算力的游戏,广为人诟病。ETH目前也是使用了PoW算法(据说要切换到PoS算法),但是对PoW算法也做了一些优化,比如增加了memory hard机制(简单的说,计算机计算速度非常快,但是计算所需的数据在内存传输速度较慢,计算机不得不等传输完成后再计算),使得即使CPU/GPU计算的算力足够快,也会因为内存传输速度的限制不得不慢下来,一定程度的延缓了算力的集中。

在介绍第3步前,我先介绍下PoS(Proof of Stake)算法

对于PoW(Proof of Work)来说,它就像解一个数学题,谁先解出一个解就由谁来完成本轮的出块。

而在POS模式下,有一个名词叫币龄,其等于 持有币×持有时间,比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000。

PoS算法大致如下:

f(…)

f是一个函数,通常都是hash函数,bnCoinDayWeight即币龄,bnTarget目标值,则用于衡量PoS挖矿难度。bnTarget×bnCoinDayWeight的值越大,则挖矿难度越小;反之亦然。

与PoW相比,上述公式在"

出块规则确定后,接下来就是第3步:定义链的规则。因为同时产生的块可能有很多,哪些块该有效,哪些块该被丢弃,比特币使用的是最长链机制,选择当前最长的那个链作为主链。最长链机制简单而有效,但是也限制了出块速度,白白浪费了大量工作(那些未被纳入最长链的块将被丢弃,其投入的那些算力也随之作废),ETH则使用了新的协议---GHOST(Greedy Heaviest Observed Subtree)协议

GHOST协议选取主链的原则是选取包含的有效区块最多的子树,下面我们以一个图来演示。

图1 GHOST协议说明

假设当前的链结构如图1所示(attacker's secret chain当前也已并入主链),对于节点来说,目前有两个子链1A和1B,其中1A包含1A,2A等6个区块(一般固定N子代,在以太坊中N=7),而1B则包含1B,2B,2C,…,5B等12个区块,根据GHOST协议选取包括区块最多的子链,故选择1B作为下一个区块,丢弃1A。同理选择1B后,面临2B,2C,2D三个子链,其中2B有两个区块,2C有5个,2D有4个,故GHOST协议会选择2C作为下一个区块,于是最终GHOST协议生成的主链就是0->1B->2C->3D->4B,而根据最长链规则则会是0->1A->2A->3A->4A->5A->6A。

在GHOST协议中,新引入uncle block(中文叔块,如2B是3D的叔块)的概念,每个区块可选取0-2个叔块,如果叔块被选中,也将会得到一定的奖励。具体奖励规则如下:

1)主链节点获得基本奖励,如3个ETH。

2)主链节点的兄弟(非主链)节点获得((叔块高度+8-当前块的高度)/8 )*基本奖励

假设3D是新产生的区块,对于其叔块2B而言,高度相差1,所以它的奖励是(-1+8)/8 *基本奖励,即7/8*基本奖励。对于2D也是可以获得7/8*基本奖励。而如果是1A能获得奖励,则它获得6/8*基本奖励。同时,一个当前区块只能包含两个叔块链接,此图中可能是2B和2D;如果没有2D,3D的两个叔块可能是2B和1A。

GHOST协议更大程度的利用了现有的算力,减少了算力的浪费,但是没有从根本上解决问题。

介绍完以太坊的主链规则,本篇就基本结束了。我们简要回忆下:

1.以太坊扩展了比特币中的tx结构,新增智能合约特性。

2.出块算法增加了memory hard机制,并计划引入新的PoS算法。

3.链化这一步,引入了新的GHOST协议算法。

毫不夸张地说,以太坊新引入的智能合约功能使得dapp(decentralized app,中文叫 分布式app)成为可能,也让以太坊初步具备了区块链领域的操作系统(类似Windows/Linux)的可能性,之前大热的加密猫就是用智能合约实现的一个dapp。从这一点来说,以太坊被称为区块链2.0,一点也不为过。

虽然相比于比特币,以太坊有了很大的提高,但是目前尚存以下几个问题:

1)处理性能有待提升。目前以太坊大约25笔交易/秒,而比特币大约7笔/秒。

2)与比特币一样,尽管有memory hard机制,挖矿算力还是不可避免地集中在几大矿池。

3)交易代价昂贵。

下篇预告

好了,本篇就介绍到这里,下一篇我们将继续介绍BM大神的三个作品:Bitshares/Steemit/EOS。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190114G1A81Z00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券