rong>VS Code + Solidity插件:对于习惯使用本地编辑器的开发者,Visual Studio Code配合Solidity插件(如Solidity by Juan Blanco)提供了强大的代码提示、语法高亮和编译功能。
-
继承(Inheritance):
Solidity支持多重继承,使用is关键字。
contract Base {
function baseFunction() public virtual {}
}
contract Derived is Base {
function derivedFunction() public override {
// 调用父函数
super.baseFunction();
}
}
-
抽象合约(Abstract Contracts):
包含未实现函数的合约,不能被直接部署,用于定义接口。
abstract contract Animal {
function makeSound() public virtual pure returns (string memory);
}
-
接口(Interfaces):
定义合约必须实现的函数集合,比抽象合约更严格,不能有状态变量和构造函数。
interface IERC20 {
function transfer(address to, uint256 amount) external returns (bool);
function balanceOf(address account) external view returns (uint256);
}
-
库(Libraries):
一组可重用的函数,可以不实例化即可调用,或通过using指令附加到类型上。
library Math {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
}
contract UsingMath {
using Math for uint256;
function sum(uint256 a, uint256 b) public pure returns (uint256) {
return a.add(b); // 或 Math.add(a, b)
}
}
-
事件(Events):
用于记录合约中的重要操作,方便前端监听和响应。
event NumberSet(uint256 newNumber, address setter);
function setNumber(uint256 _newNumber) public {
myNumber = _newNumber;
emit NumberSet(_newNumber, msg.sender);
}
-
错误处理(Error Handling):
require(condition, "error message"):用于输入验证或前置条件不满足时,回滚状态并消耗少量gas。
revert("error message"):显式回滚交易和状态。
assert(condition):用于内部错误检查,失败时会消耗所有gas(通常用于开发阶段调试)。
-
接收函数(Fallback Function):
当合约接收到没有指定数据(或没有匹配任何函数签名)的调用时执行。receive()函数是payable的,专门用于接收以太币。
receive() external payable {
// 接收以太币时的逻辑
}
fallback() external payable {
// 非receive的fallback
}
-
构造函数和初始化:
构造函数在合约部署时执行一次,用于初始化状态变量,Solidity 0.4.22+中使用constructor关键字。