Solidity基础[part1]

AI-摘要
sonia33 GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
Solidity基础[part1]
SoniaChenSolidity 基础[part1]
Remix IDE
函数
无返回体函数示例:
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19; // chose our solidity version
contract SimpleStorage {
uint256 public myFavoriteNumber; // 初始值就是0 而且是internal 也就是内部不可见的
function store(uint256 favoriteNumber) public {
myFavoriteNumber = favoriteNumber;
}
}
有返回体示例:
function recive() public view returns (uint256) {
return myFavoriteNumber;
}
数组
// 数组
uint256[] public myFavoriteNumbers;
Person public newPerson = Person(1, 'jack');
Person public myPerson;
function setPerson(string memory name, uint256 person_number) public {
myPersonArray.push(Person(person_number,name));
}
结构
// 结构
struct Person {
uint256 personNumber;
string name;
}
数组加结构
// 数组加结构
Person[] public myPersonArray;
可见性
函数和变量有四种可见性修饰符:
public:可从合约内部和外部合约访问private:仅限当前合约内部访问。不会隐藏值,仅限制其访问权限。external:仅适用于外部的合约访问。⚠️internal: 当前合约和派生的合约可以访问。
如果没有指定,默认是internal
view 、pure
函数操作权限修饰符
1. view 关键字
-
功能:使用
view关键字修饰的函数,承诺不会对区块链的状态进行修改。 -
可执行操作
- 能够读取区块链上的数据(也就是状态变量)。
- 可以访问 msg.sender、block.number 等全局变量。
- 支持调用其他同样被标记为
view或者pure的函数。
-
不可执行操作:禁止对状态变量进行写入操作。
-
示例:
contract ViewExample {
uint public balance;
// 此函数仅读取状态变量,不会对其进行修改
function getBalance() public view returns (uint) {
return balance;
}
}
2. pure 关键字
-
功能:被
pure关键字修饰的函数,既不会读取也不会修改区块链的状态。 -
可执行操作
- 可以使用函数内部定义的局部变量。
- 能够操作传入函数的参数。
- 支持进行数学运算。
- 可以调用其他
pure函数。
-
不可执行操作
- 禁止访问状态变量。
- 不允许调用非
view或pure的函数。
-
示例:
contract PureExample {
// 该函数不依赖任何状态变量,仅对输入参数进行计算
function add(uint a, uint b) public pure returns (uint) {
return a + b;
}
}
3. 关键区别
| 特性 | view 函数 | pure 函数 |
|---|---|---|
| 能否读取状态变量 | 可以 | 不可以 |
| 能否修改状态变量 | 不可以 | 不可以 |
| 是否消耗 Gas(外部调用时) | 不消耗 | 不消耗 |
| 是否消耗 Gas(内部调用时) | 消耗 | 消耗 |
⚠️ 一般调用这两个关键字都不会消耗gas费, 但是如果是内部调用,例如下面这个例子, store里面调用recive就会导致gas费产生。
function store(uint256 favoriteNumber) public {// 存储
myFavoriteNumber = favoriteNumber;
recive(favoriteNumber);
}
function recive() public view returns (uint256) {
return myFavoriteNumber;
}
完整代码:
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19; // stating our version
contract SimpleStorage {
uint256 public myFavoriteNumber; // 初始值就是0 而且是internal 也就是内部不可见的
// 数组
uint256[] public myFavoriteNumbers;
// 结构
struct Person {
uint256 personNumber;
string name;
}
Person public newPerson = Person(1, 'jack');
Person public myPerson;
Person[] public myPersonArray;
function setPerson(string memory name, uint256 person_number) public {
myPerson = Person(person_number, name);
myPersonArray.push(myPerson);
}
function store(uint256 favoriteNumber) public {// 存储
myFavoriteNumber = favoriteNumber;
}
// view 可读不可写 pure 不可读不可写
function recive() public view returns (uint256) {
return myFavoriteNumber;
}
}




