Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

* B3 V1 |0 `% W8 P% H# eView pure修饰符:  o1 k9 {( H3 p) s: n1 h' O% v
使用view与pure不需要gwei
0 j( u, X- z0 U% q! R* N2 _" E! q0 b& I- w0 f- g
view:不能修改链上数据只能访问3 V9 Y* a6 w) e, B8 Y$ O

3 \4 c- [& @1 e3 O* Tpure:不能访问链上数据,被修饰的方法里的变量只能在方法内使用( I* e/ n" c+ R1 ]7 G% I, J8 s
. d! U& @2 s5 m. @3 P8 n* f5 ~
  1. contract ViewPureExample {
    + L! v8 L* }! H* k8 @- E! Y
  2.     uint public age;
    " w/ J( r* l' u, s+ w8 a, a' }# N
  3.     function increaseAge() public{
    " C) Z8 Z7 s7 w5 v. ?) X
  4.       age ++;, g6 ~% T' u' g
  5. }  }0 P! k2 Y2 h6 W! ?; O5 F

  6. 2 R! U# U. J/ j2 A9 x' v- |
  7.     function GetViewAge() public view returns(uint){ //view 修饰4 \% d8 T4 j2 Z
  8.         //age ++;// 不可修改变量3 l; x$ `1 ?  k6 a) A
  9.         return age;( l9 P8 g; B" X, O2 ~0 a/ P" ~! }
  10. }
    / i* R, j( Z2 C+ u
  11. , E) h* b! c% s1 A- a) ^  w
  12. function GetPureAge(uint age) public pure returns(uint){ //因为pure方法 所以需要设置参数
    - x6 {- V6 x. k7 g, ^
  13.         age ++;
    ' {4 r- m, r$ t4 a- u
  14.         return age;//如果直接return会直接报错  因为pure修饰 所以不能访问方法外的变量' s3 H1 B) t0 S
  15.     }
    + f, w: Q! F1 t& k, E7 X
  16. }
复制代码

; [2 q* o3 p& a, z9 j% P  T0 }/ C2 \. X1 \9 N
$ W3 j. e% C8 ?% d3 z: N# P

' I& V7 p" Q5 U. C: A4 Y5 gPublic internal private external 方法修饰符:
8 N3 }9 B( Q& U: fpublic:任何地方都可以调用5 y2 e2 F: K9 b7 O) x+ }" a
: T4 v8 a+ m, i! b. B# P
internal:只有本sol文件调用
' Q. }0 k% o$ @
2 o2 |% q% a7 j2 z9 T) r& H6 e+ rprivate:只有本合约能调用
6 N+ _7 L! Q+ l% w# z5 G: S2 C2 I! F  e. i% H! G) y7 n! m0 o7 _
external:只能从外部调用即合约外部7 @6 s7 n4 h% o

) B, L5 O! b- q$ l: N
2 G. N; B/ |! C9 j8 ^, N+ r
+ p5 u0 B2 N- n: ]  d3 n' Y# L/ T# Z
  1. contract PublicExternalPrivateInternal {: `1 d1 e( X& }' }
  2.     uint age = 100;
    6 K1 b4 D  r( h
  3.     function GetAgeWithPublic() public view returns(uint){  //外部内部都可调用3 T) ?8 Q4 f3 D# g$ y
  4.         return age;
    & O  g  V/ b/ ]! U5 C- O& s6 H
  5.     }
    ( X8 J" l8 ^0 X; q* a' O/ Q
  6.     function GetAgeWithInternal() internal view returns(uint){ // 本sol文件调用
    + E$ O* n+ H/ T% v
  7.         return age;
    3 ~3 z5 @) d% r9 j( D
  8.     }
    ! R$ v% l* m9 {. g' `: J
  9. ) b1 J' c5 `8 u  x% H" n
  10.     function GetAgeWithPrivate() private view returns(uint){ //本合约调用
    ! y3 J+ a1 W9 q: u( u, ]( n
  11.         return ag;
    ! S4 d; K3 }. b' x& j0 N9 g5 t
  12.     }
    8 N8 _5 Z0 }6 m

  13. " d8 e; R/ [& \" y+ o4 v. ]
  14. function GetAgeWithExternal() external view returns(uint){ //只能外部3 `5 r: S6 l' {: n0 y
  15. //调用
    ; }% z5 M/ h6 A$ A2 p. y2 t
  16.         return age;/ _. t6 f) t9 Y; x* T- H
  17.     }2 N  V1 c+ j8 J$ S" w. K
  18. 1 n7 G5 d2 z5 o! n  }0 o6 r. V
  19.     function Callfunction() public view returns(uint){
    : x4 I# f$ n0 v0 X
  20.         return GetAgeWithPrivate();//方法可以调用方法只要被调用的方法允许9 x0 j& I: F/ y5 ?# A$ T
  21.     }
    6 U1 R. X. R  h
  22. & C- g5 u. k$ M: o" J- B- M! X
  23. }
复制代码
. T) N: H% }: v. T" z
* X1 i' L) y9 t2 M% q
可以自行编译后尝试调用查看输出# p/ \4 z( `+ F9 K% ?- W

* h9 k) m2 x, D# N- j9 V 2 Q- ?# w2 Y/ ~4 Q8 o: E6 w; v% b/ v
% T' v2 x9 N, h/ d! \) ^8 @
简单的合约调用:
" ?) ?/ o  {! p" @* Q, P
  1. contract Salary {
    & [5 g% |$ [% G
  2.     uint public data;# x; P3 |- U$ G( G! h
  3.     function getData() external view returns(uint){
    ) F- k6 f1 y8 h; L/ d8 y) g4 T
  4.         return data;) S  A  \) `, @6 ]  r. c
  5. }
    ( @& g7 E. m: }" Q& S# b

  6. 8 V9 n  k  L6 f6 M; r7 s7 g
  7.     function setData(uint _data) external {
    6 M) ]+ G: F: M
  8.         data = _data;
    : Z4 c+ l8 _8 X7 f; G
  9.     }
    8 Q" L6 i5 O  Q' L, ]
  10. }
    ' h: K  x) y7 C. _& p8 ^1 H
复制代码

' G4 T0 r& u% \3 ]+ T
  d) u3 q) Y$ l7 j! ?
* N$ r4 Z2 X) w' ?! a: q
  1. contract Employee {
    * {# F" h+ r$ u% x# Z
  2.     Salary salart;% W# f3 ^  F. W! ?
  3.     constructor(){3 T$ i6 N% D- g% L/ q2 Z  N# X4 ^
  4.         salary = new Salary();, X5 K  L7 R0 k
  5.     }
    $ G% L* M: Q+ m
  6. 2 h. Q+ [& N0 }$ Q; O  _8 d
  7.     function getSalary() external view returns(uint){6 V3 s1 c! v. K8 L. s
  8.         return salary.getData();6 e/ O( _0 h5 c: i5 e; V; M; Y8 u
  9.     }8 e) Z. b3 e& ?( U5 f% ~1 {  V3 p1 l& [

  10. 0 @# F$ ^) n" X1 Y. {
  11.     function setSalaty(uint _data) external {
    ( s( p4 J+ i4 M* p
  12.         salary.setData(_data);
    / D! `( l4 f8 A1 ]
  13.     }
    & k# f9 e4 ~4 R- M& x& t
  14. }
复制代码
( ?1 ?: |4 D0 U2 d( C
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13