函数的定义
function name (params) visibility/modifer return(params){
function body
}
函数状态修饰符(function state mutability state)
pure:函数既不能读取也不能修改合约的状态变量,完全独立于合约。
适用场景
- 仅用于执行数学计算。
- 生成或返回固定的结果,与状态无关。
view:函数可以读取状态变量,但不能修改(常使用在getter函数)
适用场景
- 需要查询合约中的状态。
- 实现只读逻辑,例如余额查询。
Payable:表示函数可以接收ETH(注意只有接受转账的函数需要,转账到外部的函数不需要)
适用场景
- 用户向合约转账。
- 实现拍卖、众筹等逻辑。

visibility
public、private、internal、external

solidity语法的使用习惯
在函数名前面加_(下划线)通常代表:
1、内部函数(internal function)
只能在合约内部调用,不能被外部合约和用户直接调用
2、私有变量(private variable)
solidity没有真正的私有变量,但开发者用_作为命名惯例,表示该变量不应被外部直接访问
3、防止命名冲突
如果有一个mint()函数,又需要调用OpenZepelin提供的_mint(),可以使用_区分他们
Gas消耗和存储类型的关系

Basic data type
• bool – boolean 布尔类型 只有true和false两种
• enum <name> { <member names> … } 枚举类型,用定义的数字代替常量
• Eg:
enum direction { left, right, up, down } 此时direction.left=0
pragma solidity ^0.8.0;
contract Example {
enum Direction { Left, Right, Up, Down } // 定义枚举
Direction public currentDirection = Direction.Left; // 初始化为 Left
function setDirection(Direction _direction) public {
currentDirection = _direction;
}
}
• int, uint, int8, uint8, int16, uint16 … uint256 (uint表示unsigned int 无符号整数)
• int = int256, uint = uint256
• int8 => 1 byte signed integer
• address – holds a 20 byte address 存储以太坊上的地址
• Bytes1 .. Bytes32 – fixed size byte array 存储固定长度的字节数据 每个字节占8位
• String 存储动态长度的文本数据
complex data type
bytes – dynamic array of bytes
pragma solidity ^0.8.0;
contract BytesExample {
bytes public dynamicBytes; // 定义一个动态字节数组
// 添加字节到数组
function addByte(byte _byte) public {
dynamicBytes.push(_byte); // 添加单个字节
}
// 获取数组长度
function getBytesLength() public view returns (uint) {

最低0.47元/天 解锁文章
885

被折叠的 条评论
为什么被折叠?



