您好,登錄后才能下訂單哦!
這篇文章主要講解了“olidity語言開發中的繼承怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“olidity語言開發中的繼承怎么使用”吧!
在Solidity中,繼承與經典的面向對象編程語言非常相似。你首先編寫基本智能合約并告知你的新智能合約將從基礎合約繼承。
你還必須通過復制包含多態的代碼來了解Solidity支持多重繼承。所有函數調用都是虛函數,這意味著會是調用派生函數最多的函數,除非明確給出了合約名稱。當某一個智能合約從多個合約繼承時,只在區塊鏈上創建一個智能合約,并將所有基礎合約中的代碼復制到創建的智能合約中。
讓我們寫下我們的基本智能合約:它將讓我們輕松地為我們的合約添加所有權。我們將其命名為Ownable
。
OpenZeppelin
的員工寫了很多可以在智能合約中使用的可重用代碼。這些代碼段可通過其工具或其
Github存儲庫
獲得。
這是代碼:
pragma solidity ^0.4.11;/** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */contract Ownable { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner { require(newOwner != address(0)); owner = newOwner; } }
我們經常寫的另一種模式是破壞我們的合約并將合約中存儲的資金轉移給所有者或另一個地址的能力。重要的是我們不希望任何人能夠破壞我們的合約,所以我們的Destructible
應該繼承Ownable
。繼承是使用智能合約名稱后面的is
關鍵字完成的。
必須注意,它是Solidity,默認情況下是函數,或者可以從派生類訪問。與其他編程語言一樣,你可以指定從外部或派生合約中可以訪問的內容。函數可以指定為external
,public
,internal
,private
,默認為public
。
external
:外部函數是智能合約接口的一部分,這意味著可以從其他合約和交易中調用它們。external
函數f不能在內部調用(即f()不起作用,但this.f()起作用)。當外部函數接收大量數據時,它們有時會更有效。
public
:公共函數是智能合約接口的一部分,可以在內部調用,也可以通過消息調用。對于公共狀態變量,會生成自動getter函數(見下文)。
internal
:這些函數和狀態變量只能在內部訪問(即從當前合約或從中派生的合約中),而其他情況不使用它。
private
:私有函數和狀態變量僅對定義它們的智能合約可見,而不是在派生合約中可見。
下面是我們的第二份智能合約:
pragma solidity ^0.4.11;/** * @title Destructible * @dev Base contract that can be destroyed by owner. All funds in contract will be sent to the owner. */contract Destructible is Ownable { function Destructible() payable { } /** * @dev Transfers the current balance to the owner and terminates the contract. */ function destroy() onlyOwner { selfdestruct(owner); } function destroyAndSend(address _recipient) onlyOwner { selfdestruct(_recipient); } }
現在使用這兩個基本合約,我們將寫一個簡單的BankAccount
智能合約,人們可以匯款,業主可以提取。
pragma solidity ^0.4.11; contract BankAccount is Ownable, Destructible { function store() public payable { } function withdraw(uint amount) public onlyOwner { if (this.balance >= amount) { msg.sender.transfer(amount); } } }
請注意,我們需要從兩個智能合約繼承。繼承的順序很重要。判斷順序的一個簡單規則是按照“最類似基類”到“最多派生”的順序指定基類。
以下是我們將部署的整個代碼:
pragma solidity ^0.4.11;/** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */contract Ownable { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner { require(newOwner != address(0)); owner = newOwner; } }/** * @title Destructible * @dev Base contract that can be destroyed by owner. All funds in contract will be sent to the owner. */contract Destructible is Ownable { function Destructible() payable { } /** * @dev Transfers the current balance to the owner and terminates the contract. */ function destroy() onlyOwner { selfdestruct(owner); } function destroyAndSend(address _recipient) onlyOwner { selfdestruct(_recipient); } } contract BankAccount is Ownable, Destructible { function store() public payable { } function withdraw(uint amount) public onlyOwner { if (this.balance >= amount) { msg.sender.transfer(amount); } } }
我們現在可以部署我們的銀行賬戶bank account
智能合約了。
感謝各位的閱讀,以上就是“olidity語言開發中的繼承怎么使用”的內容了,經過本文的學習后,相信大家對olidity語言開發中的繼承怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。