本章节主要讲述智能合约中访问权限问题,主要关键字external,public,internal,private之间的区别及应用
external
:
外部函数是合约接口的一部分,所以我们可以从其它合约或通过交易来发起调用。一个外部函数f,不能通过内部的方式来发起调用,(如f()不可以,但可以通过this.f())。外部函数在接收大的数组数据时更加有效。
public
:
公开函数是合约接口的一部分,可以通过内部,或者消息来进行调用。对于public类型的状态变量,会自动创建一个访问器。
internal
:
这样声明的函数和状态变量只能通过内部访问。如在当前合约中调用,或继承的合约里调用。需要注意的是不能加前缀this,前缀this是表示通过外部方式访问。
private
:
私有函数和状态变量仅在当前合约中可以访问,在继承的合约内,不可访问。
这里的权限只是表示合约与合约之间,对于任何观察者来说这些都是可见的
几种默认状态
1.状态变量
pragma solidity ^0.4.0;
contract HelloWorld{
uint a;
uint internal b;
uint private c;
uint public d;
function d() constant returns(uint){
return 123;