Solidity 学习记录_2_数据类型

Solidity 数据类型小结 分类 核心内容 关键特性 类型体系 分为值类型、引用类型、映射类型三大类 Solidity 是静态类型语言,变量类型编译时确定 值类型 包含布尔、整型(uint/int)、地址、定长字节数组、枚举、函数类型等 1. 赋值/传参时值拷贝,修改副本不影响原变量 2. 数据占用 ≤32 字节 3. 示例:uint a=10; uint b=a; b=20; → a 仍为 10 引用类型 包含数组、结构体、string/bytes(动态字节数组)、合约 1. 数据占用通常 >32 字节,支持引用传递减少拷贝开销 2. 必须显式指定数据位置(memory/storage/calldata) 3. 赋值规则: - 不同位置赋值 → 拷贝副本 - 相同位置赋值 → 创建引用(修改新变量会影响原变量) 数据位置(引用类型专属) 4 种位置(transient 不支持引用类型) storage 存储状态变量,永久保存在区块链,Gas 消耗最高 memory 函数内临时存储,函数执行后释放,Gas 中等 calldata 存储 external 函数参数,只读不可修改,Gas 消耗最低 transient 单次交易内有效,不支持引用类型定义 映射类型 键值对结构(mapping(KeyType => ValueType)) 1. 类似字典/哈希表,仅支持作为状态变量(storage) 2. 详细用法需结合后续数据结构章节学习 值类型 vs 引用类型 ...

January 12, 2026 · 5 min · 1064 words · flash122u

Solidity 学习记录_1

准备: 以太坊智能合约开发基础: https://learnblockchain.cn/article/22542?course_id=93 IDE: Remix https://remix.ethereum.org/ MetaMask 钱包: https://metamask.io/zh-CN/download Solidity 合约长什么样? 小结 合约基础结构 Solidity 合约是部署到区块链的最小单元,类似其他语言的class,核心由状态变量(存储合约数据)和合约函数(处理数据逻辑)组成。 编写合约需先通过pragma solidity声明编译器版本(如pragma solidity >=0.8.0;)。 核心组件解析 构造函数:用constructor声明,仅在合约部署时执行,用于初始化状态变量;若省略,编译器会自动生成默认构造函数。状态变量可在声明时直接初始化,未初始化则默认值为 0。 变量与函数可见性:共 4 种,public(内部/外部均可访问,状态变量自动生成 getter 函数)、external(仅外部可调用,内部调用需用this.func())、internal(当前合约及派生合约可访问,默认可见性)、private(仅当前合约可访问)。注意:链上数据透明,private仅限制访问权限,无法隐藏数据。 特性 public external internal private 修饰函数 √ √ √ √ 修饰变量 √ √ √ 当前合约内可访问 √ √ √ 派生合约可访问 √ √ 外部访问 √ √ 特殊变量类型: constant常量:编译期确定值,不占用存储,仅支持值类型和字符串,赋值不可依赖链上/外部数据。 immutable不可变量:部署时(构造函数中)赋值,之后不可修改,不占用存储,适合存储合约创建者地址、关联合约地址等固定值。 函数定义规则 函数格式为function 函数名(参数类型 参数名) 可见性 状态可变性 returns(返回类型),包含以下核心特性: 参数与返回值:参数声明与变量一致;返回值支持命名(可直接赋值)或仅指定类型,用return语句返回结果。 状态可变性修饰符: view视图函数:仅读取状态,外部调用无需 Gas,内部被修改状态的函数调用时需消耗 Gas。 pure纯函数:不读取、不修改状态,仅做计算逻辑。 payable:允许函数接收以太币,未声明则拒绝接收以太币。 状态修改逻辑:修改状态变量的函数需通过区块链交易调用,消耗 Gas 并经节点共识确认;仅读取状态的函数可直接在节点执行,无需上链。 合约的核心是状态转换 ...

January 10, 2026 · 1 min · 95 words · flash122u