Solidity 进阶
Solidity 进阶 — 底层机制与工程要点前言写过几个合约不等于懂了 Solidity。真正拉开开发者差距的,是对 EVM 底层模型的理解——assert 和 require 差的不只是语义,receive 和 fallback 背后是整条 ETH 转账的生命周期,staticcall 暴露了 EVM 对状态修改的底层约束。 这篇文章不重复语法手册(数据类型、修饰器、继承这些基础你应该已经会了),而是挑八个在实战中高频碰到、但文档里又讲得不够透的点逐一拆开。 一、assert 与 require:不止是报错方式不同1.1 表层区别 维度 require assert 异常类型 Error(string) Panic(uint256) Gas 处理 退回剩余 Gas 消耗全部剩余 Gas 典型用途 校验用户输入、外部调用返回值 检查不变量、防内部 bug 可附加消息 是 否(Solidity 0.8.x) 最直观的差别就在 Gas:require 失败把没用完的 Gas 退回去,assert 失败全吃掉。这个设计是有意的——assert...
Solidity 小白书
Solidity 小白书Solidity 长得像 JavaScript,但骨子里完全是另一套东西。 在 JS 里,你随便声明变量、随便改状态、随便发 HTTP 请求。在 Solidity 里,每一个操作都在烧钱(Gas),每一次存储都在写账本,每一次函数调用都在跟一台全球共享的虚拟计算机打交道。 这篇不堆砌官方文档的废话,只讲你真正写合约时会碰到的东西。 一、变量类型:别被名字骗了Solidity 的变量分三类,但真正重要的是它们怎么传值。 1. 值类型(Value Types)bool、uint、address、bytesN、enum。赋值时直接拷贝数值。改新变量,不影响旧的。 2. 引用类型(Reference Types)array、struct、string、bytes。占地方大,赋值时默认传的是地址(指针)。改新变量,旧的也会跟着变。 3. 映射类型(Mapping)mapping(Key => Value)。链上的哈希表。只能存在 storage 里。 [!tip]...






