成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

solidity語言開發(fā)智能合約中的繼承

lifesimple / 676人閱讀

摘要:你首先編寫基本智能合約并告知你的新智能合約將從基礎(chǔ)合約繼承。這些函數(shù)和狀態(tài)變量只能在內(nèi)部訪問即從當(dāng)前合約或從中派生的合約中,而其他情況不使用它。私有函數(shù)和狀態(tài)變量僅對定義它們的智能合約可見,而不是在派生合約中可見。這里是原文語言開發(fā)中的繼承

我們已經(jīng)探索了很多主題,在編寫智能合約時我們發(fā)現(xiàn)經(jīng)常使用相同的模式:例如,智能合約具有在構(gòu)造函數(shù)中設(shè)置的所有者,然后生成修改器以便僅讓所有者使用一些功能。如果我們制定實(shí)施這些功能的基礎(chǔ)合約并在未來的智能合約中重復(fù)使用它們那該怎么辦?你一定猜得到,我們將使用繼承。

在Solidity中,繼承與經(jīng)典的面向?qū)ο缶幊陶Z言非常相似。你首先編寫基本智能合約并告知你的新智能合約將從基礎(chǔ)合約繼承。

你還必須通過復(fù)制包含多態(tài)的代碼來了解Solidity支持多重繼承。所有函數(shù)調(diào)用都是虛函數(shù),這意味著會是調(diào)用派生函數(shù)最多的函數(shù),除非明確給出了合約名稱。當(dāng)某一個智能合約從多個合約繼承時,只在區(qū)塊鏈上創(chuàng)建一個智能合約,并將所有基礎(chǔ)合約中的代碼復(fù)制到創(chuàng)建的智能合約中。

讓我們寫下我們的基本智能合約:它將讓我們輕松地為我們的合約添加所有權(quán)。我們將其命名為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;
  }

}

我們經(jīng)常寫的另一種模式是破壞我們的合約并將合約中存儲的資金轉(zhuǎn)移給所有者或另一個地址的能力。重要的是我們不希望任何人能夠破壞我們的合約,所以我們的Destructible應(yīng)該繼承Ownable。繼承是使用智能合約名稱后面的is關(guān)鍵字完成的。

必須注意,它是Solidity,默認(rèn)情況下是函數(shù),或者可以從派生類訪問。與其他編程語言一樣,你可以指定從外部或派生合約中可以訪問的內(nèi)容。函數(shù)可以指定為external,public,internal,private,默認(rèn)為public。

external:外部函數(shù)是智能合約接口的一部分,這意味著可以從其他合約和交易中調(diào)用它們。external函數(shù)f不能在內(nèi)部調(diào)用(即f()不起作用,但this.f()起作用)。當(dāng)外部函數(shù)接收大量數(shù)據(jù)時,它們有時會更有效。

public:公共函數(shù)是智能合約接口的一部分,可以在內(nèi)部調(diào)用,也可以通過消息調(diào)用。對于公共狀態(tài)變量,會生成自動getter函數(shù)(見下文)。

internal:這些函數(shù)和狀態(tài)變量只能在內(nèi)部訪問(即從當(dāng)前合約或從中派生的合約中),而其他情況不使用它。

private:私有函數(shù)和狀態(tài)變量僅對定義它們的智能合約可見,而不是在派生合約中可見。

下面是我們的第二份智能合約:

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);
  }
}

現(xiàn)在使用這兩個基本合約,我們將寫一個簡單的BankAccount智能合約,人們可以匯款,業(yè)主可以提取。

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);
      }
  } 

}

請注意,我們需要從兩個智能合約繼承。繼承的順序很重要。判斷順序的一個簡單規(guī)則是按照“最類似基類”到“最多派生”的順序指定基類。

以下是我們將部署的整個代碼:

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);
      }
  } 

}

我們現(xiàn)在可以部署我們的銀行賬戶bank account智能合約了。

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

======================================================================

分享一些以太坊、EOS、比特幣等區(qū)塊鏈相關(guān)的交互式在線編程實(shí)戰(zhàn)教程:

java以太坊開發(fā)教程,主要是針對java和android程序員進(jìn)行區(qū)塊鏈以太坊開發(fā)的web3j詳解。

python以太坊,主要是針對python工程師使用web3.py進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解。

php以太坊,主要是介紹使用php進(jìn)行智能合約開發(fā)交互,進(jìn)行賬號創(chuàng)建、交易、轉(zhuǎn)賬、代幣開發(fā)以及過濾器和交易等內(nèi)容。

以太坊入門教程,主要介紹智能合約與dapp應(yīng)用開發(fā),適合入門。

以太坊開發(fā)進(jìn)階教程,主要是介紹使用node.js、mongodb、區(qū)塊鏈、ipfs實(shí)現(xiàn)去中心化電商DApp實(shí)戰(zhàn),適合進(jìn)階。

C#以太坊,主要講解如何使用C#開發(fā)基于.Net的以太坊應(yīng)用,包括賬戶管理、狀態(tài)與交易、智能合約開發(fā)與交互、過濾器和交易等。

EOS教程,本課程幫助你快速入門EOS區(qū)塊鏈去中心化應(yīng)用的開發(fā),內(nèi)容涵蓋EOS工具鏈、賬戶與錢包、發(fā)行代幣、智能合約開發(fā)與部署、使用代碼與智能合約交互等核心知識點(diǎn),最后綜合運(yùn)用各知識點(diǎn)完成一個便簽DApp的開發(fā)。

java比特幣開發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲、去中心化共識機(jī)制、密鑰與腳本、交易與UTXO等,同時也詳細(xì)講解如何在Java代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構(gòu)造裸交易等,是Java工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程。

php比特幣開發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲、去中心化共識機(jī)制、密鑰與腳本、交易與UTXO等,同時也詳細(xì)講解如何在Php代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構(gòu)造裸交易等,是Php工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程。

tendermint區(qū)塊鏈開發(fā)詳解,本課程適合希望使用tendermint進(jìn)行區(qū)塊鏈開發(fā)的工程師,課程內(nèi)容即包括tendermint應(yīng)用開發(fā)模型中的核心概念,例如ABCI接口、默克爾樹、多版本狀態(tài)庫等,也包括代幣發(fā)行等豐富的實(shí)操代碼,是go語言工程師快速入門區(qū)塊鏈開發(fā)的最佳選擇。

這里是原文solidity語言開發(fā)中的繼承

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/24392.html

相關(guān)文章

  • 智能合約語言Solidity教程系列2 - 地址類型介紹

    摘要:地址類型的成員屬性及函數(shù)這里是地址類型相關(guān)成員的快速索引用來查詢賬戶余額,用來發(fā)送以太幣以為單位。因此,為了保證安全,必須檢查的返回值,如果交易失敗,會回退以太幣。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:智能合約語言 Solidity 教程系列2 - 地址類型介紹原文已更新,請讀者前往原文閱讀 Solidity教程系列第二篇 - Solidity地址類型介紹. Solidity 系列完...

    binaryTree 評論0 收藏0
  • 智能合約語言 Solidity 教程系列10 - 完全理解函數(shù)修改器

    摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接智能合約語言教程系列完全理解函數(shù)修改器原文已更新,請讀者前往原文閱讀這是教程系列文章第篇,帶大家完全理解的函數(shù)修改器。在此上下文中,所有的函數(shù)中引入的符號,在修改器中均可見。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:智能合約語言 Solidity 教程系列10 - 完全理解函數(shù)修改器原文已更新,請讀者前往原文閱讀 這是Solidity教程系列文章第10...

    Object 評論0 收藏0
  • 智能合約語言Solidity教程系列3 - 函數(shù)類型

    摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接智能合約語言教程系列函數(shù)類型原文已更新,請讀者前往原文閱讀教程系列第三篇函數(shù)類型介紹。函數(shù)類型函數(shù)也是一種類型,且屬于值類型。但以此相反,合約中函數(shù)本身默認(rèn)是的,僅僅是當(dāng)作類型名使用時默認(rèn)是的。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:智能合約語言Solidity教程系列3 - 函數(shù)類型原文已更新,請讀者前往原文閱讀 Solidity 教程系列第三篇 ...

    qylost 評論0 收藏0
  • 以太坊開發(fā)實(shí)戰(zhàn)學(xué)習(xí)-高級Solidity理論(四)

    摘要:第一個例子,在你把智能協(xié)議傳上以太坊之后,它就變得不可更改這種永固性意味著你的代碼永遠(yuǎn)不能被調(diào)整或更新。允許將合約所有權(quán)轉(zhuǎn)讓給他人。為何要來驅(qū)動以太坊就像一個巨大緩慢但非常安全的電腦。 通過前邊的 Solidity 基礎(chǔ)語法學(xué)習(xí),我們已經(jīng)有了Solidity編程經(jīng)驗(yàn),在這節(jié)就要學(xué)學(xué) Ethereum 開發(fā)的技術(shù)細(xì)節(jié),編寫真正的 DApp 時必知的:智能協(xié)議的所有權(quán),Gas的花費(fèi),代碼優(yōu)...

    feng409 評論0 收藏0
  • 工廠模式管理多個以太坊solidity智能合約

    摘要:在新智能合約的構(gòu)造函數(shù)中,將引用我們的合約工廠的地址。以太坊,主要是針對工程師使用進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解。以太坊入門教程,主要介紹智能合約與應(yīng)用開發(fā),適合入門。這里是原文用工廠模式管理多個智能合約 我們寫了一份小的計(jì)算合約作為Hello World。如果我們可以創(chuàng)建一個允許用戶創(chuàng)建自己的計(jì)數(shù)器的合約怎么辦? showImg(https://segmentfault.com/img/...

    leone 評論0 收藏0

發(fā)表評論

0條評論

lifesimple

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<