Solidity合约结构
123458262
发表于 2022-12-27 10:28:22
77
0
0
在 Solidity 中,合约类似于面向对象编程语言中的类。8 w/ X5 o: C5 U% }4 T* O
每个合约中可以包含 :ref:structure-state-variables、 :ref:structure-functions、
:ref:structure-function-modifiers、:ref:structure-events、 :ref:structure-struct-types、+ H1 z4 n( e4 i& C5 `
和 :ref:structure-enum-types 的声明,且合约可以从其他合约继承。7 S3 r3 Q0 k9 R% E4 l% ^0 ^
状态变量' u7 T2 t9 w+ T9 }0 P
状态变量是永久地存储在合约存储中的值。
pragma solidity ^0.4.0;; g- o* K- V+ z. k
contract SimpleStorage {
uint storedData; // 状态变量
// ...) t+ ]6 [# M) r. K8 Y
}
有效的状态变量类型参阅 :ref:types 章节,
对状态变量可见性有可能的选择参阅 :ref:visibility-and-getters 。4 G" n* I( I' q0 S; X2 }
函数
函数是合约中代码的可执行单元。$ y: B1 ?3 X. Y) @# p" |
pragma solidity ^0.4.0;6 u. M6 v# w( V/ z& `. T7 e$ r
contract SimpleAuction {
function bid() public payable { // 函数) J3 ]5 Q2 l0 {9 J) w7 m% S2 s
// ...2 f' A( N+ d; A: A) X* c! g2 x& E9 ^
}6 L( C' M. u3 o' C w
}6 s' j; c! L2 j+ T( L( s2 n& v& H
:ref:function-calls 可发生在合约内部或外部,且函数对其他合约有不同程度的可见性( :ref:visibility-and-getters)。, l* M# V/ W+ l1 _) @ `; j. k
函数修饰器6 e) L" a) X$ p
函数修饰器可以用来以声明的方式改良函数语义(参阅合约章节中 :ref:modifiers)。
pragma solidity ^0.4.22;
contract Purchase {
address public seller;+ S, d3 y. t" B [0 p
modifier onlySeller() { // 修饰器
require(. C' ?; n* S2 E& |4 Z
msg.sender == seller,
"Only seller can call this."$ Z8 J' L2 P4 r/ e: ^+ y) L
);
_;
}
! v( W3 e/ ^8 P
function abort() public onlySeller { // Modifier usage( T! i. G/ \0 w3 ^! t
// ... A: N* K7 `5 z7 u2 e
}( r) x7 K9 V' q9 v; p# s) N1 p% s9 Q
}
事件! X* ^0 x- O! T, W4 L
事件是能方便地调用以太坊虚拟机日志功能的接口。$ g2 M& N8 d( e& e* ^( x
pragma solidity ^0.4.21;
contract SimpleAuction {9 _) G H+ ?0 K( s( F
event HighestBidIncreased(address bidder, uint amount); // 事件9 N( W; z8 I0 f" q) C+ T
function bid() public payable {3 ?* z8 s- T0 z, A# {
// ...
emit HighestBidIncreased(msg.sender, msg.value); // 触发事件
}+ o0 o5 A3 z- M: f
}& H; n" x2 v" w8 N6 _
有关如何声明事件和如何在 dapp 中使用事件的信息,参阅合约章节中的 :ref:events。
结构类型; @4 B. ?4 p, Y) a8 b8 y
结构是可以将几个变量分组的自定义类型(参阅类型章节中的 :ref:structs)。4 V. @4 |! |) a" `' t: U
pragma solidity ^0.4.0;. X7 I4 ~3 o$ b# v
contract Ballot {3 ~, |& C& o$ V8 ^) K( P( x
struct Voter { // 结构
uint weight;
bool voted;
address delegate;* B' f. [' M5 ^; X. R$ I
uint vote;
}
}# I5 c( N. E5 l% @! @
枚举类型
枚举可用来创建由一定数量的“常量值”构成的自定义类型(参阅类型章节中的 :ref:enums)。
pragma solidity ^0.4.0;
contract Purchase {
enum State { Created, Locked, Inactive } // 枚举# x4 i: H* F# l3 p. M
}
成为第一个吐槽的人