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