- 博客(85)
- 资源 (8)
- 收藏
- 关注
原创 Shadowing Inherited State Variables
《Solidity状态变量遮蔽详解》摘要:本文讲解Solidity中继承状态变量的特殊规则,指出子合约不能通过重新声明覆盖父合约状态变量(与函数不同)。正确做法是在子合约构造函数中直接修改继承变量的值(如name = "Contract C"),而重新声明同名变量会导致编译错误。文章用"家族姓氏"比喻说明:子合约不能改姓(重新声明),只能出生后改名(构造时赋值)。示例代码展示了合法修改继承变量的方法,帮助开发者避免常见错误。
2025-08-01 10:11:51
153
原创 Inheritance
本文介绍了Solidity中的继承机制,通过连锁餐厅的比喻帮助理解。Solidity支持多重继承,使用is关键字实现,通过virtual和override关键字实现函数覆盖。继承顺序必须从"最基础"到"最衍生",多重继承时函数调用按右到左、深度优先的顺序搜索。示例代码展示了6个合约的继承关系:基础合约A定义可覆盖的foo函数;B和C继承A并覆盖foo;D和E展示多重继承的函数调用顺序;F验证继承顺序规则。继承的核心是代码复用和逻辑自定义,通过父合约提供基础功能,子合约
2025-08-01 10:08:29
810
原创 Constructor
本文是《Solidity by Example》的中文教程,面向零基础区块链开发者,通过示例讲解Solidity构造函数。构造函数是智能合约部署时执行的一次性初始化函数,用于设置初始状态值。文章通过比喻(如"新房装修")解释概念,并展示两种参数传递方式:继承列表直接传递(合约B)和构造函数动态传递(合约C)。重点强调了继承中父合约构造函数的调用顺序(按继承顺序而非参数顺序),并通过合约D和E进行对比演示。代码示例包含5个合约,演示了构造函数的定义、参数传递和继承调用规则,同时指出了初始化
2025-07-23 10:28:50
479
原创 Events
本文介绍了Solidity智能合约中事件的基本概念及应用。事件是智能合约与外部交互的重要机制,通过记录日志实现以下功能:1)为前端应用提供实时状态更新(如转账通知);2)作为低成本的链上数据存储方式(Gas消耗仅为storage变量的1/50左右)。文章通过示例代码展示了事件的定义方法(含indexed参数)和触发方式,并详细解释了事件的工作原理。特别说明:事件数据存储在交易日志中,具有不可修改性,适合记录历史数据;indexed参数可提高日志检索效率,但最多只能有3个。最后,文章还强调了事件使用的注意事项
2025-07-22 15:04:15
568
原创 Function Modifier
摘要 本文介绍 Solidity 函数修饰器(Modifier)的核心用法,通过示例代码演示其在智能合约开发中的三种典型应用: 访问控制(onlyOwner修饰器确保仅合约拥有者可调用关键函数) 参数校验(validAddress修饰器验证输入地址非零) 安全防护(noReentrancy修饰器通过锁机制防止重入攻击) 核心机制: 修饰器通过_;占位符嵌入函数执行逻辑,支持前置/后置条件检查 具备参数传递能力(如validAddress(address _addr)) 典型应用场景包括权限管理、输入验证和合
2025-07-22 15:02:02
783
原创 View and Pure Functions
本文介绍了Solidity中的view和pure函数特性。view函数(如addToX)可读取但不能修改合约状态,适合数据查询;pure函数(如add)既不能读取也不能修改状态,仅执行纯计算。示例代码展示了这两种函数的声明方式和使用场景,通过状态变量x和简单加法运算演示了它们的区别,帮助开发者理解如何在智能合约中正确使用只读和纯函数。这些特性对于优化Gas消耗和确保合约安全性至关重要。
2025-07-21 09:43:45
175
原创 Error
本文介绍了Solidity智能合约中的错误处理机制,重点讲解了四种错误处理方式:require、revert、assert和自定义错误。require用于验证输入条件和前置条件,revert提供更灵活的异常处理,assert检查内部逻辑一致性,自定义错误则能节省Gas并提高代码可读性。文章通过示例合约展示了这些错误处理方式的具体应用场景和实现方法,帮助开发者理解如何在智能合约中实现安全可靠的状态回滚和错误处理。每种方式都有其适用场景:require适合参数验证,revert处理复杂条件,assert检测内部
2025-07-21 09:28:54
250
原创 Function
本文介绍了Solidity函数的基本概念和特性,通过两个合约示例展示了函数的多种用法。主要内容包括:1)函数可返回多个值,支持命名返回值和省略return语句;2)使用解构赋值处理多返回值;3)公共函数对输入输出数据类型的限制;4)数组作为函数参数和返回值的应用;5)多参数函数的调用方式,包括顺序传参和键值对传参。文章采用"示例+解说"的方式,适合零基础开发者理解Solidity函数的核心功能和使用场景。
2025-07-20 13:57:52
940
原创 Transient Storage
本文介绍了Solidity中的瞬态存储(Transient Storage)概念及其应用。瞬态存储是EIP-1153引入的新特性,数据仅在交易期间有效,交易结束后自动清除。文章通过代码示例展示了瞬态存储与常规storage的区别,并解释了其优势:更低的Gas消耗和安全的临时数据存储。特别说明了瞬态存储如何用于优化重入保护机制,提供了ReentrancyGuard和ReentrancyGuardTransient两个合约的对比实现,前者使用常规storage,后者使用更节省Gas的瞬态存储。文中还包含了对Ma
2025-07-20 13:56:25
571
原创 Data Locations - Storage, Memory and Calldata
本文是《Solidity by Example》的中文讲解,专为零基础区块链开发者设计。文章通过示例+解说+提示的方式,详细讲解了Solidity中三种关键数据位置:storage(区块链永久存储)、memory(函数临时内存)和calldata(只读函数参数)。通过仓库、工作台和快递包裹的生动比喻,阐明了它们的不同特性和适用场景:storage用于持久化状态变量但Gas成本高,memory适合临时变量,calldata则优化大数据的Gas消耗。代码示例展示了如何声明和使用这三种数据位置,重点说明了它们对智
2025-07-19 10:02:40
933
原创 Structs
本文介绍了Solidity中结构体(Struct)的基本概念和使用方法。结构体是一种自定义数据类型,用于将相关数据字段组合在一起,提高代码可读性和组织性。文章通过任务管理示例(Todo结构体)展示了结构体的三种初始化方式:函数式调用、键值对映射和分步赋值。同时讲解了如何通过公共数组自动生成getter函数,以及如何更新结构体字段。此外还演示了在外部文件中定义结构体并通过导入复用的方法。文章采用"示例+解说+提示"的方式,适合区块链开发初学者理解Solidity编程基础。
2025-07-19 09:59:43
788
原创 User Defined Value Types
本文介绍了Solidity 0.8.8+引入的用户定义值类型(UDVT)特性,通过实例代码演示了如何创建和使用自定义类型。UDVT允许开发者基于基础类型(如uint64)定义语义化更强的类型(如Duration、Timestamp),提高代码可读性和类型安全性。文章对比了使用UDVT的LibClock库和普通实现的LibClockBasic库,展示了UDVT在防止参数顺序错误、增强类型安全方面的优势。示例中还包含了内联汇编操作,详细说明了如何高效地组合和提取128位时钟值。这种零成本抽象既保持了底层效率,又
2025-07-18 09:48:12
728
原创 Enum of solidity
本文介绍了Solidity中枚举(Enum)的使用方法及其特性。枚举是一种自定义数据类型,用于定义一组有限的固定选项或状态,如订单状态、用户角色等。文章通过示例代码展示了枚举的定义、默认值设置、状态更新和重置等操作,并解释了枚举在底层以无符号整数形式存储的特点。此外,还说明了枚举可以在合约外部声明并通过import复用的特性。枚举的主要优势包括提高代码可读性、限制变量取值范围、节省Gas成本等,适用于状态管理、权限控制和配置选项等场景。
2025-07-18 09:46:16
831
原创 Array
本节是《Solidity by Example》的中文翻译与深入讲解,专为零基础或刚接触区块链开发的小白朋友打造。我们将通过“示例 + 解说 + 提示”的方式,带你逐步理解每一段 Solidity 代码的实际用途与背后的逻辑。Solidity 是以太坊等智能合约平台使用的主要编程语言,就像写网页要用 HTML 和 JavaScript,写智能合约就需要会 Solidity。
2025-07-16 15:03:46
815
原创 Mapping
本文介绍了Solidity中的映射(Mapping)数据结构,通过两个合约示例展示其基本用法和嵌套映射。映射是键值对存储结构,支持内置类型、字符串和合约作为键,值可以是任意类型。文章详细说明了映射的特点(不可迭代、默认值机制)和操作方式(设置、获取、删除),并通过注释解释了每个函数的作用。嵌套映射示例展示了如何构建多层键值存储。所有代码都标注了Solidity版本和许可证,适合区块链开发初学者理解基础数据结构的实现原理和使用方法。
2025-07-16 15:02:49
1211
原创 For and While Loop
本文介绍了Solidity智能合约中的循环结构,重点讲解了for和while循环的使用方法及注意事项。for循环适合已知迭代次数,包含初始化、条件和步进;while循环适合条件驱动,但需避免无限循环。文章强调了无界循环的危险性(可能导致Gas耗尽),并指出while和do while循环在智能合约中较少使用的原因。代码示例展示了如何正确使用continue和break控制循环流程,同时提醒开发者注意Gas优化和安全性问题,如避免外部合约调用和确保明确的退出条件。
2025-07-15 16:42:03
649
原创 If / Else
本节是《Solidity by Example》的中文翻译与深入讲解,专为零基础或刚接触区块链开发的小白朋友打造。我们将通过“示例 + 解说 + 提示”的方式,带你逐步理解每一段 Solidity 代码的实际用途与背后的逻辑。Solidity 是以太坊等智能合约平台使用的主要编程语言,就像写网页要用 HTML 和 JavaScript,写智能合约就需要会 Solidity。
2025-07-15 16:41:32
504
原创 Gas and Gas Price
本文介绍了以太坊智能合约开发中的Gas概念及其核心机制。主要内容包括:1)Gas是计算工作量的单位,交易费用=Gas消耗量×Gas价格;2)Gas价格决定交易优先级,未使用的Gas可退还;3)Gas限制分为交易Gas限制(用户设置)和区块Gas限制(网络设置);4)通过Solidity代码示例展示了Gas耗尽时的交易失败机制,即状态回滚但费用不退还。文章强调了合理设置Gas参数的重要性,并提供了优化Gas消耗的实用建议,帮助开发者编写高效的智能合约。
2025-07-12 23:36:18
752
原创 Ether and Wei
《Solidity入门:理解以太坊货币单位》 本文介绍了Solidity智能合约开发中的基本货币单位概念。通过EtherUnits合约示例,详细讲解了以太坊的三种主要货币单位:Wei(最小单位,1 Wei = 1)、Gwei(1 Gwei = 10^9 Wei)和Ether(1 Ether = 10^18 Wei)。合约包含单位变量定义和数值验证,展示了如何使用Solidity内置单位关键字进行精确计算。文章强调理解这些单位对处理转账、Gas费用计算等区块链操作至关重要,并指出状态变量的存储特性与Gas消耗
2025-07-12 23:27:43
802
原创 Reading and Writing to a State Variable
本文介绍了Solidity智能合约中状态变量的读写操作,通过SimpleStorage合约示例进行说明。主要内容包括: 状态变量存储在区块链上,写入需发送交易并支付Gas费用,读取则免费; 合约示例展示了uint256类型公共变量num的声明,以及set/write和get/read函数的实现; 对比了交易(修改状态)和调用(读取数据)的区别,强调写入操作的成本和读取的便捷性; 指出状态变量存储的注意事项,包括Gas成本优化、安全性和溢出检查等。 该示例为零基础学习者提供了理解Solidity状态变量操作的
2025-07-11 16:07:05
621
原创 Immutable
Solidity不可变变量(Immutable)详解 本文介绍了Solidity中的不可变变量(immutable)特性。不可变变量类似于常量,但更灵活,其值可在构造函数中动态设置,之后不可更改。示例合约展示了如何声明和初始化两个不可变变量:myAddr(部署者地址)和myUint(构造函数传入值)。不可变变量比普通状态变量更节省Gas,因为编译器知道它们不会改变。与常量(constant)不同,不可变变量支持在部署时动态设置值,适用于记录部署者地址等场景。不可变变量仅支持值类型,且只能在构造函数中初始化。
2025-07-11 16:04:27
564
原创 Primitive Data Types
本文介绍了Solidity智能合约开发中的基本数据类型,适合零基础区块链开发者学习。主要内容包括:布尔类型(bool)的true/false值;无符号整数(uint)和有符号整数(int)的不同位数范围;以太坊地址(address)的20字节存储特性;固定大小(bytes1)和动态大小(bytes)的字节数组类型。文章通过代码示例展示了各类型的声明方式、默认值(布尔默认为false,数值默认为0)以及取值范围,特别解释了uint256/int256等不同位宽类型的数值范围。每个示例都配有详细注释,说明变量作
2025-07-11 08:00:00
431
原创 Constants
摘要 《Solidity by Example》通过示例代码解析智能合约开发基础。本文以Constants合约为例,讲解Solidity常量的核心概念: 定义与特性:常量用constant关键字声明(如MY_ADDRESS和MY_UINT),值硬编码且不可修改,遵循全大写命名规范 优势:常量比普通变量节省Gas,因编译器会直接内联其值到代码中 使用场景:适用于固定配置(如管理员地址、协议参数),但仅支持值类型数据 注意事项:常量需在编译时确定值,修改会报错,且不适用于动态数组等复杂类型 (99字)
2025-07-10 15:39:25
352
原创 Variables
本文介绍了《Solidity by Example》中关于Solidity变量的基础概念,适合区块链开发新手学习。文章详细解析了三种变量类型:状态变量(存储在区块链上)、局部变量(函数内部临时使用)和全局变量(提供区块链信息)。通过示例代码展示了如何声明和使用这些变量,并解释了关键特性:状态变量永久存储且修改需消耗Gas,局部变量仅在函数执行期间存在,全局变量提供区块链环境信息。重点强调了public变量的自动getter函数、view函数的链下免费调用特性,以及不同变量类型对Gas消耗的影响。
2025-07-10 15:34:35
758
原创 First Application
本文介绍了一个简单的 Solidity 智能合约 Counter,适合零基础开发者学习。该合约实现了一个区块链计数器功能,包含:存储计数变量 count、读取计数值的 get 函数(免费)、增加计数的 inc 函数和减少计数的 dec 函数(均需支付 Gas)。特别说明,在计数为0时调用 dec 会因下溢而失败。文章强调状态变量的存储特性、不同函数的 Gas 消耗机制,以及 Solidity 0.8+ 版本对算术运算的安全检查。
2025-07-10 08:00:00
406
原创 Hello World
《Solidity零基础入门:Hello World智能合约详解》摘要 本文面向区块链开发新手,通过示例讲解Solidity基础。以一个简单的"Hello World"智能合约为例,包含以下要点: 合约结构:通过pragma指定编译器版本,定义合约存储公开字符串变量 关键特性:讲解public关键字作用、自动生成getter函数、状态变量存储方式 运行机制:说明Gas消耗规则(部署需Gas,读取免费) 学习工具:推荐使用Remix IDE进行编译部署测试 类比理解:将合约形象比喻为区块链
2025-07-09 10:32:54
499
原创 什么是 Solidity?
《Solidity智能合约入门指南》摘要:本文为零基础开发者提供Solidity编程语言的系统入门教程。Solidity是以太坊智能合约的核心语言,具有区块链专属、状态持久化、Gas机制等特性。教程采用"示例+解说+提示"的教学模式,涵盖状态变量、函数、数组结构体等核心概念,并重点讲解Gas机制和数据存储位置等区块链特有知识。文章推荐通过Remix IDE进行实践,并建议后续学习映射、事件等高级功能。配套资源包括Solidity官方文档、CryptoZombies互动教程等,帮助开发者快
2025-07-09 10:29:03
928
原创 C/C++ JSON 库综合对比及应用案例(六)
RapidJSON 最快,适用于超大 JSON 解析JSON for Modern C++ 语法优雅,性能较好JSONCPP 易用性高,但速度较慢cJSON 适用于嵌入式场景,但性能一般
2025-04-01 21:54:26
1342
原创 JSON for Modern C++ 解析 JSON(五)
JSON for Modern C++(简称 nlohmann/json)是一个以现代 C++ 风格编写的 JSON 库,旨在提供简单、易用、且符合现代 C++ 编程习惯的 API。其设计理念围绕 类型安全 和 零依赖性,并且支持 C++11 及以上版本。该库采用了一些 C++11 引入的功能,如智能指针、范围for循环、auto 关键字、lambda 表达式等,使得代码更加简洁、可读且类型安全。
2025-04-01 21:37:04
1336
原创 RapidJSON 处理 JSON(高性能 C++ 库)(四)
RapidJSON 是什么? RapidJSON 是一个高效、可移植的 C++ JSON 解析库,专为高性能应用设计。它具有以下特点: 超快:比许多 JSON 库(如 cJSON、JSONCPP)解析速度更快,适用于高性能应用。 全功能:支持DOM(文档对象模型)解析和SAX(流式解析),适用于不同场景。 零依赖:仅使用 C++ 标准库,无需额外的库支持。
2025-04-01 21:18:32
814
原创 JsonCpp 处理 JSON(现代 C++ 方案)(三)
JSONCPP 是什么?JSONCPP 是一个 轻量级、功能强大 的 C++ JSON 解析库。它提供了 读取、修改、序列化、反序列化 JSON 的功能。适用于 嵌入式系统、网络编程、配置管理、日志处理 等场景。
2025-04-01 21:05:11
1076
原创 cJSON 处理 JSON(轻量级 C 语言库)(二)
cJSON 是一个轻量级、开源的 C 语言 JSON 解析库,专门用于处理 JSON 格式数据。它具有以下特点:简单易用,API 设计清晰,代码可读性强。轻量级,适用于嵌入式系统、物联网(IoT)等对资源敏感的应用场景。无需额外依赖,仅需一个 cJSON.c 和 cJSON.h 文件即可使用。
2025-04-01 20:51:40
971
原创 JSON 基础知识(一)
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,主要用于前后端数据传输、配置文件存储、API 交互等。它基于JavaScript 语言的对象表示法,但与编程语言无关,因此被广泛应用于 C/C++、Python、Java、Go、Rust 等语言中。
2025-04-01 20:40:49
896
原创 error C2440: “return”: 无法从“bool”转换为“const msgbus::Variant *”
修改属性设置项 语言—符合模式—设置为 “默认值”
2023-04-04 11:12:51
574
原创 C++常用字符集转换方法三
C++常用字符转换UTF8到string类型:直接C++提供的接口,在window下使用window api,在linux下使用C++接口;此方法也可以直接跨平台使用,在linux、window下都适用例如:在代码中这接写中文转UTF8码,可以使用如下接口string str=“中国”string utf8Str = ansi_to_utf8(str);
2022-12-05 13:40:19
832
原创 C++常用字符集转换方法二
C++常用字符转换UTF8到string类型:直接C++提供的接口,但是此接口为C++11以上才能使用,此方法可以直接跨平台使用,在linux、window下都适用例如:在代码中这接写中文转UTF8码,可以使用如下接口string str=“中国”string utf8Str = String2UTF8(str);
2022-12-05 13:33:04
1031
原创 C++常用字符集转换方法一
C++常用字符转换UTF8到string类型:直接使用boost库中函数。此方法可以直接跨平台使用,在linux、window下都适用例如:在代码中这接写中文转UTF8码,可以使用如下接口string str=“中国”string utf8Str = GB2312toUTF8(str);
2022-12-05 13:28:52
1730
Solidity by Example中文翻译教程
2025-07-11
AT89C52中文资料
2014-03-22
公交车语音报站器的设计(带红外部分)
2014-03-22
STL-王桂林-2nd
2018-03-26
C++参考手册-C++98_C++03_C++11_C++14_C++17_C++20.rar
2021-03-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人