智能合约 可见性

状态变量可见性

  • public
    公共状态变量与内部状态变量的不同之处在于,编译器会自动为它们生成 getter 函数,这允许其他合约读取它们的值。 在同一合约内使用时,外部访问(例如 this.x)会调用 getter,而内部访问(例如 x)则直接从存储中获取变量值。 不会生成 Setter函数,因此其他合约无法直接修改它们的值。
  • internal
    内部状态变量只能在定义它们的合约及其派生合约中访问。 它们无法被外部访问。 这是状态变量的默认可见性级别。
  • private
    私有状态变量类似于内部变量,但在派生合约中不可见。

将某些内容设置为 private 或 internal 仅仅是防止其他合约读取或修改这些信息,但它仍然对区块链外的整个世界可见。

函数可见性

Solidity 有两种类型的函数调用:外部调用会创建实际的 EVM 消息调用,而内部调用则不会。 此外,内部函数可以对派生合约不可访问。 这产生了四种函数的可见性类型。

  • external
    外部函数是合约接口的一部分, 这意味着它们可以从其他合约和通过交易调用。 外部函数 f 不能被内部调用(即 f() 不起作用,但 this.f() 有效)
  • public
    公共函数是合约接口的一部分可以通过内部调用或消息调用。
  • internal
    内部函数只能在当前合约内 或从其派生的合约中访问。 它们无法被外部访问。 由于它们没有通过合约的 ABI 暴露给外部,因此可以接受内部类型的参数,如映射或存储引用。
  • private
    私有函数类似于内部函数,但在派生合约中不可见。

将某些内容设置为 private 或 internal 仅仅是防止其他合约读取或修改这些信息,但它仍然对区块链外的整个世界可见。

可见性修改器在状态变量的类型后给出,在函数的参数列表和返回参数列表之间。

posted @ 2025-04-24 09:24  张志健  阅读(17)  评论(0)    收藏  举报