主页 > imtoken官网下载2.0 > 区块链系列:以太坊是比特币,无限可能

区块链系列:以太坊是比特币,无限可能

imtoken官网下载2.0 2023-01-30 07:45:31

之前的系列文章提到了以太坊。那么以太坊发生了什么?现在小编将整个以太坊白皮书转发,让大家在我们的系列文章中对以太坊有更深入的了解

当中本聪在 2009 年 1 月推出比特币区块链时,他同时向世界介绍了两个未经测试的革命性新概念。第一个是比特币,一种去中心化的点对点在线货币,在没有任何资产担保、内在价值或中央发行人的情况下保持价值。到目前为止,比特币已经引起了很多公众的关注,从政治上讲,它是一种没有中央银行的货币,价格波动很大。然而,中本聪的伟大实验有一个与比特币同样重要的部分:基于工作量证明的区块链概念,它允许人们就交易顺序达成一致。比特币作为一个应用程序可以被描述为一个先提交系统:如果某人有 50 个 BTC 并将这 50 个 BTC 发送给 A 和 B,那么只有首先确认的交易才有效。没有固有的方法来决定两个交易中的哪一个先发生,这个问题多年来一直阻碍去中心化数字货币的发展。中本聪的区块链是第一个可靠的去中心化解决方案。开发者的注意力现在正迅速转向比特币技术的第二部分,即区块链如何用于货币以外的领域。

经常提到的应用包括使用链上数字资产来代表自定义货币和金融工具(彩色硬币)、一些底层物理设备的所有权(智能资产)、域名等不可替代资产(Namecoin)和更高级的应用,例如去中心化交易所、金融衍生品、点对点赌博以及链上身份和声誉系统。另一个经常被问到的重要领域是“智能合约”——根据预先任意设定的规则自动转移数字资产的系统。例如,一个人可能有一份存储合约,形式为“A每天最多可以取X币,B每天最多可以取Y币,A和B可以随意取款,A可以停止B的取款权”。此类合约的逻辑扩展是去中心化自治组织 (DAO) - 永久包含组织资产并对组织规则进行编码的智能合约。以太坊的目标是提供一个内置成熟图灵完备语言的区块链,其中可以创建合约来编码任意状态转换函数,用户只需几行代码即可实现逻辑。创建上面提到的所有系统以及我们尚未想象的许多其他系统。

目录

历史

比特币作为状态转换系统

挖矿

默克尔树

替代区块链应用

脚本

以太坊

以太坊账户

消息和交易

以太坊状态转换函数

代码执行

区块链和挖矿

以太坊区块能挖出多少个

申请

令牌系统

金融衍生品

身份和信誉系统

去中心化文件存储

去中心化自治组织

更多应用

杂项和疑虑

改进的 Ghost 协议的实现

费用

计算和图灵完备性

货币和发行

去中心化挖矿

可扩展性

概述:去中心化应用程序

以太坊区块能挖出多少个

结论

注释和高级阅读

----------------------------------- ------------- 分割线 ------------------------ ----------

历史

去中心化数字货币的概念,如财产登记等替代应用程序,是几十年前提出的。 1980 年代和 1990 年代的大多数匿名电子现金协议都基于 Chaumian 盲法。这些电子现金协议为货币提供了高度的隐私,但这些协议都没有流行起来,因为它们都依赖于一个中心化的中介。 1998 年,魏岱的 b-money 首次提出通过解决计算问题和去中心化共识来创造货币的想法,但提案并未给出如何实现去中心化共识的具体方法。 2005 年,Hal Finney 引入了“可重复使用的工作量证明”的概念,既使用了 b-money 的思想,又使用了 Adam Back 提出的计算困难的 Hashcash。 ) 拼图创建加密货币。然而,这个概念再次迷失在理想化中,因为它依赖于可信计算作为后端。

因为货币是先申请的应用,所以交易的顺序至关重要,所以去中心化的货币需要想办法实现去中心化的共识。比特币之前的所有电子货币协议遇到的主要障碍是,尽管对如何创建安全的拜占庭容错多方共识系统进行了多年的研究,但上述协议只能解决一半的问题。这些协议假设系统的所有参与者都是已知的,并产生“如果 N 方参与系统,系统可以容忍 N/4 恶意参与者”形式的安全边界。然而,这种假设的问题在于,在匿名的情况下,系统设置的安全边界容易受到女巫攻击,因为攻击者可以在单个服务器或僵尸网络上创建数千个节点,从而单方面确保多数分享。

中本聪的创新在于引入了将非常简单的基于节点的去中心化共识协议与工作量证明机制相结合的想法。节点通过工作量证明机制获得参与系统的权利,每十分钟将交易打包成“块”,从而创建一个不断增长的区块链。算力大的节点影响力更大,但获得比全网更多的算力比创建一百万个节点要困难得多。虽然比特币区块链模型非常初级,但在实践中已经证明它已经足够好了。在未来五年内,它将成为全球 200 多种货币和协议的基石。

比特币作为状态转换系统

从技术上讲,比特币账本可以被认为是一个状态转换系统,包括所有现有的比特币所有权状态和“状态转换功能”。状态转换函数将当前状态和交易作为输入并输出一个新状态。例如,在标准的银行系统中,状态是资产负债表,将 $X 从账户 A 转移到账户 B 的请求是一笔交易,状态转换函数将从账户 A 中减去 $X,并在账户 B 中添加 X 美元如果账户 A 的余额小于 X 美元,状态转换函数会返回错误信息。所以我们可以定义状态转换函数如下:

APPLY(S,TX) > S' 或错误

在上述银行系统中,状态转换函数如下:

APPLY({ Alice: $50, Bob: $50 },"从 Alice 给 Bob 发送 $20") = { Alice: $30,Bob: $70 }

但是:

APPLY({ Alice: $50, Bob: $50 },"从 Alice 给 Bob 发送 $70") = ERROR

比特币系统的“状态”是所有已开采的未使用比特币的集合(技术上称为“未使用的交易输出,或 UTXO”)。每个 UTXO 都有一个面值和所有者(由本质上是加密公钥 [1] 的 20 字节地址定义)。一笔交易由一个或多个输入和一个或多个输出组成。每个输入都包含对现有 UTXO 的引用和由与所有者地址对应的私钥创建的加密签名。每个输出都包含一个添加到状态的新 UTXO。

以太坊区块能挖出多少个

在比特币系统中,状态转移函数APPLY(S,TX)->S'可以大致定义如下:

1. 交易的每个输入:

* 如果引用的UTXO在当前状态(S)中不存在,则返回错误信息

* 如果签名与UTXO所有者的签名不一致,返回错误信息

2.如果所有UTXO输入面额之和小于所有UTXO输出面额之和,返回错误信息

3. 返回一个新状态 S',其中所有输入 UTXO 被移除,所有输出 UTXO 被添加。

第一步的第一部分阻止交易的发送者花费不存在的比特币,第二部分阻止交易的发送者花费别人的比特币。第二步确保价值守恒。比特币支付协议如下。假设 Alice 想要发送 11.7BTC 给 Bob。事实上,Alice 不可能正好有 11.7BTC。假设,她能得到的比特币的最小数量是:6+4+2=12。因此,她可以创建一个具有 3 个输入和 2 个输出的交易。第一次输出的面值为11.7BTC,所有者为Bob(Bob的比特币地址),第二次输出的面值为0.3BTC,所有者为Alice本人,即,寻找零。

挖矿

如果我们有一个可信赖的中心化服务机构,状态转换系统就可以轻松实现,上述功能也可以轻松准确编码。但是,我们想要将比特币系统构建为一个去中心化的货币系统,并且为了保证每个人都对交易顺序达成一致,我们需要将状态转换系统与共识系统结合起来。比特币的去中心化共识过程需要网络中的节点不断尝试将交易打包成“块”。该网络被设计为大约每十分钟产生一个块,每个块包含一个时间戳、一个随机数、对前一个块的引用(即哈希)以及自前一个块生成以来发生的所有交易列表。这会随着时间的推移创建一个不断增长的区块链,并不断更新以代表比特币账本的最新状态。

根据这个范式,判断一个区块是否有效的算法如下:

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

2. 检查区块的时间戳是否晚于前一个区块的时间戳且早于未来的 2 小时[2]。

3. 检查区块的工作量证明是否有效。

4. 将前一个块的最终状态赋值给 S[0]。

5. 假设 TX 是区块的交易列表,包含 n 笔交易。对于所有属于 0...n-1 的 i,执行状态转换 S[i+1] = APPLY(S[i], TX[i])。如果任何事务 i 在状态转换中失败,则退出程序并报错。

以太坊区块能挖出多少个

6. 返回正确,状态 S[n] 是这个块的最终状态。

基本上,块中的每个事务都必须提供正确的状态转换,重要的是要注意“状态”没有编码到块中。它纯粹是一个被检查节点记住的抽象概念。对于任何一个区块,从创世状态开始,依次添加每个区块的每个交易,就可以(正确)计算出当前状态。此外,请注意矿工将交易包含在区块中的顺序。如果一个区块中有两个交易A和B,B花费A创建的UTXO。如果A在B之前,则该区块有效,否则,该区块无效。

区块验证算法有趣的部分是“工作量证明”概念:每个区块都用 SHA256 进行哈希处理,得到的哈希值被视为一个 256 位的值,该值必须小于不断动态调整的目标值的,在写这本书的时候大约是 2^190。工作量证明的目的是使区块的创建变得困难,从而防止女巫攻击者恶意地重新生成区块链。因为 SHA256 是一个完全不可预测的伪随机函数,所以创建有效区块的唯一方法就是简单地反复试验,增加 nonce 的值以查看新的哈希值是否小于目标值。如果当前目标值为 2^192,则意味着平均需要 2^64 次尝试才能生成有效块。一般来说,比特币网络每 2016 个区块重置一次目标值,保证平均每十分钟产生一个区块。为了奖励矿工的计算工作,每个成功生成区块的矿工都有权在区块中包含一笔交易,凭空向他们发送 25 BTC。此外,如果交易的输入大于输出,则差额作为“交易费”支付给矿工。顺便说一句,矿工的奖励是比特币发行的唯一机制,创世状态没有比特币。

为了更好地理解挖矿的目的,我们来分析一下当恶意攻击者出现在比特币网络上时会发生什么。因为比特币的密码基础非常安全,攻击者会选择攻击一些不受密码学直接保护的东西:交易顺序。攻击者的策略很简单:

1. 发送100BTC给卖家购买物品(尤其是不需要邮寄的电子物品)。

2. 等到物品发货。

3. 创建另一个交易以将相同的 100BTC 发送到您自己的帐户。

4. 让比特币网络相信发送到自己账户的交易是最先发送的。

一旦步骤(1)发生,矿工会在几分钟内把这个交易打包成一个区块,比如说270,000个区块。大约一个小时后,这个区块后面会有五个区块,每个区块间接指向到交易,从而确认交易。此时,卖家收到货款并发货给买家。由于我们假设这是一个数字物品,攻击者可以立即收到货物。现在,攻击者创建另一个交易将同样的 100BTC 发送到自己的账户,如果攻击者只是将这个消息广播到全网,这个交易不会被处理,矿工会运行状态转换函数 APPLY(S ,TX),发现这个交易会花费不再处于状态的UTXO。因此,攻击者将区块链分叉,并以第269999个区块为父区块重新生成第270000个区块,这里将旧交易替换为区块中的新交易。因为区块k 数据不同,这需要新的工作量证明。另外,由于攻击者新生成的第 270,000 个区块的哈希值不同,原来的 270001 到 270005 的区块并没有指向它,所以原区块链和攻击者的新区块是完全分开的。当发生区块链分叉时,区块链的长分支被认为是诚实的,合法矿工将在原来的第 270005 个区块之后进行挖矿,只有攻击者在新的第 270000 个区块之后进行挖矿。攻击者为了让他的区块链最长,他需要拥有超过除他之外的整个网络的计算能力才能赶上(即51%攻击)。

默克尔树

图 1:仅在 Merkle 树上提供几个节点就足以提供分支的合法证明。

图 2:对 Merkle 树的任何部分进行更改的任何尝试最终都会导致链上某处出现不一致。

比特币系统的一个重要的可扩展特性是其块存储在多级数据结构中。一个区块的哈希其实就是区块头的哈希,它是包含时间戳、随机数、最后一个区块哈希的默克尔树的根哈希的长度,以及存储所有区块交易的默克尔树的长度。一段大约200字节的数据。

Merkle 树是由一组叶节点、一组中间节点和一个根节点组成的二叉树。最底部的一组叶子节点包含基本数据,每个中间节点是它的两个孩子的哈希,根节点也是它的两个孩子的哈希,代表默克尔树的顶部。 Merkle 树的目的是允许块数据零碎传输:节点可以从一个源下载块头,从另一个源下载与它们相关的树的其余部分,并且仍然能够确认所有数据是正确的。这样做的原因是因为哈希向上传播:如果恶意用户试图在树的下层添加虚假交易,由此产生的变化将导致树的上层节点发生变化,以及上层节点的变化,并最终到达根节点。更改和块哈希,以便协议将其记录为完全不同的块(几乎可以肯定是使用不正确的工作量证明)。

默克尔树协议可以说对比特币的长期可持续性至关重要。 2014 年 4 月,比特币网络上的一个完整节点——存储和处理所有区块的全部数据的节点——占用了 15GB 的内存,并且以每月超过 1GB 的速度增长。目前这个存储空间对于台式电脑来说是可以接受的,但是手机已经无法承载如此庞大的数据量了。未来,只有商业机构和爱好者作为全节点。简化支付验证(SPV)协议允许存在另一种类型的节点,这样的节点称为“轻节点”,它下载块头,使用块头确认工作量证明,然后只下载“分支” Merkle 树的“与其交易相关”。这允许轻节点通过仅下载整个区块链的一小部分来安全地确定任何比特币交易的状态和账户的当前余额。

以太坊区块能挖出多少个

其他区块链应用

将区块链的思想应用到其他领域的想法由来已久。 2005 年,Nick Szabo 提出了“以所有权计时财产”的概念,该概念描述了复制数据库技术的发展如何使基于区块链的系统能够应用于登记土地所有权,创建包括例如财产权、非法挪用以及格鲁吉亚土地税等概念的详细框架。但遗憾的是,当时还没有实用的复制数据库系统,所以这个协议没有付诸实践。然而,自2009年比特币系统去中心化共识开发成功后,区块链的许多其他应用开始迅速涌现。

1.namecoin - 创建于 2010 年,被称为去中心化名称注册数据库。 Tor、比特币和 BitMessage 等去中心化协议需要某种方式来确认帐户,以便其他人可以与用户交互。但是,所有现有解决方案中唯一可用的身份是伪随机哈希,例如 1LW79wp5ZBqaHW1jL5TciBCrhQYtHagUWy。理想情况下,您希望拥有一个名称为“george”的帐户。然而,问题在于,如果有人可以创建一个“乔治”帐户,那么其他人也可以创建一个“乔治”帐户来冒充。唯一的解决办法就是先申请原则,只有第一个注册人可以成功注册,第二个不能再次注册同一个账号。这个问题可以利用比特币的共识协议。 Namecoin 是最早和最成功的使用区块链实现名称注册系统的系统。

2.彩币——彩币的目的是让人们在比特币区块链上创造属于自己的数字货币,或者更重要的是,为一般的货币——数字代币提供服务。根据彩色硬币协议,人们可以通过为特定的比特币 UTXO 分配颜色来发行新硬币。该协议递归地将其他 UTXO 定义为与交易输入 UTXO 相同的颜色。这允许用户保留仅包含某种颜色的 UTXO,并像发送普通比特币一样发送这些 UTXO,通过回溯整个区块链来确定收到的 UTXO 的颜色。

3.Metacoins - Metacoins 的想法是在比特币区块链上创建一个新协议,使用比特币交易来保存 Metacoins 交易,但使用不同的状态转换函数 APPLY'。由于元币协议无法阻止比特币区块链上的无效元币交易,因此添加了一条规则,如果 APPLY'(S,TX) 返回错误,则默认 APPLY'(S,TX) = S。这为创建无法在比特币系统中实现的任意高级加密货币协议提供了一种简单的解决方案,并且开发成本非常低,因为比特币协议已经处理了挖矿和网络问题。

所以,一般来说,构建共识协议有两种方式:构建独立网络和在比特币网络上构建协议。虽然像 Namecoin 这样的应用程序使用第一种方法取得了成功,但这种方法的实施非常困难,因为每个应用程序都需要创建单独的区块链并构建和测试所有状态转换和网络代码。此外,我们预测去中心化共识技术的应用将服从幂律分布,而且大多数应用规模太小,无法保证自由区块链的安全性。我们还注意到,大量的去中心化应用,尤其是去中心化自治组织,需要应用之间进行交互。

另一方面,基于比特币的方法的缺点是它没有继承比特币的简化确认支付 (SPV) 属性。比特币可以简化支付确认,因为比特币可以使用区块链深度作为有效性确认的代理。在某些时候,一旦交易的祖先离现在足够远,它们就可以被认为是合法状态的一部分。相比之下以太坊区块能挖出多少个,基于比特币区块链的元币协议不能强制区块链排除不符合元币协议的交易。因此,安全元币协议的简化支付确认需要向后扫描所有区块,直至区块链的初始点,以确认交易是否有效。目前,基于比特币的元币协议的所有“轻量级”实现都依赖受信任的服务器来提供数据,这对于主要目的是消除信任需求的加密货币来说是一个相当不理想的结果。

脚本

即使没有扩展比特币协议,它也能在一定程度上实现“智能合约”。比特币的 UTXO 不仅可以由公钥拥有,还可以由用基于堆栈的编程语言编写的更复杂的脚本拥有。在这种模式下,要花费这样的 UTXO,必须提供满足脚本的数据。事实上,基本的公钥所有权机制也是通过脚本实现的:脚本以椭圆曲线签名为输入,验证交易和拥有这个UTXO的地址,验证成功返回1,否则返回0。更复杂的脚本用于其他不同的应用情况。例如,可以创建脚本(多重签名),需要收集三个私钥中的两个来进行交易确认,这对于公司账户、储蓄账户和一些商业代理非常有用。脚本还可用于向用户发送奖励以解决计算问题。甚至可以创建脚本,例如“如果您可以向我提供简化的付款确认,即您向我发送了一定数量的狗狗币,这个比特币 UTXO 就是您的”,本质上比特币系统允许不同的密码学习货币以进行去中心化交易。

但是,比特币系统的脚本语言有一些严重的局限性:

1.缺乏图灵完备性——也就是说,虽然比特币脚本语言可以支持多种计算,但它不能支持所有的计算。主要缺失的部分是循环语句。不支持循环语句的目的是避免在确认交易时出现无限循环。从理论上讲,这对脚本程序员来说是一个可以克服的障碍,因为任何循环都可以通过多次重复 if 语句来模拟,但这样做会导致脚本空间利用效率低下,例如实现另一种椭圆曲线签名算法可能需要 256 次重复乘法,每次都需要单独编码。

2.价值盲区。 UTXO 脚本不提供对账户提款金额的细粒度控制。例如,预言机合约的一个强大应用是对冲合约。 A 和 B 各自向对冲合约发送价值 1,000 美元的比特币。 30 天后,脚本向 A 发送价值 1,000 美元的比特币以太坊区块能挖出多少个,向 B 发送价值 1,000 美元的比特币。发送剩余的比特币。虽然实施对冲合约需要预言机来确定比特币价值多少美元,但与当今完全集中的解决方案相比,这种机制在减少信任和基础设施方面向前迈出了一大步。但是,因为 UTXO 是不可分割的,所以实现这个合约的唯一方法是非常低效地取许多不同面额的 UTXO(例如,对于每 k 到 30 个,有一个 2^k 的 UTXO)并让预言机挑选出正确的 UTXO发送给 A 和 B。

3.缺少状态——UTXO 只能处于已使用或未使用状态,这为需要任何其他内部状态的多阶段合约或脚本留下了空间。这使得实施多阶段期权合约、去中心化交易报价或两阶段加密承诺协议(确保计算奖励所必需)变得非常困难。这也意味着 UTXO 只能用于构建简单的一次性合约,而不是去中心化组织等状态更复杂的合约,使得元协议难以实现。二进制状态与价值盲区相结合,意味着另一个重要的应用——提款限额——是不可能实现的。

4.Blockchain-blindness - UTXO 无法看到区块链数据,例如之前区块的随机数和哈希值。这一缺陷剥夺了脚本语言基于随机性的潜在价值,严重限制了在游戏等其他领域的应用。

我们研究了三种在加密货币上构建高级应用程序的方法:构建新区块链、在比特币区块链上使用脚本以及在比特币区块链上构建 Metacoin 协议。构建新区块链的方法可以自由地实现任意功能,但代价是开发时间和培育工作。使用脚本的方法很容易实现和标准化,但它的功能是有限的。 Metacoin 协议虽然很容易实现,但也有可扩展性差的缺点。在以太坊系统中,我们的目标是构建一个能够同时具备所有三种模式所有优点的通用框架。

限于篇幅,我们将在第二部分继续讲解以太坊白皮书