【区块链安全 | 第三篇】主流公链以太坊运行机制

文章目录

    • 1. 以太坊账户类型
    • 2. 以太坊网络架构
      • 2.1 节点类型
      • 2.2 交易流程
    • 3. 共识机制
    • 4. Gas 机制
      • 4.1 Gas 计算方式
      • 4.2 以太坊 EIP-1559 交易机制
    • 5. EVM(以太坊虚拟机)
      • 5.1 EVM 结构
      • 5.2 EVM 指令
      • 5.3 EVM 运行机制
    • 6. 智能合约
    • 7. ERC 代币标准
      • 7.1 ERC-20
      • 7.2 ERC-721
      • 7.3 ERC-1155
    • 8. Layer 2 解决方案
      • 8.1 Optimistic Rollups
      • 8.2 ZK-Rollups(零知识汇总)

在这里插入图片描述

1. 以太坊账户类型

以太坊的账户分为 外部账户(EOA) 和 合约账户(CA),两者在控制方式和交易能力上有所不同。

1.1 外部账户(EOA, Externally Owned Account)
EOA 由用户私钥控制,可以主动发起交易。EOA 没有代码逻辑,仅用于存储余额和签署交易。用户钱包(如 MetaMask)即为 EOA。EOA 主要用于发送 ETH 转账、与智能合约交互或发起交易。

EOA 交易的有效性由私钥签名保证,矿工验证签名后执行交易。如果 EOA 没有足够的 ETH 支付 gas 费用,则交易无法执行。由于 EOA 可以主动发起交易,因此在 DeFi、NFT 交易等应用中,EOA 主要负责调用合约。

例如,Alice 拥有一个 EOA 地址,她可以向 Bob 发送 1 ETH,也可以调用 Uniswap 合约来兑换代币。每次交易都需要 Alice 使用私钥进行签名。

1.2 合约账户(CA, Contract Account)
CA 由智能合约代码控制,没有私钥,不能主动发起交易,只能响应 EOA 或其他 CA 的交易请求。合约代码在部署时写入区块链,并且在执行时只能按照预设逻辑运行。

合约账户可以存储数据和执行复杂操作,例如去中心化交易所(DEX)合约可以管理多个用户的资产,并根据市场规则进行交易撮合。CA 的执行依赖 EVM(以太坊虚拟机),并且所有合约调用都会消耗 gas 费。

由于 CA 不能主动发起交易,因此它的行为完全受制于外部调用。例如,Uniswap 智能合约本身不会主动买卖代币,而是等待用户(EOA)发送交易请求,触发合约执行 swap 逻辑。

2. 以太坊网络架构

以太坊网络由多个分布式节点组成,这些节点共同维护区块链的运行,并执行交易验证、共识达成和数据存储等关键任务。不同类型的节点在网络中的作用各不相同,包括全节点、轻节点和验证者节点。

2.1 节点类型

全节点
作用:全节点存储整个以太坊区块链数据,验证所有交易和智能合约执行,并向其他节点提供数据同步服务。它可以独立验证区块和交易,而无需依赖其他节点的信任。

特点:

  • 存储完整的区块数据,包括区块头、交易和账户状态。
  • 通过 P2P 网络传播交易和新区块,支持网络同步。
  • 验证所有交易和智能合约的执行,确保数据完整性。
  • 可以作为 RPC 提供商,为 DApp 和钱包提供区块链数据查询服务。

全节点的类型:

  • 存档节点(Archive Node):存储从创世区块到最新区块的所有状态数据,包括所有账户的历史状态。适用于区块浏览器(如 Etherscan)、分析平台和开发者。
  • 普通全节点(Full Node):存储完整的区块数据,但不保留历史状态,仅保存当前的账户状态和合约数据。适用于大多数普通用户和矿工/验证者。

轻节点
作用:轻节点不存储完整的区块链数据,而是仅下载区块头,并通过简化支付验证(SPV, Simplified Payment Verification)向全节点请求所需的数据,以验证交易或查询账户状态。

特点:

  • 仅存储区块头,而不保存完整的交易和账户状态数据。
  • 需要向全节点请求数据,以查询账户余额、交易状态等信息。
  • 消耗较少的存储空间和计算资源,适用于移动设备或低性能设备。

验证者
作用:以太坊在升级为 PoS(权益证明)后,矿工被验证者取代。验证者负责参与共识,打包交易并提议新区块,同时对其他验证者的提议进行投票。

特点:

  • 需要 质押 32 ETH 才能成为验证者,并被添加到以太坊的验证者集合。
  • 通过 Casper FFG + LMD-GHOST 共识机制 选出验证者,每 12 秒出块一次。
  • 如果被选为出块者(提议者),需收集交易、执行合约,并生成新区块。
  • 其他验证者对区块进行投票(Attestation),确保区块的有效性。
  • 作恶(如双签、离线)会被惩罚(Slash),质押 ETH 可能部分或全部被罚没。

2.2 交易流程

1、用户构造一个交易(包含发送者、接收者、Gas 费用、签名等信息)。
2、将交易布局到区块链网络。
3、验证者检查交易(余额检查、签名验证、Nonce 验证等)。
4、验证成功后,交易被打包进区块,并被存储。
5、区块被添加到区块链,交易完成确认。

3. 共识机制

在【区块链安全 | 第二篇】区块链概念详解有介绍过。

4. Gas 机制

在以太坊中,Gas 是计算资源的度量单位,用于衡量执行智能合约或交易所需的计算量。每个操作(例如存储数据、执行计算)都有固定的 Gas 费用。

在链上交易会消耗一定金额,作为支付给矿工(PoW)或验证者(PoS)的手续费,即Gas。

4.1 Gas 计算方式

Gas 计算方式:
在这里插入图片描述

4.2 以太坊 EIP-1559 交易机制

以太坊伦敦升级(EIP-1559)引入了一种新的交易费用机制:

  • 基础费用(Base Fee):随网络负载动态调整,直接销毁,不给矿工。
  • 优先费用(Priority Fee,小费):给矿工的额外奖励,加快交易确认。

在这里插入图片描述

5. EVM(以太坊虚拟机)

以太坊虚拟机(Ethereum Virtual Machine,EVM)是以太坊智能合约执行的核心,它提供了一个图灵完备的计算环境,能够在不同的以太坊节点上执行智能合约代码,并保持一致性。EVM 运行字节码(Bytecode),由 Solidity、Vyper 等高级语言编译而成。

5.1 EVM 结构

EVM 运行时主要由存储(Storage)、内存(Memory)和堆栈(Stack)组成,负责数据存储和指令执行。

存储(Storage)
存储合约的持久化数据,例如变量状态、映射、数组等。
每个合约拥有独立的存储空间,不同合约的存储互不影响。
数据存储在 Merkle Patricia Trie 结构中,可通过 SSTORE(存储) 和 SLOAD(读取) 操作。
存储成本高,存储新数据需要大量 Gas,而减少存储(例如删除变量)可以返还 Gas。

内存(Memory)
运行时的临时数据存储区域,适用于函数执行期间的计算数据。
交易执行结束后,内存数据会自动清空。
访问内存比存储便宜,但仍然有 Gas 成本,内存大小随着使用增加而扩展,增长时消耗 Gas。
Solidity 中的 bytes、string 等动态数据结构在函数执行时存储于内存中。

堆栈(Stack)
EVM 的核心计算区域,用于存储操作数和执行计算。
堆栈最大深度为 1024 层,超出限制会导致 STACK OVERFLOW 错误。
EVM 指令大多数是基于堆栈操作的,例如 PUSH(压入)、POP(弹出)、ADD(加法)等。
Solidity 的局部变量和函数参数通常存放在堆栈中。

5.2 EVM 指令

EVM 运行的是字节码(Bytecode),字节码由一系列低级指令(Opcode)组成,每个指令对应一个 1 字节的操作码(如 0x60 代表 PUSH1)。指令主要分为堆栈操作、算术运算、存储操作 和 控制流 等。

1、堆栈操作
在这里插入图片描述

2、算术运算
在这里插入图片描述

3、存储和内存操作
在这里插入图片描述

4、控制流
在这里插入图片描述

5.3 EVM 运行机制

1、智能合约执行
用户或合约调用合约函数,EVM 解析交易数据,调用相应的合约代码。
代码由 Solidity 编译成字节码,并在 EVM 内执行。
交易结束后,EVM 确保合约状态一致性,成功交易被打包进区块链。

2、Gas 机制
计算资源(CPU、存储、内存)消耗 Gas,防止死循环和资源滥用。

操作复杂度越高,消耗 Gas 越多。例如:

  • ADD(加法):3 Gas
  • SSTORE(存储变量):最大 20,000 Gas
  • CALL(合约调用):700 Gas + 额外计算费用

3、沙盒环境
EVM 运行智能合约时,不能访问外部网络、文件系统或系统资源,确保去中心化安全性。

6. 智能合约

在【区块链安全 | 第二篇】区块链概念详解有介绍过。

Solidity 是以太坊的主要智能合约语言。

7. ERC 代币标准

以太坊上的 ERC(Ethereum Request for Comments)标准定义了智能合约的接口,使开发者可以创建兼容的钱包、交易所和 DApp(去中心化应用)。最常见的代币标准是 ERC-20(同质化代币) 和 ERC-721(非同质化代币),它们分别用于代表可替代代币(如 USDT、DAI) 和NFT(如 BAYC、CryptoPunks)。

7.1 ERC-20

ERC-20 是最广泛使用的代币标准之一,用于创建可替代代币(Fungible Token)。这些代币具有相同的属性,可以自由交换,没有唯一性。例如,1 USDT 和另一个 1 USDT 没有区别。

ERC-20 规定了一组智能合约的接口,使代币可以在钱包、交易所和 DApp 之间互操作。

在这里插入图片描述

应用场景:

  • 稳定币(Stablecoin):USDT、DAI、USDC
  • DeFi(去中心化金融)代币:UNI、AAVE、COMP
  • 治理代币:MKR、ENS
  • 游戏内资产:AXS、SAND

7.2 ERC-721

ERC-721 是 NFT(Non-Fungible Token,非同质化代币)的标准。NFT 具有唯一性,每个代币都是独一无二的,适用于数字艺术、游戏资产、收藏品、虚拟土地等场景。

ERC-721 规定了一组智能合约的接口,使 NFT 可以在NFT 交易市场(如 OpenSea)、游戏和 DApp 之间互操作。

在这里插入图片描述

应用场景:

  • NFT 艺术:Bored Ape Yacht Club(BAYC)、CryptoPunks
  • 虚拟土地:Decentraland(MANA)、The Sandbox(SAND)
  • 游戏资产:Axie Infinity、Gods Unchained

7.3 ERC-1155

ERC-1155 结合了 ERC-20 和 ERC-721,允许单个合约管理多种代币(同质化 + 非同质化)。

关键特点
支持同质化(FT)和非同质化(NFT)代币。
一个交易可以批量转移多个代币,减少 Gas 费。
智能合约更高效,减少部署和管理多个代币合约的成本。

关键方法
在这里插入图片描述

8. Layer 2 解决方案

以太坊主网(Layer 1)面临以下问题:
以太坊当前 TPS(每秒交易数)约为 15-30,吞吐量有限,无法满足大规模应用需求。
由于区块空间有限,交易费用经常飙升。
交易需要多个区块确认,延迟高,导致用户体验较差。

Layer 2(L2)是针对以太坊主链(Layer 1)扩展性问题的解决方案,主要目标是提高交易吞吐量、减少 Gas 费用,同时确保安全性。L2 通过在主链之外执行大部分交易计算,并仅将最终结果提交到以太坊,来减少主链的负担。

Rollups 是目前最主流的 Layer 2 解决方案,它将交易计算放在链下,仅将压缩后的交易数据提交到以太坊主网。Rollups 主要分为:

  • Optimistic Rollups(乐观汇总)

  • ZK-Rollups(零知识证明汇总)

8.1 Optimistic Rollups

Optimistic Rollups 采用"乐观假设",默认所有交易都是有效的,只有在交易被挑战时才会执行计算。

特点
无需即时计算,只提交交易数据,降低成本。
挑战机制:如果有恶意交易,用户可提交欺诈证明(Fraud Proof),要求 Rollup 重新执行交易。
适用于 DeFi 和复杂智能合约,如 Arbitrum、Optimism。

工作原理
交易在 L2 执行,结果提交到 L1。
交易有 7 天的挑战期,如果有欺诈行为,挑战者可以提供欺诈证明。
如果交易未被挑战,则默认有效。

8.2 ZK-Rollups(零知识汇总)

ZK-Rollups 采用零知识证明(Zero-Knowledge Proofs, ZKP),每批交易都会生成有效性证明,并提交到主链。

特点
所有交易提交时都会生成数学证明,主链无需等待挑战期。
采用 Merkle 树和 SNARK/STARK 技术,减少数据提交量。
适用于支付、NFT 交易等高频交易,如 zkSync、StarkNet。

工作原理
交易在 L2 执行,并生成零知识证明(SNARK/STARK)。
证明连同交易数据提交至以太坊 L1。
以太坊验证 ZK 证明,确保交易正确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机三级信息安全部分英文缩写

eip,指令寄存器,用于存放指向下一条将执行指令的指针,即返回地址栈顶指针esp基址指针寄存器EBP,基地址数据执行保护DEP(Data Execute Prevention)技术可以设置内存堆栈区的代码为不可执行状态,从而防范溢出后代码的执行…

【Goalng】第九弹-----文件操作、JSON处理

🎁个人主页:星云爱编程 🔍所属专栏:【Go】 🎉欢迎大家点赞👍评论📝收藏⭐文章 长风破浪会有时,直挂云帆济沧海 目录 1.文件操作 1.1文件介绍 1.2.文件流 1.3.打开和关闭文件 1…

C#高级:启动、中止一个指定路径的exe程序

一、启动一个exe class Program {static void Main(string[] args){string exePath "D:\测试\Test.exe";// 修改为你要运行的exe路径StartProcess(exePath);}private static bool StartProcess(string exePath){// 创建一个 ProcessStartInfo 对象来配置进程启动参…

猜猜我用的是哪个大模型?我的世界游戏界面简单的模拟效果

我的罗里吧嗦的,根据小朋友的要求,边听边写边输入的提示词: 请生成一段完整的在网页中用html5和javascript代码模拟“我的世界”中游戏场景的互动画面,要求提供若干人物选项可以选择,请自行选择需要使用哪些库或框架来…

AI知识补全(八):多模态大模型是什么?

名人说:人生如逆旅,我亦是行人。 ——苏轼《临江仙送钱穆父》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:AI知识补全(七):AI Agent 智能…

更新docker 容器时,提前换后端jar 包,为什么会存在异常

我们现场更新时,通常都是提前将后端jar 包替换了,然后到了更新的时间,只需要更新相关的前端文件和修改各种配置,就行了。 但是最近一次更新操作中,忽然发现,提前更新后端包,会存在依赖丢失问题…

LoRA 模型微调框架核心原理及实现步骤

LoRA(Low-Rank Adaptation)模型微调框架通过低秩矩阵分解原理,实现了对大型预训练模型的高效微调。其核心原理是:在冻结预训练模型权重的基础上,向特定层注入可训练的低秩矩阵,以极少量参数(通常…

XHR.readyState详解

XHR.readyState详解 引言 XHR.readyState是XMLHttpRequest对象的一个属性,它反映了当前请求的状态。在Ajax编程中,正确理解和使用XHR.readyState对于调试和确保异步请求的正确执行至关重要。本文将详细介绍XHR.readyState的属性值、含义以及在Ajax请求中的具体应用。 XHR.…

MySQL8.4 InnoDB Cluster高可用集群使用指南

简介 高可用方案 Orchestrator: 可视化 Web 界面管理 MySQL 拓扑结构,并且兼容多种复制架构(异步、半同步、GTID),提供自动和手动的故障转移。但是8.0.21后 MySQL 更新了主从复制相关命令,Orchestrator无…

扩散模型总结

目录 定义与原理 发展历程 正向扩散过程 反向扩散过程 噪声预测网络 离散时间模型 连续时间模型 条件扩散模型 生成质量 训练稳定性 采样灵活性 图像生成 音频合成 文本生成 计算效率 模型复杂度 定义与原理 扩散模型是一种新型的生成模型,其核心原理源于热力…

【Java】Java核心知识点与相应面试技巧(七)——类与对象(二)

Java 类与对象篇 1.上期面试题解析: 上文链接:https://blog.csdn.net/weixin_73492487/article/details/146607026 创建对象时的内存分配过程? ① 加载类 ② 堆内存分配空间 ③ 默认初始化 ④ 显式初始化 ⑤ 构造器执行 this和super能否同时…

笔记:遇见未来——6G协同创新技术研讨会

https://www.cww.net.cn/article?id564308 研讨会由中国移动研究院首席科学家易芝玲博士主持。来自清华大学-中国移动联合研究院、北京邮电大学-中国移动研究院联合创新中心、东南大学-中国移动研究院联合创新中心、中关村泛联移动通信技术创新应用研究院等合作载体的知名教授…

Python Cookbook-4.14 反转字典

任务 给定一个字典,此字典将不同的键映射到不同的值。而你想创建一个反转的字典,将各个值反映射到键。 解决方案 可以创建一个函数,此函数传递一个列表推导作为dict的参数以创建需要的字典。 def invert_dict(d):return dict([(v,k) for …

深度学习在测距模型中的应用

一、单目视觉测距和双目视觉测距简介 1、单目视觉测距 模型:深度估计(Depth Estimation) 原理:通过深度学习模型(如MonoDepth2、MiDaS)或传统的计算机视觉方法(如单目相机结合物体大小推断&am…

Linux Mem -- Slub内存分配器的几点疑问及解答

目录 1 怎样通过object地址获取其对应的struct slab? 2 struct page、struct folio和struct slab类型之间转换,怎么保证内部关键数据的传递? 3 怎样判断一个内存空间是属于slab、page管理? 4 struct page 结构中 __mapcou…

pip install cryptacular卡住,卡在downloading阶段

笔者安装pip install cryptacular卡在downloading阶段,但不知道为何 Collecting cryptacularCreated temporary directory: /tmp/pip-unpack-qfbl8f08http://10.170.22.41:8082 "GET http://repo.huaweicloud.com/repository/pypi/packages/42/69/34d478310d6…

Lag-Llama时间序列模型简单实现数据预测

前言: 最近在大模型预测,简单了解了lag-llama开源项目,网上也有很多讲解原理的,这里就将如何快速上手使用说一下,只懂得一点点皮毛,有错误的地方欢迎大佬指出。 简单介绍: Lag-Llama 是一个开…

Plastiform复制胶泥:高精度表面复制与测量的高效工具

在工业制造和质量检测领域,表面复制和测量是确保产品质量的关键环节。Plastiform复制胶泥作为一种创新材料,凭借其出色的性能和多样化的应用,为用户提供了可靠的解决方案。它能够快速捕捉复杂表面的细节,确保测量结果的准确性&…

AI大模型、机器学习以及AI Agent开源社区和博客

以下梳理了适合学习 AI大模型、机器学习、AI Agent和多模态技术 的英文网站、社区、官网和博客,按类别分类整理: 一、官方网站与开源平台 1. AI大模型 (Large Language Models) • OpenAI • 官网: openai.com • 内容: GPT系列模型文档、研究论文、AP…

python 上下文管理器with

with 上下文管理器 上下文管理器示例如下:若想不使用with关键字 上下文管理器 任何实现了 enter() 和 exit() 方法的对象都可称之为上下文管理器,上下文管理器对象可以使用 with 关键字。 必须同时具有__enter__和__exit__,就可以使用with语句…