当前位置: 首页 > 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.dtcms.com/a/287841.html

相关文章:

  • 智能合约代理与批量调用优化:最小代理与MultiCall的应用
  • Python趣味算法:百钱百鸡问题——双重循环优化与算法效率分析
  • 【Bluedroid】btif_av_sink_execute_service之服务器启用源码流程解析
  • Typecho博客Ajax评论功能实现全攻略
  • 我是怎么设计一个防重复提交机制的(库存出库场景)
  • 【C语言进阶】结构体
  • Windows原生环境配置Claude Code MCP(通过JSON)
  • 简单易懂,快表 详解
  • 有趣的算法题:有时针分针秒针的钟表上,一天之内,时针和分针可重合多少次?分别在什么时刻重合?
  • 【Python】Pandas
  • rustdesk客户端编译
  • QT窗口(7)-QColorDiag
  • 根据ARM手册,分析ARM架构中,原子操作的软硬件实现的底层原理
  • tailscale在ubuntu22.04上使用
  • Unity物理响应函数与触发器
  • LVS详解
  • GitHub 趋势日报 (2025年07月18日)
  • 【图像处理基石】什么是小波变换?
  • CAN总线负载率计算及示例说明
  • 【CVPR2025】计算机视觉|RORem:让物体移除“脱胎换骨”!
  • Streamlit 官翻 2 - 开发指南 Develop Concepts
  • 昇思+香橙派 AI 开发实践:DeepSeek 全流程指南(基于 openEuler)
  • lesson18:Python函数的闭包与装饰器(难)
  • TypeScript 泛型详解:从基础到实战应用
  • 3.条件判断:让程序学会做选择
  • Web开发 03
  • import.meta.glob 与 import.meta.env、import的几个概念的简单回顾
  • react+antd+表格拖拽排序以及上移、下移、移到顶部、移到底部
  • 408数据结构强化(自用)
  • 实现el-select下拉框,下拉时加载数据