以太坊白皮书

官方网址

这篇介绍性论文最初由以太坊创始人Vitalik Buterin于2013年发表,该项目于2015年启动。值得注意的是,以太坊和许多社区驱动的开源软件项目一样,从最初的开始就不断发展。

虽然已有数年之久,但我们之所以继续维护该文件,是因为它继续充当有用的参考和对以太坊及其愿景的准确表示。要了解以太坊的最新发展以及如何对协议进行更改,我们建议您使用本指南。

下一代智能合约和去中心化应用平台

中本聪(Satoshi Nakamoto)在2009年开发的比特币经常被誉为货币和货币的激进发展,是数字资产的第一个示例,它同时没有支持或内在价值 ,也没有集中的发行者或控制者。但是,比特币实验的另一个(可能更重要的)一部分是作为分布式共识工具的底层区块链技术,人们的注意力正在迅速转移到比特币的另一个方面。常见的区块链技术替代应用包括使用区块链上的数字资产代表自定义货币和金融工具(彩色硬币),底层物理设备的所有权(智能财产)。),不可替代的资产(例如域名(Namecoin))以及更复杂的应用程序,涉及通过实施任意规则的代码直接控制数字资产(智能合约),甚至是基于区块链的分散式自治组织 (DAO) 。以太坊打算提供的是一种带有内置完整成熟的图灵完备编程语言的区块链,可用于创建“合同”,该合同可用于编码任意状态转换函数,从而允许用户创建上述任何系统,以及我们尚未想到的许多其他功能,只需通过几行代码编写逻辑即可。

比特币和现有概念简介

历史

分散式数字货币的概念以及财产登记等替代应用已经存在了数十年。1980年代和1990年代的匿名电子现金协议主要依赖于一种称为Chaumian盲法的加密原语,为货币提供了高度的隐私性,但是由于依赖于中央中介机构,这些协议在很大程度上未能获得关注。1998年,戴巍的 b-money成为第一个提出通过解决计算难题以及去中心化共识来创造金钱的想法的建议,但是该建议在如何实际实施去中心化共识方面没有任何细节。2005年,Hal Finney提出了可重复使用的工作证明概念,该系统将来自b-money的想法与Adam Back的计算困难的Hashcash难题一起使用,以创建一种加密货币的概念,但由于依靠可信计算作为后端,这又一次超出了理想。2009年,中本聪首次在实践中实施了一种去中心化的货币,将通过公钥密码管理所有权的既定原语与用于跟踪谁拥有硬币的共识算法(称为“工作证明”)相结合。

工作量证明背后的机制是该领域的一项突破,因为它同时解决了两个问题。首先,它提供了一种简单而适度有效的共识算法,允许网络中的节点共同商定一组关于比特币分类账状态的规范更新。其次,它提供了一种机制,允许自由进入共识过程,解决了决定谁可以影响共识的政治问题,同时防止了sybil攻击。它通过替换正式的参与障碍来做到这一点,例如要求将其注册为特定列表上的唯一实体,并且具有经济障碍-共识投票过程中单个节点的权重与计算能力成正比节点带来的。自那时候起,权益证明,将节点的权重计算为与其货币持有量成正比,而不与计算资源成正比;关于这两种方法的相对优点的讨论超出了本文的范围,但是应该注意,这两种方法都可以用作加密货币的骨干。

这是以太坊创始人Vitalik Buterin撰写的有关以太坊史前史的博客文章 。 这 是具有更多历史的另一篇博客文章。

比特币作为国家过渡系统

在这里插入图片描述
从技术角度来看,可以将诸如比特币之类的加密货币的分类帐视为状态转换系统,其中存在一个“状态”,该状态由所有现有比特币的所有权状态组成,而一个“状态转换函数”则采用一个状态并进行交易,并输出结果的新状态。例如,在标准银行系统中,状态是资产负债表,交易是将$ X从A转移到B的请求,并且状态转换函数将A的帐户中的值减少$ X,并将B中的值增加$ X的帐户。如果A的帐户最初的余额少于$ X,则状态转换函数将返回错误。因此,可以正式定义:

APPLY(S,TX) -> S' or ERROR

在上面定义的银行系统中:

APPLY({ Alice: $50, Bob: $50 },"send $20 from Alice to Bob") = { Alice: $30, Bob: $70 }

但:

APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR

比特币中的“状态”是指所有已开采但尚未花费的硬币(从技术上来说,是“未花费的交易输出”或UTXO)的集合,每个UTXO都有一个面额和一个所有者(由20个字节的地址定义,本质上是一个加密的公共密钥fn。1)。事务包含一个或多个输入,每个输入包含对现有UTXO的引用和由与所有者地址相关联的私钥产生的加密签名,以及一个或多个输出,每个输出包含要添加到的新UTXO。状态。

状态转换函数APPLY(S,TX) -> S’可以大致定义如下:

  1. 对于中的每个输入TX:
  • 如果引用的UTXO不在中S,则返回错误。
  • 如果提供的签名与UTXO的所有者不匹配,则返回错误。
  1. 如果所有输入UTXO的面额之和小于所有输出UTXO的面额之和,则返回错误。
  2. 返回S’所有输入UTXO删除,并添加所有输出UTXO。

第一步的前半部分防止交易发送者花费不存在的硬币,第一步的后半部分防止交易发送者花费其他人的硬币,而第二步则强制保护价值。为了将其用于支付,协议如下。假设爱丽丝想向鲍勃发送11.7 BTC。首先,Alice将寻找一组她拥有的可用UTXO,这些UTXO总计至少为11.7 BTC。实际上,爱丽丝将无法获得准确的11.7 BTC。说她能得到的最小数是6 + 4 + 2 = 12。然后,她使用这三个输入和两个输出创建一个事务。第一个输出将是11.7 BTC,以Bob的地址作为其所有者,第二个输出将是剩余的0.3 BTC“更改”,所有者是Alice自己。

矿业

在这里插入图片描述
如果我们可以访问值得信赖的集中式服务,那么该系统的实施将非常简单;只需使用集中式服务器的硬盘驱动器来跟踪状态,就可以完全按照描述的方式对其进行编码。但是,对于比特币,我们正在尝试构建去中心化的货币系统,因此我们需要将状态转换系统与共识系统结合起来,以确保每个人都同意交易顺序。比特币的去中心化共识过程要求网络中的节点不断尝试产生称为“区块”的交易包。该网络旨在每十分钟产生大约一个块,每个块包含一个时间戳,一个随机数,一个引用(即 上一个区块的哈希值,以及自上一个区块以来发生的所有交易的列表。随着时间的流逝,这将创建一个持续不断增长的“区块链”,该区块链会不断更新以代表比特币分类账的最新状态。

此范例中表示的检查块是否有效的算法如下:

  1. 检查该块引用的前一个块是否存在并且有效。
  2. 检查该块的时间戳是否大于前一个块的时间戳。2 和小于2小时到未来
  3. 检查块上的工作证明是否有效。
  4. 令其S[0]为上一个块末尾的状态。
  5. 假设TX是带有n交易的区块交易列表。对于iin中的所有0…n-1,请设置S[i+1] = APPLY(S[i],TX[i])如果有任何应用程序返回错误,请退出并返回false。
  6. 返回true,并S[n]在此块末尾注册为状态。

从本质上讲,该块中的每个事务必须提供一个有效的状态转换,该状态从执行该事务之前的规范状态到某个新状态。请注意,状态不会以任何方式编码在块中。它纯粹是验证节点要记住的一种抽象,只能通过从创始状态开始并按顺序在每个块中应用每个事务,才能(安全地)为任何块计算该抽象。此外,请注意,矿工将交易包含在区块中的顺序很重要;如果一个区块中有两个事务A和B,使得B花费了A创建的UTXO,那么如果A在B之前,则该区块有效。

上面列表中存在的一个有效条件是在其他系统中找不到的,是对“工作量证明”的要求。精确的条件是,每个块的double SHA256哈希(视为256位数字)必须小于动态调整的目标,在撰写本文时,该目标约为2 187。这样做的目的是使计算块的创建变得“困难”,从而防止sybil攻击者以他们的喜好来重新构建整个区块链。因为SHA256被设计为完全不可预测的伪随机函数,所以创建有效块的唯一方法是反复试验,反复增加随机数并查看新哈希是否匹配。

在当前目标〜2 187,网络必须使平均的〜2 69次的有效块被发现之前的尝试; 通常,网络每隔2016个块对目标进行一次重新校准,以便平均而言,网络中的某个节点每隔十分钟会产生一个新块。为了补偿矿工的计算工作量,每个区块的矿工都有权包括一笔无偿提供12.5 BTC的交易。另外,如果任何交易的输入总面额大于输出的总面额,则差额也作为“交易费”分配给矿工。顺便说一句,这也是发布BTC的唯一机制。起源状态根本不包含任何硬币。

为了更好地了解挖掘的目的,让我们检查一下恶意攻击者发生的情况。由于已知比特币的基础加密是安全的,因此攻击者将针对比特币系统不受加密直接保护的部分:交易顺序。攻击者的策略很简单:

  1. 向商家发送100 BTC,以换取某些产品(最好是快速交付的数字商品)
  2. 等待产品交付
  3. 产生另一笔交易,向自己发送相同的100 BTC
  4. 尝试说服网络,他对自己的交易是第一笔交易。

一旦执行了步骤(1),几分钟后,一些矿工将交易包含在一个区块中,例如区块编号270。大约一小时后,该区块之后的链中将再添加五个区块,每个区块这些块间接指向交易并因此“确认”交易。此时,商家将接受最终确定的付款并交付产品;由于我们假设这是一种数字商品,因此交付是即时的。现在,攻击者创建了另一个向自己发送100 BTC的交易。如果攻击者只是简单地将其释放到野外,则不会处理该交易;矿工将试图逃跑,APPLY(S,TX)并注意到TX消耗不再处于状态的UTXO。因此,取而代之的是,攻击者创建了区块链的“叉子”,首先是挖掘块270的另一个版本,该版本指向与父代相同的块269,但用新的交易代替了旧的交易。由于块数据不同,因此需要重做工作量证明。此外,攻击者的块270的新版本具有不同的哈希,因此原始块271到275不会“指向”它;因此,原始块271到275不会“指向”它。因此,原始链和攻击者的新链是完全分开的。规则是,用叉子最长的区块链才是事实,因此合法的矿工将在275链上工作,而仅攻击者在270链上工作。为了使攻击者能够使自己的区块链最长,

默克尔树

在这里插入图片描述
左:仅在Merkle树中显示少量节点即可证明分支的有效性。
正确:尝试更改Merkle树的任何部分最终都会导致链上某些地方出现不一致。

比特币的一个重要的可伸缩性功能是,该块存储在多层数据结构中。块的“哈希”实际上只是块头的哈希,大约200字节的数据,其中包含时间戳,随机数,前一个块哈希以及称为Merkle树的数据结构的根哈希,该数据结构存储了所有事务在块中。默克尔树(Merkle tree)是一种二叉树,它由一组节点组成,在树的底部包含大量底层节点,这些底层节点包含基础数据,还有一组中间节点,其中每个节点是其两个子节点的哈希,最后是一个根节点,该根节点也由其两个子节点的哈希组成,代表树的“顶部”。Merkle树的目的是允许块中的数据零散地传递:一个节点只能从一个源下载块的标头,从另一源下载与它们相关的树的一小部分,并且仍然可以确保所有数据都是正确的。之所以起作用,是因为哈希向上传播:如果恶意用户试图将假交易交换到Merkle树的底部,则此更改将导致上方的节点发生更改,然后导致上方的节点发生更改。 ,最后更改树的根,进而更改该块的哈希,从而使协议将其注册为完全不同的块(几乎可以肯定带有无效的工作证明)。

默克尔树协议可以说对于长期可持续性至关重要。比特币网络中的一个“完整节点”,用于存储和处理每个块的全部,截至2014年4月在比特币网络中占据约15 GB的磁盘空间,并且每月增长超过1 GB。当前,这对于某些台式机而不是电话是可行的,并且在以后的将来,只有企业和业余爱好者才能参加。称为“简化付款验证”(SPV)的协议允许存在另一类节点,称为“轻型节点”,这些节点下载块头,验证块头上的工作量证明,然后仅下载“分支”与与之相关的交易相关联。

替代区块链应用

-

-

待续---->

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中国区块链技术和产业发展论坛 编写的 中国区块链技术和应用发展白皮书,其主要内容包括: 一、国内外区块链发展现状的研究分析。首先研究了区块链技术和应 用发展的演进路径,提出了区块链的发展生态结构,盘点了7类典型参与 者:开源社区、产业联盟、骨干企业、初创公司、投资机构、金融机构和 监管机构的区块链实践进程。梳理了英国、美国、俄罗斯等国家的相关机 构对区块链的态度,分析了区块链与云计算、大数据、物联网、下一代网 络、加密技术和人工智能等6大类新一代信息技术的关系。 二、区块链典型应用场景及典型应用分析。通过分析全球200多个应 用案例,提出了区块链的典型应用场景。列举了6个应用相对成熟、应用 前景广阔或具有潜在应用价值的应用场景,并对区块链的应用价值进行了 展望。 三、提出我国区块链技术发展路线图的建议。分析提出了由7个主 要技术特征构成的区块链通用技术需求,结合国内外发展现状和应用场 景,提出典型的区块链技术架构,并分析了共识机制、数据存储、网络 协议、加密算法、隐私保护和智能合约等6类核心关键技术,以及区块链 治理和安全。最后,结合国内外发展趋势,提出了我国区块链技术发展 路线图建议。 四、首次提出我国区块链标准化路线图。结合区块链应用场景和技术 架构,提出了区块链标准体系框架建议。通过分析国际标准化发展趋势, 以及区块链技术和应用发展需求,提出了基础、业务和应用、过程和方 6 法、可信和互操作、信息安全等5类标准,并初步明确了21个标准化重点 方向和未来一段时间内的标准化实施方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值