以太坊概述

前言

在对比特币有一定了解之后,我们下面进入到以太坊。新事物正是在旧事物中的矛盾而产生的,区块链技术如此,以太坊就比特币亦如此。

在比特币中,仍有如下问题有待解决:

  1. 交易性能差:如果仅仅作为一种新的去中心化加密货币来看,这并不能满足如今大量的交易,若与传统中心化金融模式相比,效率是十分低下的。比特币的出块时间平均为10min。

  2. 比特币的脚本语言是非 图灵完备 的:比特币脚本语言能实现的功能很有限。 *图灵完备:是指一种计算模型或编程语言具有足够的能力,能够执行图灵机能执行的任何计算任务。 图灵机:如果一个问题可以被算法解决,那么它可以在图灵机上得到解决。但有一些问题是可以在理论上解决,但在实际中却需要非常长的时间。

  3. UTXO缺乏账户的概念: (1)在使用时,仅能出现在一笔交易中,使用是不太方便的。某交易发起者可能在提交交易时会出现未将剩余的余额转给自己,而全部作为矿工的打包费,造成损失。 (2)对于币持有者,得到自己的余额是不太方便的,需要对UTXO做一个汇总计算。 *在钱包软件的开发之后,提供了图形化的界面,可以包装出一个类钱包的模型,如对内部的脚本语言进行的操作封装,提供自动将某UTXO余额转回自己的账户,查询余额等。

  4. 共识机制PoW:挖矿的过程中,对随机数的计算浪费了大量的算力资源。这背后也是对能源的大量浪费。(浪费:计算随机数对计算机来说就是一项简单而重复的计算)

另一方面,是对于比特币底层原理的思考,能否将这种思想、理论、技术运用到其它地方去呢?或者说仅仅作为加密货币的比特币是缺乏扩展性的。 由此诞生了以太坊,它是一个开源的项目,提供了一种图灵完备的语言——solidity,开发者可以用solidity开发 智能合约 ,或进一步设计使其成为DAPP,从而完成复杂的商业逻辑。这样,以太坊便极具灵活性、适应性和扩展性了。 * 智能合约:可供外部账户(EOA)调用的能够执行合约条款的交易协议,是一个确定性有限状态自动机。

对于以太坊参与者在进行区块验证时,如有涉及智能合约的交易,为确保交易的有效性,其它节点需要对智能合约状态改变进行验证,即执行同样的合约逻辑。对于以太坊拥有图灵完备的语言,为限制智能合约的算力、存储在全网的过大消耗、甚至是死循环,引入了Gas机制。

Gas机制

  1. 在以太坊上执行任何一笔交易都会收取执行费用。

  2. Gas作为一个单独的计价单位,利于交易费用的稳定。(以太币的市场价格波动性很大)

  3. 保证了区块链的稳定,通过GasLimit对智能合约的工作量及内存的使用进行限制,一旦超过超过这个上限,交易失败,已消耗的Gas不予退还。

  4. 系统规定,转账交易的GasLimit至少要消耗21000个Gas。

一. 有限状态自动机

比特币系统、智能合约、以太坊系统均可视为一个确定性有限状态自动机。

比特币系统

  1. For each input in TX:
    (1)If the referenced UTXO is not in S, return an error.
    (2)If the provided signature does not match the owner of the UTXO, return an error.

  2.  If the sum of the denominations of all input UTXO is less than the sum of the denominations of all output UTXO, return an error.

  3. Return S’with all input UTXO removed and all output UTXO added.

  1. 对于 TX 中的每个输入:
    (1)如果引用的 UTXO 不在 S 范围内,则返回错误。
    (2)如果提供的签名与 UTXO 的所有者不符合,则返回错误。

  2.  如果所有输入 UTXO 面值总额小于所有输出 UTXO 面值总额,则返回错误。

  3. 在移除所有输入 UTXO 且添加所有输出 UTXO 后,返回 S'。

以太坊系统

  1. Check if the transaction is well-formed (ie. has the right number of values), the signature is valid,and the nonce matches the nonce in the sender's account. If not, return an error.

  2. Calculate the transaction fee as GAS * GASPRICE, and determine the sending address from the signature. Subtract the fee from the sender's account balance and increment the sender's nonce. If there is not enough balance to spend, return an error.

  3. Initialize GAS = GASLIMIT, and take off a certain quantity of gas per byte to pay for the bytes in the transaction.

  4. Transfer the transaction value from the sender's account to the receiving account. If the receiving account does not yet exist, create it. If the receiving account is a contract, run the contract's code either to completion or until the execution runs out of gas.

  5. If the value transfer failed because the sender did not have enough money, or the code execution ran out of gas, revert all state changes except the payment of the fees, and add the fees to the miner's account.

  6. Otherwise, refund the fees for all remaining gas to the sender, and send the fees paid for gas consumed to the miner.

  1. 检查交易格式是否正确(即具有正确数量的值)、签名是否有效以及 Nonce 值是否与发送者帐户中的 Nonce 值匹配。 若否,则返回错误。

  2. 通过 GAS * GASPRICE 计算出交易费,并从签名中确定发送地址。 从发送者的帐户余额中减去费用,并增加发送者的 nonce 值。 如果帐户余额不足,则返回错误。

  3. 初始化 GAS = GASLIMIT ,并根据交易中的字节数量为每个字节扣除相应数量的燃料。

  4. 将交易数值从发送者帐户转移至接收帐户。 如果接收帐户尚不存在,则创建此帐户。 如果接收帐户是合约,运行该合约的代码,直到代码运行结束或燃料耗尽。

  5. 如果由于发送者资金不足或者代码运行耗尽了燃料,而导致转账失败,则回滚除支付费用之外的所有状态变化,并将费用支付给矿工帐户。

  6. 否则,将所有剩余燃料的费用退还发送者,并把为所消耗燃料而支付的费用发送给矿工。

智能合约

只有当调用者提供足够的Gas费用时,才能完成状态转换:完整执行合约代码,返还未用完的Gas费。否则,已消耗的Gas给矿工,不予退还。

二. 区块的数据结构

1. 区块

(1)区块头
(2)交易列表
(3)叔区块列表

2. 区块头

(1)parent hash
(2)uncle hash
(3)coinbase:矿工地址,用于以太坊系统向该地址支付出块奖励
(4)Root:MPT状态树的根哈希
(5)TxHash:MPT交易树的根哈希
(6)receipt hash:MPT收据树的根哈希
(7)difficulty:当前区块的难度。
(8)total difficulty:从创世节点至今,累加的难度值。以总难度值最大的为主链
(9)number:区块序号
(10)timestamp:区块创建的时间,以秒为单位
(11)gas limit:独立于交易的gas limit。是随着以太坊网络动态调整的。
(12)gas used:交易的总gas消耗
(13)nonce:随机数
(14)header mix hash:头部混合哈希,它应满足难度目标。
(15)extra:附加数据

3. 交易

(1)sender address:发送方地址
(2)recipient address:接收方地址
(3)amount:交易金额,以wei为单位
(4)price:本次交易的gas单价
(5)gas limit:本次交易gas量消耗上限
(6)pay load:交易附加数据,发送到智能合约的信息
(7)signature:(r、s、v),以太坊运用的是椭圆曲线数字签名算法ECDSA
(8)transaction status:交易状态,成功或失败

4. 交易回执

(1)from
(2)to
(3)transaction hash
(4)block number
(5)block hash
(6)transaction index:该交易在区块中的位置
(7)gas used
(8)gas price
(9)contract address:涉及合约的交易中合约的地址
(10)logs:交易日志

三. 以太坊的数据结构

1. 以太坊虚拟机(EVM)

(1)目前主要有两种虚拟机:
①系统级虚拟机:基于目前操作系统来生成一个独立的操作系统,如VMware
②某些编程语言的虚拟机,是程序运行的容器,如JVM。这样便赋予了编程语言的跨平台性,只要安装了该编程语言的虚拟机,便可以在虚拟机中运行且能得到相同的结果。

(2)为了保持智能合约运行结果的一致性,构建了一个以太坊虚拟机,使得以太坊节点都能通过EVM来运行智能合约,并能得到相同的结果。

2. 账户

(1)分类:
①外部账户(Externally Owned Account,EOA)
②合约账户(Contract Accounts,CA)

(2)字段(状态):
①key:address
②value:
a. balance:余额
b. nonce:EOA中作为交易序号,代表了自创建以来发出的交易次数。在CA中表示创建的新的智能合约的数量
c. code hash:合约账户中合约代码的哈希值
d. storage root:合约账户的账户存储树根。每个合约账户都有一个账户存储树(合约状态树),用于存储智能合约的持久化数据。其中的数据以插槽式数组组织存储,每个槽slot作为一个存储单元,可以对其进行定义。叶子节点是槽数据的 RLP编码 。
*Recursive Length Prefix:是一种用于表示任意复杂数据结构的紧凑二进制编码。

(3)对于以太坊全局,我们运用了一个默克尔帕特里夏树来记录以太坊账户的状态,其中每一个叶子节点都是一个账户的状态的RLP编码。

3. 默克尔帕特里夏树(Merkle Patricia Trie,MPT)在以太坊中的运用

(1)状态树(State Trie):以太坊中所有账户的状态共同构成了以太坊的状态。为了方便状态的回滚,在以太坊链上,以太坊的状态树前后变化是仅仅让新状态树沿用未改变的部分,同时加上新的、已改变的部分,这样也节省了存储空间。

(2)交易树(Transaction Trie): 对交易中的所有数据进行RLP编码,然后作为交易树的叶子节点。

(3)收据树(Receipt Trie):对收据的所有数据进行RLP编码,再作为收据树的叶子节点。

四. 激励机制(PoW共识)

在前言中,我们提到了比特币交易性能差的问题。而以太坊的出块时间平均大约为10s,缩短了出块的时间,也必然导致区块链临时分叉的概率增加。对于比特币,在出现临时分叉时,仅仅承认最长的链,临时分叉产生的区块,也不会获得比特币系统的奖励。但这个解决临时分叉的方案对于临时分叉概率更高的以太坊来说是更会降低矿工的积极性的,所以以太坊引入了叔块机制:虽然叔块不被承认(不能获得打包交易的Gas费作为奖励),但叔块的挖掘者仍能因为被引用而得到作为叔块的奖励。

1. (孤块)未被确认为最长链上的区块,如果在后续N(N\leq6)代内被引用,则成为叔块。

2. 每个区块最多引用两个孤块作为叔块。

3. 引用者能得到额外的出块奖励,对于每个ommer 区块,我们额外提高 \frac {1}{32} 的区块奖励。

4. 孤块越快被引用,作为叔块的奖励越高。

矿工的奖励,一方面是出块奖励,另一方面是打包的交易的Gas费。交易的Gas单价是可以被账户自定义的,类似地,交易费越高的,可能越快被打包进区块。

五.以太坊的发展

1. EIP(Ethereum Improvement Proposal),以太坊改进提案,这个概念在最初的EIP-1中提出。EIP在以太坊社区中作为一个公开协作的环境,为以太坊孵化新想法、新技术提供了一种标准的形式。

Any EIP in Draft or Review or Last Call if inactive for a period of 6 months or greater is moved to Stagnant. An EIP may be resurrected from this state by Authors or EIP Editors through moving it back to Draft or it’s earlier status. If not resurrected, a proposal may stay forever in this status.
任何EIP在草案、审查、征求意见阶段时,如果在六个月或更长时间内不活跃,将被移至停滞状态,除非作者或对该EIP编辑过的人将它移至草案阶段或更早的状态,没有任何操作将一直保持停滞的状态。

2. EIP20:ERC-20,标准提案,首次定义了同质化代币的设计标准(A standard interface for tokens.),使得开发者可以通过solidity按接口来开发设计一个自定义代币的合约,并部署发行。

3. EIP-721:ERC-721,标准提案,首次定义了非同质化代币(NFT,Non-Fungible Token)的设计标准,开发者同样可以通过solidity按借口标准来开发设计一个自定义的非同质化代币的标准。

4. EIP-1155:ERC-1155

(1)A standard interface for contracts that manage multiple token types. A single deployed contract may include any combination of fungible tokens, non-fungible tokens or other configurations (e.g. semi-fungible tokens).
这个标准提出了一种可以同时支持并管理多种代币类型,一个单独合约部署就可以包括同质化代币(FTs)、非同质化代币(NFTs)、半同质化代币(SFTs)等结合的智能合约接口。

(2)In contrast, the ERC-1155 Multi Token Standard allows for each token ID to represent a new configurable token type, which may have its own metadata, supply and other attributes.
相比之下,ERC-1155多重代币标准允许每个ID代表一种新的可配置的代币类型,它们可能具有自己的元数据、供应量和其它属性。

5. EIP-1559 该提案引入了一种新的交易费用模型,提供了交易费的预测,提高了用户体验。其中包括一个基础手续费和一个优先级费用。 The proposal in this EIP is to start with a base fee amount which is adjusted up and down by the protocol based on how congested the network is. 基础手续费由网络根据拥塞情况进行动态调整;而优先费用由用户设置,用于提高交易的优先级。

(1)相比之前,减少了频繁的手动设定Gas费。

(2)An important aspect of this fee system is that miners only get to keep the priority fee. The base fee is always burned (i.e. it is destroyed by the protocol). 对于矿工,仅仅能得到基础费之外的优先级费,而基础费根据这个协议将会被销毁。

5. EIP-2982 这个以太坊改进提案明确了以太坊2.0(Serenity)的阶段0,以太坊将多阶段地完成更新共识机制,即实现 PoW→PoS 。在这个阶段,以共识机制PoW运行的以太坊1.0将完全不受影响,我们构建出了一个独立的链:信标链(beacon chain),它将作为以太坊2.0更新的核心,支持并保障多个分片链的达成共识,最终也要将当前的以太坊主网作为一个碎片并入,从而完成升级到以太坊2.0。以太坊2.0将有多个分片在同时运行,这也进一步提高了效率、可扩展性。 在前言中,对于共识机制PoW暴露出的问题,在这里开始进行解决。目前也是能从以太坊官网找到对能源消耗的一个比较(所有估算值均来自可在 2023 年 5 月获取的公开信息)。能看出,在能源消耗的解决方面,共识机制的转变是很有效的:

6. EIP-3525:ERC-3525 Semi-fungible tokens (SFTs) combine the characteristics of fungible tokens (FTs) and non-fungible tokens (NFTs),because both have significant drawbacks.SFTs has the quantitative features of ERC-20 and qualitative attributes of ERC-721. meanwhile,the SFTs backwards-compatibility with ERC-721.
半同质化代币结合了同质化代币和非同质化代币的特点,因为这两者都有显著的缺点,半同质化代币有着同质化代币的量的特征和非同质化代币质的属性。同时,这个标准也与ERC-721向前兼容。 *目前主要运用在元宇宙和链游中。

7. EIP-3675 这一提案提出以太坊主网共识机制的更新,信标链上线以来一直运行良好。它将作为以太坊主网的安全提供者,来保证以太坊更新。同时区块结构中,一些字段将被常量替代:

从而保证了以太坊的向后兼容,而不至于导致硬分叉。


参考

  1. 以太坊白皮书 | ethereum.org
  2. 张小松,李凡,黄明峰等. 区块链原理与技术运用. 西安:西安交通大学出版社,2023.4
  3. EIPs history GitHub - ethereum/EIPs: The Ethereum Improvement Proposal repository
  • 22
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值