Solidity合约结构
123458262
发表于 2022-12-27 10:28:22
148
0
0
在 Solidity 中,合约类似于面向对象编程语言中的类。
每个合约中可以包含 :ref:structure-state-variables、 :ref:structure-functions、
:ref:structure-function-modifiers、:ref:structure-events、 :ref:structure-struct-types、, T% J5 m, P& c i" _) G9 x
和 :ref:structure-enum-types 的声明,且合约可以从其他合约继承。* m5 U+ F9 }3 T- A! l
状态变量
状态变量是永久地存储在合约存储中的值。4 \ n4 S7 h3 U$ _
pragma solidity ^0.4.0;& I$ r5 B$ a) s! u% o0 [+ D5 Q) O
contract SimpleStorage {
uint storedData; // 状态变量
// ...( r2 M$ c0 W3 p9 _( Q/ w0 A
}
有效的状态变量类型参阅 :ref:types 章节,
对状态变量可见性有可能的选择参阅 :ref:visibility-and-getters 。
函数# d# I4 U2 k! j# V' v& W
函数是合约中代码的可执行单元。
pragma solidity ^0.4.0;
contract SimpleAuction {
function bid() public payable { // 函数6 I: b9 u9 L" \
// .... Y( L- U9 f3 s! ]1 B" Z
}
}
:ref:function-calls 可发生在合约内部或外部,且函数对其他合约有不同程度的可见性( :ref:visibility-and-getters)。
函数修饰器; p7 B' d! S" i3 k( ~ i/ M K
函数修饰器可以用来以声明的方式改良函数语义(参阅合约章节中 :ref:modifiers)。; i7 G" I: M! k, h( J
pragma solidity ^0.4.22;
contract Purchase {+ T" |; g t, ?+ s
address public seller;4 a; l" l6 S- y
modifier onlySeller() { // 修饰器
require(
msg.sender == seller,
"Only seller can call this."1 L e' W, _$ S7 }! o+ l
);9 ^: ?; k9 o. c- ~
_;
}
; i' O" k4 d" [; {
function abort() public onlySeller { // Modifier usage! \7 k4 u! f& w# b S H O. o
// ...9 F0 s/ A/ r4 m# e$ o
}7 X8 {5 }" o- ]/ [- T& t/ C. d
}
事件! D+ h6 L9 o% O6 S" y0 e
事件是能方便地调用以太坊虚拟机日志功能的接口。
pragma solidity ^0.4.21;
contract SimpleAuction {
event HighestBidIncreased(address bidder, uint amount); // 事件
function bid() public payable {
// .... m. L- b' {& p3 q S! w) {. `% K/ X6 G
emit HighestBidIncreased(msg.sender, msg.value); // 触发事件
}
}$ C+ X( i J3 Q9 j1 [; U; i
有关如何声明事件和如何在 dapp 中使用事件的信息,参阅合约章节中的 :ref:events。7 g( r% ]8 V/ P9 w+ X; i+ w
结构类型8 b- n1 y1 y4 T6 x4 P* {
结构是可以将几个变量分组的自定义类型(参阅类型章节中的 :ref:structs)。
pragma solidity ^0.4.0;* N! i9 ?' \+ B( L
contract Ballot {
struct Voter { // 结构
uint weight;3 `: i. l$ @ M, P, E( e1 ^* m
bool voted;
address delegate;
uint vote;
}7 A( u. I8 g* {1 l
}
枚举类型1 u- Y: ~" T& [+ r# M; R4 g
枚举可用来创建由一定数量的“常量值”构成的自定义类型(参阅类型章节中的 :ref:enums)。$ r& \: F) Y5 w2 a) a/ _9 _$ u
pragma solidity ^0.4.0;0 P4 ] ^: L0 U" F) Z
contract Purchase {, N5 ?' `( K4 O
enum State { Created, Locked, Inactive } // 枚举3 z y7 D7 l% _3 H; o# i: _
}
成为第一个吐槽的人