diff --git a/docs/.vuepress/navbar.ts b/docs/.vuepress/navbar.ts index 426acc9..1ea341e 100644 --- a/docs/.vuepress/navbar.ts +++ b/docs/.vuepress/navbar.ts @@ -20,6 +20,10 @@ export default defineNavbarConfig([ text: 'C++', link: '/programming/cplusplus/', }, + { + text: 'Solidity', + link: '/programming/solidity/', + }, ], }, { diff --git a/docs/.vuepress/notes.ts b/docs/.vuepress/notes.ts index 47b6d13..00ab196 100644 --- a/docs/.vuepress/notes.ts +++ b/docs/.vuepress/notes.ts @@ -27,11 +27,23 @@ const cPlusPlus = defineNoteConfig({ } ] }) +const solidity = defineNoteConfig({ + dir: 'programming', + link: '/programming/solidity/', + sidebar: [ + { text: "Solidity 学习笔记", link: "/programming/solidity/" }, + { + text: "基础语法", prefix: "/basic-syntax", items: [ + { text: "Solidity 基础语法与数据类型", link: "/programming/solidity/basic-syntax/" } + ] + } + ] +}) /** * 导出所有的 note */ export default defineNotesConfig({ dir: 'notes', link: '/', - notes: [LeetCode, cPlusPlus], + notes: [LeetCode, cPlusPlus, solidity], }) diff --git a/docs/notes/programming/solidity/README.md b/docs/notes/programming/solidity/README.md new file mode 100644 index 0000000..bbfdf64 --- /dev/null +++ b/docs/notes/programming/solidity/README.md @@ -0,0 +1,58 @@ +--- +title: Solidity 学习笔记 +description: 记录Solidity智能合约开发的学习心得和基础知识 +createTime: 2025/09/22 10:00:00 +permalink: /programming/solidity/ +--- + +# Solidity 学习笔记~(๑>◡<๑) + +欢迎来到 Solidity 的奇妙世界!这里是祀梦记录 Solidity 智能合约开发学习心得的小天地哦~如果你对区块链和智能合约感兴趣的话,那真是太棒啦~让我们一起探索这个充满可能性的领域吧!(✧ω✧) + +## Solidity 是什么呀? 🌟 + +Solidity 是一种为以太坊区块链开发智能合约的高级编程语言哦~它看起来有点像 JavaScript,但却能让你创建可以在区块链上运行的程序呢!想象一下,你写的代码可以在一个去中心化的世界里永久存在,是不是很神奇呀~(≧∇≦)/ + +## 学习路径 + +学习 Solidity 就像探索一个新的魔法世界,让我们一步一步来解锁它的奥秘吧: + +1. **区块链基础** - 了解区块链的基本概念和工作原理 +2. **Solidity 语法** - 掌握 Solidity 的基本语法和编程结构 +3. **智能合约开发** - 学习如何编写和部署简单的智能合约 +4. **高级特性** - 探索继承、接口、库、事件等高级概念 +5. **安全最佳实践** - 了解智能合约开发中的安全注意事项 +6. **实战项目** - 通过实际项目巩固所学知识 + +## 笔记分类 + +### 基础入门 + +- Solidity 语言简介 +- 开发环境搭建 +- 基础语法和数据类型 +- 控制流语句 + +### 合约开发 + +- 智能合约结构 +- 函数和修饰器 +- 状态变量和局部变量 +- 事件和日志 + +### 高级特性 + +- 继承和多态 +- 接口和抽象合约 +- 库的使用 +- 异常处理 + +## 学习资源推荐 + +- [Solidity 官方文档](https://docs.soliditylang.org/) - 最权威的学习资料哦~ +- [以太坊开发者文档](https://ethereum.org/zh/developers/) - 了解以太坊生态系统 +- [CryptoZombies](https://cryptozombies.io/) - 通过游戏化方式学习 Solidity,超有趣的! + +## 写在最后~💖 + +学习 Solidity 可能会遇到一些挑战,但请记住,每一次遇到的问题都是成长的机会哦~不要害怕犯错,勇敢地去尝试和探索吧!我相信,通过不断地学习和实践,你一定能成为一名出色的智能合约开发者~加油呀!(๑•̀ㅂ•́)و✧ diff --git a/docs/notes/programming/solidity/basic-syntax.md b/docs/notes/programming/solidity/basic-syntax.md new file mode 100644 index 0000000..ea6a7ff --- /dev/null +++ b/docs/notes/programming/solidity/basic-syntax.md @@ -0,0 +1,185 @@ +--- +title: Solidity 基础语法与数据类型 +createTime: 2025/09/22 10:30:00 +permalink: /programming/solidity/basic-syntax/ +--- + +# Solidity 基础语法与数据类型~(≧∇≦)ノ + +嗨~欢迎来到 Solidity 基础语法的学习时间!今天我们要一起探索 Solidity 这门神奇语言的基本结构和数据类型哦~准备好了吗?Let's go!(๑>◡<๑) + +## 智能合约的基本结构 🏗️ + +让我们先来看一个最简单的 Solidity 智能合约是什么样子的吧: + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract HelloWorld { + // 状态变量 + string public greeting = "Hello, World!"; + + // 函数 + function setGreeting(string memory _greeting) public { + greeting = _greeting; + } + + function getGreeting() public view returns (string memory) { + return greeting; + } +} +``` + +是不是看起来有点像其他编程语言呀?让我们来一点一点地了解它吧~ + +## 版本声明和许可证 📜 + +在 Solidity 合约的最开始,我们需要添加两行重要的声明: + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; +``` + +- **许可证声明**:告诉别人你的代码使用什么许可证,可以自由使用吗? +- **版本声明**:指定合约使用的 Solidity 编译器版本,`^0.8.0` 表示可以使用 0.8.0 及以上的版本哦~ + +## 数据类型 🌈 + +Solidity 有很多有趣的数据类型,让我们来认识一下它们吧~ + +### 值类型 + +这些类型在赋值时会直接复制值哦~ + +#### 布尔型 (Boolean) + +```solidity +bool public isActive = true; +bool public isPaused = false; +``` + +布尔型只有两个值:`true` 和 `false`,就像开关一样简单!(๑˘ᴗ˘๑) + +#### 整型 (Integer) + +```solidity +int public negativeNumber = -42; +uint public positiveNumber = 42; + +// 你还可以指定位数哦~ +uint8 public smallNumber = 255; // 0-255 +uint256 public bigNumber = 1000000000000000000; // 这是 1 以太币的 wei 值哦~ +``` + +整型分为有符号(`int`)和无符号(`uint`)两种,可以存储正数和负数呢~ + +#### 地址型 (Address) + +```solidity +address public owner = 0x71C7656EC7ab88b098defB751B7401B5f6d8976F; + +// 可以转账的地址类型 +address payable public recipient = payable(0x71C7656EC7ab88b098defB751B7401B5f6d8976F); +``` + +地址类型非常特别,它用于存储以太坊账户的地址,就像是账户的身份证号码一样~`address payable` 还可以接收以太币转账呢! + +### 引用类型 + +这些类型在赋值时只会传递引用,而不是复制整个值哦~ + +#### 字符串 (String) + +```solidity +string public message = "Hello, Solidity!"; +string public name = "祀梦"; +``` + +字符串用于存储文本数据,就像你平时写的便签一样~ + +#### 数组 (Array) + +```solidity +// 固定大小的数组 +uint[5] public fixedArray = [1, 2, 3, 4, 5]; + +// 动态大小的数组 +uint[] public dynamicArray; + +// 你还可以在函数中这样使用哦~ +function addNumber(uint _number) public { + dynamicArray.push(_number); +} +``` + +数组就像是一个收纳盒,可以按顺序存放多个相同类型的数据呢~ + +#### 映射 (Mapping) + +```solidity +// 映射:地址 => 余额 +mapping(address => uint) public balances; + +// 使用方式 +function deposit() public payable { + balances[msg.sender] += msg.value; +} +``` + +映射是 Solidity 中非常强大的数据结构,就像是一个魔法字典,可以通过键快速找到对应的值~ + +## 变量作用域 🔍 + +在 Solidity 中,变量有不同的作用域哦: + +### 状态变量 + +```solidity +contract MyContract { + // 状态变量:存储在区块链上的 + uint public myStateVariable = 42; +} +``` + +状态变量是存储在区块链上的,所有合约函数都可以访问它们,就像是合约的公共记忆一样~ + +### 局部变量 + +```solidity +function myFunction() public { + // 局部变量:只在函数内部可见 + uint myLocalVariable = 100; +} +``` + +局部变量只在定义它们的函数内部可见,函数执行结束后就会消失哦~ + +### 全局变量 + +```solidity +function getSender() public view returns (address) { + // msg.sender 是一个全局变量,包含当前调用者的地址 + return msg.sender; +} +``` + +全局变量是 Solidity 内置的特殊变量,可以在任何地方使用,它们提供了关于区块链和交易的重要信息呢~ + +## 小练习 🏋️‍♀️ + +现在让我们来做一个小练习吧!试着编写一个简单的计数器合约,包含以下功能: + +1. 一个状态变量来存储计数值 +2. 一个函数来增加计数 +3. 一个函数来减少计数 +4. 一个函数来获取当前计数值 + +你可以做到吗?相信自己,你一定可以的!(๑•̀ㅂ•́)و✧ + +## 写在最后~💌 + +今天我们学习了 Solidity 的基础语法和数据类型,这些都是构建智能合约的基石哦~虽然一开始可能会觉得有点复杂,但只要多练习,你一定会越来越熟练的!下节课我们将学习 Solidity 的函数和修饰器,敬请期待吧~ + +如果有任何问题,欢迎随时提问哦~让我们一起在区块链的世界里快乐地探索吧!(づ ̄ 3 ̄)づ