Solidity合约结构
123458262
发表于 2022-12-27 10:28:22
147
0
0
/ x, P2 F8 X! w
在 Solidity 中,合约类似于面向对象编程语言中的类。/ u$ B# F" U1 _* ~
每个合约中可以包含 :ref:structure-state-variables、 :ref:structure-functions、. l: D6 l. z( c& P' E2 u! _. y% [
:ref:structure-function-modifiers、:ref:structure-events、 :ref:structure-struct-types、; Z$ I; H, ?+ m. b. n w: L
和 :ref:structure-enum-types 的声明,且合约可以从其他合约继承。
状态变量; r" ?7 z. p5 ?
状态变量是永久地存储在合约存储中的值。
pragma solidity ^0.4.0;) k' P- g+ y% T8 @2 u
contract SimpleStorage {
uint storedData; // 状态变量
// ...9 E2 c1 M* y6 M5 K( P6 W
}
有效的状态变量类型参阅 :ref:types 章节,' q% D% H; G V, i( ]- R
对状态变量可见性有可能的选择参阅 :ref:visibility-and-getters 。9 {$ k" q& j+ s Z& P1 k* l# e, Y; Z
函数
函数是合约中代码的可执行单元。' X& i% o+ k% N2 T- P C
pragma solidity ^0.4.0;
contract SimpleAuction {
function bid() public payable { // 函数# |! t9 |4 B; X
// ...
}+ }/ I p& c) ~3 G! `7 P
}- }9 \' d0 s5 e3 m: j1 J
:ref:function-calls 可发生在合约内部或外部,且函数对其他合约有不同程度的可见性( :ref:visibility-and-getters)。7 J2 j0 @* o1 t8 h2 Q( H7 I& t x
函数修饰器4 I5 J& H& M& k4 Y: v. h
函数修饰器可以用来以声明的方式改良函数语义(参阅合约章节中 :ref:modifiers)。
pragma solidity ^0.4.22;( `" u/ b5 E, W9 j+ Y" \2 |- M
contract Purchase {/ T2 u- q" r0 c3 a% q
address public seller;
modifier onlySeller() { // 修饰器4 H& J$ A1 A+ }) p8 k) n
require(
msg.sender == seller,2 U0 @6 _; Q7 S" W/ m H
"Only seller can call this."
);
_;
}
$ V, k0 l+ e2 T, N( s- t/ t
function abort() public onlySeller { // Modifier usage: A. R8 G4 T* D; f
// ...
}
}
事件7 f7 s, F* J0 x* T) z+ }) l3 G& i
事件是能方便地调用以太坊虚拟机日志功能的接口。
pragma solidity ^0.4.21;
contract SimpleAuction {9 c2 l6 c6 d2 }9 }
event HighestBidIncreased(address bidder, uint amount); // 事件3 X2 k9 |% M0 r; `, c
function bid() public payable {
// ...+ }' N3 d8 g. U. d% `8 @
emit HighestBidIncreased(msg.sender, msg.value); // 触发事件
}4 b0 ~+ k6 X! W
}
有关如何声明事件和如何在 dapp 中使用事件的信息,参阅合约章节中的 :ref:events。
结构类型
结构是可以将几个变量分组的自定义类型(参阅类型章节中的 :ref:structs)。" k% k5 ~' l, J/ K7 z" {. V
pragma solidity ^0.4.0;& M8 z& o- r2 a+ A
contract Ballot {" D7 W5 Z+ U& z( }7 M/ S/ }% a; _2 n
struct Voter { // 结构; d& D2 s9 f, I4 p' E8 ~, h4 Z
uint weight;
bool voted;0 A/ D+ k+ I- z: \' ~! h: N/ B$ ~
address delegate;
uint vote;
}
}4 L7 B+ J; y$ m t% r0 v
枚举类型
枚举可用来创建由一定数量的“常量值”构成的自定义类型(参阅类型章节中的 :ref:enums)。. ] H/ }0 w! I
pragma solidity ^0.4.0;
contract Purchase {
enum State { Created, Locked, Inactive } // 枚举5 U; ^ U* C+ B0 d. T" g
}
成为第一个吐槽的人