再学:函数可见性、特殊函数、修饰符
目录
1.可见性
2.合约特殊函数 constructor && getter
3. receive && fallback
4.view && pure
5.payable
6.自定义函数修饰符 modifier
1.可见性
public:内外部
private:内部
external:外部访问
internal:内部及继承
一般默认是external
2.合约特殊函数 constructor && getter
constructor:初始化逻辑
constructor(address sender) {
sender = msg.sender;
}
getter:所有public状态变量创建getter函数

3. receive && fallback
receive“接受以太币时回调
fallback:没有匹配函数标识符时,fallback会被调用,如果是转账时,可以用receive也可以用fallback。也就是如果没有receive函数就会调用fallback函数
receive函数用于处理接收到的以太币且没有附带数据的情况
fallback函数用于处理接收到的以太币且附带数据的情况,或者处理没有匹配函数名的调用。

transfer完后,receive一下,告诉合约,记录一下谁给我转账等等细节。
4.view && pure
view:不修改状态,只做读取
pure:不读取状态,只是做一些计算逻辑
view:
在以太坊智能合约中,
view是一个状态修饰符(state mutability modifier),它用于声明函数在执行时不会修改合约的状态。换句话说,view函数可以读取合约的状态变量,但不允许写入或改变这些变量。使用
view修饰符的函数通常用于查询操作,例如返回某些数据或计算某些值,而不会触发任何状态变化。这对于减少 gas 费用和确保函数的幂等性(即多次执行结果相同)非常有用。
function deposited(uint256 _pid, address _user) public view returns (uint256) {UserInfo storage user = userInfo[_pid][_user];return user.amount;
}
-
deposited函数被声明为public view,这意味着:-
public:函数可以被任何外部调用者访问。 -
view:函数不会修改合约的状态,只读取数据。
-
这个函数的作用是查询特定用户在特定池(由 _pid 标识)中的存款数量。它通过访问 userInfo 映射来获取用户信息,然后返回用户的 amount 属性。
为什么使用 view?
-
节省 Gas:
view函数不需要支付 gas 费用来更改状态,因此调用者可以以更低的成本查询数据。 -
安全性:由于
view函数不会修改状态,它们通常被认为是安全的,不会引发意外的状态变化。 -
优化:在设计合约时,合理使用
view可以优化性能和成本,使得查询操作更加高效。
总之,view 修饰符在智能合约中用于声明只读函数,这对于实现高效的数据查询和减少不必要的 gas 消耗非常重要。
pure:
在Solidity中,
pure关键字用于声明函数是纯函数,即函数不读取或修改合约的状态变量,并且不与外部合约进行交互。纯函数只根据输入参数计算结果,并返回一个值。使用pure关键字可以提供以下好处:在编译时进行静态检查,确保函数不会修改状态或与外部合约交互;提供更好的可读性和可理解性,明确函数的行为和约束;允许Solidity编译器进行更多的优化,提高代码执行效率。例如,以下是一个使用
pure关键字的函数定义:
function add(uint256 a, uint256 b) public pure returns (uint256) {return a + b;
}
在这个例子中,add函数是一个纯函数,它不接受任何状态变量作为输入,也不会修改任何状态变量。它仅仅执行两个数的加法运算并返回结果。由于这个函数不涉及合约的状态,因此它被标记为pure,这有助于提高代码的安全性和执行效率。
5.payable
用payable修饰函数,表示调用函数可以被支付ETH
支付的ETH值,可以用msg.value获取
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract PaymentProcessor {address public owner;event PaymentReceived(address indexed sender, uint amount);constructor() {owner = msg.sender;}// 这个函数可以用payable修饰,表示它可以接收ETHfunction pay() public payable {require(msg.value > 0, "Please send some ETH.");// 触发事件,记录支付信息emit PaymentReceived(msg.sender, msg.value);}// 提款函数,只有合约拥有者可以调用function withdraw() public {require(msg.sender == owner, "Only the owner can withdraw.");// 提取合约中的所有ETH到拥有者地址payable(owner).transfer(address(this).balance);}
}
6.自定义函数修饰符 modifier
效果如图:


相关文章:
再学:函数可见性、特殊函数、修饰符
目录 1.可见性 2.合约特殊函数 constructor && getter 3. receive && fallback 4.view && pure 5.payable 6.自定义函数修饰符 modifier 1.可见性 public:内外部 private:内部 external:外部访问 internal&…...
基于Spring Boot的项目申报系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
Web元件库 ElementUI元件库+后台模板页面(支持Axure9、10、11)
Axure是一款非常强大的原型设计工具,它允许设计师和开发者快速创建高保真原型,以展示应用或网站的设计和功能。通过引入各种元件库,如ElementUI元件库,可以极大地丰富Axure的原型设计能力,使其更加贴近实际开发中的UI组…...
若依excel工具类导出excel模板数据带下拉映射
导出模板代码,原理是combo属性 传递一个数组 里面是label下拉数组。 Overridepublic void downloadTemplate(HttpServletResponse response) {ExcelUtil<ThMachineryManageExcel> util new ExcelUtil<>(ThMachineryManageExcel.class);List<SysDist…...
孜然SEO静态页面生成系统V1.0
孜然SEO静态页面生成系统,1秒生成上万个不同的静态单页系统,支持URL裂变采集,采集的内容不会重复,因为程序系统自带AI重写算法,AI扩写算法,可视化的蜘蛛池系统让您更清楚的获取到信息! 可插入二…...
Python爬虫-爬取汽车之家燃油车月销量榜数据
前言 本文是该专栏的第48篇,后面会持续分享python爬虫干货知识,记得关注。 在本文中,笔者已整理18篇汽车平台相关的爬虫项目案例。对此感兴趣的同学,可以直接翻阅查看。 而本文,笔者将以汽车之家平台为例子。基于Python爬虫,实现批量爬取全部“燃油车”的月销量数据。废…...
Blender-MCP服务源码3-插件开发
Blender-MCP服务源码3-插件开发 Blender-MCP服务源码解读-如何进行Blender插件开发 1-核心知识点 1)使用Blender开发框架学习如何进行Blender调试2)学习目标1-移除所有的Blender业务-了解如何MCP到底做了什么?3)学习目标2-模拟MC…...
C语言和C++到底有什么关系?
C 读作“C 加加”,是“C Plus Plus”的简称。 顾名思义,C 就是在 C 语言的基础上增加了新特性,玩出了新花样,所以才说“Plus”,就像 Win11 和 Win10、iPhone 15 和 iPhone 15 Pro 的关系。 C 语言是 1972 年由美国贝…...
【华三】路由器交换机忘记登入密码或super密码的重启操作
【华三】路由器交换机忘记登入密码或super密码的重启操作 背景步骤跳过认证设备:路由器重启设备翻译说明具体操作 跳过当前系统配置重启设备具体操作 背景 当console口的密码忘记,或者说本地用户的密码忘记,其实这时候是登入不了路由器的&am…...
DeepSeek-prompt指令-当DeepSeek答非所问,应该如何准确的表达我们的诉求?
当DeepSeek答非所问,应该如何准确的表达我们的诉求?不同使用场景如何向DeepSeek发问?是否有指令公式? 目录 1、 扮演专家型指令2、 知识蒸馏型指令3、 颗粒度调节型指令4、 时间轴推演型指令5、 极端测试型6、 逆向思维型指令7、…...
HOVER:人形机器人的多功能神经网络全身控制器
编辑:陈萍萍的公主一点人工一点智能 HOVER:人形机器人的多功能神经网络全身控制器HOVER通过策略蒸馏和统一命令空间设计,为人形机器人提供了通用、高效的全身控制框架。https://mp.weixin.qq.com/s/R1cw47I4BOi2UfF_m-KzWg 01 介绍 1.1 摘…...
HTML中滚动加载的实现
设置div的overflow属性,可以使得该div具有滚动效果,下面以div中包含的是table来举例。 当table的元素较多,以至于超出div的显示范围的话,观察下该div元素的以下3个属性: clientHeight是div的显示高度,scrol…...
Python----计算机视觉处理(Opencv:形态学变换)
一、形态学变化 形态学变换(Morphological Transformations)是一种基于形状的图像处理技术,主要处理的对象为二值化图像。 形态学变换有两个输入和一个输出:输入为原始图像和核(即结构化元素),输…...
opencv中stitch图像融合
openv版本: opencv249 vs :2010 qt : 4.85 #include "quanjing.h"#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <open…...
redis十大应用数据类型具体使用及其应用
Redis 提供了多种数据类型,每种数据类型都有其特定的应用场景。下面是 Redis 十大应用数据类型的具体使用及其应用场景: 1. 字符串 (String) 描述:Redis 中最基本的数据类型,用于存储简单的字符串数据。字符串可以是文本、数字&a…...
HTML 中如何设置页面的语言,这对 SEO 和无障碍访问有什么影响?
大白话HTML 中如何设置页面的语言,这对 SEO 和无障碍访问有什么影响? 1. HTML 中设置页面语言的方法 在 HTML 里,你可以借助 <html> 标签的 lang 属性来设定页面的语言。lang 属性的值是一个符合 ISO 639 - 1 标准的双字母语言代码&a…...
matlab R2024b下载教程及安装教程(附安装包)
文章目录 前言一、matlab R2024b安装包下载二、matlab R2024b安装教程 前言 为帮助大家顺利安装该版本软件,特准备matlab R2024b下载教程及安装教程,它将以简洁明了的步骤,指导你轻松完成安装,开启 MATLAB R2024 的强大功能之旅。…...
游戏引擎学习第167天
回顾和今天的计划 我们不使用引擎,也不依赖库,只有我们自己和我们的小手指在敲击代码。 今天我们会继续进行一些工作。首先,我们会清理昨天留下的一些问题,这些问题我们当时没有深入探讨。除了这些,我觉得我们在资产…...
JS逆向案例-HIKVISION-视频监控的前端密码加密分析
免责声明 本文仅为技术研究与渗透测试思路分享,旨在帮助安全从业人员更好地理解相关技术原理和防御措施。任何个人或组织不得利用本文内容从事非法活动或攻击他人系统。 如果任何人因违反法律法规或不当使用本文内容而导致任何法律后果,本文作者概不负责。 请务必遵守法律…...
STM32---FreeRTOS内存管理实验
一、简介 1、FreeRTOS内存管理简介 2、FreeRTOS提供的内存管理算法 1、heap_1内存管理算法 2、heap_2内存管理算法 4、heap_4内存管理算法 5、heap_5内存管理算法 二、FreeRTOS内存管理相关API函数介绍 三、 FreeRTOS内存管理实验 1、代码 main.c #include "st…...
KNN算法性能优化技巧与实战案例
KNN算法性能优化技巧与实战案例 K最近邻(KNN)在分类和回归任务中表现稳健,但其计算复杂度高、内存消耗大成为IT项目中的主要瓶颈。以下从 算法优化、数据结构、工程实践 三方面深入解析性能提升策略,并附典型应用案例。 一、核心性…...
在 Ubuntu 中配置 NFS 共享服务的完整指南
前言 网络文件系统(NFS)作为 Linux 系统间实现文件共享的标准协议,在分布式计算和容器化部署场景中具有重要作用。本文将详细演示如何在 Ubuntu 系统上配置 NFS 服务端与客户端,并实现可靠的持久化挂载。 一、环境准备 系统要求…...
Secs/Gem第二讲 (基于secs4net项目的ChatGpt介绍)
好的,我们正式进入: 第二讲:深入 SECS4NET 项目结构——主机程序是怎么搭起来的? 关键词:项目结构、类图、通信类、事件处理、连接生命周期、异步机制 本讲目的 我们从源码入手,一步步搞懂: S…...
LeetCode[42] 接雨水
动态规划 left_max[i] height[i]左侧的最高高度right_max[i] height[i]右侧的最高高度height[i]能接多少水?min(left_max[i], right_max[i])-height[i] class Solution { public:int trap(vector<int>& height) {int len height.size();vector<in…...
STC89C52单片机学习——第25节: [11-1]蜂鸣器
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.03.18 51单片机学习——第25节: [11-1]蜂鸣器 前言开发板说明引用解答和科普一、蜂鸣器…...
音视频入门基础:RTP专题(19)——FFmpeg源码中,获取RTP的音频信息的实现(下)
本文接着《音视频入门基础:RTP专题(18)——FFmpeg源码中,获取RTP的音频信息的实现(上)》,继续讲解FFmpeg获取SDP描述的RTP流的音频信息到底是从哪个地方获取的。本文的一级标题从“四”开始。 四…...
搭建Python量化开发环境:从零开始的完整指南
搭建Python量化开发环境:从零开始的完整指南 在量化投资领域,一个稳定且高效的开发环境是成功的关键。本文将引导你一步步搭建起自己的Python量化开发环境,确保你能够顺利开始编写和运行量化策略。 🚀量化软件开通 Ὠ…...
卷积神经网络 - 卷积的变种、数学性质
本文我们来学习卷积的变种和相关的数学性质,为后面学习卷积神经网络做准备,有些概念可能不好理解,可以先了解其概念,然后慢慢理解、逐步深入。 在卷积的标准定义基础上,还可以引入卷积核的滑动步长和零填充来增加卷积…...
BLIP论文阅读
目录 现存的视觉语言预训练存在两个不足: 任务领域 数据集领域 相关研究 知识蒸馏 Method 单模态编码器: 基于图像的文本编码器: 基于图像的文本解码器: 三重目标优化 图像文本对比损失:让匹配的图像文本更加…...
Opencv之计算机视觉一
一、环境准备 使用opencv库来实现简单的计算机视觉。 需要安装两个库:opencv-python和opencv-contrib-python,版本可以自行选择,注意不同版本的opencv中的某些函数名和用法可能不同 pip install opencv-python3.4.18.65 -i https://pypi.t…...
