23-02-22

First Post:

Last Update:

23-02-22

方法的顺序

function name(参数列表) 可见性 修饰符 returns(返回类型 返回值名称)

除了 Solidity 0.5.0 版本之前可见性和返回参数的位置可以交换外,从 Solidity 0.5.0 版本开始,函数声明必须按照以下顺序:

1
function functionName(parameterList) visibilityModifier stateMutabilityModifier virtualModifier overrideModifier returns (returnTypes)

这些部分应该按照以下顺序进行:

  • 函数名称
  • 参数列表
  • 可见性修饰符(public、external、internal 或 private)
  • 状态变更修饰符(pure、view、payable 或不包含修饰符)
  • 虚拟修饰符(virtual 或不包含修饰符)
  • 覆盖修饰符(override 或不包含修饰符)
  • 返回值列表

全局变量

函数可见性(大)与变量作用域(小)修饰符

函数可见性指的的范围会比较大,而变量作用域指的东西少一些(external不在变量作用域范畴,不能作用于变量)

public

Public – 公共状态变量可以在内部访问,也可以通过消息访问。对于公共状态变量,将生成一个自动getter函数。

internal

Internal – 内部状态变量只能从当前合约或其派生合约内访问。

private

Private – 私有状态变量只能从当前合约内部访问,派生合约 内不能访问。

external

修饰为External的函数 — 只能通过三种种方式:一—是通过继承/合同内其他函数的this进行调用/二是this(==合约地址调用外部函数)/三是通过交易发送

this.foo() 在 Solidity 中确实也是 external 的调用方式,因为 this 关键字指的是当前合约的地址,通过它来调用合约中的函数等价于通过外部地址调用合约中的函数。

合同状态

在 Solidity 中,合约的状态(State)是指合约在任意时刻所有的状态变量的集合。这些状态变量可以是各种类型的变量,包括 uint、address、bool、mapping 等。

状态变更修饰符

状态变更修饰符包括 pure、view 和 payable 三种:

  • view 修饰符表示函数不会修改合约状态,只读取合约状态变量的值。因此,view 函数在调用过程中不会消耗 gas,可以免费调用,即使在未来的某个时候也可以免费调用。

  • pure 修饰符表示函数不会读取或修改合约状态,只执行计算并返回结果。因此,pure 函数在调用过程中不会消耗 gas,可以免费调用,即使在未来的某个时候也可以免费调用。

  • payable 修饰符表示函数可以接收以太币,并且会修改合约状态。在调用 payable 函数时,调用者必须发送足够的以太币来支付函数执行所需的 gas 费用和转账金额。因此,payable 函数在调用过程中会消耗 gas,调用者需要支付 gas 费用,而且调用者发送的以太币会被转移到合约地址。