Contact
类似 class,可以:abstract、继承和被其他 contract 调用。
典型使用:
- 创建新合约:
new MyContract(...)
- 使用已部署合约:
MyContract($address)
可见性
可见性 | 类似 | 应用于 | 外部可访问 | 子合约可访问 |
---|---|---|---|---|
external | 函数 | √ | ||
public | public | 函数 + 状态变量 | √ | √ |
internal | protected | 函数 + 状态变量 | √ | |
private | private | 函数 + 状态变量 |
注:对于 public 变量,会自动生成对应的 getter(详见:Ethers.js 非权威开发指南(续))。
关键要素
要素 | 说明 | 示例 |
---|---|---|
状态变量 | 永久存储于链上,需耗费 gas | uint data; |
函数 | 读/写两类,写方法需耗费 gas;可存在于合约内部和外部 | function func() public {...} |
fallback() | 无法直接被外部调用,当请求合约中不存在函数时执行 | fallback() external { ... } |
receive() | 无法直接被外部调用,当接收 eth 时执行 | receive() external payable {...} |
modifier | 可复用的声明性约束,函数调用前执行。 | 声明:modifier onlyOwner(){...} 使用:function func() public onlyOwner {...} |
事件 | 链上执行日志,可供日后查询。 | emit Event1(data); |
structure | 自定义 |