可见性修饰符本文用于记录目前接触到的函数修饰符。
决定函数何时和被谁调用。
private :只能被合约内部调用;
internal :只能被合约内部调用或者被继承的合约调用;
public :可以在任何地方调用,不管是内部还是外部;
external:只能从合约外部调用;
用来表示函数如何和区块链交互。
view :运行这个函数不会更改和保存任何数据;
pure :运行这个函数不仅不会往区块链写数据,甚至不从区块链读取数据;
这两种在被合约外部调用的时候都不花费任何gas,但是它们在被内部其他函数调用的时候将会耗费gas。
如onlyowner、aboveLevel等自定义的modifiers,对于这些修饰符我们可以自定义其对函数的约束逻辑。
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
这些修饰符可以同时作用于一个函数定义上,如:
function test() external view onlyOwner anotherModifier { /* ... */ }
payable修饰符
可以接收以太的特殊函数
contract OnlineStore {
function buySomething() external payable {
// 检查以确定0.001以太发送出去来运行函数:
require(msg.value == 0.001 ether);
// 如果为真,一些用来向函数调用者发送数字内容的逻辑
transferThing(msg.sender);
}
}
msg.value 是一种可以查看向合约发送了多少以太的方法,另外 ether 是一个內建单元。
注意: 如果一个函数没标记为payable, 而你尝试利用上面的方法发送以太,函数将拒绝你的事务。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)