/*可见性修饰符:publicexternalinternalprivatepublic:作用域:状态变量、函数状态变量:可以在合约内外被读取,自动生成一个公共的getter函数。函数:可以从合约内外部调用,自
可见性修饰符:public external internal private
public:
作用域:状态变量、函数
状态变量:可以在合约内外被读取,自动生成一个公共的 getter 函数。
函数:可以从合约内外部调用,自动生成一个公共的可见性为external的函数
gas开销:相对较高,因为自动生成的 getter 函数会复制整个状态变量
external:
作用域:仅函数可以使用external修饰符,只能从合约外部调用,无法从合约内部调用
gas开销:相对较低,因为不需要处理内部函数调用
internal:
作用域:状态变量、函数
状态变量:只能在当前合约或继承自当前合约的合约内部被读取。
函数:只能在当前合约或继承自当前合约的合约内部调用。
gas开销:与public修饰符类似,因为可以在合约内外部使用
private:
作用域:状态变量、函数
状态变量:只能在当前合约内部被读取。
函数:只能在当前合约内部调用,不能从合约的派生合约中调用。
gas开销:与public修饰符类似,因为可以在合约内外部使用
除可见性修饰符外其他函数修饰符:pure、view、payable
pure:
作用域:pure 修饰的函数只能调用其他的 pure 或 view 函数,不允许修改合约状态或访问合约存储
gas开销:pure 函数在执行期间不涉及状态变更或存储读取,因此其 gas 开销相对较低
view:
作用域:view 修饰的函数可以调用其他的 view 或 pure 函数,允许读取合约状态,但不允许修改合约状态或访问合约存储
gas开销:view 函数在执行期间只涉及状态读取,不进行状态变更,因此其 gas 开销相对较低
payable:
作用域:payable 修饰的函数用于接收以太币,并可以触发合约的以太币转账操作
gas开销:payable 函数在接收以太币时会产生额外的 gas 开销,包括转账和以太币的处理费用
数据位置:memory、storage、colldata
memory:
作用域:函数内部的局部变量声明时可以使用,只在函数执行期间有效,传递和处理函数调用的临时数据
gas消耗:写入 memory 数据会消耗 gas,消耗量取决于写入的数据量,读取 memory 数据不会消耗 gas
storage:
作用域:存储在合约状态变量中的数据使用 storage,可以在整个合约中访问
gas 消耗:修改 storage 数据会消耗 gas,消耗量取决于写入的数据量和执行的操作,读取 memory 数据不会消耗 gas
colldata:
作用域:calldata 是用于传递外部函数调用参数的特殊数据位置,只能在函数内部访问
gas消耗:读取 calldata 数据不会消耗 gas。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!