Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Solidity合约结构

123458262
80 0 0
合约结构
0 f, Q$ r' Z, d, V& [3 A& A
8 t# @! \7 b) r$ W9 \9 c在 Solidity 中,合约类似于面向对象编程语言中的类。
+ W3 K4 y) p0 [/ y# k- X每个合约中可以包含 :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、
7 j- Y/ Q$ Z/ i" k. C* [( X+ u和 :ref:structure-enum-types 的声明,且合约可以从其他合约继承。  j+ H' j* X8 m7 O( c
状态变量
5 }8 l6 e& H' i, A3 H9 z* e状态变量是永久地存储在合约存储中的值。& 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; // 状态变量
  L+ }  s5 |/ A& b, z5 X    // ...
. o8 @: }! `+ ~) P/ g, W}
! l8 y" V1 c7 v$ \2 U有效的状态变量类型参阅 :ref:types 章节,
& L# h# _. x. O对状态变量可见性有可能的选择参阅 :ref:visibility-and-getters 。
3 n2 i! L- T* U! X. u函数
# v4 v$ M1 V# i函数是合约中代码的可执行单元。! f5 _% B# ?0 V1 a9 D* A
pragma solidity ^0.4.0;
) ^" R# m! e5 c+ K5 R% C9 r+ scontract SimpleAuction {6 ]' s) D- d$ h) G9 r- z
    function bid() public payable { // 函数
7 [+ n9 O1 f$ u+ K2 h6 C8 |" O        // ...% 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)。
* h* Y- o' w5 b* ]7 X/ y  G8 Epragma solidity ^0.4.22;" m  b8 n. X2 A: N( \" |% A% q3 e
contract Purchase {
" c$ l* G* ^: G  F    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."
& S! O' l  P% [6 w+ V1 @2 T8 L        );; F+ X# e( b9 v4 g. a" S
        _;
% Z1 E; s9 z, o) b0 H    }
8 z8 n6 x! [1 p) f* V& j& 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
    }
  V& b, u! C  A}
9 h' D6 k" h/ n. i- P. ~1 a事件& z6 D7 ]" ]3 f/ `
事件是能方便地调用以太坊虚拟机日志功能的接口。- r9 |- p! |! s( g/ s5 a9 h
pragma solidity ^0.4.21;
0 q( B: I- s/ b+ N7 Ucontract SimpleAuction {, D0 |. u6 ^# t
    event HighestBidIncreased(address bidder, uint amount); // 事件/ I$ D& q5 z7 w
    function bid() public payable {
. R9 O7 g- g) l  ~, H        // ...8 g; j' Q1 H# i9 }& A' |) h
        emit HighestBidIncreased(msg.sender, msg.value); // 触发事件: F9 g" z8 {" Y( x
    }
3 r! U* u# H1 @' h3 O7 G}& C. N9 n) q5 k4 a
有关如何声明事件和如何在 dapp 中使用事件的信息,参阅合约章节中的 :ref:events。
& T6 N. C: l' y6 O' B9 a! |+ N结构类型
2 M/ `. i- N/ X9 n结构是可以将几个变量分组的自定义类型(参阅类型章节中的 :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;
- I9 Z. ~# y/ G4 B3 y( F        address delegate;
6 P" X# D% S3 x% z$ r8 D; V' V        uint vote;& E! B: W, W# q# s. _/ d
    }
) S! V3 L$ G  l9 f}
, b9 U4 l( j/ o: U) w7 w) ]) z枚举类型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 {
4 B2 q, K0 ^- r( [7 P5 q5 p! i    enum State { Created, Locked, Inactive } // 枚举
  C: z' `( p& t4 n5 }$ e. b: I}
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458262 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2