Solidity
修饰器 modifier
contract Test {
adress owner;
// 自己手写个修改器
//function OnlyOwner(address _owner) internal {
// require(_owner == msg.sedner,'Error')
//}
// 官方写法, 可以进行传参
// 修改器也是可以进行多个使用的
modifier onlyOwner(address _owner) {
require(msg.sender == _owner,'error');
_;
}
function ownerd(address _owner) public onlyOwner(_owner) {
owner = _owner;
}
}
构造函数
contract Func {
uint256 public x;
uint256 public y;
address public owner;
uint256 public createAt;
constructor(uint256 _x, uint256 _y) {
x = _x;
y = _y;
owner = msg.sender;
createAt = block.timestamp;
}
}
继承
contract Old {
string private name;
// constructor(string memory _name){
// name = _name;
// }
// pure 对于函数:禁止修改或访问状态。 virtual 允许函数被修改重写
function getContractName() public pure virtual returns(string memory){
return "contract Old";
}
function getName() external view returns(string memory){
return name;
}
function editName(string memory _name) external {
name = _name;
}
}
// contract Now is Old {
contract Now {
// // Old(_name) 继承Now的参数
// constructor (string memory _name) Old(_name) {
// }
// override 重写函数标志
function getContractName() public pure virtual returns(string memory){
return "contract Now";
}
}
contract Will is Now, Old {
function getContractName() public pure override(Now, Old) returns(string memory){
return "contract Will";
}
function getContract() public pure returns(string memory){
return Now.getContractName();
}
}
可见性
contract Base {
// public: visible externally and internally (creates a getter function for storage/state variables)
// private: only visible in the current contract
// external: only visible externally (only for functions) - i.e. can only be message-called (via this.func)
// internal: only visible internally
function pub() public pure returns(string memory){
return "public --- This function can be accessed anywhere";
}
function pri() private pure returns(string memory){
return "private Only the current contract or its children can access the function";
}
function ext() external pure returns(string memory){
return "external Cannot be called inside the contract";
}
function inte() internal pure returns(string memory){
return "internal Only callable inside the contract";
}
}
事件
事件是能方便地调用以太坊虚拟机日志功能的接口。
/**
*Submitted for verification at Etherscan.io on 2021-12-26
*/
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract Event {
// 日志信息有 sender 和 amount
event Log(address indexed sender,uint amount);
function fn() external {
// 触发 log 200表示 200 wei
// 1Eth = 10^18 wei;
emit Log(msg.sender, 200);
}
}
- 操作结果展示
部署合约到测试网并可以在线调试合约教程后续出个文章完善