Solidity基础入门—web3

news2025/4/18 23:23:32

Remix介绍

官网地址
Remix 是一个基于浏览器的 Solidity 开发环境,主要用于编写、测试、调试和部署以太坊智能合约。

Solidity基本数据类型

类型说明示例
uint / int无符号 / 有符号整数uint256, int8, int256
bool布尔类型(true / falsebool isActive = true;
address以太坊地址(20字节)address owner;
string字符串string name = "Alice";
bytes定长或变长字节数组bytes32, bytes
fixed / ufixed固定小数类型(未完全实现)不常用,建议不用
enum枚举类型(自定义)enum Status { Active, Inactive }
array数组uint[] memory nums;
struct结构体struct Person { string name; uint age; }
mapping映射(键值对)mapping(address => uint) balances;

1. 整数类型 uint / int

  • uint 是无符号整数(不能为负)
  • int 是有符号整数
  • 支持从 8256(每 8 位递增)
uint256 a = 100;
int8 b = -20;

2.布尔类型 bool

bool isOpen = true;

3.地址类型 address

用于存储以太坊地址(例如钱包地址、合约地址)

address owner = msg.sender;

还可以加上 payable 使其可接收 ETH:

  • msg.sender 默认是 address 类型,不能直接收 ETH。
  • 必须用 payable(…) 转换为 payable address,才可以用 .transfer() 接受或 .send() 发送 ETH
payable(msg.sender).transfer(1 ether);

4.字符串 string

string memory name = "Alice";=

📌 注意:字符串不能直接比较是否相等,需要用 keccak256 哈希后比对。

5.字节数组 bytes

  • bytes 是动态字节数组
  • bytes1 ~ bytes32 是定长字节数组
bytes32 hash = keccak256(abi.encodePacked("hello"));

  • abi.encodePacked(…):将参数打包成二进制格式
  • keccak256(…):对打包后的数据进行哈希

👉 结果是一个 bytes32 类型的哈希值

6.枚举 enum

enum Status { Active, Inactive, Pending }
Status public currentStatus;

// 设置状态为 Pending
function setPending() public {
	currentStatus = Status.Pending;
}

7.结构体 struct

struct Person {
    string name;
    uint age;
}

8. 映射 mapping

mapping(address => uint256) public balances;

Solidity 中的数据存储位置

Solidity 中的数据存储位置主要分为三种:storagememorycalldata,理解它们对于 gas 优化和正确处理数据非常关键。


🧠 存储类型(关键字)

用于修饰数组(array),结构(struct),字符串(string),字节(bytes),映射(mapping仅storage支持)

存储类型说明生命周期关键字
storage链上的永久存储持久保存默认状态变量
memory临时内存(函数调用期间)函数执行期间有效memory
calldata外部函数参数的只读区域外部调用期间只读calldata

🔸 1. storage(链上存储)

  • 数据保存在区块链上,是持久化的
  • 用于合约中的状态变量或引用链上已有变量进行修改
string public myName = "Alice"; // 状态变量 -> 存储在 storage 中

struct Person {
    string name;
    uint age;
}

Person[] public people;

function updatePerson(uint index) public {
    Person storage person = people[index]; // 引用链上的 person
    person.age = 30; // 改变的是链上的数据
}

🔸 2. memory(临时内存)

  • 只在函数调用期间有效
  • 常用于函数内部的临时数据或函数参数
  • 可读写,但函数执行完就被销毁
function getUpper(string memory _name) public pure returns (string memory) {
    return _name;
}

🔸 3. calldata(只读外部输入)

  • 用于 external 函数参数
  • 只读不可修改
  • 相比 memory 更省 gas
function sayHello(string calldata _name) external pure returns (string memory) {
    return _name;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2332565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spark数据清洗案例:流量统计

一、项目背景 在互联网时代,流量数据是反映用户行为和业务状况的重要指标。通过对流量数据进行准确统计和分析,企业可以了解用户的访问习惯、业务的热门程度等,从而为决策提供有力支持。然而,原始的流量数据往往存在格式不规范、…

list的使用以及模拟实现

本章目标 1.list的使用 2.list的模拟实现 1.list的使用 在stl中list是一个链表,并且是一个双向带头循环链表,这种结构的链表是最优结构. 因为它的实现上也是一块线性空间,它的使用上是与string和vector类似的.但相对的因为底层物理结构上它并不像vector是线性连续的,它并没有…

【今日三题】小乐乐改数字 (模拟) / 十字爆破 (预处理+模拟) / 比那名居的桃子 (滑窗 / 前缀和)

⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 小乐乐改数字 (模拟)十字爆破 (预处理模拟)比那名居的桃子 (滑窗 / 前缀和) 小乐乐改数字 (模拟) 小乐乐改数字…

基于 Qt 的图片处理工具开发(一):拖拽加载与基础图像处理功能实现

一、引言 在桌面应用开发中,图片处理工具的核心挑战在于用户交互的流畅性和异常处理的健壮性。本文以 Qt为框架,深度解析如何实现一个支持拖拽加载、亮度调节、角度旋转的图片处理工具。通过严谨的文件格式校验、分层的架构设计和用户友好的交互逻辑&am…

44、Spring Boot 详细讲义(一)

Spring Boot 详细讲义 目录 Spring Boot 简介Spring Boot 快速入门Spring Boot 核心功能Spring Boot 技术栈与集成Spring Boot 高级主题Spring Boot 项目实战Spring Boot 最佳实践总结 一、Spring Boot 简介 1. Spring Boot 概念和核心特点 1.1、什么是 Spring Boot&#…

虽然理解git命令,但是我选择vscode插件!

文章目录 2025/3/11 补充一个项目一个窗口基本操作注意 tag合并冲突已有远程,新加远程仓库切换分支stash 只要了解 git 的小伙伴,应该都很熟悉这些指令: git init – 初始化git仓库git add – 把文件添加到仓库git commit – 把文件提交到仓库…

idea 打不开terminal

IDEA更新到2024.3后Terminal终端打不开的问题_idea terminal打不开-CSDN博客

【JVM】JVM调优实战

😀大家好,我是白晨,一个不是很能熬夜😫,但是也想日更的人✈。如果喜欢这篇文章,点个赞👍,关注一下👀白晨吧!你的支持就是我最大的动力!&#x1f4…

FPGA_DDR(二)

在下板的时候遇到问题 1:在写一包数据后再读,再写再读 这时候读无法读出 查看时axi_arready没有拉高 原因 : 由于读地址后没有拉高rready,导致数据没有读出卡死现象。 解决结果

【吾爱出品】[Windows] 鼠标或键盘可自定义可同时多按键连点工具

[Windows] 鼠标或键盘连点工具 链接:https://pan.xunlei.com/s/VONSFKLNpyVDeYEmOCBY3WZJA1?pwduik5# [Windows] 鼠标或键盘可自定义可同时多按键连点工具 就是个连点工具,功能如图所示,本人系统win11其他系统未做测试,自己玩…

vue3实战一、管理系统之实战立项

目录 管理系统之实战立项对应相关文章链接入口:实战效果登录页:动态菜单:动态按钮权限白天黑夜模式:全屏退出全屏退出登录:菜单收缩: 管理系统之实战立项 vue3实战一、管理系统之实战立项:这个项…

设计模式 Day 6:深入讲透观察者模式(真实场景 + 回调机制 + 高级理解)

观察者模式(Observer Pattern)是一种设计结构中最实用、最常见的行为模式之一。它的魅力不仅在于简洁的“一对多”事件推送能力,更在于它的解耦能力、模块协作设计、实时响应能力。 本篇作为 Day 6,将带你从理论、底层机制到真实…

汽车软件开发常用的需求管理工具汇总

目录 往期推荐 DOORS(IBM ) 行业应用企业: 应用背景: 主要特点: Polarion ALM(Siemens) 行业应用企业: 应用背景: 主要特点: Codebeamer ALM&#x…

AI 越狱技术剖析:原理、影响与防范

一、AI 越狱技术概述 AI 越狱是指通过特定技术手段,绕过人工智能模型(尤其是大型语言模型)的安全防护机制,使其生成通常被禁止的内容。这种行为类似于传统计算机系统中的“越狱”,旨在突破模型的限制,以实…

推荐一款Nginx图形化管理工具: NginxWebUI

Nginx Web UI是一款专为Nginx设计的图形化管理工具,旨在简化Nginx的配置与管理过程,提高开发者和系统管理的工作效率。项目地址:https://github.com/cym1102/nginxWebUI 。 一、Nginx WebUI的主要特点 简化配置:通过图形化的界…

Fay 数字人部署环境需求

D:\ai\Fay>python main.py pygame 2.6.1 (SDL 2.28.4, Python 3.11.9) Hello from the pygame community. https://www.pygame.org/contribute.html [2025-04-11 00:10:16.7][系统] 注册命令... [2025-04-11 00:10:16.8][系统] restart 重启服务 [2025-04-11 00:10:16.8][…

python:all列表

1.all列表的说明: 当模块中有__all__变量时,当使用from xxx import *时,只能导入这个列表中的元素。 2.具体的例子: 1.先创建一个模块my_mod,在列表__all__中分别写入第一次只写入test1,第二次写入test1、test2两个…

基于 SpringBoot 的校园论坛系统

收藏关注不迷路!! 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多…

深度学习总结(6)

随机梯度下降 给定一个可微函数,理论上可以用解析法找到它的最小值:函数的最小值就是导数为0的点,因此只需找到所有导数为0的点,然后比较函数在其中哪个点的取值最小。将这一方法应用于神经网络,就是用解析法求出损失…

SpringBoot实战1

SpringBoot实战1 一、开发环境,环境搭建-----创建项目 通过传统的Maven工程进行创建SpringBoot项目 (1)导入SpringBoot项目开发所需要的依赖 一个父依赖:(工件ID为:spring-boot-starter-parent&#xf…