W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Solidity 中的合約類似于面向?qū)ο笳Z言中的類。每個合約都可以包含狀態(tài)變量、函數(shù)、 函數(shù)修飾符、事件、錯誤、結(jié)構(gòu)類型和 枚舉類型的聲明。此外,合約可以繼承自其他合約。
關(guān)于合同的部分包含比本部分更多的詳細信息,用于提供快速概述。
狀態(tài)變量是其值永久存儲在合約存儲中的變量。
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.4.0 <0.9.0; contract SimpleStorage { uint storedData; // State variable // ... }
有關(guān)有效狀態(tài)變量類型 的信息,請參閱類型部分,有關(guān)可見性的可能選擇,請參閱Visibility 和 Getters。
函數(shù)是代碼的可執(zhí)行單元。函數(shù)通常在合約內(nèi)定義,但也可以在合約外定義。
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.1 <0.9.0; contract SimpleAuction { function bid() public payable { // Function // ... } } // Helper function defined outside of a contract function helper(uint x) pure returns (uint) { return x * 2; }
函數(shù)調(diào)用可以在內(nèi)部或外部發(fā)生,并且 對其他合約具有不同級別的可見性。函數(shù)接受 參數(shù)并返回變量以在它們之間傳遞參數(shù)和值。
函數(shù)修飾符可用于以聲明的方式修改函數(shù)的語義(請參閱合約部分中的函數(shù)修飾符)。
重載,即具有不同參數(shù)的相同修飾符名稱是不可能的。
像函數(shù)一樣,修飾符可以被覆蓋。
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.4.22 <0.9.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 日志記錄工具的便利接口。
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.4.21 <0.9.0; contract SimpleAuction { event HighestBidIncreased(address bidder, uint amount); // Event function bid() public payable { // ... emit HighestBidIncreased(msg.sender, msg.value); // Triggering event } }
有關(guān)如何聲明事件以及如何在 dapp 中使用事件的信息,請參閱合約中的事件部分。
錯誤允許您為故障情況定義描述性名稱和數(shù)據(jù)。錯誤可用于還原語句。與字符串描述相比,錯誤要便宜得多,并且允許您對附加數(shù)據(jù)進行編碼。您可以使用 NatSpec 向用戶描述錯誤。
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.4; /// Not enough funds for transfer. Requested `requested`, /// but only `available` available. error NotEnoughFunds(uint requested, uint available); contract Token { mapping(address => uint) balances; function transfer(address to, uint amount) public { uint balance = balances[msg.sender]; if (balance < amount) revert NotEnoughFunds(amount, balance); balances[msg.sender] -= amount; balances[to] += amount; // ... } }
有關(guān)詳細信息,請參閱合同部分中的錯誤和恢復聲明。
結(jié)構(gòu)是自定義定義的類型,可以對多個變量進行分組(請參閱 類型部分中的結(jié)構(gòu))。
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.4.0 <0.9.0; contract Ballot { struct Voter { // Struct uint weight; bool voted; address delegate; uint vote; } }
枚舉可用于創(chuàng)建具有一組有限“常量值”的自定義類型(請參閱 類型部分中的枚舉)。
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.4.0 <0.9.0; contract Purchase { enum State { Created, Locked, Inactive } // Enum }
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: