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

view和pure的区别

在 Solidity 中,view 是一个函数修饰符,用于声明不修改状态变量的函数。它告诉编译器和调用者:这个函数只读不写,不会消耗 gas(除非在交易中调用)。


view 的核心作用

特性说明
只读不会修改区块链上的任何状态(如变量、余额、事件等)。
不消耗 gas如果通过 call 调用(如 Web3.js、Ethers.js 的 .call()),不消耗 gas。
可在合约内部调用其他函数可以安全地调用它,不用担心副作用。
不能修改状态以下操作会报错:
• 修改状态变量
• 触发事件
• 创建合约
• 使用 selfdestruct

✅ 使用示例

pragma solidity ^0.8.0;contract Example {uint public number = 42;// ✅ 正确:只读函数function getNumber() public view returns (uint) {return number;}// ✅ 正确:使用 view 读取多个变量function getDouble() public view returns (uint) {return number * 2;}// ❌ 错误:试图修改状态,编译失败function setNumber(uint _n) public view {number = _n; // Error: Function declared as view}
}

✅ 什么时候用 view

场景示例
获取变量值balanceOf(address)
计算结果getPrice()
验证条件isValidUser(address)
返回数组/结构体getUserInfo(address)

✅ 对比其他修饰符

修饰符是否修改状态是否消耗 gas用途
view❌ 不修改❌ 不消耗(除非在交易中)只读
pure❌ 不读也不写❌ 不消耗纯计算
payable✅ 可接收 ETH✅ 消耗 gas转账

✅ 总结一句话

如果你的函数只是读取数据,就用 view;如果连数据都不读,只是计算,就用 pure

http://www.lryc.cn/news/593315.html

相关文章:

  • 电脑windows系统深度维护指南
  • Validation - Spring Boot项目中参数检验的利器
  • 前端开发技巧:浏览器模拟弱网络环境
  • 中间件安全攻防全解:从Tomcat到Weblogic反序列化漏洞介绍
  • 暑假--作业3
  • Redis的持久化-RDB
  • 关于个人博客系统的测试报告
  • 【2025最新】使用neo4j实现GraphRAG所需的向量检索
  • BeanFactory 和 FactoryBean 的区别
  • Netty网络聊天室及扩展序列化算法
  • (后者可以节约内存/GPU显存)Pytorch中求逆torch.inverse和解线性方程组torch.linalg.solve有什么关系
  • 单调队列深度解析(下)
  • 7.19 换根dp | vpp |滑窗
  • 物联网-规则引擎的定义
  • LeetCode中等题--167.两数之和II-输入有序数组
  • RT-Thread的概念和移植
  • Spring AI 项目实战(十八):Spring Boot + AI + Vue3 + OSS + DashScope 实现高效语音识别系统(附完整源码)
  • OpenCV 官翻7 - 对象检测
  • Edge浏览器设置网页自动翻译
  • #Datawhale组队学习#7月-强化学习Task2
  • 医疗AI与融合数据库的整合:挑战、架构与未来展望(上)
  • 高压电工作业证考试核心考点:电气安全基础篇
  • MCP 协议详细分析一 initialize ping tools/list tools/call
  • 初识C++——开启新旅途
  • 简单易懂,两级页表(多级页表)
  • 文生图-StoryGAN:用于故事可视化的顺序条件GAN
  • Python观察者模式详解:从理论到实战
  • kombu 运行超长时间任务导致RabbitMQ消费者断开
  • Linux 内存管理(2):了解内存回收机制
  • Java程序猿搬砖笔记(十九)