Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
+ E- L5 C4 T2 R* y8 w! W
View pure修饰符:. ^& z0 y. q# p. q& I. n
使用view与pure不需要gwei3 r: K2 b' S* k) q

0 E+ `0 ?5 W2 k% b- u- B  Rview:不能修改链上数据只能访问
, K# F% t& p: |; ^* I8 H' ?1 x0 ^7 R, |$ z# x3 x. b& G, n4 U( C
pure:不能访问链上数据,被修饰的方法里的变量只能在方法内使用, x) D0 V: [: i8 i

1 U0 g5 B" p' {" r# C9 @  U8 l
  1. contract ViewPureExample {
    1 F3 F9 d4 f0 i& Z, R
  2.     uint public age;8 r) r; O+ z5 c/ u3 i) t
  3.     function increaseAge() public{
    1 ]  Q0 ~, ^7 O4 I
  4.       age ++;
    / x" L' [: s2 r# N3 h
  5. }
    . Y$ |8 I* L, U- M* f5 p5 k6 a
  6. * C- X# c+ ?2 s
  7.     function GetViewAge() public view returns(uint){ //view 修饰/ n; o$ _" t4 _7 Y: b
  8.         //age ++;// 不可修改变量
    7 [# ^8 n* Z( _, T2 g2 r9 [9 W
  9.         return age;' y. @4 |  V" v6 [" A8 ?
  10. }: z9 |% q# c& d, s! s
  11. * G4 m) [8 E( D
  12. function GetPureAge(uint age) public pure returns(uint){ //因为pure方法 所以需要设置参数
    & X4 o1 ?0 ~+ f0 J# a- _9 O! ]6 ?
  13.         age ++;" {" q& K7 V& {; X9 R
  14.         return age;//如果直接return会直接报错  因为pure修饰 所以不能访问方法外的变量' E9 e' [& m+ u& V2 s! K
  15.     }7 v4 h/ {6 B# `/ J& p
  16. }
复制代码
& [7 j1 d% Z9 e7 |% L

3 Y$ Q8 y+ b$ n7 v/ I3 g6 D
+ j0 N$ I; ]0 Q" \2 s: M# `7 e9 @9 d9 `4 [# ]8 u6 D2 \9 g
Public internal private external 方法修饰符:
/ V( a, T4 K3 I4 Z0 @3 `5 Wpublic:任何地方都可以调用
9 o+ k3 h4 ?# |: A& M7 z: v5 K( b8 t. Y" l  L% J" c3 v
internal:只有本sol文件调用# p, _1 P3 z# H7 i

" \4 C. M( Q& h+ d6 xprivate:只有本合约能调用6 Z. V& i2 f+ `! ?# `' B

3 a* W0 t. M/ _$ ~. Zexternal:只能从外部调用即合约外部
0 [0 m( T. V/ E1 }5 o& N3 h8 A4 C% z6 G5 Y! H

  y# n+ P. _* D, W: F3 H- H# v8 d$ X
; t1 J7 e( `+ v( M7 l" {% f! g: R
  1. contract PublicExternalPrivateInternal {* o' k& {, B  C9 r( [& {
  2.     uint age = 100;! g0 F, S, G, B; i5 w) R+ z2 d% @
  3.     function GetAgeWithPublic() public view returns(uint){  //外部内部都可调用. B2 S9 S) V- w9 R" E8 x3 B! [
  4.         return age;
    # v, _8 U: y& B" M
  5.     }
    $ n3 c2 \5 O+ R1 I, I. m) q0 Y
  6.     function GetAgeWithInternal() internal view returns(uint){ // 本sol文件调用
      P2 q$ `0 W4 o: m& u
  7.         return age;. S! M5 p4 I  @
  8.     }0 U/ D3 O( r2 H- T) e

  9. 3 {7 a) J- T- w  P  j
  10.     function GetAgeWithPrivate() private view returns(uint){ //本合约调用* T: a3 A3 }+ n9 j" H) ^
  11.         return ag;
    4 X' _5 k9 y9 o$ }' o
  12.     }
    0 C( O) \0 g0 j) f3 g# W3 y  a! C

  13. - \* H. N# S( @( }- U
  14. function GetAgeWithExternal() external view returns(uint){ //只能外部
    # L$ L. G3 C( a9 y2 H
  15. //调用
    . T. P" i# U4 ^4 C* _8 N2 P
  16.         return age;! d6 |- g: l2 D. p3 }
  17.     }) U5 D" R; w9 U2 s& E
  18. 7 l; l' }$ Q7 K, x( Z
  19.     function Callfunction() public view returns(uint){- D9 J5 F9 s: n
  20.         return GetAgeWithPrivate();//方法可以调用方法只要被调用的方法允许% Y! A1 s! `! z
  21.     }
    ) U9 v; w0 c# M

  22. 9 ~  \' j1 `5 e' K; u  K
  23. }
复制代码
2 c! [/ Q4 e1 A; m) I0 g

. q) q- _+ B3 Q8 K2 y可以自行编译后尝试调用查看输出
- |. p" R" D. a; v/ S; P, P* O* O- O0 C

8 f- d! \2 n8 a& l
' V% c( b) B. w% l+ J( `简单的合约调用:/ q1 k7 f% Q( C" e0 G
  1. contract Salary {
    / a* v! {6 l1 J! c+ u" |- [
  2.     uint public data;
    9 e$ g) \; H! X3 x$ J% h* M/ F
  3.     function getData() external view returns(uint){
    2 a" [, C" l7 b$ C! p' k
  4.         return data;* Z& m) j8 A9 f. A( p/ @4 V
  5. }
    ) _- i5 e0 ^8 ^) ^
  6. 9 s  u  O0 [$ f) d9 k7 B
  7.     function setData(uint _data) external {
    ' ?7 w: b' h% T9 q% D4 {: y) c8 o
  8.         data = _data;( ^- R' m) _7 q+ [
  9.     }
    2 c; g/ W! ]5 U
  10. }0 k" f% f7 |. M6 E: {  R1 g
复制代码
  b! y. F$ ~9 r3 y$ {
  v! l  O8 W3 r% T6 z' z5 H
% U: ~8 L7 }5 X+ }
  1. contract Employee {, }6 H8 X. O+ O: g- I7 I& s9 A3 Q
  2.     Salary salart;
    7 S6 R  B( e/ p" j7 B1 _
  3.     constructor(){7 {% q; b; X0 W& F
  4.         salary = new Salary();6 r% \1 |+ z& v* |3 K
  5.     }6 D" k, \( X, [( |/ u8 d

  6. 5 Z, ^# k0 E4 f. j" U( d! v
  7.     function getSalary() external view returns(uint){& {. i8 ^+ J. t* [5 m8 @+ i# D& Q
  8.         return salary.getData();! f7 O$ @' U: M  N( a! q
  9.     }% C  H! C* u" f" }; j
  10. * e; h& o' g& X1 x
  11.     function setSalaty(uint _data) external {
    0 K4 |. W/ U5 R2 [
  12.         salary.setData(_data);3 d% H& N% w' I' s7 Q
  13.     }
    ) X( Q- p" L% w/ Q. w/ `+ i3 G
  14. }
复制代码
" j+ V, K% I8 f. h
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13