付费视频,请购买课程( ¥2,000.00 )后再观看

Solidity 详解:变量与函数

20次播放
20小时前

视频 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调用,切换上下文,可指定valuegas (不推荐)。
  6. 特殊函数:
    • 构造函数 (Constructor): 合约部署时执行一次,不包含在运行时字节码中,用于初始化逻辑。
    • receive() 接收不带数据的ETH转账时被动调用,必须是payable
    • fallback() 当调用不存在的函数或接收带数据但无匹配函数的ETH转账时被动调用,可payable
  7. 全局API: msg.sender, msg.value, block.timestamp等,用于获取交易和区块信息。
  8. 实践建议: 编写智能合约时需关注Gas消耗,避免高Gas操作(如无限循环遍历数组)。合约要接收ETH必须显式实现receive()fallback()(或payable函数)。