函数

微信扫码分享
Solidity 详解:变量与函数

Solidity 详解:变量与函数

视频 AI 总结: 本视频详细讲解了Solidity语言的基础语法,包括其特性、数据类型、函数定义和变量声明。视频强调Solidity作为一种编译型、强类型语言,专为EVM设计,并与JavaScript等语言有相似之处。核心内容涵盖了函数可见性、状态可变性(如`view`, `pure`, `payable`对Gas消耗的影响)、各种数据类型(布尔、整型、地址、数组、结构体、映射)的特点及使用注意事项,特别是整型溢出和数组遍历的Gas成本。此外,视频还深入探讨了内部与外部函数调用、构造函数以及`receive()`和`fallback()`这两个特殊回调函数的触发机制和重要性。 视频中提出了哪些关键信息: 1. **Solidity语言特性:** 编译型、高级语言、专为EVM设计,语法与JavaScript相似,是强类型语言。 2. **函数定义:** * **可见性:** `public` (内外皆可), `private` (合约内部), `internal` (内部及继承), `external` (仅外部)。 * **状态可变性:** `view` (只读状态变量), `pure` (不读不改状态变量), `payable` (可接收ETH)。 * **Gas消耗:** `view`/`pure`函数在读取时不消耗Gas,修改状态的函数消耗Gas。Gas限制适用于所有函数。 3. **变量定义:** * **类型:** 必须指定类型。 * **可见性:** `public` (自动生成getter函数), `private`, `internal`。 * **存储位置:** `memory` (临时内存), `storage` (链上持久化存储), `calldata` (函数参数,不可变)。 * **常量:** `constant` (编译时确定), `immutable` (构造时确定)。 4. **数据类型:** * **布尔型:** `true`/`false`,支持短路运算。 * **整型:** `int`/`uint` (有/无符号),不同位宽(如`uint8`),需特别注意**溢出/下溢**问题。 * **地址类型:** `address` (普通地址), `address payable` (可接收ETH)。`transfer`方法有2300 Gas限制。 * **数组:** 定长/变长,`length`, `push`, `pop`。**遍历数组的Gas消耗**是重要优化点,删除元素建议“移位再删除”。 * **结构体:** 自定义复合类型,可封装多个属性。 * **映射 (Mapping):** `key-value`对,只能是`storage`,不支持遍历,key不能是数组。 5. **函数调用:** * **内部调用:** 同一上下文,更高效。 * **外部调用:** 跨合约或`this`调用,切换上下文,可指定`value`和`gas` (不推荐)。 6. **特殊函数:** * **构造函数 (Constructor):** 合约部署时执行一次,不包含在运行时字节码中,用于初始化逻辑。 * **`receive()`:** 接收不带数据的ETH转账时被动调用,必须是`payable`。 * **`fallback()`:** 当调用不存在的函数或接收带数据但无匹配函数的ETH转账时被动调用,可`payable`。 7. **全局API:** `msg.sender`, `msg.value`, `block.timestamp`等,用于获取交易和区块信息。 8. **实践建议:** 编写智能合约时需关注Gas消耗,避免高Gas操作(如无限循环遍历数组)。合约要接收ETH必须显式实现`receive()`或`fallback()`(或`payable`函数)。

269 0 0 2026-03-04 10:52
Solidity 变量及整型、地址类型等

Solidity 变量及整型、地址类型等

视频 AI 总结: 1. **核心内容:** 本视频是 Solidity 编程语言的入门教程,重点讲解了 Solidity 中变量的声明和函数的使用,特别是与其它编程语言不同的特性,如地址类型、合约类型以及回调函数等。强调了在 Solidity 开发中,除了语言语法外,还需要掌握特定领域的知识。 2. **关键信息:** * Solidity 是一种静态编译型高级语言,专门为 EVM 设计。 * 变量分为值类型、引用类型和映射类型。 * 值类型包括布尔型(bool)、整型(int/uint)、地址类型(address)和枚举类型(enum)。 * 地址类型分为 address 和 address payable,payable 类型可以接收 ETH 转账。 * 合约本身也是一种类型,可以用来声明变量。 * 常量(constant)和不可变变量(immutable)在编译时确定值,不占用链上存储。 * 需要关注变量存储空间的大小,因为链上存储成本很高。 * 0.8 版本后的 Solidity 会对整型溢出进行处理,导致交易回滚。 * transfer 和 send 函数转账时,EVM 限制 gas 消耗为 2300。

857 0 0 2025-07-09 08:47
Solidity函数详解:可见性与状态可变性、函数调用方式

Solidity函数详解:可见性与状态可变性、函数调用方式

视频 AI 总结: 该视频主要讲解了Solidity中函数的定义、可见性、状态可变性以及函数调用方式。重点介绍了external可见性的特点,以及view、pure、payable等状态可变性修饰符的作用。同时,视频还对比了内部调用和外部调用的区别,以及外部调用时如何指定gas和value。 关键信息: * 函数定义使用`function`关键字,可以有参数列表。 * 可见性包括`external`(仅外部访问)、`public`、`private`、`internal`。 * 状态可变性修饰符包括`view`(不修改链状态)、`pure`(既不读取也不写入状态)、`payable`(允许接收ETH)。 * 外部调用可以使用`address(this).functionName{gas: , value: }()`,可以指定gas和value。 * 内部调用直接使用函数名,外部调用需要通过合约地址。 * 外部调用会启动新的EVM虚拟机环境,内部调用在同一EVM实例中运行。

224 0 0 2025-07-09 08:46