View pure修饰符:
使用view与pure不需要gwei8 P- p& |5 u$ H; D, H
' x* j% N7 j$ h3 f I A1 A; ?: w6 ]
view:不能修改链上数据只能访问) L) i9 z$ s8 {* I
pure:不能访问链上数据,被修饰的方法里的变量只能在方法内使用9 Q& s2 ^4 v' g+ z( V
) `& a2 X/ h) h7 P' a! B
- contract ViewPureExample {: }' q c- R2 v8 \( B% j( ]
- uint public age;
- function increaseAge() public{
- age ++;/ G( ], T) G% r0 D; ?
- } a: P/ }6 K; ~4 [) ?
- ' K% H- h* M4 B7 W$ L5 i; H% P
- function GetViewAge() public view returns(uint){ //view 修饰
- //age ++;// 不可修改变量9 w9 |7 l' i4 E3 P
- return age;
- }
- 7 X; W' J- @- C
- function GetPureAge(uint age) public pure returns(uint){ //因为pure方法 所以需要设置参数
- age ++;& P, [- H& @ V, d
- return age;//如果直接return会直接报错 因为pure修饰 所以不能访问方法外的变量( A5 q3 x, _9 m2 b4 R! H
- }
- }
}+ W9 U+ \- {: h
( Q% n6 D0 P. }# l" O7 S
( @: i; z/ s. l5 M
Public internal private external 方法修饰符:5 C; U8 L4 t4 V5 Z* }4 ]
public:任何地方都可以调用) [/ Z ?: V+ g
* k, O) a$ f; ~: I, [+ @
internal:只有本sol文件调用
8 ]& Q% m9 g$ L! \2 r
private:只有本合约能调用
0 b7 J7 k9 K; W. O
external:只能从外部调用即合约外部, b% e6 x( Q( N9 }
- contract PublicExternalPrivateInternal {
- uint age = 100;
- function GetAgeWithPublic() public view returns(uint){ //外部内部都可调用3 u4 o& ?$ o' s$ \" e; N
- return age;
- }
- function GetAgeWithInternal() internal view returns(uint){ // 本sol文件调用- V. N9 q, s0 Z
- return age;, j3 a* ]) X6 g+ p8 [2 p8 Z
- }
- function GetAgeWithPrivate() private view returns(uint){ //本合约调用. R/ t" D+ v3 L% L: P
- return ag;& X' l! e3 B& [9 v% h% V* O" n: a
- }
- function GetAgeWithExternal() external view returns(uint){ //只能外部9 _$ c4 u4 s3 W* J i% l$ V
- //调用
- return age;/ q5 D& \2 V0 e3 g8 {& F2 m
- } }& ?# X& }. D( o% h1 v. |
- function Callfunction() public view returns(uint){: b1 l, @& H% |# V5 o8 r
- return GetAgeWithPrivate();//方法可以调用方法只要被调用的方法允许
- }
- 2 W' K3 d$ l- a
- }
# W( u3 I" a# P6 Q
可以自行编译后尝试调用查看输出( U! F H% L$ M- |( {
6 h7 d# Q1 k6 @: r
. Z9 f U5 [& e* g
简单的合约调用:
- contract Salary {! F2 X" o- d/ F& E$ D
- uint public data;
- function getData() external view returns(uint){* O6 S0 X% |7 Z( v1 Z1 `1 O* O+ n
- return data;; k" T3 p+ V# a! h9 f; {; r
- }
- : h( Q" W0 V2 K* G k
- function setData(uint _data) external { I/ s7 i' l% {7 L; f. V) t
- data = _data;4 ]* J$ f) V+ A- E' l6 d
- }
- }
- contract Employee {( l* U+ Z. M. q2 Y+ J/ z
- Salary salart;4 g0 ^3 G" [! V( o
- constructor(){
- salary = new Salary();
- }1 l# l% |& T+ P' G. I h5 N$ p
- function getSalary() external view returns(uint){- {; S1 m% Y: N( J- N/ g, x3 {
- return salary.getData();& z% O* ~/ H: r
- }
- function setSalaty(uint _data) external {: e) n+ k. p% `/ r0 [$ m2 A
- salary.setData(_data);6 o4 l4 V: y) t
- }
- }