solidity修饰符与数据位置

  • Leo Turing
  • 更新于 2023-05-29 16:09
  • 阅读 1133

/*可见性修饰符: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。
点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Leo Turing
Leo Turing
江湖只有他的大名,没有他的介绍。