Solidity合约结构
123458262
发表于 2022-12-27 10:28:22
149
0
0
1 {$ P g" s6 h v# n
在 Solidity 中,合约类似于面向对象编程语言中的类。8 w# N# `. m. y; ]
每个合约中可以包含 :ref:structure-state-variables、 :ref:structure-functions、
:ref:structure-function-modifiers、:ref:structure-events、 :ref:structure-struct-types、* ?) p2 }! F1 N" l
和 :ref:structure-enum-types 的声明,且合约可以从其他合约继承。' l0 B8 ]. p$ p$ n7 E5 l, W8 }! z
状态变量
状态变量是永久地存储在合约存储中的值。
pragma solidity ^0.4.0;9 z+ M3 j0 m) H# L2 q
contract SimpleStorage {
uint storedData; // 状态变量0 |: X: p: H# t4 Q+ A6 F) b. f
// ...# D5 _$ T9 H9 w
}
有效的状态变量类型参阅 :ref:types 章节,
对状态变量可见性有可能的选择参阅 :ref:visibility-and-getters 。
函数; \% B7 y. A. n; m% p
函数是合约中代码的可执行单元。
pragma solidity ^0.4.0;9 J7 v: Q& j8 e4 b
contract SimpleAuction {" D. H- s. G5 A; x5 v; ?3 k( y" [
function bid() public payable { // 函数
// ...
}
}6 c! j! e4 u: c3 V
:ref:function-calls 可发生在合约内部或外部,且函数对其他合约有不同程度的可见性( :ref:visibility-and-getters)。$ |8 ]! A& l' D; e# ^; ~% k. z* k
函数修饰器
函数修饰器可以用来以声明的方式改良函数语义(参阅合约章节中 :ref:modifiers)。
pragma solidity ^0.4.22;( o8 P' Q0 J! P; P. k
contract Purchase {8 t' x- i9 t$ ]. T* }2 |
address public seller;+ I0 @. I& P, J. P; o
modifier onlySeller() { // 修饰器
require(
msg.sender == seller,: ~+ S3 |$ l; j$ Z, H3 Q0 C- m; v( T
"Only seller can call this."
);, M' Y* q! M- u
_;
}+ D' v [& M; P2 H( }- l
8 K, V1 f% p; K1 B, B
function abort() public onlySeller { // Modifier usage
// ...
}
}+ h3 z0 o* h* i
事件) v9 k" l- j2 H3 ?
事件是能方便地调用以太坊虚拟机日志功能的接口。
pragma solidity ^0.4.21;
contract SimpleAuction {
event HighestBidIncreased(address bidder, uint amount); // 事件
function bid() public payable {2 N4 k: L. E7 V9 Z
// ..." a9 a' k1 k9 T5 Y! E
emit HighestBidIncreased(msg.sender, msg.value); // 触发事件
}- R: b8 l$ B1 y! f6 a" L2 j
}7 W' P2 |! B) W+ U2 ]1 O# \
有关如何声明事件和如何在 dapp 中使用事件的信息,参阅合约章节中的 :ref:events。
结构类型# d$ o" N3 d: Y; L
结构是可以将几个变量分组的自定义类型(参阅类型章节中的 :ref:structs)。
pragma solidity ^0.4.0;
contract Ballot { w3 a( t1 G" B5 P7 W7 r% b7 d- f
struct Voter { // 结构& }7 J. L) O1 q3 {$ B
uint weight;
bool voted;9 `4 Q/ f/ t3 k
address delegate;
uint vote;
}$ }5 \9 N9 Q3 w3 k3 L
}
枚举类型8 I: p' q, J6 z `5 y2 Q# c
枚举可用来创建由一定数量的“常量值”构成的自定义类型(参阅类型章节中的 :ref:enums)。
pragma solidity ^0.4.0;
contract Purchase {
enum State { Created, Locked, Inactive } // 枚举/ {+ h; r) Z" V5 Q4 E) G3 O
}
成为第一个吐槽的人