Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
- L: V5 N/ \7 b! r
View pure修饰符:
/ G* i$ w+ D+ ?0 p" k) L6 z3 k! x使用view与pure不需要gwei
+ X7 t6 M: `' e; D0 K
, e7 g( c" Q' c) `" L  E6 }2 q  E) rview:不能修改链上数据只能访问: F, v( C, k. A4 M7 U3 f

4 H  r$ O1 }0 y/ U  k- Hpure:不能访问链上数据,被修饰的方法里的变量只能在方法内使用, X5 s4 B: Q' U6 N
  i8 _# L0 O3 z. D
  1. contract ViewPureExample {% ]$ v0 Y. A: n1 Y
  2.     uint public age;
    % q5 N' z1 x1 W$ i+ N
  3.     function increaseAge() public{
    & e! @! I' P4 ]7 N$ Q( ?: `
  4.       age ++;8 Y0 f. @1 J( `+ P. f- g7 T5 S
  5. }. q6 G3 Y# q& C, q% d1 a

  6. $ c- u& u! j: c
  7.     function GetViewAge() public view returns(uint){ //view 修饰
    + R; X) @! B' t$ P
  8.         //age ++;// 不可修改变量
    $ i8 j) R8 Z. C
  9.         return age;
    " E( v& A4 Y; O5 w+ B% e
  10. }5 M4 J: i4 a% {9 V/ M9 F

  11. / X9 L; |, X# \# H' S' W3 i
  12. function GetPureAge(uint age) public pure returns(uint){ //因为pure方法 所以需要设置参数
    - h1 \: k6 z9 n$ W& X+ p
  13.         age ++;7 `$ a5 ~- p* b+ K5 `
  14.         return age;//如果直接return会直接报错  因为pure修饰 所以不能访问方法外的变量
    ' x; j! A- O* v; D+ m3 g4 x8 Q
  15.     }
    : ?! p1 k; i* S: S
  16. }
复制代码

$ l; @" b/ r7 q
1 O5 d- t4 x3 S7 }( W* r
( P- f1 c# ?/ Z. G7 x, `5 S& a* ?& `8 B, N2 \0 b$ q" t, D
Public internal private external 方法修饰符:
% t# X: s4 Y; W: }public:任何地方都可以调用
$ [. S& J5 f+ n; }5 g5 V# ^
( r0 V4 S3 A% `4 \! ?; \8 |! \internal:只有本sol文件调用0 q) m+ i9 j9 F2 ~. Y

( Q2 i' }3 R/ vprivate:只有本合约能调用7 M- S: U2 \1 j, U
! r" C) a- ^9 {# A
external:只能从外部调用即合约外部
6 b8 s* n0 s$ ~3 B5 q1 i, F4 ], H; i! c' E' r
3 H' i! V8 T. G* B

% M! p6 C3 |! x
  1. contract PublicExternalPrivateInternal {% Q) G& H3 D7 m3 `9 n5 y
  2.     uint age = 100;
    5 T% E2 S9 Z) B- A; O& W: G
  3.     function GetAgeWithPublic() public view returns(uint){  //外部内部都可调用
    ' d6 h5 Q: ?6 i+ X4 |
  4.         return age;
    + N) K3 q$ J3 J* |+ n( F' k
  5.     }( D9 K) U% o( b0 @- k% t* x
  6.     function GetAgeWithInternal() internal view returns(uint){ // 本sol文件调用5 O9 D. M- @3 R& L) `5 B8 L$ |
  7.         return age;& b7 i: i+ d) X* G4 x- b- w9 n
  8.     }
    6 U% i; ]" D" K$ [& P

  9. 0 K- L7 y5 }/ b% w! L
  10.     function GetAgeWithPrivate() private view returns(uint){ //本合约调用6 X. i3 H1 ?2 B
  11.         return ag;
    * p9 }+ K9 U7 [# y
  12.     }8 n. e/ G! s% E  w9 B; f/ b
  13. ) g. _( R- K( p
  14. function GetAgeWithExternal() external view returns(uint){ //只能外部
    % U$ L: V/ K. J
  15. //调用
    ) a1 a" N7 y% r
  16.         return age;5 B3 [5 }& N& X& p) C( \- W+ m+ Z. ^
  17.     }9 J4 A2 J  [$ ?) S8 L# W/ L' v
  18. , h* x" K' j, y$ a
  19.     function Callfunction() public view returns(uint){  L- Z1 U' H9 X
  20.         return GetAgeWithPrivate();//方法可以调用方法只要被调用的方法允许; l2 j5 u9 ]% s9 t8 o2 O+ R1 S6 M5 Y
  21.     }
    ; M& H( y. V6 n" R; E, Z
  22. 0 f, w# {2 Z, ^* K1 {0 Q* u: L
  23. }
复制代码

, [: D, U* y- ?) S, A) a% x( |3 b& v$ c: `4 W% A; S
可以自行编译后尝试调用查看输出
7 r+ u1 |6 {& b( ~4 @. ?$ h
1 I% V) X+ H, b4 D9 o; f
/ ^. u+ I3 O9 }" t% F, P# u: H3 w) A9 A1 |3 P' T7 z0 [) q
简单的合约调用:  A2 b/ H5 v" m: x' I- r% C+ h
  1. contract Salary {
    - H( ^% Y2 C  n2 P4 W2 c
  2.     uint public data;
    " {: N+ r' z0 J
  3.     function getData() external view returns(uint){/ Z/ ]; D* Q1 G! x4 [
  4.         return data;
    # f: i9 C% C4 g) {% a
  5. }
    ) s5 U/ n9 w' {4 G5 Z' I6 Y' O

  6. 6 O5 c( f3 V! A' E1 j* p  E1 i8 k
  7.     function setData(uint _data) external {
    2 e$ t: H- N2 s
  8.         data = _data;1 c( S6 B" }) i0 I# q" x
  9.     }
    % V4 v, e, F! o1 n8 u, @& ?
  10. }
    ( a# o9 L  q9 j% n
复制代码

+ a, B; Z! [( Q4 t * j% G, |1 M& ?1 o: V) y7 a

% y) L# e; u' a- F+ v
  1. contract Employee {
    : I& l  @4 g: X
  2.     Salary salart;
    8 ~8 N& i; I* X% H7 a% v# e
  3.     constructor(){
    ; I4 q) a0 r! S( m
  4.         salary = new Salary();; }2 \! T, Y1 m
  5.     }
    + a1 G+ S9 l& ~2 ~5 r4 W0 Z3 h

  6. * Q6 {# }) l5 l! ?4 ?+ d' y8 X; u
  7.     function getSalary() external view returns(uint){
    2 N. e0 T2 |$ b" ~! e
  8.         return salary.getData();
    6 R+ F/ L$ t- W/ o; K0 T
  9.     }
    $ t& v2 }% j+ s/ ~

  10. 9 p1 C  ]. a  ]5 a; K/ x. Y, ]8 w  Q
  11.     function setSalaty(uint _data) external {' p. Z1 s0 K/ v2 `* }: c* d/ c0 I+ b
  12.         salary.setData(_data);: I; T( I) z/ B' r, G; W* r6 B2 n
  13.     }7 S2 y, k9 q5 y- i  c
  14. }
复制代码

7 n4 e" X6 E. S; R" p5 V' d) B
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13