当前位置: 首页 > article >正文

Web-3.0(Solidity)基础教程

Solidity 是 以太坊智能合约编程语言,用于编写 去中心化应用(DApp)。如果你想开发 Web3.0 应用,Solidity 是必学的。

Remix - Ethereum IDE(在线编写 Solidity)

特性Remix IDEHardhat
适用场景适合 初学者小项目测试适合 专业开发大项目
使用方式在线工具(浏览器)本地开发(命令行)
环境无需安装,直接在线使用需要 Node.js + NPM
调试工具内置调试器(Debugger)Hardhat Network(本地测试链)
测试方式手动测试,运行合约函数自动化测试(Mocha / Chai)
本地节点无本地测试链自带本地以太坊节点
部署方式点击 Deploy 按钮,适合测试支持自动部署脚本(更灵活)
适合的开发者初学者、简单测试开发者、团队项目

Solidity 语法基础


📌 1. Solidity 代码结构

// SPDX-License-Identifier: MIT  // 许可证声明(推荐加上)
pragma solidity ^0.8.0;  // 指定 Solidity 版本contract MyContract {  // 定义一个智能合约uint public myNumber = 10;  // 公开变量(自动生成 getter)
}

pragma solidity ^0.8.0; 👉 指定 Solidity 版本(避免兼容性问题)
contract MyContract {} 👉 定义一个智能合约
public 👉 允许外部访问变量(自动生成 getter 方法)

📌 2. 数据类型

类型说明示例
uint无符号整数(正数)uint256 number = 100;
int有符号整数(正负数)int256 number = -50;
bool布尔值(true/false)bool isActive = true;
string字符串string name = "Web3";
address以太坊地址address owner = msg.sender;
mapping映射(键值对)

mapping(address => uint) public balances;

contract DataTypes {uint public myUint = 100;  // 只能存正整数int public myInt = -50;    // 允许负数bool public isActive = true;  // 布尔类型string public myString = "Hello, Web3!";  // 字符串address public myAddress = msg.sender;  // 以太坊地址
}

📌 3. 变量(状态变量 & 局部变量)

contract Variables {uint public stateVar = 10;  // 状态变量(存储在区块链上)function myFunction() public pure {uint localVar = 20;  // 局部变量(只在函数内部有效)}
}

状态变量 👉 stateVar 存储在区块链上(有 Gas 费)
局部变量 👉 localVar 只在函数内部(不消耗 Gas)

📌 4. 函数

contract MyContract {uint public myNumber;// 写入函数(修改状态变量,需要 Gas)function setNumber(uint _num) public {myNumber = _num;}// 读取函数(view 关键字,不消耗 Gas)function getNumber() public view returns (uint) {return myNumber;}
}

public 👉 允许外部访问
view 👉 只读取数据,不修改状态(不消耗 Gas)
returns (uint) 👉 指定返回值类型

📌 5. 修饰符(modifier

contract MyContract {address public owner;constructor() {owner = msg.sender;  // 记录合约创建者}modifier onlyOwner() {require(msg.sender == owner, "Not the owner");_;  // 继续执行原函数}function setOwner(address _newOwner) public onlyOwner {owner = _newOwner;  // 只有合约创建者可以修改}
}

modifier onlyOwner() 👉 仅限管理员调用
require(msg.sender == owner, "Not the owner") 👉 检查调用者身份
_; 👉 继续执行原函数

📌 6. 交易 & 以太币(payable

contract PaymentContract {address public owner;constructor() {owner = msg.sender;}// 允许合约接收 ETHreceive() external payable {}// 提取合约余额function withdraw() public {require(msg.sender == owner, "Not the owner");payable(owner).transfer(address(this).balance);}// 查询合约余额function getBalance() public view returns (uint) {return address(this).balance;}
}

receive() external payable {} 👉 允许合约接收 ETH
payable(owner).transfer(address(this).balance); 👉 提取 ETH

📌 7. 事件(Event)

contract EventExample {event MessageUpdated(address indexed sender, string oldMessage, string newMessage);string public message = "Hello, Web3!";function updateMessage(string memory _newMessage) public {string memory oldMessage = message;message = _newMessage;emit MessageUpdated(msg.sender, oldMessage, _newMessage);}
}

event MessageUpdated() 👉 定义事件
emit MessageUpdated(msg.sender, oldMessage, _newMessage); 👉 触发事件

📌 8. mapping(键值对存储)

contract MappingExample {mapping(address => uint) public balances;function setBalance(uint _amount) public {balances[msg.sender] = _amount;}function getBalance(address _addr) public view returns (uint) {return balances[_addr];}
}

mapping(address => uint) 👉 存储 地址 -> 余额
balances[msg.sender] = _amount; 👉 设置余额

📌 9. struct(自定义数据类型)

contract StructExample {struct User {string name;uint age;}mapping(address => User) public users;function setUser(string memory _name, uint _age) public {users[msg.sender] = User(_name, _age);}function getUser(address _addr) public view returns (string memory, uint) {User memory user = users[_addr];return (user.name, user.age);}
}

struct User 👉 自定义用户数据结构
mapping(address => User) public users; 👉 存储 地址 -> 用户信息


相关文章:

Web-3.0(Solidity)基础教程

Solidity 是 以太坊智能合约编程语言,用于编写 去中心化应用(DApp)。如果你想开发 Web3.0 应用,Solidity 是必学的。 Remix - Ethereum IDE(在线编写 Solidity) 特性Remix IDEHardhat适用场景适合 初学者 …...

深入理解linux中的文件(上)

1.前置知识: (1)文章 内容 属性 (2)访问文件之前,都必须打开它(打开文件,等价于把文件加载到内存中) 如果不打开文件,文件就在磁盘中 (3&am…...

背包问题和单调栈

背包问题(动态规划) 动态五步曲 dp数组及下标索引的含义递推公式dp数组如何初始化遍历顺序打印dp数组 01背包:n种物品,有一个,二维数组遍历顺序可以颠倒,(滚动数组)一维数组遍历顺序不可颠倒…...

Airflow:深入理解Apache Airflow Task

Apache Airflow是一个开源工作流管理平台,支持以编程方式编写、调度和监控工作流。由于其灵活性、可扩展性和强大的社区支持,它已迅速成为编排复杂数据管道的首选工具。在这篇博文中,我们将深入研究Apache Airflow 中的任务概念,探…...

WebSocket——环境搭建与多环境配置

一、前言:为什么要使用多环境配置? 在开发过程中,我们通常会遇到多个不同的环境,比如开发环境(Dev)、测试环境(Test)、生产环境(Prod)等。每个环境的配置和需…...

93,【1】buuctf web [网鼎杯 2020 朱雀组]phpweb

进入靶场 页面一直在刷新 在 PHP 中,date() 函数是一个非常常用的处理日期和时间的函数,所以应该用到了 再看看警告的那句话 Warning: date(): It is not safe to rely on the systems timezone settings. You are *required* to use the date.timez…...

ChatGPT怎么回事?

纯属发现,调侃一下~ 这段时间deepseek不是特别火吗,尤其是它的推理功能,突发奇想,想用deepseek回答一些问题,回答一个问题之后就回复服务器繁忙(估计还在被攻击吧~_~) 然后就转向了GPT&#xf…...

机器学习day7

自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数 代码 import numpy as np import torch import torch.nn as nn import torch.optim as optimizer import matplotlib.pyp…...

本地部署DeepSeek教程(Mac版本)

第一步、下载 Ollama 官网地址:Ollama 点击 Download 下载 我这里是 macOS 环境 以 macOS 环境为主 下载完成后是一个压缩包,双击解压之后移到应用程序: 打开后会提示你到命令行中运行一下命令,附上截图: 若遇…...

2月3日星期一今日早报简报微语报早读

2月3日星期一,农历正月初六,早报#微语早读。 1、多个景区发布公告:售票数量已达上限,请游客合理安排行程; 2、2025春节档总票房破70亿,《哪吒之魔童闹海》破31亿; 3、美宣布对中国商品加征10…...

202周日复盘(159)本周回顾

1、当日总结。 定价相关内容,学习与思考。 第一性原理,分析游戏成本的构成。 ------------- 2、周总结 大思路,细节设计都有进展,每天都挖坑与加工。 a 学习游戏思想 任天堂游戏研发四大标准,创新,直…...

Linux基础 ——tmux vim 以及基本的shell语法

Linux 基础 ACWING y总的Linux基础课,看讲义作作笔记。 tmux tmux 可以干嘛? tmux可以分屏多开窗口,可以进行多个任务,断线,不会自动杀掉正在进行的进程。 tmux – session(会话,多个) – window(多个…...

error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054

Descriptions: Solutions:...

WPF进阶 | WPF 动画特效揭秘:实现炫酷的界面交互效果

WPF进阶 | WPF 动画特效揭秘:实现炫酷的界面交互效果 前言一、WPF 动画基础概念1.1 什么是 WPF 动画1.2 动画的基本类型1.3 动画的核心元素 二、线性动画详解2.1 DoubleAnimation 的使用2.2 ColorAnimation 实现颜色渐变 三、关键帧动画深入3.1 DoubleAnimationUsin…...

DeepSeek 遭 DDoS 攻击背后:DDoS 攻击的 “千层套路” 与安全防御 “金钟罩”

当算力博弈升级为网络战争:拆解DDoS攻击背后的技术攻防战——从DeepSeek遇袭看全球网络安全新趋势 在数字化浪潮席卷全球的当下,网络已然成为人类社会运转的关键基础设施,深刻融入经济、生活、政务等各个领域。从金融交易的实时清算&#xf…...

本地部署DeepSeek-R1模型(新手保姆教程)

背景 最近deepseek太火了,无数的媒体都在报道,很多人争相着想本地部署试验一下。本文就简单教学一下,怎么本地部署。 首先大家要知道,使用deepseek有三种方式: 1.网页端或者是手机app直接使用 2.使用代码调用API …...

Scratch 《像素战场》系列综合游戏:像素战场游戏Ⅰ~Ⅲ 介绍

资源下载 Scratch《像素战场》系列综合游戏合集:像素战场游戏Ⅰ~Ⅲ压缩包 https://download.csdn.net/download/leyang0910/90332765 游戏操作介绍 Scratch 《像素战场Ⅰ》操作规则: 这是一款与朋友一起玩的 1v1 游戏。先赢得6轮胜利! WA…...

手机连接WIFI可以上网,笔记本电脑连接WIFI却不能上网? 解决方法?

原因:DNS受污染了 解决办法 step 1:清空域名解析记录(清空DNS) ipconfig /flushdns (Windows cmd命令行输入) step 2:重新从DHCP 获取IP ipconfig /release(释放当前IP地址) ipconfig /renew &…...

DRM系列七:Drm之CREATE_DUMB

本系列文章基于linux 5.15 DRM驱动的显存由GEM(Graphics execution management)管理。 一、创建流程 创建buf时,user层提供需要buf的width,height以及bpp(bite per pixel),然后调用drmIoctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &…...

Windows图形界面(GUI)-QT-C/C++ - QT Stacked Widget

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、概述 二、使用场景 1. 多步表单 2. 选项卡界面 3. 状态机界面 三、常见样式 四、属性设置 1. 页面管理 2. 布局管理 3. 信号与槽 五、内容处理 1. 添加页面 2. 移除页面 3.…...

二叉树——429,515,116

今天继续做关于二叉树层序遍历的相关题目,一共有三道题,思路都借鉴于最基础的二叉树的层序遍历。 LeetCode429.N叉树的层序遍历 这道题不再是二叉树了,变成了N叉树,也就是该树每一个节点的子节点数量不确定,可能为2&a…...

使用mybatisPlus插件生成代码步骤及注意事项

使用mybatisPlus插件可以很方便的生成与数据库对应的PO对象,以及对应的controller、service、ImplService、mapper代码,生成这种代码的方式有很多,包括mybatis-plus提供的代码生成器,以及idea提供的代码生成器,无论哪一…...

Apache Hudi数据湖技术应用在网络打车系统中的系统架构设计、软硬件配置、软件技术栈、具体实现流程和关键代码

网络打车系统利用Hudi数据湖技术成功地解决了其大规模数据处理和分析的难题,提高了数据处理效率和准确性,为公司的业务发展提供了有力的支持。 Apache Hudi数据湖技术的一个典型应用案例是网络打车系统的数据处理场景,具体如下: 大…...

TryHackMe: TryPwnMe Two

TryExecMe2 限制了直接进行系统调用,即syscall sysenter int 0x80,但是这样的限制是十分好绕过的,我们只需要通过异或生成syscall构造read再次写入shellcode即可 构造read shellcode asm(""" mov rdx, 0x100 mov r15, rdi…...

熵采样在分类任务中的应用

熵采样在分类任务中的应用 在机器学习的分类任务里,数据的标注成本常常制约着模型性能的提升。主动学习中的熵采样策略,为解决这一难题提供了新的思路。本文将带你深入了解熵采样在分类任务中的原理、应用及优势。 一、熵采样的原理(优化版) 熵,源于信息论,是对不确定…...

SmartPipe完成新一轮核心算法升级

1. 增加对低质量轴段的修正 由于三维图纸导出造成某些轴段精度较差,部分管路段的轴线段不满足G1连续,SmartPipe采用算法对这种情况进行了修正,保证轴段在一定精度范围内光滑连续。 2. 优化对中文路径的处理 SmartPipeBatch批处理版本优化…...

松灵机器人 scout ros2 驱动 安装

必须使用 ubuntu22 必须使用 链接的humble版本 #打开can 口 sudo modprobe gs_usbsudo ip link set can0 up type can bitrate 500000sudo ip link set can0 up type can bitrate 500000sudo apt install can-utilscandump can0mkdir -p ~/ros2_ws/srccd ~/ros2_ws/src git cl…...

WebForms DataList 深入解析

WebForms DataList 深入解析 引言 在Web开发领域,控件是构建用户界面(UI)的核心组件。ASP.NET WebForms框架提供了丰富的控件,其中DataList控件是一个灵活且强大的数据绑定控件。本文将深入探讨WebForms DataList控件的功能、用法以及在实际开发中的应用。 DataList控件…...

蓝桥备赛指南(6)

这篇文章非常简单!重点只有两个,而且都和set非常相似。 se集合 set简介 首先,set集合是一种容器,用于存储一组唯一的元素,并按照一定的排序规则进行排序,set中的元素是按照升序排序的,默认情…...

路径规划之启发式算法之二十九:鸽群算法(Pigeon-inspired Optimization, PIO)

鸽群算法(Pigeon-inspired Optimization, PIO)是一种基于自然界中鸽子群体行为的智能优化算法,由Duan等人于2014年提出。该算法模拟了鸽子在飞行过程中利用地标、太阳和磁场等导航机制的行为,具有简单、高效和易于实现的特点,适用于解决连续优化问题。 更多的仿生群体算法…...