Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
" F5 R8 A$ }1 p- A; c, b
View pure修饰符:
+ ?# {# z9 e( q) |" V使用view与pure不需要gwei7 o4 F( h9 T9 N; G4 j& L: w& e

6 Q1 f  C# ], q% u  d, e% Sview:不能修改链上数据只能访问8 c- |0 G9 T! F) T

, F& ~% d# K) I$ `6 Bpure:不能访问链上数据,被修饰的方法里的变量只能在方法内使用
6 h9 e" a; J% v: w0 ?8 u' @4 N, D+ g' x& T2 A1 c* l
  1. contract ViewPureExample {# G% V  x0 X; W% _
  2.     uint public age;
    2 G  y4 {9 X8 J/ c3 h
  3.     function increaseAge() public{
    % ~, \5 C* ~& w2 y. d" m
  4.       age ++;
    . N" k* d8 z4 L" g# r' {2 i4 `
  5. }
    3 r* [0 G8 R) R# ~, V, s
  6. + d" g( v4 Y1 u& j5 M) Q% x
  7.     function GetViewAge() public view returns(uint){ //view 修饰
    - t% d) K* N1 y  Y
  8.         //age ++;// 不可修改变量
    6 @: T# F7 \1 a) A7 D, K
  9.         return age;) t- t7 y- f  t, _
  10. }) U0 v+ ~" p) ~% v+ Q4 w

  11. ; x7 D. E, E2 t" t
  12. function GetPureAge(uint age) public pure returns(uint){ //因为pure方法 所以需要设置参数* L# E7 x- J: b1 U6 b) w0 n* t
  13.         age ++;
    # Q8 D, }- R8 Y9 N/ }
  14.         return age;//如果直接return会直接报错  因为pure修饰 所以不能访问方法外的变量& P$ o  j1 Y4 d; m% e
  15.     }; I; |; J# g/ u9 A: w0 n8 `
  16. }
复制代码

7 x* w1 B9 B/ S$ [
3 P2 S- |, h- L/ g$ v& h7 J$ d / N4 }7 B8 U# |6 e. O  A
( d6 d. ~8 e$ O2 N( \$ w4 E" ^
Public internal private external 方法修饰符:
0 u% b& a0 o9 n; @2 Tpublic:任何地方都可以调用
* c/ h$ X) N: I1 ]$ c' D1 ^
: v6 y  I$ V& |2 \6 Qinternal:只有本sol文件调用4 q- E) U* v' s8 i) b3 q4 D

) Q4 \5 F" b4 o! F& j' q4 O; l: Oprivate:只有本合约能调用
; h0 G9 k4 O3 [& h- k3 W
, g. Q4 C3 h+ d- Gexternal:只能从外部调用即合约外部
: L0 c1 X  O- r$ z9 H8 Q0 J( c! \  L8 b
, |0 @" s0 d# V; M& b% Q

/ |; F$ y' f- q* K
  1. contract PublicExternalPrivateInternal {
    ! W& T' A3 h6 \+ N) P2 B9 h
  2.     uint age = 100;
    3 L4 F7 q7 p8 w, E# L" r
  3.     function GetAgeWithPublic() public view returns(uint){  //外部内部都可调用. H8 r/ t3 y  d' e, o
  4.         return age;, ?* w* Q) K7 _* }5 s3 Y
  5.     }6 j4 {9 P8 N8 t5 m7 d. @
  6.     function GetAgeWithInternal() internal view returns(uint){ // 本sol文件调用! |; Q' k% C- T
  7.         return age;
    ; A2 U1 P4 a( v1 {3 ^
  8.     }( T- }2 R% I- ^  p
  9. 9 i( n# S2 v$ Q+ n+ |& C7 K
  10.     function GetAgeWithPrivate() private view returns(uint){ //本合约调用! X' T  o% z$ {& o6 T2 @
  11.         return ag;
    6 u% S: M6 Y1 J4 \( |
  12.     }
    $ p7 ?' G% U# M4 u- B9 d# \9 N

  13. $ W& W. L8 t4 {0 o) y& ^1 z
  14. function GetAgeWithExternal() external view returns(uint){ //只能外部8 @; W$ d6 g2 ^/ v
  15. //调用" T2 ~4 U% [9 a  w  b# I: e& p
  16.         return age;: Y6 l+ ]; k/ m6 {3 w6 W* _' `( W
  17.     }
    7 p3 t8 f/ A; k% X- t

  18. 5 _" a! Y+ A* E- X6 x
  19.     function Callfunction() public view returns(uint){8 P7 J7 g% ~. @
  20.         return GetAgeWithPrivate();//方法可以调用方法只要被调用的方法允许
    ' ]$ R% ~  E9 x- J- ~# Z: e* j2 R
  21.     }
    ' q8 ^8 [: m4 K( @0 {7 |# ^+ d

  22. . f& F! t4 i5 p; {/ U
  23. }
复制代码
' B  G* y1 B2 j+ b

( q$ o0 v4 `6 M$ n; Z可以自行编译后尝试调用查看输出1 F" R! \0 q( f. M+ M

' t# t) _- ~) O / f6 u) Z3 ^+ y+ v$ {

+ z2 ?" }, C+ M0 a3 C( K# P, h简单的合约调用:
5 e$ Y9 s% T' G5 O+ \7 ~4 Y0 O4 w
  1. contract Salary {9 J. ^7 I. h6 R, ]
  2.     uint public data;1 a/ p' y- n$ p0 ^' e" f0 Z
  3.     function getData() external view returns(uint){
    2 l& R# j; d  W4 P9 P2 i
  4.         return data;
      d" L6 F. `5 t0 k& C4 V/ i
  5. }, z: K0 |% D2 O7 z: T3 H: y3 @  ?8 {

  6. 1 ~$ d! w/ v+ T) o2 Y+ V( e$ v
  7.     function setData(uint _data) external {
    ' y' G/ P/ q3 N6 |
  8.         data = _data;
    + T/ i7 u' }  F7 T8 ^. w
  9.     } ) P4 ^- L* y% f" }  Y
  10. }' l0 d+ J  N1 `% P, N0 F
复制代码

  A& b' Z) |* c, H) |3 j
. f) j& `. g6 F$ w4 z/ L  V+ y0 [/ o" j$ M/ T4 j7 ^' Y2 _( a
  1. contract Employee {/ G7 n: t( |" P9 p6 X7 ^
  2.     Salary salart;) O" f& K: A8 t/ _$ s# m+ U/ t
  3.     constructor(){
    & |( l* `. ]  g
  4.         salary = new Salary();
    4 n. S9 y, R5 k+ u
  5.     }, c$ O7 V: P/ h+ L4 [
  6. 1 W( E3 N& x! {6 ^9 {' k
  7.     function getSalary() external view returns(uint){
    ) ?0 F4 _  G4 c
  8.         return salary.getData();  X/ {. \0 t+ T( c
  9.     }
    ( v' `+ @/ F3 L7 M  m
  10. 8 O  A9 F0 P7 C' w% G" ?
  11.     function setSalaty(uint _data) external {
    0 \' V( K$ L- F; k* Q
  12.         salary.setData(_data);
    ; G4 E3 s3 U% K& M: b' F$ j6 {
  13.     }
    9 u, I& `8 t; U; N3 C
  14. }
复制代码
4 t2 `- f! M! k5 f9 R5 c; Y
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13