Solidity中的Contracts與面嚮對象語言中的類相似。每個合約都可以包含狀態變量,函數, 函數修飾符,事件,結構類型和枚舉類型的聲明。此外,合約可以繼承其他合約。
狀態變量
狀態變量是其值永久存儲在合約存儲中的變量。
pragma solidity >=0.4.0 <0.6.0;
contract SimpleStorage {
uint storedData; // State variable
// ...
}
有關可見性的可能選擇,請參閱類型部分以獲取有效的狀態變量類型和 可見性和獲取者。
功能
函數是合約中可執行的代碼單元。
pragma solidity >=0.4.0 <0.6.0;
contract SimpleAuction {
function bid() public payable { // Function
// ...
}
}
函數調用可以在內部或外部發生,並且 對其他合約具有不同的可見性級別。
功能修改器
函數修飾符可用於以聲明方式修改函數的語義(請參閱合同部分中的函數修飾符)。
pragma solidity >=0.4.22 <0.6.0;
contract Purchase {
address public seller;
modifier onlySeller() { // Modifier
require(
msg.sender == seller,
"Only seller can call this."
);
_;
}
function abort() public view onlySeller { // Modifier usage
// ...
}
}
事件
事件是與EVM日誌記錄工具的便捷接口。
pragma solidity >=0.4.21 <0.6.0;
contract SimpleAuction {
event HighestBidIncreased(address bidder, uint amount); // Event
function bid() public payable {
// ...
emit HighestBidIncreased(msg.sender, msg.value); // Triggering event
}
}
有關如何聲明事件以及可以在dapp中使用事件的信息,請參閱合約中的事件部分。
結構類型
結構是自定義類型,可以對多個變量進行分組(請參閱 類型中的結構部分)。
pragma solidity >=0.4.0 <0.6.0;
contract Ballot {
struct Voter { // Struct
uint weight;
bool voted;
address delegate;
uint vote;
}
}
枚舉類型
枚舉可用於創建具有有限“常量值”集的自定義類型(請參閱 類型部分中的枚舉)。
pragma solidity >=0.4.0 <0.6.0;
contract Purchase {
enum State { Created, Locked, Inactive } // Enum
}