Solidity学习—函数
基本定义
function function_name(<param_type> <param_name>) <visibility> <state mutability> [returns(<return_type>)] {...}
可见性(visibility)
- Private(私有):函数只能在所定义的合约内部调用
- Internal(内部):函数只有合约内部及继承合约才能调用
- External(外部):只有智能合约外部才能调用函数
- Public(公开):可以从任何地方调用
状态可变性(mutability)
- view:用
view声明的函数只能被读取,不能被修改 - pure:用
pure声明的函数既不能被读取也不能被修改 - payable:用
payable声明的函数可以接收发送给合约的以太坊,若没声明payable则拒绝所有发送给它的以太币
使用
view和pure关键字定义的函数不会改变以太坊的状态,即不会发送交易,仅为本地执行结果
特殊函数
Getter函数
定义为public的状态变量具有getter函数,该函数由编译器自动创建。该函数与变量具有相同的名称,并且具有外部可见性。
contract C {
uint public data;
function x() public returns (uint) {
data = 3; //内部访问
return this.data(); // 外部访问
}
}
receive函数
合约最多可以具有一个receive函数,该函数不能有参数和返回值,可见性为external,状态可变性为payable
当向合约发送Ether且未指定调用任何函数(calldata为空)时执行。(例如通过transfer()或者send()转账)
receive() external payable{...}
Fallback函数
合约最多可以具有一个fallback函数,该函数不能有参数和返回值,可见性为external,如果其他函数均不匹配给定的函数签名,或者根本没有提供任何数据并且没有receive函数,则在调用合约时执行该函数。
fallback() external [payable] {
...
}
函数修饰器
在执行函数前的检查条件,可以封装为修饰器,例如检查合约发件人是否是合约所有者
modifier onlyOwner() {
require(msg.sender == owner, "this function is restricted to the owner");
_; // will be replaced by the code of the function
}
用修饰器声明函数:
function searchBalance() external OnlyOwner {
...
}
用空格分隔的列表中指定多个修饰器,可以将它们应用到一个函数,并按给出的顺序对其进行应用

浙公网安备 33010602011771号