第一个练习题:合约基本结构与状态变量题目名称:简单数值存储合约(StorageBasic)练习目标掌握Solidity合约的基本文件结构和声明规范学会定义不同访问权限的状态变量理解public修饰符会自动生成getter函数的特性熟悉Remix中合约的部署与状态变量的查看操作核心知
public修饰符会自动生成getter函数的特性SPDX许可证声明、pragma版本声明的作用contract关键字)uint256为例)与访问权限修饰符(public/private/internal)public状态变量的自动getter函数机制请编写一个Solidity合约(适配^0.8.20版本),实现以下功能:
声明必要的许可证和版本信息(许可证使用MIT)。
定义3个状态变量:
publicNumber(用于存储公开的数值);privateNumber(用于存储私有数值);internalMessage(用于存储内部消息,内容初始化为"Hello Solidity")。不需要编写任何自定义函数,仅通过状态变量的修饰符实现基础的访问功能。
在代码中添加清晰的注释,说明每个状态变量的作用和访问权限。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Base {
// 一个public的 uint256 类型变量publicNumber(用于存储公开的数值);
uint256 public publicNumber;
// 一个private的 uint256 类型变量privateNumber(用于存储私有数值);
uint256 private privateNumber;
// 一个internal的 string 类型变量internalMessage(用于存储内部消息,内容初始化为 "Hello Solidity")。
string internal internalMessage = "Hello Solidity";
}
publicNumber能被查看:\
除了public的可见性范围(外部、自身、子合约),更关键的是**public修饰符会让Solidity自动生成一个同名的view类型getter函数**(比如function publicNumber() public view returns (uint256)),这也是你能在Remix界面直接点击查看的原因。privateNumber看不到:\
即使在Remix中,外部也无法直接访问private变量,甚至连合约的子合约也不能访问。注意:private的不可见是逻辑层面的,因为以太坊区块链是公开的,数据本身仍存储在链上,只是无法通过合约接口直接读取。internalMessage看不到:\
外部账户/合约无法直接访问,只有当前合约内部的函数,或者继承它的子合约能访问,所以Remix界面也没有直接查看的入口。如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!