Solidity 基础知识

Solidity 基础知识

官网:Solidity

版本设置

// SPDX-License-Identifier:MIT 表示身份协议
// ^0.8.7 表示当前代码支持 0.8.7 及以后 solidity 版本
// >=0.8.7 <0.8.12 表示支持该范围的版本 
pragma solidity 0.8.7;

基本数据类型

// 基础数据类型:boolean uint(无符号整数) int address bytes
bool sutFlag = true;
// uint 存储空间大小可以设置 最少设置 8(1 bit 占 8 位,以 2 的指数倍设置) 默认是 256 一般都显式定义出来 如果不赋值默认为 0
uint256 public studentNum = 123;
// bytes 一般是 0x 开头接一些随机的数字字母,这里存的字符串 xiao,会自动转成 bytes,最大空间是 32
bytes32 stuName1 = "xiao";
// string 只能用来存字符串
string stuName = "panda";

函数和变量的四种可见标识符

  • public
    public 外部和内部可见(为存储/状态变量创建一个getter 函数)
  • private
    仅在当前合约中可见
  • external
    仅在外部可见(仅适用于函数) - 即只能被消息调用(通过this.func)
  • internal
    只在内部可见

不消耗 gas 的两种关键字

  • view:标识函数代表只读,不允许在当前函数中修改任何状态
  • pure:不允许修改状态,同时不允许读取区块链数据
    注意:如果一个要改变区块链状态的函数调用了 view 或者 pure 函数,还是会消耗 gas。

结构体

// 定义
struct People {
    uint256 num;
    string name;
}
// 使用
People public person = People({myNum: 2, name: "panda"});

数组

People[] public persons;
function addPeople(string memory _name, uint256 _num) public {
    // 两种创建数组的方式
    persons.push(People(_num, _name));
    People memory person = People({myNum: 2, name: "panda"});
    persons.push(person);
    // 映射
    habbitMap[_name] = _num;
}

映射

mapping(string => uint256) public habbitMap;

EVM 存储

  • Stack:栈内存存储
  • Memory:变量只存在于临时的,可以再次赋值,且仅用于数组,结构体,映射对象(string 是字节数组)
  • Storage:即使在执行的函数外,也存在变量
  • Calldata:调用数据,变量只存在于临时的,当变量使用 calldata 定义时,变量不能再次赋值
  • Code
  • Logs

猜你喜欢

转载自blog.csdn.net/qq_38685503/article/details/127378029