Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Solidity合约结构

123458262
76 0 0
合约结构
3 k( y4 |" x  s9 \8 A2 ^9 ~( B
4 z$ B1 C5 x$ ^; R; D在 Solidity 中,合约类似于面向对象编程语言中的类。
. H/ @# H$ ~* ~8 |1 H. r. n' N5 L每个合约中可以包含 :ref:structure-state-variables、 :ref:structure-functions、
  H! w5 R( }8 {( Z7 b:ref:structure-function-modifiers、:ref:structure-events、 :ref:structure-struct-types、. a+ n2 O' E5 k- S6 ^8 V" b
和 :ref:structure-enum-types 的声明,且合约可以从其他合约继承。# r- K0 N! `; _
状态变量; C: g2 t( p$ M0 o! I  u
状态变量是永久地存储在合约存储中的值。
- Z4 z! F+ I. a$ W4 ypragma solidity ^0.4.0;6 Y; \  C" v8 M3 K! R
contract SimpleStorage {9 v9 X. E! D) o& l0 N9 N/ L; e. J
    uint storedData; // 状态变量
! u7 [* }- {2 V# w    // ...( u" d/ A" w6 o- I! u! p  ]! d
}$ Y: M; N& E# }4 e- C
有效的状态变量类型参阅 :ref:types 章节,
2 C5 z5 n. K' x对状态变量可见性有可能的选择参阅 :ref:visibility-and-getters 。
, Y, R) V6 h- s# ^' |4 W* i函数; Q7 Q) o% R" T* M# ]8 y! t# `
函数是合约中代码的可执行单元。( ^9 |# K. g9 ^5 x# c
pragma solidity ^0.4.0;
0 E- j* K3 a1 @" icontract SimpleAuction {
! b: Y; X' w: Q- I# r8 f1 z    function bid() public payable { // 函数% U, u$ }2 S. X+ h
        // ...* D, u3 I2 e$ w
    }
- x' y0 J1 U7 v" ?# [: C}
& a  J% o% I2 F7 X" g: H1 J:ref:function-calls 可发生在合约内部或外部,且函数对其他合约有不同程度的可见性( :ref:visibility-and-getters)。/ Y: z, p# p5 Y! S/ c8 `4 p
函数修饰器
. O' m6 u5 j& [9 R0 [函数修饰器可以用来以声明的方式改良函数语义(参阅合约章节中 :ref:modifiers)。$ L, R, w: Z' M2 Y
pragma solidity ^0.4.22;0 d3 y: t2 |* Z
contract Purchase {
+ H6 N& j* v$ @4 q0 S+ Q3 z4 C, t    address public seller;
% I) D5 x% S6 Z# @3 P    modifier onlySeller() { // 修饰器
+ u" i# b) F! T( D3 D% V6 ^        require(7 v( J( |5 Z$ X& p
            msg.sender == seller,
/ _( i2 W8 C6 s9 H1 h; y/ C! e9 {: i            "Only seller can call this."
- C$ X" F+ I/ S8 n  s* |$ ?' [        );! d7 |( q* l4 H( r
        _;: U! J7 J6 D6 l. c' A, a
    }
( L: U1 E1 l$ Z8 N4 C0 l; Z   
- Y; V) K% t1 A8 A- L    function abort() public onlySeller { // Modifier usage
' J/ [+ S0 m( L2 c& k$ |        // ...
3 e: m' E7 \: F1 ?( R/ M# l    }( g6 U- [9 @  u# z( o8 Z" i
}
& D! G4 ?8 y7 Z3 G% ^1 k, m事件
. |/ i  S# R, s" F3 }" B& w: ~9 u事件是能方便地调用以太坊虚拟机日志功能的接口。8 K) K2 ]# x1 L& C
pragma solidity ^0.4.21;1 a0 Z4 U2 ^! m- n' S/ w2 I( b
contract SimpleAuction {5 F. A* S" z+ N* g5 Q- V
    event HighestBidIncreased(address bidder, uint amount); // 事件
& M" T" [6 E! \7 {6 X9 l6 e    function bid() public payable {
; M' h3 H' u9 V0 v        // ...
: J4 W: d7 i! E% t+ R        emit HighestBidIncreased(msg.sender, msg.value); // 触发事件& Q9 ~0 d2 i* S4 f' @1 h* D
    }
6 q# P6 @! K0 ?4 A  t' Q8 V% Y5 H5 [}
% }, F9 N9 k: f' I有关如何声明事件和如何在 dapp 中使用事件的信息,参阅合约章节中的 :ref:events。
4 ]; [$ \2 s3 t: [8 A) \0 |结构类型
1 G# H7 t+ r2 I  A5 ~1 o  m结构是可以将几个变量分组的自定义类型(参阅类型章节中的 :ref:structs)。
' u+ ~6 o# ?6 m$ W% Rpragma solidity ^0.4.0;/ c4 o9 J" H' O: W
contract Ballot {
$ m  e' Y+ q1 h+ V+ D2 A/ v    struct Voter { // 结构# t& [, }6 A  p0 t  q
        uint weight;
* R1 [9 ?" t  K% s2 h- I- D! T. E        bool voted;
$ l2 v5 H7 Q* r! [5 ?( p9 K        address delegate;/ J: v% J5 N: c$ x, r
        uint vote;2 d/ `' p: N" K% j
    }0 |' q' D. I7 ^3 T, }# w1 c) {
}
1 D) F# _" m5 {! m& N8 e枚举类型( j; ^2 h0 D+ }4 l+ n
枚举可用来创建由一定数量的“常量值”构成的自定义类型(参阅类型章节中的 :ref:enums)。
) S; I: D  C# d7 A. ^! @2 O, xpragma solidity ^0.4.0;
5 a: ^) ~9 q1 ], ~2 w9 Dcontract Purchase {# k: R. c+ ^6 V& p
    enum State { Created, Locked, Inactive } // 枚举3 c) u& |7 _, K7 W- z- |
}
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458262 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2