/ pure: 纯纯牛马 function addPure(uint256 _number) external pure returns(uint256 new_number){ new_number = _number + 1; }不会消耗gas对吧。传的不是状态变量

你的理解基本对了,但我们来更严谨、深入地回答这个问题。


✅ 你这段 pure 函数代码:

function addPure(uint256 _number) external pure returns(uint256 new_number) {new_number = _number + 1;
}

这是一个非常典型的 pure 函数:

  • ✅ 不读取任何链上状态变量

  • ✅ 不写入链上状态变量

  • ✅ 只是计算输入值 _number + 1,然后返回


❓会不会消耗 gas?

场景是否消耗 gas原因解释
用 call 调用(比如 Remix 蓝色按钮、本地调用)❌ 不消耗函数在本地执行,不上链,不发交易
用 sendTransaction 发交易调用✅ 会消耗虽然函数是 pure,但只要发了交易、上了链,就会消耗 gas(因为 EVM 要执行它)

✅ 举例说明:

1. 使用 Remix 调用(或 web3/ethers call):
const result = await contract.addPure(123); // ✅ 不消耗 gas

这是 本地仿真运行,不发交易,完全不花钱。适合做链下计算。


2. 使用 sendTransaction 方式调用:
await contract.addPure(123, { from: user });

就算函数是 pure,因为你发了交易,EVM 还是要执行它、打包进区块,所以:

  • ✅ 会消耗 gas(比如 21,000 ~ 30,000)

  • ❌ 不会改链上状态

  • ⚠️ 不推荐这么用,没意义还浪费 gas


🧠 小结:

函数类型pure
是否能读状态❌ 不行
是否能改状态❌ 不行
是否消耗 gas?✅ 发交易才消耗;❌ 用 call 就不消耗

🚀 一句话总结:
只要你调用 pure/view 函数时用的是 call,不发交易,就不花 gas。


需要我帮你写一个对比:pure、view、write 三种函数并观察 Remix 上 gas 消耗差异的完整演示代码吗?

二、call和sendTransaction区别

你问得非常好!这是很多 Solidity 初学者在实际调用合约时都会混淆的核心概念。我们现在来彻底讲清楚什么是 sendTransaction 方式,以及为什么你写的那种方式就是。


✅ 先定义:什么是 sendTransaction?

在以太坊中:

sendTransaction 是指:向区块链发起一笔真实交易(transaction),从一个地址调用一个合约函数,消耗 gas,可能改变链上状态。


🔍 举个类比说明:

操作方式类似于做什么会不会上链会不会花 gas使用函数类型
call查看数据、模拟执行❌ 否❌ 否view / pure
sendTransaction正式签名 + 发交易 + 广播✅ 是✅ 是(一定会)non-view/任意

✅ 回到你的例子:

await contract.addPure(123, { from: user });

这行代码,在 web3.jsethers.js 中,如果你用 await 调用了一个合约的函数,并且它不是 .call().staticCall(),那么默认行为就是发起一笔真实交易,也就是 sendTransaction


🧨 它其实等价于这样:

await contract.methods.addPure(123).send({ from: user });
  • 这就会触发一笔链上交易

  • 即使 addPure()pure 函数

  • 你也会花 gas(比如 21,000)

  • 但结果你无法直接拿到返回值,因为链上交易不返回值


⚠️ 非常重要的对比:

用法是否发交易(sendTransaction)能不能返回结果是否消耗 gas
contract.methods.foo().call()❌ 否(只读模拟)✅ 可以获取结果❌ 不花钱
contract.methods.foo().send()✅ 是(发交易)❌ 无法直接获取✅ 要花 gas

✅ 正确方式:调用 pureview 函数推荐用 .call()

const result = await contract.methods.addPure(123).call(); // ✅ 推荐方式
console.log(result); // 124
  • .call() 是本地调用,不会发交易

  • 不会花钱

  • 可以立刻获取返回值


✅ 总结一句话:

只要你用的是 .send() 或不带 .call() 的 await 函数调用,并且指定了 { from: ... },那就是发了交易(sendTransaction),会 上链、花 gas、不直接返回结果


如果你想,我可以再写一段完整的 ethers.js 示例,对比 .call.sendTransaction 两种方式的执行行为。需要吗?

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

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

相关文章

柔性电路芯片赋能脑机接口:技术融合、应用突破与前景展望

柔性电路芯片赋能脑机接口:技术融合、应用突破与前景展望 一、引言 1.1 研究背景与意义 在科技飞速发展的时代,柔性电路芯片与脑机接口的融合展现出巨大的潜力,为医疗、科研等多个领域带来了新的机遇与变革。 从医疗领域来看,随着人口老龄化的加剧以及神经系统疾病患者…

全面解析存储芯片:从Flash到DDR、铁电、内存条与SD卡

一、存储芯片分类概述 存储芯片是电子设备中用于数据存储的核心组件,根据数据保存方式可分为 易失性存储器(Volatile Memory) 和 非易失性存储器(Non-Volatile Memory)。 类型代表芯片特点典型应用易失性存储器DRAM、…

编译ADI NO-OS工程

1,先在WINdows下安装git bush 可以参考下面博客 https://blog.csdn.net/Natsuago/article/details/145647536 2.安装make 工具 可参考一下链接 https://blog.csdn.net/weixin_40727233/article/details/110353240 3,参考ADI官方链接 https://wiki.analo…

自存bro code java course 笔记(2025 及 2020)

Java Full Course for free ☕ System 是 Java 中的一个 final 类,定义在 java.lang 包中。它的 构造方法是 private 的,意味着你无法通过 new System() 来创建对象。它的所有常用成员(如 System.out, System.in, System.err, currentTimeMil…

opencv基础的图像操作

目录 1.安装opencv-python 2.基础的图像操作 3.绘制几何图形 3.1.绘制直线 3.2.绘制矩形 3.3.绘制圆形 3.4.向图像中添加文字 总结 1.安装opencv-python pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python 2.基础的图像操作 # 导入库 import c…

Kali制作Linux木马

环境描述:攻击机:kali-Linux2025靶机:Linux-Centos8本文章主要介绍怎么通过kali制作Linux木马控制linux,不要用于非法用途,法律是底线不要触碰,提升自己的网络安全技能,如有用于非法用途自行承担…

常见user agent

常见user agent pc端ua chrome “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36”“Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11”“Mo…

Windows 11 Enterprise LTSC 转 IoT

Windows 11 Enterprise LTSC 转 Windows 11 IoT Enterprise LTSC 微软官方并未给出Windows 11 IoT Enterprise LTSC中文版的镜像文件,但可以通过Windows 11 Enterprise LTSC版本的进行转换。 二者主要区别概览 特性Windows 11 Enterprise LTSCWindows 11 IoT Ent…

【手动安装并启动后, 如何查看mysql数据库密码以及重置密码(centos8)】

在 CentOS 8 上手动安装 MySQL 后,初始密码的位置取决于安装方式。以下是查找密码的步骤: 1. 通过 yum/dnf 安装的 MySQL 8.0 如果使用官方 RPM 源安装,初始密码会在安装时自动生成并记录在日志中: # 查看 MySQL 初始密码 sudo…

STM32第十四天串口

一:串口发送字符和字符串和printf重定向 usart.c #include "stm32f10x.h" #include "usart.h" #include "stdio.h"void my_usart_Init()//千万不要和32库里面串口定于的名字一样,不然会报错 {GPIO_InitTypeDef my_usart…

ether0 大语言推理模型生成SMILES 的分子

参考: https://huggingface.co/futurehouse/ether0 ether0 是一个 24B 语言模型,用于用英语进行推理并输出分子结构作为 SMILES。它源自 Mistral-Small-24B-Instruct-2501 的微调和强化学习训练。用英语提问,但问题中也可以包含指定为 SMILE…

基于AndServer的RPC架构:Android原生SO文件远程调用实战指南

引言:企业级原生代码集成的范式革新 在移动混合架构应用中,原生代码(SO)调用面临​​三重技术瓶颈​​: ​​环境强耦合​​:依赖应用上下文,复用成本增加200%(Gartner 2023数据)​​安全限制…

spring-ai 1.0.0 (3)交互增强:Advisor 顾问模块

核心组件 API 由非流式处理方案和 和 流式处理方案组成。 在1.0.0版本中,顾问链AdvisorChain相关接口已经弃用,可能是老版本的思想不太合伦理吧 可以使用下面的方式实现多个顾问按oder顺序访问模型 public ChatController(ChatClient.Builder chatClien…

【机器学习笔记Ⅰ】2 线性回归模型

线性回归(Linear Regression)是机器学习中最基础、最常用的监督学习模型之一,用于解决回归问题(预测连续数值输出)。它的核心思想是通过拟合一条直线(或超平面)来描述输入特征(自变量…

2025.7.6总结

第天,Morning power 1.四四呼吸,做了10分钟。 2.感恩环节:有两周没去新励成上课了,感谢今天早上去上了当众讲话,遇到了不少老朋友,聊的还蛮开心滴,满足了我的社交需求。其次,在台上做了个小面试…

RabbitMQ 高级特性之死信队列

1. 简介 在前面的高级特性中,我们介绍了重试机制和 TTL,那么产生下列问题: 在重试机制中,当消费者消费消息发生异常时,会触发消息重发机制,由于我们配置了最大的重发次数,那么当超过这个次数后…

如何选择合适的工业相机快门种类

在工业相机领域,常见的三种快门类型:全局快门(Global Shutter)、卷帘快门(Rolling Shutter)以及全局复位式卷帘快门(Global - reset rolling Shutter)。我们主要来讲讲全局快门&…

uloop源码剖析

uloop是libubox库的核心模块,libubox是OpenWrt基础库之一,用来提供事件驱动、基础数据结构等。 uloop支持文件描述符监控、超时定时器、子进程管理、信号处理事件、间隔定时器等五大核心功能。 主体框架 uloop循环的主体框架有三个函数构成&#xff0c…

Mac电脑 虚拟机 VMware Fusion13

VMware Fusion mac 不仅能让你在Mac苹果电脑上运行Windows或Linux系统、使用非Mac平台的应用,而且还可以支持各种USB硬件设备。 原文地址:VMware Fusion 13 Mac虚拟机

嵌套容器是隐射宿主机的路径而不是容器的路径

嵌套容器是隐射宿主机的路径而不是容器的路径 为什么?容器中的 Docker 运行流程 为什么? 这个问题涉及 Docker 的工作原理,特别是嵌套容器的行为。让我们逐步分析为什么在容器内部启动其他容器时,文件系统的挂载行为是基于 宿主机…