Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

4 D' ?4 n* r' w, f% n, Y4 H6 YView pure修饰符:
9 L% ^$ [! E' x9 Q: ^* G; ~使用view与pure不需要gwei
7 Z8 c- r* F; \1 w" i2 o% H* s$ g3 V, U0 m$ F, d
view:不能修改链上数据只能访问2 q: Q1 {4 A, @  T3 t

6 b1 R6 s' \( H* E1 xpure:不能访问链上数据,被修饰的方法里的变量只能在方法内使用5 I. t. L# r1 ^# v; _! s
$ D$ i/ q0 v' d. m3 z5 S
  1. contract ViewPureExample {
    9 ?. c, S+ U$ ^3 O6 Y
  2.     uint public age;. C* S$ W4 ^$ ~, m0 a- l1 u2 Y$ b
  3.     function increaseAge() public{0 W. g) Q9 P6 M0 L# ^0 S# m. k
  4.       age ++;  r! v3 l, R/ o" P  |: A8 ^
  5. }
    5 f1 \1 f+ x9 F5 C
  6. - N5 s# L5 s- Y6 s
  7.     function GetViewAge() public view returns(uint){ //view 修饰
    7 B% l' T' C' \0 g) s3 W4 M; _
  8.         //age ++;// 不可修改变量1 O+ _0 ~2 o! ^, m8 \$ `; {
  9.         return age;& k3 s' s: r7 I& ?- ?9 v2 c
  10. }
    2 I% k; A, j' K, t9 w

  11. ! c% v) D% H( c
  12. function GetPureAge(uint age) public pure returns(uint){ //因为pure方法 所以需要设置参数
    4 |4 T2 ]. t, }) I0 \8 H
  13.         age ++;, @# d& a4 E  `0 ]2 o
  14.         return age;//如果直接return会直接报错  因为pure修饰 所以不能访问方法外的变量
    % H, z/ @4 u5 V! v/ Z0 D: T& T! v& C
  15.     }
    # Z1 M) E( U$ y% @. o
  16. }
复制代码

6 p7 j, j3 w* }% h5 Y% j4 O: q% C0 x6 M$ T+ W
/ p) T& t, h  L& q6 f8 H

, u/ l! p9 F, o; ]: C# d) tPublic internal private external 方法修饰符:% e) l7 d6 e- I5 w6 T
public:任何地方都可以调用
7 C2 l6 J0 |! v: t: |) X
! L  g$ n  K$ S- a5 R. Zinternal:只有本sol文件调用
1 e0 ?& F2 t' P# C: s
: A( Z! S1 T- W, M$ S4 f9 W3 eprivate:只有本合约能调用2 H- d; r  P+ E( r, O) f! g) c
9 ^% K9 W' _0 C, I2 j
external:只能从外部调用即合约外部
0 W) V7 ]  S  ?7 A0 O
' B. w0 ~2 `7 m1 u% j0 |3 w* X- W
) z4 r; b7 N  w% t
) g9 x" r& Q. L$ p
  1. contract PublicExternalPrivateInternal {1 L8 @- E: ^) B/ y
  2.     uint age = 100;
    $ U# W4 N( j; m8 k3 [- M8 l7 f
  3.     function GetAgeWithPublic() public view returns(uint){  //外部内部都可调用# H, `7 N, z" W- D
  4.         return age;
    ) X- _+ T$ t8 i. X, C2 _  a: _
  5.     }1 {5 C4 [, u% Z
  6.     function GetAgeWithInternal() internal view returns(uint){ // 本sol文件调用
    ) h" k& o/ ^6 A0 ?* y2 Q
  7.         return age;  n4 H5 T6 ~, {) @9 V2 \$ I
  8.     }
    ' J, b9 S0 v+ m/ i

  9. * j" R/ ~0 Q6 b! p6 G; q( j
  10.     function GetAgeWithPrivate() private view returns(uint){ //本合约调用, N/ S* j6 k  F4 T. F! @3 X0 V3 q
  11.         return ag;6 z; N4 b8 \( V( W2 ?
  12.     }
    ' f) Q; X% f# [8 x2 I2 `. T) |

  13. ' B; {  B) j2 P2 }
  14. function GetAgeWithExternal() external view returns(uint){ //只能外部% B9 w7 Z) e! m# A- {3 H0 j# [
  15. //调用
    4 o* Y, B( H3 O- Y5 [# G
  16.         return age;
    : ~' Q- }  B5 r5 O6 g# r( o; s7 m) G2 Q6 ~
  17.     }8 t8 h+ j& Z+ i8 p( Y! n0 y  }
  18. ! q: d# X3 x6 N9 ]$ j/ o% t
  19.     function Callfunction() public view returns(uint){' I$ ?: P3 [( s. J2 ^
  20.         return GetAgeWithPrivate();//方法可以调用方法只要被调用的方法允许. P+ _; g' j- e1 B  B
  21.     }9 [3 t( k( u& M

  22. 0 p2 i* B7 Y7 @" T! `& q0 O
  23. }
复制代码

5 D( {( S7 P8 A# z4 z( O  [& |# \% R* T9 b# b1 h
可以自行编译后尝试调用查看输出7 o; \- H; n, K% M; z

/ N$ W/ R) \5 x6 F2 J" Q2 | * b5 R+ h! U! a) F  G
( b" J- g, \( C
简单的合约调用:
8 r3 P9 }" h/ R: ^, N1 r( V* ^
  1. contract Salary {# j, P# M; |6 S$ N- H3 d' N6 N
  2.     uint public data;# q/ \* [4 k) O' j3 m7 g; {
  3.     function getData() external view returns(uint){
    ' A- b8 a: V2 v9 a* X, [9 }
  4.         return data;
    9 i) S  Y2 d% e( j5 z
  5. }
    ) ~: s4 K; L+ J2 m, h

  6. ' d9 S% @7 W  O
  7.     function setData(uint _data) external {4 P  \7 g" Q& v
  8.         data = _data;
    + y8 J! M' ^) f' ?
  9.     } , V! u$ E6 i- @& G
  10. }3 L4 R5 s3 E3 D/ S
复制代码
7 j8 s) U9 u/ ~/ G" {

2 |# C: U, I3 p1 u
/ B) I# U5 ]: i2 ~; f. O0 @
  1. contract Employee {
    0 B. F' M0 ~8 E
  2.     Salary salart;
    5 q8 d" i: n( ]$ |9 T3 R  r
  3.     constructor(){$ k1 J3 h3 P/ L+ v2 j- Z
  4.         salary = new Salary();, ]6 @9 K' N1 i: p  W" r1 f1 w5 X
  5.     }
    , ^- ?  K- T% h, a0 f% f* j

  6. : |& q! [  H1 _6 C0 S
  7.     function getSalary() external view returns(uint){
      L* c" {# X, _4 q2 ]0 J6 B, [
  8.         return salary.getData();
    " `: l; w- E, i' w5 P/ R" K
  9.     }
    - u% @) i- J6 G, h$ }' m0 r

  10. 1 `" ?2 \/ S3 }2 u3 |$ V3 m; c
  11.     function setSalaty(uint _data) external {# ~" }1 K) z( a( M; _, u
  12.         salary.setData(_data);
    8 k% m7 a# o3 S
  13.     }
    2 l  i' t! M# }' N% n( p
  14. }
复制代码

& B* v; b* j1 p+ d
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13