Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

& I: k9 F! N& u8 e; t# }View pure修饰符:
# S1 K( D3 P- Z: q2 q7 }9 S" @3 }使用view与pure不需要gwei
& P- h0 A% L# m5 t) T7 n, H% z0 g  o! c
view:不能修改链上数据只能访问; t* d1 \$ b" L: E' v; \5 |
, q' M& ?$ L5 M& a! Z
pure:不能访问链上数据,被修饰的方法里的变量只能在方法内使用( `2 l$ ^7 ~8 s. P! M

. P) Q1 t2 K- C, _" n. m
  1. contract ViewPureExample {( y# k1 [' @" F. m- @
  2.     uint public age;" K. o8 m2 P; ?/ Z: n# D. W
  3.     function increaseAge() public{
    2 |( H  b% Y9 n3 P
  4.       age ++;" T2 F- Y5 m! K; I
  5. }
    & s3 V/ f3 t$ F- ]; t# h

  6. 9 d9 I  t# T7 J0 Y8 a9 Z6 l5 B4 D
  7.     function GetViewAge() public view returns(uint){ //view 修饰
    3 V, l( |: P, v  i
  8.         //age ++;// 不可修改变量
    3 X' U+ ~9 ?+ w; k1 Q& E1 p
  9.         return age;
    ' _- m+ o2 g0 o6 V1 K
  10. }/ ~6 `* j, X' r* p7 ~  }6 j4 @

  11. / O( j$ Z3 S5 x( l( X
  12. function GetPureAge(uint age) public pure returns(uint){ //因为pure方法 所以需要设置参数
    ( |- T3 Y) P: }" u7 D/ R
  13.         age ++;$ X1 N7 W: C  A0 s
  14.         return age;//如果直接return会直接报错  因为pure修饰 所以不能访问方法外的变量( ^, m8 ]9 d: G8 g# A
  15.     }( j) S7 \. e  T, {* j  b7 Z: k
  16. }
复制代码

  d3 t* l1 A! u  V( z) b- ]) a9 u
" y5 s& s9 H6 O( S0 c, Q* I ( _6 v6 J# C# s% g  G

5 V# ~: \) a- g: O, s, M2 }8 OPublic internal private external 方法修饰符:
$ ^; k3 a+ i* h) dpublic:任何地方都可以调用
/ U2 Z, [. e2 D: {" T  `- @
. w7 b; X' |8 b/ ?internal:只有本sol文件调用3 v1 f- E# W6 \: X
" B- k: M, i0 s7 p
private:只有本合约能调用" r0 }* r0 o  n6 b, T7 ~0 {
1 s1 h8 a+ o9 _: }- ~/ X. K* T6 \
external:只能从外部调用即合约外部
' p& T/ E) {. q- d, S6 v4 x' t% _8 c8 H5 }3 G4 I3 J. J9 v$ L

6 W6 f3 |6 ]; ~) @& r/ T7 d9 a- R/ r) Z
  1. contract PublicExternalPrivateInternal {0 v( Y/ ~/ o5 c4 v6 c
  2.     uint age = 100;* n4 X6 S$ `. A7 }! Y3 f7 s
  3.     function GetAgeWithPublic() public view returns(uint){  //外部内部都可调用
    4 l/ I4 I) a2 m5 G' ?
  4.         return age;
    . p: n1 r, p$ s9 w4 ]
  5.     }
    # s. g) g: g, b5 O" J$ O
  6.     function GetAgeWithInternal() internal view returns(uint){ // 本sol文件调用
    8 r% y# S% o7 |: G6 c
  7.         return age;
    % y' I$ O) _1 F6 Z$ U1 l( C$ R* m# a
  8.     }; m: _' {  J% E* x% V! `
  9. ( |4 [/ f% M. y2 d& a7 T
  10.     function GetAgeWithPrivate() private view returns(uint){ //本合约调用2 M: Q: [+ `# E% {# j/ B$ C
  11.         return ag;
    9 n5 f! a2 ^2 N
  12.     }
    5 k) D3 W" c" A! E

  13. # k; f6 f& l8 V' u- Z( j
  14. function GetAgeWithExternal() external view returns(uint){ //只能外部: H# Y$ B+ u: X" W' I# t
  15. //调用: V+ e& P, p. L+ b" Y7 g0 p
  16.         return age;# u8 u. d+ A2 W+ l5 Z4 |& g
  17.     }
    # U+ Y5 T. Y  m' G
  18. / e' X7 ]2 T  y' P8 U
  19.     function Callfunction() public view returns(uint){
    : J; S7 t' m+ b8 s& r9 H
  20.         return GetAgeWithPrivate();//方法可以调用方法只要被调用的方法允许7 n* z) s/ K  b
  21.     }& ]$ A0 g" m* J

  22. + c' a& t4 ], T6 ]; y! ^/ r
  23. }
复制代码
# R7 s6 X  ]+ t5 `: @+ b$ |

& B. F1 A0 N$ Z6 g6 X' O  G$ e可以自行编译后尝试调用查看输出
$ G8 p$ V# M! ~2 C6 t' ^6 a) V. n# \4 @. ]2 Y
5 Q2 `6 H1 G. Y* ?

8 }& s: F# Y2 q0 M2 c; q, N简单的合约调用:
- Z( Q4 z6 B  x8 D! X* N1 b0 L
  1. contract Salary {
    % M; V8 N% v, G; I1 ^. J0 i
  2.     uint public data;
    . w' {; E4 W1 G2 \% N7 G  E/ @4 A
  3.     function getData() external view returns(uint){# D' M2 S2 O- b) E: U* x; g
  4.         return data;
    ! n4 P; e* k0 o3 k2 k
  5. }- v1 \% o1 ^7 D. R0 Q) V
  6. 4 P* e9 }$ Q# x& i$ s6 G
  7.     function setData(uint _data) external {
    ! A  j- M+ P3 \, U! U2 h
  8.         data = _data;6 k$ Q0 h1 i* d/ w
  9.     }
    * _9 L# h6 g0 O7 h) U5 s
  10. }4 X% k) Z) T1 j1 Y6 \1 m) `, S
复制代码
" o* V( ^0 w) I2 r5 p8 v$ Q7 H3 p; V

, ^# l: F/ A, E# v1 Q! Z$ Q2 J, q: L! i  h" n( y5 c
  1. contract Employee {3 R+ [$ f: |" r/ `- \" ^2 I3 p) ]
  2.     Salary salart;
    ! d. q- I5 s; n& H$ @
  3.     constructor(){8 |* z: X0 L4 u6 `' \
  4.         salary = new Salary();
    / U' W; x: g4 i$ t: i
  5.     }
    * `/ s' Y$ `- |) r
  6. 4 q) y5 a/ m% P/ R+ G
  7.     function getSalary() external view returns(uint){
    , t) m% J) Z8 T" j/ z5 B
  8.         return salary.getData();1 ^# e0 T$ o* U
  9.     }9 A; [& s0 \7 B3 q! ^, D7 b2 G

  10. 0 d% v/ Q* h' }" S( G9 H' g
  11.     function setSalaty(uint _data) external {) T  ?3 W. x- a& c. t" f
  12.         salary.setData(_data);$ V/ P2 e, |& v( J- [0 k6 J
  13.     }
    ( i+ S' e9 Y8 R* f: r6 [0 f% @6 R. {
  14. }
复制代码
* V* i+ f( m$ K* ?
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13