02 BlockChain-- ETH
以太坊与比特币有什么不同?
以太坊立足比特币创新之上,于 2015 年启动,两者之间有一些显著不同。
从宏观的方面:
- 比特币就仅仅是比特币;以太坊(Ethereum)包括以太币(Ether),以太币才是和比特币对等的存在。
- 比特币使我们能够互通基本信息;以太坊则更进一步,不仅可以互通信息,用户还能编写任何常规程序或合约。可以创建和达成共识的合约种类没有限制。
- 比特币只是一个支付网络,而以太坊更像是一个金融服务、游戏、社交网络和其他应用程序的市场。
从细节方面:
- ETH 中存在账户这个概念;相区别,BTC只有 UTXO。
- ETH 没有发行数量限制,但每次交易过程中,都会有一定数量的 ETH 被燃烧,这就是 Base Gas Fee 基础燃料费。特别是网络需求量高时,燃烧的以太币数量可以多于铸造的以太币数量,有效地抵消了以太币的发行。
ETH Account 账户
一个以太坊帐户是一个具有以太币 (ETH) 余额的实体,可以在以太坊上发送交易。
帐户可以由用户控制,也可以作为智能合约部署。
账户类型
以太坊有两种帐户类型:
- Externally-owned account (EOA) 外部所有的帐户 – 由任何拥有私钥的人控制
- 创建帐户是免费的
- 可以发起交易
- 外部所有的帐户之间只能进行以太币和代币交易
- 由一对加密密钥组成:控制帐户活动的公钥和私钥
- Contract account 合约帐户 – 部署到网络上的智能合约,由代码控制。
- 创建合约存在成本,因为需要使用网络存储空间
- 只能在收到交易时,作为回应,发送交易
- 从外部帐户向合约帐户发起的交易能触发可执行多种操作的代码,例如转移代币甚至创建新合约
- 合约帐户没有私钥。 相反,它们由智能合约代码逻辑控制
以太坊的账户模型
以太坊使用 账户模型(Account Model),在此模型中,所有的账户都存储在一个全局状态数据库中,称为 世界状态(World State)
。
以太坊使用一种被称为 Merkle Patricia trie (MPT) 默克尔压缩前缀树的数据结构来存储世界状态和账户存储状态。
这种树形结构结合了前缀树(Patricia Trie)和哈希树(Merkle Tree)的优点,
以太坊有两棵重要的树:
- 世界状态树:
- 每个账户的状态都存储在 Trie 中,账户地址作为键,账户状态作为值。
- 这个状态树的根节点的哈希值称为 stateRoot,并存储在每个区块的区块头中。当交易执行导致账户状态发生变化时,这棵状态树会更新,新的状态树的根哈希也会变化,成为新区块头中的新的 stateRoot。
- 账户存储树:每个智能合约账户的存储是另一个独立的 Trie,存储在 storageRoot 中。这个 Trie 负责存储智能合约的数据,例如映射、数组等复杂数据结构。
以太坊帐户有四个字段:
nonce
:一个计数器,用来显示外部帐户发送的交易数量或合约帐户创建的合约数量。 每个帐户只能执行具有一个给定随机数的一笔交易,以防范重放攻击,重放攻击指多次广播和重复执行已签署的交易。balance
– 这个地址拥有的 Wei 数量。 Wei 是以太币的计数单位,每个 ETH 有 1e+18 个 Wei。codeHash
- 该哈希表示 EVM 上的帐户代码。 合约帐户具有编程的代码片段,可以执行不同的操作。 如果帐户收到消息调用,则执行此 EVM 代码。 与其他帐户字段不同,不能更改。 所有代码片段都被保存在状态数据库的相应哈希下,供后续检索。 此哈希值称 codeHash。 对于外部所有的帐户,codeHash 字段是空字符串的哈希。storageRoot
– 有时被称为存储哈希。
迈向 ETH2
以太坊网络同时存在主链和信标链( ETH2 的一部分,现在作为共识层)。
随着以太坊网络的增长,原有架构已经难以支撑日益增长的交易量和复杂的应用场景。为了应对这些问题,以太坊社区启动了以太坊 2.0 项目,即 ETH2,旨在通过一系列的技术革新提升整个网络的性能。
在2020年底,以太坊推出了信标链,这是以太坊向权益证明(PoS) 转换的第一步。
这个新的链与原有的工作量证明(PoW)主链并行运行。在合并之前,信标链主要负责处理以太坊网络未来的 PoS 机制,并且逐步地将接管整个网络的共识机制。
“合并”是指以太坊的 PoW 共识机制向 PoS 机制的转变,这一过程发生在2022年9月。合并后,以太坊的共识层(即之前的信标链)和执行层(即之前的以太坊主网)相结合,形成了一个更加节能高效的区块链网络。
在原有的 PoW 区块链转变为 PoS 区块链的过程中,引入了一个名为“信标链”的新组件,它是 ETH2 的核心部分,负责协调整个网络并向 PoS 机制过渡、管理验证者的集合、分配奖励和惩罚,并协调未来的分片链(Shard Chains)。
信标链是一个由“空”区块组成的链。在以太坊上停止 PoW 并启动 PoS 时,需要先让信标链接受来自执行客户端的交易数据,将它们打包到区块,再将区块组织到一条运行 PoS 共识机制的区块链上。 与此同时,原有的以太坊客户端停止挖矿、区块传播及旧的共识逻辑,并将这一切转交给信标链。 这一事件称为合并。
在合并发生后,就不再有两个区块链。 相反,只有一个 PoS 以太坊,与 PoW 以太坊不同,现在每个节点需要两个不同的客户端
。
信标链现在是 PoS 以太坊的共识层,即一个处理区块消息和共识逻辑的共识客户端的点对点网络,而原始客户端形成执行层,负责传播消息和执行交易,以及管理 ETH 的状态。
这两层可以使用引擎 API 相互通信。
PoS 、信标链、质押、分片和 ETH2 的关系
迈向 ETH2 的目的是更低能耗更可持续,而 ETH2 最关键的特征就是 PoS。
为了将主链从 PoW 转向 PoS ,引入了信标链和质押,且在完成合并后,信标链就是系统的一部分。
为了进一步横向扩展 ETH ,分片概念得以产生。
ETH1、ETH2、ETH?
“以太坊 2”一词已弃用。 在将“以太坊 1”和“以太坊 2”合并为一条链之后,将不再需要区分两个不同 的以太坊网络,只有以太坊。
但是,若专门提到,以下两个词都特定的含义:
- “以太坊 1”现在是处理交易和执行的“执行层”。
- “以太坊 2”现在是处理权益证明共识的“共识层”。
Merge 合并
合并是指在 ETH 的原有执行层(从创世块开始就一直存在的主网)中加入其新的权益证明共识层,即信标链。
合并摒弃了消耗大量能源的挖矿,而是通过质押以太币来保护网络的安全。
信标链最初是与主网分开上线的。 以太坊主网(所有帐户、余额、智能合约和区块链状态)仍继续由 PoW 保护,与此同时,与之一起运行的信标链采用 PoS。 合并是指这两个系统最终整合在一起之时,且 PoW 被 PoS 永久取代。
信标链最开始并不处理主网上的交易。 而是通过对活跃的验证者及其帐户余额达成一致来就自己的状态达成共识。
经过广泛测试后,即合并后,信标链将成为所有网络数据的共识引擎,包括执行层交易和帐户余额。
合并代表正式转变成使用信标链作为区块生产引擎
。
同时,挖矿将不再生成区块,该任务交由 PoS 验证者,PoS 现在负责处理所有交易的有效性及创建区块。
功能
信标链是在以太坊质押
人开始验证真实的以太坊区块之前管理和协调以太坊质押人网络的帐户账本的名称。 它不处理交易或智能合约交互,因为这些任务在执行层完成。 信标链负责处理区块和证明、运行分叉选择算法以及管理奖励和惩罚等。
- 共识机制:信标链引入了 PoS 机制,允许用户通过质押一定数量的 ETH(通常为 32ETH)成为验证者,参与区块的创建和验证过程。这与 PoW 相比,减少了计算资源的需求,使得系统更加环保和高效。
- 分片链管理:信标链不仅负责维护自身的状态,还管理着多个分片链(Shard Chains)。分片链是独立的数据块链,它们可以并行处理交易和智能合约,从而极大地提高了系统的吞吐量。
Beacon Chain 信标链
信标链是 PoS 区块链,它可以让验证者可以参与质押系统、替代矿工的角色而成为链的构建者。
也就是说信标链上管理着验证者的名单,以及分片验证者任务。
信标链由多个部分组成,诸如分片(shards)、质押验证者 (staking validators)、证明 (attestations)、委员会 (committees)、检验点 (checkpoints) 和最终确定性 (finality)。
一个简单的例子
怎么样才可以成为信标链的验证者呢?
首先你需要向当前以太坊主链上的一个合约发送押金( 32 个以太币),然后经过一系列的审核检查之后,你就会收到一张电子收据(以太坊智能合约中的事件),从此你就拥有了验证资格,成为了验证者。
成为验证者之后,信标链就会给你安排任务了。
它会将你随机分配到一到两个分片中去做验证。我们知道,在 PoW 机制下,也就是我们现在的以太坊主链上,矿工通过挖矿生成下一个区块,但是在 PoS 机制下,不存在挖矿,下一个区块的产生是由验证者们选择出来的。这个选择具有随机性,不是一个验证者所能掌控的,这也体现了去中心化的特点。
假如你很“活跃”,就可能被选中成为区块提议者(block proposer)。
假如你不是很“活跃”,信标链将可能将你指定为验证者 (validators),并分配到某一分片,此后你需要同该分片的其它验证者一起从候选区块中选择出新的区块。
然后该分片的区块提议者就会为这个分片收集交易,并且将这些交易纳入到刚刚验证者们选出的区块中去,虽然由于你不是区块的提议者,也就没有将交易纳入新区块的权力,但是作为验证者的你这个时候可以验证这个过程中区块提议者是否行为妥当。
如果你表现良好,做了身为验证者应该做的事就会得到奖励,相反,如果你违反规则就受到惩罚,惩罚就是从你抵押的 32 ETH 中扣除一部分,当抵押金低于 16 个以太币之后,信标链就会将你从验证者列表中移除。
如果有一天你不想当验证者了,你抵押的以太币加上你得到的奖励以及减去你因惩罚而扣除的以太币将不会回到你之前的以太坊主链中,而是会被存进某一个分片链中。
除了管理验证者之外,信标链还需要存储一些认证( Attestation )。
我们知道当前的以太坊区块链上存储了我们平时的那些资产转移等交易的数据信息,但是信标链不同于当前的以太坊主链,它存储的是一系列经过哈希运算的字符串。
在信标链中,验证者验证并签名交易,比如一笔转账交易,然后经过哈希变成一段字符串,将这个字符串存到信标链中,此时这个字符串就代表了一笔交易的数据,这样做的好处就是,你不用去深入探究这笔交易到底在哪个分片中发生。
分片中的状态一旦发生改变(比如某个账户余额发生了丁点改变),验证者都会把这个变化汇报给信标链。因此,信标链实时跟踪者分片的变化,也建立起了个分片间的联系与通信。
Staking 质押
质押是指存入 32 个以太币以激活验证者( validator)的行为。
质押者每质押 32 个以太币,就可激活一个验证者,即,一个质押者可激活多个验证者。
作为验证者,你将负责存储数据,处理交易并向区块链添加新的区块。这将保证以太坊的安全,并在此过程中为你赚取新以太币。
质押的目的和以前的挖矿相似,都是为了保证区块链正常运行。
但又在很多方面不同。 挖矿的前期支出庞大,需要投入强大的硬件和消耗大量能源,从而产生规模经济并促进集中化。
挖矿也没有提出任何将资产锁定作为抵押品的要求,这限制了被攻击后协议惩罚不良行为者的能力。
ETH2 中存在着多种形式的质押
-
独立质押(Solo Staking)/(Home Staking)
概述:用户自己运行一个验证者节点,直接参与区块提议和验证。
要求:必须持有至少32 ETH,具备技术能力来设置和维护验证节点,还需要持续运行高可用的节点。
优点:完全去中心化,用户自己控制资金,并且可以获得完整的质押奖励。
缺点:技术门槛高,需承担运营节点的责任,若节点下线
或表现不佳,可能会被罚款或削减质押的 ETH。 -
质押即服务(Staking as a Service)
概述:以太坊协议本身并不支持质押委托, 如果你有 32 个以太币需要质押,但是没有合适的硬件设备,那么质押即服务可以使你在使用运营商硬件设施的同时获得区块奖励。
优点:对于那些拥有 32 个以太币但是不能解决运行节点的技术问题的人来说,这是个很好的选择
缺点: 出于安全原因,用于转移或提取资金的密钥是单独分开的,即每个帐户都由 BLS 签名密钥和 BLS 提款密钥组成。用户会将签名密钥授权给运营商使用。 -
池化质押/联合质押(Pooled Staking)
概述:用户可以将少量 ETH 投入质押池,与其他用户共同筹集 32 ETH 来运行一个验证者节点。
优点:适合小额用户,需达到 32 ETH 的最低限额,通过参与池化质押可以降低技术门槛和资金门槛。
缺点:质押奖励需要与其他用户共享,管理资金的质押池也可能带来一定的信任风险。 -
流动性质押(Liquid Staking)
概述:流动性质押由联合质押而引出。在参与联合质押时,用户可能想在质押过程尚未结束时退出质押(当然还可能有其它原因)。因此,在用户参与联合质押的开始,平台就发给用户代表质押 ETH 的代币(例如 Lido 的 stETH),这些代币可以在二级市场上交易或参与 DeFi 活动。。
优点:用户可以在质押期间保持资产的流动性,质押代币可以在 DeFi 生态中使用或交易。
缺点:存在平台风险,流动性质押可能会涉及智能合约的漏洞或平台治理问题。 -
交易所质押(Exchange Staking)/中心化质押(Centralized exchanges)
概述:在加密货币交易所(如币安、Coinbase 等)直接质押ETH,用户只需将资金存入交易所账户并参与质押。
优点:通常没有最低金额要求,用户只需在交易所拥有 ETH 即可,操作最为简单,用户无需管理私钥和节点,质押收益会自动分发。
缺点:资金完全托管在交易所,存在一定的集中化风险,可能会收取手续费。
PoS
- 简单来说,PoS意味着:
- 某个人向存款合约中质押 32 个以太币后,其可化身为验证节点,若顺利完成任务,其最终可以取回 32 个 ETH,以及工作的奖励。但是,如果被证实发生不诚实活动,部分甚至全部质押金额将被销毁。
- 在每个时隙(12 秒的时间间隔)中,会随机选择一个验证者作为区块提议者。 区块提议者将交易打包为一个区块后执行,然后确定一个新的“状态”。 区块提议者将这些信息包装到一个区块中并传送给其他验证者以供验证。
- 其他获悉新区块的验证者再次执行区块中包含的交易,确定他们同意对全局状态提出的修改。 假设该区块是有效的,验证者就将该区块添加进各自的数据库。
- 如果验证者获悉在同一时隙内有两个冲突区块,他们会使用自己的分叉选择算法选择获得最多质押以太币支持的那一个区块。
区块时间
区块时间是指两个区块诞生的时间间隔。
在基于 PoW 的 BTC 中,区块生成时间依赖于挖矿难度调整,是随机的。
在以太坊中,时间划分为每 12 秒一个单位,称为“时隙”。
在每个时隙内,选择一个单独的验证者提议区块。 假设所有验证者都在线且完全正常运行,则每个时隙内都会有一个区块产生,意味着区块时间是 12 秒。 但是,偶尔验证者在被要求提议区块时不在线,导致有时候一些时隙是空的。
即,在 ETH 中,每 12 秒(一个时隙)要么产生一个区块(极大概率),要么不产生,这个时间是确定的。
扩容
二层网络
分片
在计算机科学中,主要有两种扩容方式: A.纵向扩容:即增强节点能力 B.横向扩容:即增加节点数量
为了保证去中心化,区块链需要采取横向扩容方式。 ETH2 其中一个目标就是让节点可以在消费级硬件中运行。
总体来说,ETH2 采用的分片机制指的就是对数据库进行横向分割。
每条分片链都拥有一个节点子集,在该链上进行工作。虚拟矿工和验证者被分配到不同的分片中,并且只处理和验证自己所在分片链上的交易。
以太坊分片上的节点子集是动态的,按照区块顺序处理分片。
区块链实行分片机制的主要挑战在于如何确保分片安全性。
由于验证者分散在不同的分片中,有的节点可能会恶意控制某个分片。
解决该问题的关键在于:
随机分配 (shuffling) 验证者,每个分片区块都有一个委员会,其中的验证者都经由随机挑选。这种做法的目的是,经数学计算,如果攻击者控制的验证者少于总数的三分之一,其想要攻击单个分片是难以实现的。
此外,错误性证明(fraud proofs)、数据托管证明 (custody proofs) 和数据可用性检查 (data availability checks) 都是确保安全的重要因素,不过需要单独的讲解才能说清楚。
Eth2 目前的计划是启用64个分片。尽管分片和信标链是独立运作的,我们还是会针对整个系统的关键部分进行阐述。
PoS 的优势是,在任何给定时间都有全部已批准的区块生产者的记录,每个区块生产者都质押了以太币。 这个记录不但为分开治理奠定了基础,还可靠地划分了具体的网络责任。
这种责任与 PoW 形成对比,在 PoW 中,矿工对网络没有义务,可以立即停止挖矿并永久关闭其节点而不会受到任何影响。 而且,也没有已知区块提议者的记录,并且没有可靠的方法安全地划分网络责任。
EVM 以太坊虚拟机
EVM 是一个去中心化虚拟环境,它在所有以太坊节点上一致地方式执行代码。
节点运行以太坊虚拟机,以执行智能合约,利用“燃料”度量执行操作所需的计算工作。
因此我们说:存储以太坊虚拟机状态的实体计算机就是 Node 节点。
任何参与者都可以请求在以太坊虚拟机上执行任意代码,只是要付出一定费用,这个费用就是“燃料”;
代码执行会改变以太坊虚拟机的状态。
从 Ledger 账本 到 State Machine 状态机
通常使用“分布式账本”的类比来描述像比特币这样的区块链。 账本保存着活动记录,而活动必须遵守一套规则,这些规则限制用户在修改账本时可以做什么和不可以做什么。 例如,比特币地址不能花费比之前收到的更多的比特币。 这些规则是比特币和许多其他区块链上所有交易的基础。
以太币遵循几乎完全相同的直观规则,但它也支持更强大的功能:智能合约。
不同的是:以太坊不是分布式账本,而是分布式状态机
。
以太坊的状态是一个大型数据结构,它不仅保存所有帐户和余额,而且还保存一个机器状态
,根据区块执行的交易的不同,机器状态会发生不同。
EVM 的行为就像一个数学函数:在给定输入的情况下,它会产生确定性的输出。
给定一个旧的有效状态 (S)和一组新的有效交易 (T),以太坊状态转换函数 Y(S,T) 产生新的有效输出状态 S’
Y(S, T)= S'
State 状态
在 ETH 语境下,状态指的是改进的 MPT树,在这课树中,存储着巨量数据。
每个账户的状态都会存储到这棵树中的某一节点,通过哈希的方式,树上的某一节点和某一账户会形成关联。
此外,通过递归地将子节点的哈希值与其父节点链接,从而确保任何数据的变化都会影响树的上层,直到根节点。
经过这种递归的哈希计算,整棵树最终会汇总为一个单一的根哈希值(称为“状态根”)。这个根哈希值是整个系统状态的唯一代表,它被存储在区块链的每个区块中。如果任何账户的状态发生变化,这个根哈希值也会相应变化。由于哈希的不可逆性和一致性,根哈希值能够快速验证整个树中任意账户的状态是否正确且未被篡改。
Gas Available:
这是执行EVM代码时可用的Gas数量。每执行一条指令都会消耗一定的Gas,当Gas耗尽时,执行将被中止。
EVM Code:
智能合约代码在以太坊虚拟机中被执行。EVM是一个运行环境,执行合约的字节码,这些代码可以包括数学计算、存储操作和消息调用等。
Operations (操作):
EVM执行的每条指令,包含一系列的操作,比如加法、存储、加载等。每次操作都会消耗Gas。
Gas:
每个操作在执行时都会消耗特定数量的Gas。这是以太坊系统中的一种机制,用于防止合约运行时耗尽资源或者陷入无限循环。
Stack (栈):
EVM是一个基于栈的虚拟机,所有的操作都在栈中完成。栈是临时存储的区域,操作数和结果会被压入和弹出栈。
Memory (内存):
这是EVM执行合约时使用的临时内存,用于存放中间计算结果。与栈不同,内存是可随意读写的,可以存放临时数据。
Account Storage (账户存储):
智能合约的长期存储区域,所有数据永久存储在区块链上。访问和修改存储通常会消耗大量Gas。
Message Call (消息调用):
当合约与其他合约交互时(例如调用其他合约或向其他账户发送交易),会发生“消息调用”,这通常会消耗额外的Gas。
More Gas:
图中火焰图标表示在特定操作(例如消息调用和存储修改)中需要消耗更多Gas。这些操作比简单的数学运算要复杂得多,因此需要额外的资源。
总结:
这张图展示了以太坊虚拟机的工作原理:智能合约代码被逐步执行,Gas用于支付执行每个操作的计算成本,操作的结果通过栈和内存管理,账户的长期状态则保存在存储中。执行期间,消息调用和存储操作会消耗更多的Gas,而当Gas耗尽时,执行会停止。
Web3
- Web 1.0 主要是由公司拥有的静态网站,用户之间的互动几乎为零 - 个人很少创造内容,导致它被称为只读网络。
- Web 2.0 时期于 2004 年开启。 网络不再是只读的,它演变成读写网络。 互联网公司除了向用户提供内容外,还开始提供平台来共享用户生产的内容,并参与用户间的交互。
- Web3 的核心是通过区块链、加密货币和非同质化代币将权力以所有权的形式归还用户。Web1 是只读的,Web2 能读/能写,未来的 Web3 能读/能写/能拥有。
SmartContract 智能合约
简单来说,你可以把智能合约想象成一种自动售货机:通过特定参数调用脚本后,如果满足某些特定条件,就会执行一些操作或计算。 例如,如果调用者将以太币发送给特定的接收者,简单的卖方智能合约就可以创建和分配数字资产所有权。
任何开发者都可以创建智能合约,并使用区块链作为其数据层,将其公开给网络,但要向网络支付以太币。 然后,任何用户都可以调用智能合约来执行其代码,并再次向网络支付费用。
Dapp 去中心化应用程序
去中心化应用程序 (dapp) 是在去中心化网络上构建的应用程序。
一般来说,一个网页应用 = 后端 + 前端。
一个**Dapp = 智能合约 + 前端用户界面 **,即智能合约就是 Dapp 的后端代码。
优点
- 零停机时间:一旦将某 dapp 的智能合约部署到区块链上,整个网络都能为那些希望与合约互动的客户提供服务。 因此,恶意参与者无法针对单个
dapp 发起 DoS 攻击。
缺点
- Dapp 更难维护,因为发布到区块链的代码和数据更难修改,即使在旧版本中发现了漏洞或安全风险。、
- 巨大的性能开销,而且难以扩展更多性能。 为了达到以太坊所追求的安全、完整、透明和可靠的水平,每个节点都会运行和存储每一笔交易。 除此之外,达成权益证明共识也需要时间。
- 网络拥塞:至少在当前模型中,如果一个 dapp 使用了太多的计算资源,整个网络都会承担影响。 目前,该网络每秒只能处理约 10-15 笔交易;如果交易发送的速度超过这个速度,未确认的交易池会迅速膨胀。