Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Solidity合约结构

123458262
148 0 0
合约结构6 X5 d2 L% `3 [, c5 O6 B+ e/ A

$ u6 X) U. j# m( Z( D在 Solidity 中,合约类似于面向对象编程语言中的类。
+ z. ~% `' T6 Y; ^  ?每个合约中可以包含 :ref:structure-state-variables、 :ref:structure-functions、
* m+ w: |$ t: D# A, W+ ?- I: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
状态变量
3 e' G% I  g0 o, w状态变量是永久地存储在合约存储中的值。4 \  n4 S7 h3 U$ _
pragma solidity ^0.4.0;& I$ r5 B$ a) s! u% o0 [+ D5 Q) O
contract SimpleStorage {
, X; V; t$ D; n, I0 j2 N; q  E    uint storedData; // 状态变量
1 _, R6 I7 }; Y$ i    // ...( r2 M$ c0 W3 p9 _( Q/ w0 A
}
# w3 [# ~( K, T有效的状态变量类型参阅 :ref:types 章节,
1 i- z5 k. _5 I7 o  ]7 m对状态变量可见性有可能的选择参阅 :ref:visibility-and-getters 。
4 G8 w, S0 A6 g3 g0 t函数# d# I4 U2 k! j# V' v& W
函数是合约中代码的可执行单元。
7 _2 Y2 K3 a3 I3 s0 A& Vpragma solidity ^0.4.0;
5 d% k) a. }: G2 m4 d7 A+ Rcontract SimpleAuction {
7 \9 [9 S7 M  h1 w    function bid() public payable { // 函数6 I: b9 u9 L" \
        // .... Y( L- U9 f3 s! ]1 B" Z
    }
2 X* i8 l' J* @+ F8 s. X% h}
' i' U1 k1 F2 s1 Y:ref:function-calls 可发生在合约内部或外部,且函数对其他合约有不同程度的可见性( :ref:visibility-and-getters)。
' h& B- W' [: M函数修饰器; p7 B' d! S" i3 k( ~  i/ M  K
函数修饰器可以用来以声明的方式改良函数语义(参阅合约章节中 :ref:modifiers)。; i7 G" I: M! k, h( J
pragma solidity ^0.4.22;
6 W) S$ z( X2 E: k; D+ ~- a8 Jcontract Purchase {+ T" |; g  t, ?+ s
    address public seller;4 a; l" l6 S- y
    modifier onlySeller() { // 修饰器
& Y1 u9 f' Z$ u1 r        require(
# Z& [7 _  p! f) i; W9 K; f            msg.sender == seller,
. n1 e' l* g2 [& m- F            "Only seller can call this."1 L  e' W, _$ S7 }! o+ l
        );9 ^: ?; k9 o. c- ~
        _;
- O" u! T# v" z    }
5 L$ m  |/ y; L    ; 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
}
) @5 k( B* R5 e  d! M8 S事件! D+ h6 L9 o% O6 S" y0 e
事件是能方便地调用以太坊虚拟机日志功能的接口。
; G' b/ t! P& upragma solidity ^0.4.21;
4 o' f6 N6 Z, F( Lcontract SimpleAuction {
* o3 X* ?$ @2 g    event HighestBidIncreased(address bidder, uint amount); // 事件
6 d& g% @1 ~' o: k) }$ b: G    function bid() public payable {
+ a3 ?3 M! i9 B) p9 s% U/ c        // .... m. L- b' {& p3 q  S! w) {. `% K/ X6 G
        emit HighestBidIncreased(msg.sender, msg.value); // 触发事件
- V# u7 b* |+ {+ f2 b5 F! P    }
: N4 W( m' Y# L) T  T$ k}$ 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)。
' I; O; d9 H! ^  f* k' x. |" rpragma solidity ^0.4.0;* N! i9 ?' \+ B( L
contract Ballot {
9 k* D; m" A, W. ]/ w+ H    struct Voter { // 结构
& E; V8 {. U4 P7 }6 m5 Z, a# {        uint weight;3 `: i. l$ @  M, P, E( e1 ^* m
        bool voted;
0 Z) a. `7 z# x* Y  {6 c        address delegate;
1 b, y! s) |4 l. D* Q        uint vote;
, I4 |) Z- |) C: O- r( W4 l    }7 A( u. I8 g* {1 l
}
& l( ^. P1 S3 z# ~8 Z- r( s7 g枚举类型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: _
}
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458262 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2