以太坊技术(以太坊技术升级)

科灵网 18 0

以太坊通俗解释

以太坊(Ethereum)是一个建立在区块链技术之上的、图灵完备的去中心化应用平台。它允许任何人在平台中通过智能合约技术开发、部署和使用去中心化应用。有没有感到和 iOS、Android 平台有点类似?在区块链1.0时代,我们如果需要编写区块链应用需要先从 Github 上 Download 一份比特币源码,然后修改底层代码如网络协议、共识机制、加密算法等等,再发布到网络中。2013、2014年的很多山寨币就是这样产生的,改一改比特币的代码,甚至是调整其中的某些参数就造出了一个新的应用、新的币种。而以太坊平台,是对底层区块链技术进行了封装,让区块链应用开发者可以直接基于以太坊平台进行开发,开发者只需专注于应用本身,而不用关注底层技术的具体实现,从而大大降

以太坊技术系列-以太坊数据结构

本篇文章和大家介绍一下以太坊的数据结构,上篇文章我们提到,以太坊为了实现智能合约这一功能,使用了基于账户的模型。我们来看看以太坊中数据结构。

既然是基于账户的模型,我们需要通过账户地址找到账户的状态。就像通过银行卡号可以找到你在银行中的各种信息一样。最简单的想法当然是一个简单的哈希表 key是账户地址 value是账户状态。但这里有个问题解决不了。

轻节点如何校验账户合法性?

上篇我们说过,区块链中有2类节点,全节点和轻节点,轻节点只会存储block header,所以轻节点如何才能校验账号是否合法呢?

这个思路和我们平时用的md5校验一致,我们会对区块内的信息进行hash运算从而得出区块内信息唯一确定的值,区块链所有节点中这个值都是相同的。

在这个过程中我们用到了一种数据结构Merkle Tree(哈希树),我们先看下Merkle Tree(哈希树)的示意图。

上篇文章说到区块链中的链表(哈希链)和我们平时常见链表不同的是将指针从地址改为了hash指,这里也一样,哈希树和二叉树的区别有2个

1.将地址改为了哈希值

2.只有叶子节点存储数据

回到之前的问题轻节点是如何校验1个账户或交易是否是在链上的呢?

整个流程如上图所示

1.轻节点需要判断1个账号是否合法

2.轻节点由于只存储block header,所以拿到1个账号的时候会向全节点发出请求

3.全节点存储了所有账户状态,将账户路径中的需要计算用到的hash值返回给轻节点

4.轻节点本地进行计算根hash值,如果计算结果和自己存储一致则账户合法,不一致则不合法。

那以太坊中的账户信息的数据结构就是这样吗?

直接用这样的数据结构来存储账户信息会有2个问题

查找困难

生成hash值不确定

第1个问题应该比较容易发现,在这个树中寻找1个账号需要的复杂度是O(n),因为没有任何顺序。

第2个问题其实也是因为无序导致的,无序的组合每个节点针对同一批账户生成的hash值不一致,这就导致无法达成共识。

既然2个问题都和顺序有关,那我们类似二叉排序树一样,使用哈希排序树是不是就可以解决问题了呢?

使用排序树后会带来另外1个问题

插入困难

因为要维持树是有序的,很可能带来树结构的很大变动。

以太坊中使用了另外一种数据结构字典树。和哈希树不同,字典树应该是很多地方都有使用。我们简单来看下字典树的结构。

字典树能够较好地解决哈希树的2个缺点1.查找困难 2.生成的hash值不确定以及排序二叉树的1个缺点 插入困难。

但字典树我们可以看到可能树的深度可能由于部分元素导致整棵树深度非常深。

这时我们可以进一步优化,将相同路径进行压缩。这就是压缩字典树。

将哈希树和压缩字典树结合,就可以得到以太坊存储账户的最终数据结构-MPT。

将压缩字典树里面的指针从地址改为指针,并且将数据存储在叶子节点中即可。

介绍完状态树的数据结构,我们接下来讨论1个问题,区块中存储的账户状态是什么样的范围。有2种选择。

只保存当时区块中产生交易的账户状态。

保存全局所有的账户。

我们可以看下这2种方式,无非就是空间和时间的平衡,只保存当前区块产生的交易意味着是做懒加载(需要的时候才去寻找账户),在区块链中这个代价是非常大的,因为寻找的账户之前从未交易过,这样会遍历整个区块链。另外一种保存全局的账户方式虽然看起来空间消耗较大,但查找快捷,而且空间的问题我们可以通过其他方式优化。所以最终以太坊选择了第2种每个区块都报错全局所有账户的方式。

我们来看下以太坊中是如何保存状态树的。

可以看到以太坊中虽然每个区块都保存了全部账户,但是会将未发生变化的账户状态指向前1个节点,本身只存储发生变化的状态,这样可以较大程度优化空间占用。

介绍完以太坊中比较复杂的状态树后,我们继续来看看以太坊中的另外两棵树,交易树和收据树。

首先介绍一下,为什么需要交易树收据树。

1.交易树

虽然以太坊是基于账户的模型,但是就像银行不仅会存储银行卡的余额,还会存储卡中的每笔钱怎么来的以及怎么花的。交易树中就存储着当前区块中的包含的所有交易。

2.收据树

由于智能合约的引入增加了不少复杂性,所以以太坊用收据树存储着一些交易操作的额外信息。比如交易过程中执行日志就包含在收据树中方便查询。收据树和交易树是一一对应的。每发生一次交易就会有一次收据。

和状态树不同交易树和收据树只维护当前区块内发生的交易,因为当时区块发生交易时不需要再去查找另外1个交易,也就之前需要可能遍历整个区块链的查找操作了。

由于以太坊中的出块速度较快,我们进行一些查询一些符合条件交易的时候会面临大量数据遍历困难的问题。收据树中引入了布隆过滤器可以帮助我们有效缓解这一困难。

布隆过滤器将大集合中每个元素进行hash运算映射到1个较小的集合,这时再来1个元素要判断是否在大集合的时候,不需要遍历整个大集合,而是去进行hash运算去小集合中寻找是否存在,如果不存在,肯定不在大集合中,如果存在则不能说明任何问题。

如上图所示,布隆过滤器只能证明某1个元素不在集合中,不能证明1个元素在结合中。

以太坊中如果我们要在较多区块中寻找某1个交易,则可以利用布隆过滤器,过滤掉肯定不存在目标交易的区块,然后进入收据树内继续利用布隆过滤器筛选,剩下的才是可能的目标交易的交易,进行一一比对即可。

我们介绍了以太坊的核心数据结构,状态树交易树收据树,他们都是使用相同的数据结构-哈希压缩字典树。但状态树是维护1颗全局账户树,交易树和收据树则是维护本区块内的交易或收据。

介绍完数据结构后,后面我们会用几篇文章来介绍以太坊中的一些核心算法,比如共识机制,挖矿算法等。

以太坊技术(以太坊技术升级)-第1张图片-科灵网

以太坊是什么?

随着区块链技术的创新,一个新的平台诞生了,它就是以太坊。以太坊不像比特币那样只是一种加密货币,它还存在其它特征,使其成为了一个巨大的分布式计算机。

那么,到底什么是以太坊?

具体来说,以太坊(Ethereum)是一个可编程、可视化、更易用的区块链,它允许任何人编写智能合约和发行代币。就像比特币一样,以太坊是去中心化的,由全网共同记账,账本公开透明且不可窜改。

与比特币不同的是,以太坊是可编程的区块链,它提供了一套图灵完备的脚本语言,因此,开发人员可以直接用C语言等高级语言编程,转换成汇编语言,大大降低了区块链应用的开发难度。

为了更易理解,打个比方,以太坊就像是区块链里的Android,它是一个开发平台,让我们可以像基于Android Framework一样基于区块链技术写应用。它上面提供各种模块让用户来搭建应用,如果将搭建应用比作造房子,那么以太坊就提供了墙面、屋顶、地板等模块,用户只需像搭积木一样把房子搭起来,因此在以太坊上建立应用的成本和速度都大大改善。

事实上,在没有以太坊之前,写区块链应用是这样的:拷贝一份比特币代码,然后去改底层代码如加密算法,共识机制,网络协议等等(很多山寨币就是这样,改改就出来一个新币)。

至于以太坊如何运作?

与其它区块链一样,以太坊需要几千人在自己的计算机上运行一个软件,为该网络提供动力。网络中的每个节点(计算机)运行一个叫做以太坊虚拟机(EVM)的软件。如果将以太坊虚拟机想象成一个操作系统,它能理解并执行通过以太坊特定编程语言编写的软件,由以太坊虚拟机执行的软件/应用程序被称为“智能合约”。

不过,在这台计算机上操作并不是免费的,需要支付该网络自带的加密货币,叫做以太币(Ether)。以太币与比特币大致相同,除了一点,即以太币可以为在以太坊上执行智能合约而付费。

回到以太坊的发展史,以太坊的概念首次在2013至2014年间由程序员Vitalik Buterin受比特币启发后提出,大意为“下一代加密货币与去中心化应用平台”,在2014年通过ICO众筹开始得以发展。

截至2018年2月,以太币是市值第二高的加密货币,仅次于比特币。

对于许多程序工程师和投资人而言,2015年7月30号这一天是一个大日子,经过18个月的酝酿期后,以太坊区块链平台终于正式诞生了,当天在位于布鲁克林的办公室上午11:45左右,当以太坊区块链产生第一个创世区块,随即有很多狂热的矿工在后头想要赢得第一个区块,也就是以太坊专属电子货币,以太币的所有权。当时整个办公室掌声雷动,那一天天气很糟糕,纽约一带下了大雷雨,每个人的智能手机不时传来嘈杂的洪水警告讯号。

根据该公司网站资料的说明,以太坊是一个去中心化的应用平台,以智能合约为例,设计师可以完全排除死机被监控,被诈骗或者是被第三方横加干预的可能,跟比特币一样,以太坊利用以太币吸引参加者,建立验证交易平台的网络架构,维持网络架构的运作,并且以共识决定哪些是真正发生过存在的事件,但是以太坊和比特币也有所不同,以太坊提供一些功能强大的工具,让投入开发的人创造出去,具有去中心化的软件服务,使用范围可以从线上 游戏 横跨到股票交易。

以太坊的构想源自于2013年,当时才19岁的俄裔加拿大人为例,维塔利克布特林,他当时跟比特币的核心开发者争论,区块链网络架构需要有更稳固的手稿语言才能发展其他的应用软件,不过他的想法没有被采纳,促成了他打定主意要开发一套符合自己理念的区块链网络架构共识,这家公司可以说是他跨出的第一步,在以太坊区块链上推出了应用软件,如果我们把时间往回倒转几年,就会发现一个很有趣的对照。

有位大师托瓦兹推出Linux作业系统的举动,正如布特林推出以太坊一样如出一辙。共识系统公司的联合创始人约瑟夫鲁宾谈到区块链以太坊的兴起时表示,我愈发觉得走上街头去贴海报诉求是很浪费时间的一件事,倒不如一起合作,在这个失衡的 社会 的经济体制带来要比较实际得改变。

跟许多创业者一样,鲁宾提出的愿望也很有企图心,他不只想要创立一家了不起的公司,也想借机克服这个世界上难解的问题。这个公司的应用程序会对十多个其他领域的产业带来震撼力十足的效果,他们的计划包括分布式的三重记账会计体系,针对原本广受好评,但是后来却因为集中管控儿而遭受争议的reddit论坛推出分布式的新版本,自动执行的文件格式进行管理,系统现在叫智能合约,涵盖商务 体育 和 娱乐 领域的预测市场、公开竞标的能源市场、足以和苹果电脑分庭抗礼的一整套可以供大规模协作集体创造,实现无管理阶层公司之共同管理机制的商务工具。

以太坊Ethereum由V神(Vitalik Buterin)在2014年创办,它是一个区块链底层系统,类似于互联网的操作系统,基于它开发的DAPP(去中心化应用)类似于基于互联网操作系统开发的软件APP。

它的出现主要是弥补比特币的不足,比特币只能实现点对点的电子现金交易系统,但是区块链技术在其他场景的应用却无法实现。如果每用于一个场景,就搭建一个底层基础系统,再进行开发,太耗时间和精力,成本也很高。为此,以太坊就建了一个底层系统供开发者使用,开发者只需要在其基础上开发自己的DAPP应用就可以了。去年5月数据显示,全球就已有200多个以太坊应用。

此外,以太坊也是区块链比较优秀的公链之一。不过,它的交易速度太慢令众多开发者诟病,以太坊开发者正在不断尝试研发分片技术对此现象进行改变。

以太坊的本质是一个可编程可视化而且操作简单的区块链,允许任何人编写智能合约和发行代币(这也是为什么市面上各类空气币、传销币如此之多的一个原因之一)。和比特币一样,以太坊也是去中心化的,全网共同记录以太坊的所有情况,而且公开透明不可篡改。

那你想问,以太坊和比特币的不同之处在哪?通俗地讲,你可以把以太坊理解成为能够编程的区块链,它提供了一套图灵完备的脚本语言,后续的开发人员可以直接在这个基础上进行c语言等语言编程,之后转变成汇编语言,由此降低了区块链的应用的开发难度。就好像安卓系统上,准备好了api和接口,用户直接开发app就可以这样的逻辑。从以太坊诞生之初到现在,以太坊上已经诞生了几百个应用,俄罗斯政府甚至也与以太坊基金会合作。

希望我的回答能够帮助你!

在基础层面上,以太坊是基于区块链技术的软件平台。该平台允许构建和部署分散式应用程序。以太坊里的“以太”是什么?对Ethereum感兴趣的人们经常会问“以太是什么?”

了解以太是非常重要的,因为它是以太坊功能的基础。就像所有机器使用某种燃料一样,区块链也是如此。以太坊使用以太网,这是一种独特的代码,可用作支付运行应用程序或程序的方式。就像老虎机需要硬币(或者现在的预付卡)来运行硬币一样,客户必须使用乙醚作为付款才能在以太坊运行他们所要求的操作。

大家其他人的答案真的都是太麻烦了

讲得太复杂了

以太坊

简单来说就是这么一个结论:

以太坊等于 BTC+智能合约+合同自由+通缩资产+使用价值

这个结论其实不难理解的

官方定义更加诡诈:

开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币(Ether,又称“以太币”)提供去中心化的虚拟机

以太坊简单来说就是这么一个结论:

以太坊等于 BTC+智能合约+合同自由+通缩资产+使用价值

我给大家简单地来说说吧

首先先来看下面这个视频:也就是以太坊创始人V神的视频 特别好的解释

以太坊简单来说就是这么一个结论:

以太坊等于 BTC+智能合约+合同自由+通缩资产+使用价值

官方定义更加诡诈:

以太坊是一个可编程,可视化的区块链平台。其操作功能非常多,计算汇总各类数据等等。

以太坊是区块链技术的一个质的飞跃!就好比http是互联网底层支撑技术而以太坊就是可以基于以太坊智能合约做各种生态dapp

以太坊是什么?

以太坊是互联网新时代的基础:

内建货币与支付。

用户拥有个人数据主权,且不会被各类应用监听或窃取数据。

人人都有权使用开放金融系统。

基于中立且开源的基础架构,不受任何组织或个人控制。

以太坊的创建

以太坊主网于 2015 年上线,是世界领先的可编程区块链。

和其它区块链一样,以太坊也拥有原生加密货币,叫作 Ether (ETH)。 ETH 是一种数字货币, 和比特币有许多相同的功能。 它是一种纯数字货币,可以即时发送给世界上任何地方的任何人。 ETH 的供应不受任何政府或组织控制,它是去中心化且具稀缺性的。 全世界的人们都在使用 ETH 进行支付,或将其作为价值存储和抵押品。

但与其它区块链不同的是,以太坊可以做更多的工作。 以太坊是可编程的,开发者可以用它来构建不同于以往的应用程序。

以太坊的作用

这些去中心化的应用程序(或称“dapps”)基于加密货币与区块链技术, 因而值得信任,也就是说 dapps 一旦被“上传”到以太坊,它们将始终按照编好的程序运行。 这些应用程序可以控制数字资产,以便创造新的金融应用; 同时还是去中心化的,这意味着没有任何单一实体或个人可以控制它们。

目前,全世界有成千上万名开发者正在以太坊上构建应用程序、发明新的应用程序,其中有许多现在已经可以使用:

1.加密货币钱包:让你可以使用 ETH 或其他数字资产进行低成本的即时支付

2.金融应用程序:让你可以借贷、投资数字资产

3.去中心化市场:让你可以交易数字资产,甚至就现实世界事件的“预测”进行交易

4. 游戏 :你可以拥有 游戏 内的资产,甚至可以由此获得现实收益以及更多。

以太坊社区

以太坊社区是世界上最大最活跃的区块链社区。它包括核心协议开发者、加密经济研究员、密码朋克、挖矿组织、ETH 持有者、应用开发者、普通用户、无政府主义者、财富 500 强公司。

没有公司或中心化的组织能够控制以太坊。 一直以来,以太坊由多元化的全球性社区贡献者来协同进行维护和改善,社区成员耕耘于以太坊的方方面面,从核心协议到应用程序。

以太坊拥堵的元凶找到了,竟然是它!

什么是以太坊?

首先回答您什么是以太坊,以太坊是一种编程的语言也是一个平台,而投资/投机者们所关注的以太坊其实是以太币,也就是由以太坊衍生的一种数字代币——eth以太币(ethereum)

以太坊有没有投资前景,我们只需要看它的价值,从几十元到几百元的涨幅之大,且不说未来的泡沫与否,单说这个阶段升值的空间,还是值得大家关注的!

以太坊交易平台,目前我推荐btctrade平台(比特币交易网)国内比较靠谱的大的交易平台!2016年就上线了以太坊,币价涨势惊人!

以太坊(Ethereum)是将比特币中的一些技术和概念运用于计算领域的一项创新。比特币被认为是一个系统,该系统维护了一个安全地记录了所有比特币账单的共享的账簿。以太坊利用了很多跟比特币类似的机制(比如区块链技术和 P2P 网络),来维护一个共享的计算平台,这个平台可以灵活且安全地运行用户想要的任何程序(当然也包括类似比特币的区块链程序)。

以太坊技术系列-以太坊共识机制

区块链的特点之一是去中心化。也就是节点会分布在各个地方组成分布式系统。各个节点需要对1个问题达成一致,理想情况下,只需要同步状态即可。

如上图所示 B节点将a=1= a=2的状态同步给  ACDE四个节点,这时系统中状态变为a=2, 但如果其中有恶意节点 AE 收到通知后把a=1=a=3修改为错误的节点,这个时候大家的状态就不一致了,此时需要共识机制使系统中得到1个唯一正确的状态。

如上面说到分布式系统存在恶意节点导致系统中状态不一致的情况有1个比较著名的虚拟问题-拜占庭将军问题。

拜占庭将军问题是指,N个将军去攻打一座城堡,如果大于一定数量的将军同时进攻则可以攻打成功,如果小于则进攻失败。将军中可能存在叛徒。

这个时候有2种情况

1.如果2个叛徒都在BCDE中,那么共识算法需要让其余2个将军听从A的正确决策进攻城堡。

2.如果A是1个叛徒,共识算法需要让BCDE中剩余的3个忠诚将军保持一致。

这个问题有很多种解法,大家有兴趣可以自行查阅(推荐学习PBFT),我们重点来看看以太坊中目前正在使用的Nakamoto 共识和将要使用的 Casper Friendly Finality Gadget共识是如何解决拜占庭将军问题的。

说到Nakamoto共识和Casper Friendly Finality Gadget共识可能大家不太熟悉,但他们的部分组成应该都比较熟悉-POW(工作量证明)和POS(权益证明)。

POW或POS称之为Sybil抗性机制,为什么需要Sybil抗性机制呢,刚刚我们说到拜占庭将军问题,应该很容易看出恶意节点越多,达成正确共识的难度也就越大,Sybil攻击就是指1个攻击者可以伪装出大量节点来进行攻击,Sybil抗性是指抵御这种攻击能力。

POW通过让矿工或验证者投入算力,POS通过让验证者质押以太坊,如果攻击者要伪装多个节点攻击则必将投入大量的算力或资产,会导致攻击成本高于收益。在以太坊中保障的安全性是除非攻击者拿到整个系统51%算力或资产否则不可能进攻成功。

在解决完Sybil攻击后,通过选取系统中的最长链作为大家达成共识的链。

很多人平时为了简化将pow和pos认为是共识机制,这不够准确,但也说明了其重要作用,我们接下来分析pow和pos。

通过hash不可逆的特性,要求各个矿工不停地计算出某个值的hash符合某一特征,比如前多少位是000000,由于这个过程只能依赖不停的试错计算hash,所以是工作量证明。计算完成后其他节点验证的值符合hash特征非常容易验证。验证通过则成为成为合法区块(不一定是共识区块,需要在最长链中)。

以太坊中的挖矿算法用到2个数据集,1个小数据集cache,1个大数据集DAG。这2个数据集会随着区块链中区块增多慢慢变大,初始大小cache为16M DAG为1G。

我们先来看这2个数据集的生成过程

cache生成规则为有1个种子随机数seed,cache中第1个元素对seed取hash,后面数组中每个元素都是前1个元素取hash获得。

DAG生成规则为 找到cache中对应的元素后 根据元素中的值计算出下次要寻找的下标,循环256次后获得cache中最终需要的元素值进行hash计算得到DAG中元素的值。

然后我们再看看矿工如何进行挖矿以及轻节点如何验证

矿工挖矿的过程为,选择Nonce值映射到DAG中的1个item,通过item中的值计算出下次要找的下标,循环64次,得到最终item,将item中的值hash计算得到结果,结果和target比较,符合条件

则证明挖到区块,如果不符合则更换nonce继续挖矿。矿工在挖矿过程中需要将1G的DAG读取到内存中。

轻节点验证过程和矿工挖矿过程基本一致,

将块头里面的Nonce值映射到DAG中的1个item,然后通过cache数组计算出该item的值,通过item中的值计算出下次要找的下标,循环64次,得到最终item,将item中的值hash计算得到结果,结果和target比较,符合条件则验证通过。轻节点在验证过程中不需要将1G的DAG读取到内存中。每次用到DAG的item值都使用cache进行计算。

以太坊为什么需要这2个不同大小的数组进行辅助hash运算呢,直接进行hash运算会有什么问题?

如果只是进行重复计算会导致挖矿设备专业化,减少去中心化程度。因为我们日常使用的计算机内存和计算力是都需要的,如果挖矿只需要hash运算,挖矿设备则会设计地拥有超高算力,但对内存可以缩小到很小甚至没有。所以我们选用1G的大内存增加对内存访问的频率,增加挖矿设备对内存访问需求,从而更接近于我们日常使用的计算机。

我们看看在Nakamoto共识是如何解决拜占庭将军问题的。首先看看区块链中的拜占庭将军问题是什么?

区块链中需要达成一致的是哪条链为主链,虽然采用了最长链原则,但由于分叉问题,还是会带来拜占庭将军问题。

本来以太坊pow目标是抵抗51%以下的攻击,但如上图如果恶意节点沿着自己挖出的区块不断挖矿,由于主链上有分叉存在,恶意节点不需要达到51%算力就可以超过主链进而成为新的主链,为此以太坊使用了ghost协议给上图中的B1和C1也分配出块奖励,尽快合并到主链中,这样主链长度(按照合并后的总长度算,长度只是抽象概念,以太坊中按照区块权重累加)还是大于恶意节点自己挖矿的。

网络中的用户通过质押一定数量的以太坊成为验证者。每次系统从这些验证者从随机选择出区块创建者,其余验证者去验证创建出的区块是否合法。验证者会获得出块奖励,没有被选中的区块不进行验证则会被扣除一定质押币,如果进行错误验证则会被扣除全部质押币。

如上图,权益证明在每隔一定区块的地方设置一个检查点,对前面的区块进行验证,2/3验证者通过则验证通过,验证通过则该区块所在链成为最长合法链(不能被回滚)。

我们简化地只分析了权益证明本身,在以太坊中权益证明较为复杂的点在于和分片机制结合在一起时的运行流程,这部分会在后面单独将分片机制的一篇文章中详述。

本篇文章主要讨论了共识机制是解决分布式系统中的拜占庭将军问题,以及分析了以太坊中的共识机制一般包括最长链选择和一种sybil抗性机制(pow或pos)。重点分析了pow和pos的流程以及设计思想。后续将开始重点讨论智能合约的部分。

上述文章就是科灵网介绍的以太坊技术和以太坊技术升级的详细回答,希望能够帮助到大家;如果你还想了解更多财经资讯知识,记得收藏关注我们。

标签: 以太坊技术

抱歉,评论功能暂时关闭!

微信号已复制,请打开微信添加咨询详情!