区块链技术之以太坊ETH白皮书

链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。

在这里插入图片描述

基于中本聪区块链比特币1.0之后,天才少年Vitalik Buterin(V神)在2013年年末发布了以太坊白皮书,其实他以前在比特社区是一名活跃分子,更是文章的供稿者,对比特币的见解和不足独到而专业。区块链以太坊2.0是一个运行智能合约的去中心化平台,平台上的运用按照程序设定运行,不存在停机、审查、欺诈、第三方人为干预的可能,智能合约开发者可以使用官方提供的模块进行开发以太坊区块链协议的应用。今天给大家全文翻译以太坊白皮书,共大家参考研究,全文如下:

比特币及现有概念简介

历史

分散数字货币的概念,以及财产登记等替代应用,已经存在了几十年了。上世纪80年代和90年代的匿名电子现金协议,主要依赖于一种名为Chaumian盲的密码原语,提供了一种高度隐私的货币,但这些协议由于依赖于一个集中的中介,在很大程度上未能获得支持。1998年, Wei Dai的 b-money成为第一个提出通过解决计算难题和分散协商一致来创造资金的建议,但该提案对于如何实际执行分散协商一致意见的细节很少。2005年,哈尔·芬尼提出了一个概念可重复使用的工作证明一种系统,它使用来自b-money的想法和adam back的计算困难的哈希函数题来创建一个加密货币的概念,但是由于要依赖可信的计算作为后端,它又一次没有达到理想的目标。2009年,中本聪(Satoshi Nakamoto)首次在实践中实施了一种分散的货币,将通过公钥加密管理所有权的既定原语与追踪谁拥有硬币的协商一致算法(称为“工作证明”)结合起来。

工作证明背后的机制是空间上的一个突破,因为它同时解决了两个问题。首先,它提供了一个简单和适度有效的协商一致算法,允许网络中的节点共同商定一组比特币分类账状态的规范更新。第二,它提供了一种允许自由进入协商一致进程的机制,解决了决定由谁来影响协商一致的政治问题,同时也防止了Sybil的攻击。这样做的办法是用经济障碍取代正式的参与障碍,例如要求在特定名单上登记为唯一实体-一个节点在协商一致投票过程中的权重与该节点所带来的计算能力成正比。从那时起,人们提出了另一种方法,称为桩的证明,计算节点的权重与其货币持有量成正比,而不是计算资源;关于这两种方法的相对优点的讨论超出了本文的范围,但应当指出,这两种方法都可以用作加密货币的主要计算方法。

比特币作为一个STATE过渡系统

从技术角度看,比特币等加密货币的分类账可以看作是一个状态转换系统,其中存在一个“状态”,它由所有现有比特币的所有权状态和接受状态和事务的“状态转换函数”组成,并输出一个新的状态。例如,在标准银行系统中,状态是资产负债表,事务是将 X 从 A 转 移 到 B 的 请 求 , 状 态 转 换 函 数 将 A 的 帐 户 中 的 值 减 少 X从A转移到B的请求,状态转换函数将A的帐户中的值减少 XABAX并将B帐户中的值增加 X 。 如 果 A 的 帐 户 首 先 小 于 X。如果A的帐户首先小于 XAX,状态转换函数将返回一个错误。因此,我们可以正式界定:

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字节地址定义,该地址本质上是一个加密公钥)。事务包含一个或多个输入,每个输入包含对现有UTXO的引用和与所有者地址关联的私钥生成的加密签名,以及一个或多个输出,每个输出包含要添加到状态的新UTXO。

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

中的每一个输入TX:

如果引用的UTXO不在S,返回一个错误。

如果提供的签名与UTXO的所有者不匹配,则返回一个错误。

如果所有输入UTXO的面值之和小于所有输出UTXO的值和,则返回一个错误。

回归S’删除所有输入UTXO,并添加所有输出UTXO。

第一步的前半部分阻止交易发送者使用不存在的硬币,第一步的后半部分阻止交易发送者使用他人的硬币,第二步强制保护价值。为了用于支付,协议如下。假设爱丽丝想送11.7BTC给鲍勃。首先,Alice将寻找一组可用的UTXO,它拥有的UTXO总数至少可达11.7BTC。实际上,Alice不可能得到精确的11.7BTC;假设她能得到的最小值是6+4+2=12。然后她用这三个输入和两个输出创建一个事务。第一个输出为11.7BTC,其所有者为Bob的地址,第二个输出为剩余的0.3BTC“Change”,所有者为Alice本人。

采掘

如果我们能够访问可靠的集中式服务,那么这个系统的实现就很简单;它可以使用集中式服务器的硬盘驱动器来跟踪状态,只需按照描述的方式进行编码即可。然而,有了比特币,我们正试图建立一个分散的货币体系,因此我们需要将国家过渡制度与共识体系结合起来,以确保每个人都同意交易的顺序。比特币的分散协商一致过程要求网络中的节点不断尝试生成称为“块”的交易包。网络的目的是每十分钟产生大约一个块,每个块包含一个时间戳,一个现在,一个引用(即。)上一个块的散列和自上一个块以来发生的所有事务的列表。随着时间的推移,这创造了一个持续不断增长的“区块链”,它不断更新以代表比特币分类账的最新状态。

在此范例中,用于检查块是否有效的算法如下:

检查块引用的前一个块是否存在且是否有效。

检查块的时间戳是否大于前一个块的时间戳,检查块上的工作证明是否有效。

放任S[0]是前一个块末尾的状态。

假设TX是块的事务列表n交易。为所有人i在……里面…n-1,集S[i+1] = APPLY(S[i],TX[i])如果任何应用程序返回错误,退出并返回false。

返回true,并注册S[n]就像这个街区尽头的以个块。

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

上述清单中没有在其他系统中找到的一个有效条件是“工作证明”的要求。精确的条件是,每个块的双sha 256散列必须小于动态调整的目标,而在撰写本文时该目标约为2。187…这样做的目的是使块创建在计算上“很难”,从而防止Sybil攻击者重新构建有利于他们的整个区块链。由于SHA 256被设计为一个完全不可预测的伪随机函数,因此创建有效块的唯一方法是简单地尝试和错误,反复递增当前值,并查看新哈希是否匹配。

目前的目标是2187,网络必须使平均269在找到有效块之前尝试;一般来说,目标每2016块由网络重新校准,这样网络中的某个节点平均每十分钟就产生一个新的块。为了补偿矿工的这一计算工作,每个区块的矿工有权包括一笔交易,让自己从不知道的地方得到12.5 BTC。此外,如果任何交易的投入总额高于其产出,则差额也作为“交易费”交给矿商。顺便说一句,这也是BTC发行的唯一机制;创世状态根本不含硬币。

为了更好地理解挖掘的目的,让我们检查一下在发生恶意攻击者时会发生什么。由于比特币的底层密码系统众所周知是安全的,攻击者将攻击比特币系统中没有直接受到加密保护的一个部分:交易顺序。攻击者的策略很简单:

向商家发送100 btc以换取某种产品(最好是快速交付的数字商品)。

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值