国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

工廠模式管理多個以太坊solidity智能合約

leone / 2509人閱讀

摘要:在新智能合約的構造函數中,將引用我們的合約工廠的地址。以太坊,主要是針對工程師使用進行區塊鏈以太坊開發的詳解。以太坊入門教程,主要介紹智能合約與應用開發,適合入門。這里是原文用工廠模式管理多個智能合約

我們寫了一份小的計算合約作為Hello World。如果我們可以創建一個允許用戶創建自己的計數器的合約怎么辦?

讓我們創建我們的合約CounterFactory,它將管理所有其他計數器Counters。它將包含一個映射,將所有者與其計數器合約的地址相關聯。

mapping(address => address) counters;

當用戶想要使用我們的計數器系統來擁有他自己的計數器時,他將需要請求創建他的計數器。

function createCounter() public {
    if (counters[msg.sender] == 0) {
       counters[msg.sender] = new Counter(msg.sender);
    }
}

請注意,我們將構造函數的地址傳遞給構造函數,因此我們將轉移調用者的所有權。在新智能合約的構造函數中,msg.sender將引用我們的合約工廠的地址。這是一個非常重要的要點,因為使用合約與其他合約進行交互是一種常見做法。因此,你應該在復雜的情況下照顧誰是發件人。

現在是增量函數,我們首先檢查用戶是否已經注冊了智能合約并從合約中調用增量函數。由于映射存儲了智能的地址,我們需要將地址轉換為Counter合約類型。存儲合約的地址而不是直接引用智能合約允許我們通過使用空地址檢查合約是否已初始化:0或0x0 ..

function increment() public {
   require (counters[msg.sender] != 0);
   Counter(counters[msg.sender]).increment(msg.sender);
}

最后,為了讀取計數器的值,我們將用戶的地址作為參數來獲取計數器的值。

function getCount(address account) public constant returns (uint) {
   if (counters[account] != 0) {
       return (Counter(counters[account]).getCount());
    }
}

在這個例子中,我們保持簡單但你可以想象幾個場景,例如需要將Ether發送到createCounter()函數,這樣合約的初始創建者可以獲得一些收入來完成他的工作。我們還可以讓原始創建者刪除計數器,或將合約與字符串或數字相關聯。

Counter合約進行了簡單編輯,以適應作為參數傳遞的新地址。

這是完整的代碼:

pragma solidity ^0.4.11;

contract Counter {

    address owner;
    address factory;
    uint count = 0;

    function Counter(address _owner) {
        owner = _owner;
        factory = msg.sender
    }

    modifier isOwner(address _caller) {
        require(msg.sender == factory);
        require(_caller == owner);
        _;
    }
    
    function increment(address caller) public isOwner(caller) {
       count = count + 1;
    }

    function getCount() constant returns (uint) {
       return count;
    }

}

contract CounterFactory {
 
    mapping(address => address) counters;

    function createCounter() public {
        if (counters[msg.sender] == 0) {
            counters[msg.sender] = new Counter(msg.sender);
        }
    }
    
    function increment() public {
        require (counters[msg.sender] != 0);
        Counter(counters[msg.sender]).increment(msg.sender);
    }
    
    function getCount(address account) public constant returns (uint) {
        if (counters[account] != 0) {
            return (Counter(counters[account]).getCount());
        }
    }

 
}

請注意,如果多次調用,我們的計數器可能會成為溢出的受害者。你應盡可能使用SafeMath庫來防止這種情況。

要部署我們的智能合約,您需要提供CounterFactoryCounter的代碼。部署時,你需要選擇CounterFactory

從你的一個帳戶執行createCounter()函數并在合約界面的閱讀部分調用increment()函數后,你需要將帳戶的地址設置為讀取計數器的值。你現在可以為每個帳戶設置一個計數器。

在下一個教程中,我們將看到如何使用繼承來保持干凈的代碼并重用現有的和經過測試的區塊。

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

分享一些以太坊、EOS、比特幣等區塊鏈相關的交互式在線編程實戰教程:

java以太坊開發教程,主要是針對java和android程序員進行區塊鏈以太坊開發的web3j詳解。

python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。

php以太坊,主要是介紹使用php進行智能合約開發交互,進行賬號創建、交易、轉賬、代幣開發以及過濾器和交易等內容。

以太坊入門教程,主要介紹智能合約與dapp應用開發,適合入門。

以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。

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

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

java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Java代碼中集成比特幣支持功能,例如創建地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。

php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Php代碼中集成比特幣支持功能,例如創建地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。

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

這里是原文用工廠模式管理多個solidity智能合約

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24391.html

相關文章

  • solidity語言開發智能合約中的繼承

    摘要:你首先編寫基本智能合約并告知你的新智能合約將從基礎合約繼承。這些函數和狀態變量只能在內部訪問即從當前合約或從中派生的合約中,而其他情況不使用它。私有函數和狀態變量僅對定義它們的智能合約可見,而不是在派生合約中可見。這里是原文語言開發中的繼承 我們已經探索了很多主題,在編寫智能合約時我們發現經常使用相同的模式:例如,智能合約具有在構造函數中設置的所有者,然后生成修改器以便僅讓所有者使用一...

    lifesimple 評論0 收藏0
  • 以太是什么 - 以太開發入門指南

    摘要:以太坊是什么以太坊是一個建立在區塊鏈技術之上,去中心化應用平臺。運行環境以太坊虛擬機是以太坊中智能合約的運行環境。是由以太坊客戶端提供的是典型的開發以太坊時使用的客戶端,基于語言開發。 本文首發于深入淺出區塊鏈社區原文鏈接:以太坊是什么 - 以太坊開發入門指南原文已更新,請讀者前往原文閱讀 很多同學已經躍躍欲試投入到區塊鏈開發隊伍當中來,可是又感覺無從下手,本文將基于以太坊平臺,以通俗...

    tomlingtm 評論0 收藏0
  • SegmentFault 技術周刊 Vol.41 - 深入學習區塊鏈

    摘要:和比特幣協議有所不同的是,以太坊的設計十分靈活,極具適應性。超級賬本區塊鏈的商業應用超級賬本超級賬本是基金會下的眾多項目中的一個。證書頒發機構負責簽發撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 從比特幣開始 一個故事告訴你比特幣的原理及運作機制 這篇文章的定位會比較科普,盡量用類比的方法將比特幣的基本原理講出來...

    qianfeng 評論0 收藏0
  • 以太:Dapp及相關開發工具介紹

    摘要:郵件列表以太坊上的開發者郵件列表停止使用。開發的移動以太坊瀏覽器開發階段由支持的瀏覽器內。是以太坊的開發環境,測試框架和資產管道。審查隨機數以太坊虛擬機是以太坊智能合約的執行環境。 去中心化應用去中心化應用是可以使用戶和供應商之間直接互動的服務(例如,連接某些市場上的買方和賣方,文件存儲里的持有者和儲存者)。以太坊去中心化應用典型地通過HTML/Javascript網絡應用與用戶互動,...

    FleyX 評論0 收藏0
  • 2018以太智能合約編程語言solidity的最佳IDEs

    摘要:使用基于以太坊的智能合約的集成開發環境。以太坊教程,主要介紹智能合約與應用開發,適合入門。以太坊,主要是介紹使用進行智能合約開發交互,進行賬號創建交易轉賬代幣開發以及過濾器和事件等內容。 Solidity是一種以智能合約為導向的編程語言。這是一種只有四年的年輕語言,旨在幫助開發基于以太坊數字貨幣的智能合約。 理解它官方文檔應該是學習Solidity的最佳來源:solidity.read...

    darkerXi 評論0 收藏0

發表評論

0條評論

leone

|高級講師

TA的文章

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