Solidity合约结构
123458262
发表于 2022-12-27 10:28:22
80
0
0
在 Solidity 中,合约类似于面向对象编程语言中的类。
每个合约中可以包含 :ref:structure-state-variables、 :ref:structure-functions、2 g* T9 g" Y7 s" V6 m/ u6 u
:ref:structure-function-modifiers、:ref:structure-events、 :ref:structure-struct-types、
和 :ref:structure-enum-types 的声明,且合约可以从其他合约继承。 j+ H' j* X8 m7 O( c
状态变量
状态变量是永久地存储在合约存储中的值。& C' h' ] f0 s! j: T) i
pragma solidity ^0.4.0;$ {* E; J3 y: u0 K% K1 N
contract SimpleStorage {7 e2 h; h- P! G/ j! w
uint storedData; // 状态变量
// ...
}
有效的状态变量类型参阅 :ref:types 章节,
对状态变量可见性有可能的选择参阅 :ref:visibility-and-getters 。
函数
函数是合约中代码的可执行单元。! f5 _% B# ?0 V1 a9 D* A
pragma solidity ^0.4.0;
contract SimpleAuction {6 ]' s) D- d$ h) G9 r- z
function bid() public payable { // 函数
// ...% n1 q4 P6 O9 W
}4 l: h! E6 g! Z4 c, z8 x/ S" R/ t
}! H1 U% o! @9 }$ D
:ref:function-calls 可发生在合约内部或外部,且函数对其他合约有不同程度的可见性( :ref:visibility-and-getters)。# s. J9 v' I/ [
函数修饰器! ]5 o! `- ?& r0 h/ `% \
函数修饰器可以用来以声明的方式改良函数语义(参阅合约章节中 :ref:modifiers)。
pragma solidity ^0.4.22;" m b8 n. X2 A: N( \" |% A% q3 e
contract Purchase {
address public seller;2 q4 H6 G6 \9 A: O
modifier onlySeller() { // 修饰器' Y0 C7 b" Z7 A5 C* A9 F
require(& O' a9 q* b$ O4 b R H
msg.sender == seller,0 g7 M5 u6 L& V: G& @( {5 j) U5 s
"Only seller can call this."
);; F+ X# e( b9 v4 g. a" S
_;
}
8 f* Q- m# l% Y) i6 A
function abort() public onlySeller { // Modifier usage9 b' K; v* N: n' b* j6 N6 i
// ...' S1 F$ ?; l* m$ f) l0 D. ^* E
}
}
事件& z6 D7 ]" ]3 f/ `
事件是能方便地调用以太坊虚拟机日志功能的接口。- r9 |- p! |! s( g/ s5 a9 h
pragma solidity ^0.4.21;
contract SimpleAuction {, D0 |. u6 ^# t
event HighestBidIncreased(address bidder, uint amount); // 事件/ I$ D& q5 z7 w
function bid() public payable {
// ...8 g; j' Q1 H# i9 }& A' |) h
emit HighestBidIncreased(msg.sender, msg.value); // 触发事件: F9 g" z8 {" Y( x
}
}& C. N9 n) q5 k4 a
有关如何声明事件和如何在 dapp 中使用事件的信息,参阅合约章节中的 :ref:events。
结构类型
结构是可以将几个变量分组的自定义类型(参阅类型章节中的 :ref:structs)。4 w8 j8 C% |- ^4 q
pragma solidity ^0.4.0;" t0 c. R, J# q! o. {) i) x6 `
contract Ballot {/ n4 y$ g# R( k- @
struct Voter { // 结构( H Y5 e7 D; z* U; D
uint weight;7 S+ p$ r! g! F; j, P& U3 j) o
bool voted;
address delegate;
uint vote;& E! B: W, W# q# s. _/ d
}
}
枚举类型3 k" F# x1 [2 G& n; v2 f6 r3 p
枚举可用来创建由一定数量的“常量值”构成的自定义类型(参阅类型章节中的 :ref:enums)。4 Q/ V1 k& D2 Z. k
pragma solidity ^0.4.0;* y( C- X; O4 |
contract Purchase {
enum State { Created, Locked, Inactive } // 枚举
}
成为第一个吐槽的人