文章目录
- solidity 精简笔记
-
- 一、三行框架
- 二、数值类型 bool、uint、int、address、bytes32
- 三、函数 function、函数名(传入参数)、可见性、gas 节省支付性、returns (参数类型 参数名)
- 四、函数输出
- 五、变量存储属性(storage/memory/calldata) 与作用域分类(状态变量、局部变量、全局变量)
- 六、数组(定长、变长;length、push()、push(x)、pop() )、 结构体
- 七、映射类型 mapping
- 八、变量初始值与 delete
- 九、常数属性 constant 与 immutable
- 十、控制流(if、for、while、?:),用solidity实现插入排序
- 十一、构造函数 constructor 和修饰器 modifier
- 十二、事件 event
- 十三、继承:简单继承、多重继承以及修饰器(modifier)和构造函数(constructor)的继承
- 十四、抽象合约 abstract 与接口 interface
- 十五、异常:error、require 与 assert
- 十七、库合约函数
solidity 精简笔记
一、三行框架
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract 合约名{
...;
}
二、数值类型 bool、uint、int、address、bytes32
1.布尔型 bool
// 布尔型变量
bool public _bool = true;
2.正整数 uint、整数 int
// 正整数、整数定义
uint public _uint = 1; // 正整数
uint256 public _number = 20231024; // 256位正整数
int public _int = -1; // 整数,包括负数,但负数很少用到
// 整数运算
uint256 public _number2 = 2**2; // 指数
uint256 public _number3 = 7 % 2; // 取余数
bool public _numberbool = _number2 > _number3; // 比大小
// 科学计数法
整10的数可以写成科学计数法的形式,如:1e18、1e9
3.地址类型 address
// 地址定义
address public _address = 0x7A58c0Be72BE218B41C608b7Fe7C5bB630736C71;
address payable public _address1 = payable(_address);
// payable address,可以转账、查余额
// balance
uint256 public balance = _address1.balance;
// transfer
address payable addr;
addr.transfer(1);//合约向addr转账1wei
address x = 0x123;
address myAddress = this;
if (x.balance < 10 && myAddress.balance >= 10) x.transfer(10);// 向 x 转账 10?
4.定长字节数组 bytes32
一个字节占两位16进制(8位2进制),字节乘2是16进制的位数
// 固定长度的字节数组
bytes32 public _byte32 = "MiniSolidity";
bytes1 public _byte = _byte32[0]; //存储_byte32数组的第一个字节,即0x4d (0x是象征意义,代表十六进制)
三、函数 function、函数名(传入参数)、可见性、gas 节省支付性、returns (参数类型 参数名)
function 函数名(传入参数) 可见性 [gas 节省支付性] [returns(参数类型 参数名)]
//可见性:internal|external|public|private
//public 和 internal 相对更常用
//gas 节省支付性:pure|view|payable
//直接用 view 代替 pure
//函数传入参数是数组时,调用它时需要输入全部数组长度的元素,首元素注意强制类型转换
function f1(uint[3] memory) public view{
...
}
function f2() public view{
f1([uint(1),2,3]);
}
中括号部分可省略不写。
四、函数输出
主要还是用命名式返回,直接 returns(参数类型 参数名)
// 命名式返回
function returnNamed() public pure returns(uint256 _number, bool _bool, uint256[3] memory _array){
_number = 2;
_bool = false;
_array = [uint256(3),2,1];
}
五、变量存储属性(storage/memory/calldata) 与作用域分类(状态变量、局部变量、全局变量)
//变量存储属性的用法:
//变量类型 变量属性 变量名
uint[] x = [1,2,3]; //变量属性默认是storage
uint[] storage xStorage = x;
uint[] memory xMemory = x;
1.变量存储位置
storage
是默认属性,存在链上消耗gas
多m