当前位置: 首页 > news >正文

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

文章目录

    • 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 证明,确保交易正确性。

相关文章:

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

文章目录 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-207.…...

C# 字符串(String)

C# 字符串(String) 引言 在C#编程语言中,字符串(String)是处理文本数据的基础。字符串是字符的有序集合,用于存储和处理文本信息。C#的字符串类型是System.String,它是一个引用类型&#xff0…...

Unity Shader 学习18:Shader书写基本功整理

1. Drawer [HideInInspector]:面板上隐藏[NoScaleOffset]:隐藏该纹理贴图的TillingOffset[Normal]:检查该纹理是否设为法线贴图[HDR]:将颜色类型设为高动态范围颜色(摄像机也要开启HDR才有效果)[PowerSlid…...

构建第一个SpringBoot程序

第一种方式: 注,构建过程中一定要联网 new module -->选择spring Initializr 选择Web --> 勾选Spring Web --> create 构建好的项目如下 这里的 .mvn .git* HELP.md mvnw* 都可以删除 编辑好controller 之后 点击即可运行第一个springbo…...

Java高级JVM知识点记录,内存结构,垃圾回收,类文件结构,类加载器

JVM是Java高级部分,深入理解程序的运行及原理,面试中也问的比较多。 JVM是Java程序运行的虚拟机环境,实现了“一次编写,到处运行”。它负责将字节码解释或编译为机器码,管理内存和资源,并提供运行时环境&a…...

使用飞书API自动化更新共享表格数据

飞书API开发之自动更新共享表格 天马行空需求需求拆解1、网站数据爬取2、飞书API调用2.1 开发流程2.2 创建应用2.3 配置应用2.4 发布应用2.5 修改表格权限2.6 获取tenant_access_token2.7 调用API插入数据 总结 天马行空 之前一直都是更新的爬虫逆向内容,工作中基本…...

C++中ShellExecute函数使用方法说明,如果一开始参数为隐藏,后面还能再显示出来吗

文章目录 一、ShellExecute基础用法函数原型关键参数 nShowCmd示例代码:启动程序并隐藏窗口 二、隐藏后能否重新显示窗口直接答案 三、实现隐藏后显示窗口的步骤1. 获取目标窗口句柄2. 显示窗口 四、完整流程示例五、注意事项六、总结 在C中使用ShellExecute函数时&…...

MySQL的多表查询

我们之前在讲解SQL语句的时候,讲解了DQL语句,也就是数据查询语句,但是之前讲解的查询都是单表查询,而本章节我们要学习的则是多表查询操作,主要从以下几个方面进行讲解。 5.1 多表关系 项目开发中,在进行…...

(UI自动化测试web端)第二篇:元素定位的方法_css定位之层级选择器

看代码里的【find_element_by_css_selector( )】( )里的表达式怎么写? 文章介绍了第五种写法,层级选择器 ,你要根据网页中的实际情况来判断自己到底要用哪一种方法来进行元素定位。每种方法都要多练习,全都熟了之后你在工作当中使…...

《Python Web部署应知应会》No2:如何基于FastAPI 和 OLLAMA 架构实现高并发 AI 推理服务

《Python Web部署应知应会》No2:如何基于FastAPI 和 OLLAMA 架构实现高并发 AI 推理服务(上) 摘要: 在 FastAPI 和 OLLAMA 架构中实现高并发 AI 推理服务,并优化性能指标采集和缓存策略,可以充分利用 asy…...

【LeetCode 题解】算法:8.字符串转换整数(atoi)

一、问题描述 在 LeetCode 的算法题库里,有这样一道题目,要求我们实现一个名为 myAtoi(string s) 的函数,其功能是将给定的字符串转换为一个 32 位有符号整数。具体的转换规则如下: 处理步骤 剔除前导空格:读取字符串…...

Uni-app页面信息与元素影响解析

获取窗口信息uni.getWindowInfo {pixelRatio: 3safeArea:{bottom: 778height: 731left: 0right: 375top: 47width: 375}safeAreaInsets: {top: 47, left: 0, right: 0, bottom: 34},screenHeight: 812,screenTop: 0,screenWidth: 375,statusBarHeight: 47,windowBottom: 0,win…...

飞书电子表格自建应用

背景 coze官方的插件不支持更多的飞书电子表格操作,因为需要自建应用 飞书创建文件夹 创建应用 开发者后台 - 飞书开放平台 添加机器人 添加权限 创建群 添加刚刚创建的机器人到群里 文件夹邀请群 创建好后,就可以拿到id和key 参考教程: 创…...

《云原生安全攻防》-- K8s容器安全:权限最小化与SecurityContext

一旦容器被入侵,攻击者就可以获取到容器的权限,所以,容器运行过程中,我们首先需要考虑的是容器的权限问题。 在本节课程中,我们将重点介绍权限最小化以及如何使用SecurityContext来管理容器的权限。 在这个课程中&…...

uniapp中的流式输出

一、完整代码展示 目前大多数的ai对话都是流式输出&#xff0c;也就是对话是一个字或者多个字逐一进行显示的下面是一个完整的流式显示程序&#xff0c;包含的用户的消息发出和ai的消息回复 <template><view class"chat-container"><view class&quo…...

PipeWire 音频设计与实现分析一——介绍

PipeWire 是一个基于图的媒体处理引擎&#xff0c;一个可以运行多媒体节点图的媒体服务器&#xff0c;是 Linux 的音频/视频总线&#xff0c;它管理 Linux 系统中&#xff0c;不同应用程序对音频和视频设备的共享访问。它提供了一个本地客户端音频 API&#xff0c;但也提供兼容…...

MVC 文件夹:架构之美,开发之魂

MVC 文件夹&#xff1a;架构之美&#xff0c;开发之魂 引言 在软件开发领域&#xff0c;MVC&#xff08;Model-View-Controller&#xff09;架构模式已经成为了一种广泛应用的架构设计理念。它将应用程序分为三个核心部分&#xff1a;模型&#xff08;Model&#xff09;、视图…...

IO模型之于并发编程模型、并发模型之于架构模式

一、并发编程模型主要包括以下几种‌&#xff1a; ‌多进程模型‌&#xff1a;利用操作系统的进程模型来实现并发。每个用户请求接入时都会创建一个进程&#xff0c;适用于I/O密集型任务。缺点是创建进程的开销高&#xff0c;且上下文切换的开销也大。典型应用如Apache Web Ser…...

Postman 7.3.5 旧版下载指南(Win64)及注意事项

Postman-win64-7.3.5-Setup 是 Postman 的一个旧版本&#xff08;2019年发布&#xff0c;适用于 Windows 64位系统&#xff09;。以下是相关信息和建议&#xff1a; 1. Postman 7.3.5 版本说明 功能&#xff1a;用于 API 开发、测试和协作。 系统要求&#xff1a;Windows 64位…...

​Flink/Kafka在python中的用处

一、基础概念 1. ​Apache Kafka 是什么&#xff1f; ​核心功能&#xff1a;Kafka 是一个分布式流处理平台&#xff0c;主要用于构建实时数据管道和流式应用程序。​核心概念&#xff1a; ​生产者&#xff08;Producer&#xff09;​&#xff1a;向 Kafka 发送数据的程序。…...

【Spring Boot 与 Spring Cloud 深度 Mape 之十】体系整合、部署运维与进阶展望

【Spring Boot 与 Spring Cloud 深度 Mape 之十】体系整合、部署运维与进阶展望 #微服务实战 #Docker #Kubernetes #SpringSecurity #OAuth2 #分布式事务 #Seata #ServiceMesh #总结 #SpringCloud #SpringBoot 系列终章&#xff1a;经过前九篇 [【深度 Mape 系列】] 的系统学习…...

轻松理解Python装饰器:从基础到应用

一、为什么需要装饰器 想象一下&#xff0c;你写了很多函数来完成不同的任务&#xff0c;突然有个新需求&#xff1a;在每个函数执行前打印一条“函数开始执行”的消息&#xff0c;执行后打印“函数执行结束”。如果没有装饰器&#xff0c;你就得在每个函数里手动添加这两条打…...

RabbitMQ 技术详解:异步消息通信的核心原理与实践

这里写目录标题 RabbitMQ 技术详解&#xff1a;异步消息通信的核心原理与实践一、RabbitMQ 本质剖析核心架构组件 二、核心功能与应用场景主要作用典型应用场景 三、工作流程深度解析消息传递流程关键协议机制 四、Java 实现示例1. 依赖配置&#xff08;Maven&#xff09;2. 消…...

MySQL-- 多表查询的分类,SQL92与SQL99,7种JOIN的实现,SQL99语法的新特性

目录 一&#xff0c;多表查询的分类 角度1&#xff1a;等值连接 vs 非等值连接 角度2&#xff1a;自连接 vs 非自连接 角度3&#xff1a;内连接 vs 外连接 二&#xff0c;SQL92语法实现内连接&#xff1a;见上&#xff0c;略SQL92语法实现外连接&#xff1a;使用 -…...

Selenium文件上传

在 Web 自动化测试中,文件上传是一项常见的任务。不同的网站和前端技术可能导致上传方式有所不同,因此需要采用不同的方法进行处理。 方法 1:使用 send_keys() 直接上传(最常用) 适用场景: 页面中 有标准的 <input type="file"> 标签。 不需要弹出 Wind…...

getID3获取本地或远程视频时长

音频文件也可使用&#xff0c;使用ffmeg安装太复杂了 附ffmpeg方式&#xff1a;centos下安装ffmpeg_yum安装ffmpeg-CSDN博客 使用composer先安装 composer require james-heinrich/getid3 获取本地视频 //获取本地视频$video_path $_SERVER[DOCUMENT_ROOT].$params[video];…...

OpenAI流式解析

OpenAI 流式的代码&#xff1a; 首选一般请使用os.getenv 去读环境变量的内容 注意使用pip install python-dotenv 的安装方法 load_dotenv 是这个库提供的一个函数&#xff0c;用于读取 .env 文件并将其中定义的键值对设置为系统的环境变量。 默认情况下&#xff0c;load_…...

在Trae中设置Python解释器版本

Python 是一种广泛使用的高级编程语言&#xff0c;因其简洁易读的语法和强大的功能而备受欢迎。随着 Python 的不断发展&#xff0c;多个版本相继发布&#xff0c;每个版本都带来了新特性和改进。然而&#xff0c;这也带来了一些问题&#xff0c;比如不同的工程&#xff0c;需要…...

第 6 章:优化动态分配内存的变量_《C++性能优化指南》_notes

优化动态分配内存的变量 第六章核心知识点详解总结第六章 动态内存优化 重点难点梳理 一、多选题&#xff08;每题至少2个正确答案&#xff09;二、设计题答案与详解多选题答案设计题答案示例 第六章核心知识点详解 动态内存分配的开销 知识点&#xff1a;动态内存分配需要调用…...

图像数据增强教程:为目标检测任务准备数据

目录 一、简介 二、代码结构 三、环境要求 四、数据增强类 4.1 调整增强概率和参数 4.2 增强方法参数 五、数据增强主函数 六、主函数 效果展示 完整代码 一、简介 在目标检测任务中&#xff0c;数据增强是一种关键技术&#xff0c;通过对原始图像应用多种变换来增加…...

Unity编辑器功能及拓展(2) —Gizmos编辑器绘制功能

Unity中的Gizmos功能是用于在场景视图中绘制辅助图形或图标的工具&#xff0c;帮助开发者在编辑模式下直观调试和可视化游戏对象的位置、范围、方向等信息。 一.定义概述 Gizomsd 概述 Gizoms是Unity提供的一个API&#xff0c;或者叫做一个工具类&#xff0c;包含一系列静态…...

HarmonyOS WebSocket全场景应用开发深度解析

注&#xff1a;适用版本&#xff08;Harmony OS NEXT / 5.0 / API 12 &#xff09; 一、最终效果预览 二、基础代码结构 Entry Component struct ChatApp {State messages: Message[] [] // 所有聊天记录State inputText: string "" // 输入框内容State isCon…...

JCRQ1河马算法+消融实验!HO-CNN-LSTM-Attention系列四模型多变量时序预测

JCRQ1河马算法消融实验&#xff01;HO-CNN-LSTM-Attention系列四模型多变量时序预测 目录 JCRQ1河马算法消融实验&#xff01;HO-CNN-LSTM-Attention系列四模型多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于HO-CNN-LSTM-Attention、CNN-LSTM-Attent…...

ubuntu 安装 postgresql

在 Ubuntu 系统中安装 PostgreSQL 的步骤如下&#xff1a; 步骤 1&#xff1a;更新软件包列表 sudo apt update步骤 2&#xff1a;安装 PostgreSQL Ubuntu 默认仓库包含 PostgreSQL&#xff0c;直接安装&#xff1a; sudo apt install postgresql postgresql-contrib -ypost…...

深入实践:基于WebSocket的全球化金融数据实时对接方案。 马来西亚、印度、美国金融数据API

深入实践&#xff1a;基于WebSocket的全球化金融数据实时对接方案 在全球金融市场中&#xff0c;实时数据的高效获取与处理是量化交易、行情监控等场景的核心能力。本文将以技术实践为核心&#xff0c;详细解析如何通过WebSocket技术实现美国、印度、马来西亚等多国金融数据&a…...

深度学习处理时间序列(5)

Keras中的循环层 上面的NumPy简单实现对应一个实际的Keras层—SimpleRNN层。不过&#xff0c;二者有一点小区别&#xff1a;SimpleRNN层能够像其他Keras层一样处理序列批量&#xff0c;而不是像NumPy示例中的那样只能处理单个序列。也就是说&#xff0c;它接收形状为(batch_si…...

Linux: 进程间通信

目录 一 前言 二 进程间通信目的 三 进程间通信方法 四 管道通信 1. 进程如何通信 2.管道概念 2.1匿名管道 2.2 匿名管道对多个进程的控制 2.3 命名管道 2.4 命名管道原理 一 前言 在我们学习进程的时候&#xff0c;我们知道正是因为程序地址空间的存在&#xff…...

为什么idea显示数据库连接成功,但操作数据库时,两边数据不同步

今日份小bug又叕又来了&#xff01; 一、原因分析 1. 未提交的事务 - IDEA 中执行了修改操作但未提交事务 - 其他客户端有未提交的修改 2. 连接隔离级别问题 - 不同连接使用了不同的事务隔离级别 - 读未提交(READ UNCOMMITTED)导致看到未提交数据 3. 多客户端同时操作…...

VMware中新建Ubuntu虚拟机系统,并安装Anaconda

详细介绍 Ubuntu18.04版本的安装Anaconda的安装 Ubuntu20.04版本的安装给出其他参考 安装Ubuntu18.04 新建虚拟机 如果不习惯图文形式的&#xff0c;也可参考该up主的环境安装分享&#xff0c;和我如下记录有些不同&#xff0c;但不影响&#xff0c;大部分均一致。 …...

LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板

LangChain 基础系列之 Prompt 工程详解&#xff1a;从设计原理到实战模板 一、揭开 LangChain 的 “灵魂引擎”&#xff1a;Prompt 的核心作用 在 LangChain 构建的智能应用中&#xff0c;Prompt&#xff08;提示词&#xff09;堪称驱动大模型的 “神经中枢”。这个承载着任务…...

项目如何安装本地tgz包并配置局部registry

一、判断包来源是否正确 1. 检查url curl <registry_url>2. 查看包是否存在 npm view <package_name> --registry<registry_url>二、局部registry配置步骤&#xff1a; 1. 全局配置 如果你希望对所有项目生效&#xff0c;可以将这行配置添加到全局.npmr…...

unity客户端面试高频2(自用)

标题是我 1.构造函数为什么不能为虚函数&#xff1f;析构函数为什么要虚函数&#xff1f;2.C智能指针3.左值和右值完美转发 4.深拷贝与浅拷贝5.malloc VS new 你们知道吗 1.构造函数为什么不能为虚函数&#xff1f;析构函数为什么要虚函数&#xff1f; 构造函数不能定义为虚函…...

【12】Ajax的原理和解析

一、前言 二、什么是Ajax 三、Ajax的基本原理 3.1 发送请求 3.2 解析内容 3.3 渲染网页 3.4 总结 四、Ajax 分析 五、过滤请求-筛选所有Ajax请求 一、前言 当我们在用 requests 抓取页面的时候&#xff0c;得到的结果可能会和在浏览器中看到的不一样&a…...

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

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

Python np.vectorize函数介绍

np.vectorize 是 NumPy 提供的一个 用于将标量函数(scalar function)向量化 的工具,使其可以作用于 NumPy 数组,类似于 通用函数(ufunc) 的行为。 1️⃣ np.vectorize 语法 numpy.vectorize(pyfunc, otypes=None, signature=None, excluded=None, cache=False)📌 参数…...

HarmonyOS NEXT状态管理实践

在HarmonyOS NEXT开发中&#xff0c;状态管理是构建高效、响应式应用的核心。本文深入探讨状态管理的最佳实践&#xff0c;结合代码示例与案例分析&#xff0c;帮助开发者掌握这一关键技能。 一、状态管理装饰器的合理使用 HarmonyOS NEXT提供多种状态管理装饰器&#xff0c;…...

广告牌变“高空炸弹“?智能预警终端筑起安全防线!

近年来&#xff0c;随着城市发展步伐加快&#xff0c;广告牌已成为城市形象的重要载体。但与此同时&#xff0c;因设计缺陷、违规搭建、维护缺失等问题导致的广告牌坠落事故频发&#xff0c;给市民生命财产安全带来严重威胁。据不完全统计&#xff0c;我国2000万块户外广告牌中…...

scss预处理器对比css的优点以及基本的使用

本文主要在vue中演示&#xff0c;scss的基本使用。安装命令 npm install sass sass-loader --save-dev 变量 SCSS 支持变量&#xff0c;可将常用的值&#xff08;如颜色、字体大小、间距等&#xff09;定义为变量&#xff0c;方便重复使用和统一修改。 <template><…...

Redis 单线程

Redis 读写是否是单线程&#xff1f; 核心数据操作仍然是单线程 Redis 主要采用 单线程执行命令&#xff0c;这是因为&#xff1a; 避免加锁&#xff1a;如果多个线程并发修改数据&#xff0c;就需要加锁&#xff0c;而 Redis 采用单线程保证操作的原子性&#xff0c;无需加…...

Node.js 下载安装及环境配置教程、卸载删除环境配置超详细步骤(附图文讲解!) 从零基础入门到精通,看完这一篇就够了

Node.js 安装 一、进入官网地址下载安装包 Node.js — Download Node.js 选择对应你系统的Node.js版本&#xff0c;这里我选择的是Windows系统、64位 Tips&#xff1a;如果想下载指定版本&#xff0c;点击【以往的版本】&#xff0c;即可选择自己想要的版本下载 二、安装程序…...