Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

% {: t. R4 ^. o& F$ I5 [0 N: L+ ~View pure修饰符:6 \& @# k3 h1 U: Z" X# s
使用view与pure不需要gwei
* W9 ^2 N5 o, @
  K) r# @, A* N( }' n/ Oview:不能修改链上数据只能访问
6 ^7 h, R6 ^2 C* }+ |  E( `% |% ]. _
pure:不能访问链上数据,被修饰的方法里的变量只能在方法内使用. P4 l7 M- N/ E! Z! a% [7 h2 n
  u2 g$ W  B' [9 v
  1. contract ViewPureExample {
    7 c) B" s" q: {$ y
  2.     uint public age;4 Z1 k1 l: @% {' u& h; ~
  3.     function increaseAge() public{  X2 I4 Z. t  e/ ^
  4.       age ++;0 v. ^7 x3 q. f* I3 t  d
  5. }
    7 k6 l; g, W5 w/ v4 `

  6. % V" U* }' x8 o0 \
  7.     function GetViewAge() public view returns(uint){ //view 修饰
    $ [) d- N2 l9 s" m' v- }7 x& j
  8.         //age ++;// 不可修改变量
      y* ]; s$ ]3 J! G) p8 ]% {* B
  9.         return age;
    ( F  J% C# S& B8 g
  10. }9 [0 H$ e: J) l! z

  11. 5 K% `0 a4 H' _6 m6 r
  12. function GetPureAge(uint age) public pure returns(uint){ //因为pure方法 所以需要设置参数
    1 z; U( e8 t: E+ ?; P) @0 v
  13.         age ++;
    9 C2 J3 N! t8 @* F% S7 C# |1 o2 W
  14.         return age;//如果直接return会直接报错  因为pure修饰 所以不能访问方法外的变量, \% L0 z1 A; j: i
  15.     }: r+ _- [3 Z+ N9 g9 @% v/ I
  16. }
复制代码
# s' G  }: i) ^- B. q

, ^% f0 m: C4 `% V7 Q0 G# O0 x
! Y3 T  `& N# p& @' [' q5 P8 ], Q0 Z6 c0 i: c4 m
Public internal private external 方法修饰符:- ]. f; ^2 p( y
public:任何地方都可以调用
9 D/ \+ `# h- j8 T
1 L" e& E/ Q8 o5 Y- `internal:只有本sol文件调用
' \: x! i7 D1 Z# B  O
, B7 @$ e2 e; ?3 J' U; w( X$ eprivate:只有本合约能调用
% @5 U* }% c8 G; q/ T6 O  n# \6 t2 p0 D6 z7 X/ j
external:只能从外部调用即合约外部
& x7 U9 x- t" W9 Z4 [. s
" h1 v) P) `( b$ z
. k( n* p- e3 N+ Q& F8 p
5 i7 s- G9 c3 p6 f- B
  1. contract PublicExternalPrivateInternal {4 O7 }0 e- Y* a
  2.     uint age = 100;' e3 \, o" q4 I+ g
  3.     function GetAgeWithPublic() public view returns(uint){  //外部内部都可调用
    0 p) u+ q9 Q) x& p8 L- b/ @, W, w+ G
  4.         return age;) r! y0 p6 M# W0 N
  5.     }1 ?* b! u4 Q' u0 M$ |% |
  6.     function GetAgeWithInternal() internal view returns(uint){ // 本sol文件调用" [( Y8 G) ~* Q3 `& c; T9 M* t
  7.         return age;
    : @; q# J5 ?7 ?( O' o2 s( T5 g
  8.     }
    , ?. N. j, a2 A! U4 \; k% I  ~
  9. 5 b) K( V" t" z. U# l/ E
  10.     function GetAgeWithPrivate() private view returns(uint){ //本合约调用
    0 o* [* ~' `0 D. o- R) `# I) q  g" ^
  11.         return ag;( z4 ?# U. X; N$ k/ c; P
  12.     }
    6 _6 t  u" i" C6 H" _# m8 \

  13. ; ~7 v$ o1 F& W3 L
  14. function GetAgeWithExternal() external view returns(uint){ //只能外部
    ' T1 J5 w; v, N+ `7 b* P) w! E
  15. //调用
    + [& o' g* A1 l4 f+ ~# V
  16.         return age;& I' E( k0 p1 u; Q- m+ Q4 a+ o: S
  17.     }
    / O; }9 _# `' w) |7 X
  18. 7 a8 [) Q2 S& Q0 C. F/ t0 w% G
  19.     function Callfunction() public view returns(uint){
    ! O  T0 b& k- q% K; b
  20.         return GetAgeWithPrivate();//方法可以调用方法只要被调用的方法允许
    . n0 O/ S# G( X( i3 }3 D
  21.     }
    5 R- O+ t, V% O3 K0 R$ [

  22. 9 C* v' W3 w+ {  O
  23. }
复制代码
" b7 e: b: g6 T+ E* b

. w- z8 N/ h: p可以自行编译后尝试调用查看输出; `: |$ K+ ]5 u3 H6 _& f
" b# q2 Y; [/ f8 t9 G

& @, ?3 u7 K  q( ~* l
+ I" J  `5 _! b8 {6 d$ M! n7 F简单的合约调用:
7 k6 q9 ~7 ~' P- R7 c" k
  1. contract Salary {6 p- R% L1 k. e, X/ X5 [. e) j
  2.     uint public data;
    / |$ v& `+ u0 J8 }% p3 G& S. h( h
  3.     function getData() external view returns(uint){& g' [5 O4 c& Q, d
  4.         return data;
    # p, d* v( c5 ~1 p7 c, t
  5. }, {( ?: q2 m' N, L3 }/ e- H

  6. 9 Q+ G) M% f9 x# y! C
  7.     function setData(uint _data) external {
    ( v  R% x/ ~0 b
  8.         data = _data;
    & }5 m8 A+ I; u7 I( o0 w, [
  9.     } 5 R. }) @2 }7 |/ Y, h
  10. }5 p9 x- t1 f/ C  a! T
复制代码
( ~/ |6 V4 n1 P/ Q$ n" u. y$ R
  b- Y9 B, x3 j" ], S/ o( ^

1 E+ {+ G1 _' o# X5 G$ b6 E: Z
  1. contract Employee {' B$ V) c7 c2 j& }- E  P0 m
  2.     Salary salart;
    + S5 x, d" q3 q" h9 t
  3.     constructor(){
    9 @/ e8 [+ I5 z3 ?, z7 \; ?4 K
  4.         salary = new Salary();
    $ A4 m4 g0 \* [- g3 r4 H  l
  5.     }# G  ?! E" `6 u% l5 b
  6. : m7 a( _5 h; C' J) |+ B' q
  7.     function getSalary() external view returns(uint){
    ' t3 X& P* ^& f/ E- h8 L
  8.         return salary.getData();
    # X- a* `* ?1 B# |% Q- J9 m* h
  9.     }
    - e- [6 Q% u5 p+ L" ~; a; x$ ?/ p
  10. ) {; ~( T+ O9 r3 |) [
  11.     function setSalaty(uint _data) external {- i$ O2 v# |  l3 i- G) J" J
  12.         salary.setData(_data);
    # F/ n$ u5 x8 v
  13.     }% f* f3 @8 F/ C1 D  c4 `
  14. }
复制代码

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

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13