91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

solidity的繼承怎么使用

發布時間:2021-12-07 15:25:57 來源:億速云 閱讀:256 作者:iii 欄目:互聯網科技

這篇文章主要講解了“solidity的繼承怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“solidity的繼承怎么使用”吧!

在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,默認情況下是函數,或者可以從派生類訪問。與其他編程語言一樣,你可以指定從外部或派生合約中可以訪問的內容。函數可以指定為externalpublicinternalprivate,默認為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智能合約了。

solidity的繼承怎么使用

部署后,我們可以看到我們看到了我們的銀行帳戶功能,但也看到了繼承的功能。

solidity的繼承怎么使用

感謝各位的閱讀,以上就是“solidity的繼承怎么使用”的內容了,經過本文的學習后,相信大家對solidity的繼承怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

喀喇沁旗| 固镇县| 西盟| 兰州市| 莆田市| 潞城市| 岐山县| 石楼县| 宝清县| 台江县| 祁东县| 汽车| 博湖县| 茶陵县| 长汀县| 巴楚县| 晴隆县| 盖州市| 宜春市| 延川县| 铁岭市| 都昌县| 福海县| 两当县| 宁都县| 什邡市| 洛川县| 五河县| 潼关县| 吴堡县| 巴林右旗| 高尔夫| 波密县| 蕲春县| 陵川县| 运城市| 建水县| 新田县| 涿州市| 惠水县| 镇赉县|