Visibility
public private external internal
以上四种修饰 function
若要使用state variables 则无法使用external
public
将会成为ABI的一部分 用于state variables 则会自动产生getter function
private
在contract 中无法被访问修改 但是在block chain world state还是可见的
external
放入ABI 中 可以被外部呼叫 无法被内部直接呼叫 f() 失败 this.f() 成功,处理大队列时候效率较高 不会做memory copy 操作
internal 只能被自己的合约或者衍生出的合约做呼叫
State Mutability
pure view default
pure:不读写
view:读不写
default:可读可写
constructor
contract 被立即执行的function
我们会在这里设定资料的初始值
不宣告的时候solidity 会帮我们自动生成一个 constructor() {...}
一般创建合约最初的时候被执行
demo
contract PiggyBank {
uint public goal;
constructor(uint _goal) {
goal = _goal;
}
receive() external payable {};
function getMybanance() public view returns(uint) {
return address(this).balances;
}
function withdraw() public {
if(getMybanance() > goal) {
selfdestruct(msg.sender);
}
}
}
Value Types
Value Types :总是以value的形式传递 (pass by value)
Reference Types:Array,Structs,Mappings
Mapping Types:{key,value} Hash table