Solidity合约结构
123458262
发表于 2022-12-27 10:28:22
135
0
0
在 Solidity 中,合约类似于面向对象编程语言中的类。
每个合约中可以包含 :ref:structure-state-variables、 :ref:structure-functions、
:ref:structure-function-modifiers、:ref:structure-events、 :ref:structure-struct-types、9 E+ D" l# X0 Q5 l7 T
和 :ref:structure-enum-types 的声明,且合约可以从其他合约继承。) m% [6 R9 D: B/ C. G3 Y& J w
状态变量
状态变量是永久地存储在合约存储中的值。
pragma solidity ^0.4.0;1 v' [& }: z8 F! k/ p! O
contract SimpleStorage {: f& t$ }& {" g; j
uint storedData; // 状态变量/ Z2 s$ T$ V y
// ...
}( r4 y O3 j2 d) |/ M
有效的状态变量类型参阅 :ref:types 章节,
对状态变量可见性有可能的选择参阅 :ref:visibility-and-getters 。
函数+ R& \- F* m8 z+ Q8 y+ L7 t
函数是合约中代码的可执行单元。
pragma solidity ^0.4.0;
contract SimpleAuction {
function bid() public payable { // 函数* S2 A3 s! k7 w% A- a
// ...9 ?5 x& G6 {+ l! _; T3 n7 [( b
}. R- h% ?$ R/ C& f# x) E6 \
}" Z; a. F% N# N
:ref:function-calls 可发生在合约内部或外部,且函数对其他合约有不同程度的可见性( :ref:visibility-and-getters)。( l. W& l' s* \# \6 s8 U
函数修饰器
函数修饰器可以用来以声明的方式改良函数语义(参阅合约章节中 :ref:modifiers)。0 _' f2 R7 ?' w! u3 u
pragma solidity ^0.4.22;
contract Purchase {
address public seller;! Z O: B5 q! r" k! w- d
modifier onlySeller() { // 修饰器
require(
msg.sender == seller,
"Only seller can call this.", j7 c# r2 t5 n2 M) Y4 M
);: |2 D& @$ G j4 x! O
_;# B2 V4 p- U. x5 p
}
6 u0 K! b5 w8 b r
function abort() public onlySeller { // Modifier usage; y8 ] d; J) _, N% S" C
// ...
}
}- \; l' X1 L+ g$ T
事件
事件是能方便地调用以太坊虚拟机日志功能的接口。8 P9 T+ }2 p; b; H3 _3 J; }' d
pragma solidity ^0.4.21;/ A6 }6 p% j$ s1 I5 {( v9 N
contract SimpleAuction {7 u% Z4 p' y# a' `9 B3 ~7 ^
event HighestBidIncreased(address bidder, uint amount); // 事件
function bid() public payable {
// ...
emit HighestBidIncreased(msg.sender, msg.value); // 触发事件
}9 a2 A, ~7 ^( h) u9 |# v
}
有关如何声明事件和如何在 dapp 中使用事件的信息,参阅合约章节中的 :ref:events。4 H. o& U0 J% d; t/ O$ S' t& f: L
结构类型 w2 x2 t- x9 H) J( w3 s+ J
结构是可以将几个变量分组的自定义类型(参阅类型章节中的 :ref:structs)。: ]8 s: v1 m6 W: X0 X1 Q
pragma solidity ^0.4.0;
contract Ballot {8 q0 ?5 S }) B) V& q# {5 Z" n
struct Voter { // 结构
uint weight;! h5 l/ l& C, Q' y4 E) v
bool voted;
address delegate;
uint vote;
}
}; M4 `9 d0 a. M+ A, \: T$ X/ w" \
枚举类型$ Y6 v* B$ ~5 l
枚举可用来创建由一定数量的“常量值”构成的自定义类型(参阅类型章节中的 :ref:enums)。
pragma solidity ^0.4.0;# }1 G1 h, J8 B- ~
contract Purchase {
enum State { Created, Locked, Inactive } // 枚举
}
成为第一个吐槽的人