1. 程式人生 > >使用Truffle和infura部署以太坊合約

使用Truffle和infura部署以太坊合約

缸中之腦

百家號04-2313:33

Infura是一個託管的以太坊節點叢集,可以將你開發的以太坊智慧合約部署到infura提供的節點上,而無需搭建自己的以太坊節點。

可能你還不瞭解Infura,但如果你使用過MetaMask,那麼就已經接觸過Infura了,因為它是MetaMask背後的以太坊供應商。

出於安全原因,Infura不管理你的私鑰,這意味著Infura不能代表你簽署交易。

但是,Infura可以通過使用HDWalletProvider來簽署交易。 該服務可以處理事務簽名以及與以太坊網路的連線。 點選這裡瞭解更多關於HDWalletProvider的資訊 。

本教程將向你展示如何使用Infura將現有的dapp遷移到Infura支援的以太坊網路。 在這個特定的例子中,我們將遷移到Ropsten測試網路。 我們假設你已經有了一個dapp, 如果需要一個測試dapp,可以使用Truffle提供的寵物店dapp。

如果你希望馬上開始學習以太坊DApp開發,可以訪問匯智網提供的出色的線上互動教程:

以太坊DApp實戰入門教程:https://bit.ly/2qMvYnQ以太坊去中心化電商DApp開發實戰:https://bit.ly/2qPBs04

安裝HDWalletProvider

Infura的HDWalletProvider是一個獨立的npm軟體包,如下安裝:

npm install truffle-hdwallet-provider

注意 :如果你在Windows上安裝並且遇到MSBUILD錯誤,則可能需要安裝Windows構建工具。 在具有管理員許可權的控制檯中,執行npm install -g windows-build-tools然後再次嘗試安裝。

註冊Infura

在使用Infura之前,需要註冊Infura訪問令牌 。

填寫並提交表格後你就可以收到訪問令牌。 相關資訊將顯示在螢幕上併發送到你提供的電子郵件。 需要記錄下來這個訪問令牌並確保它不被別人看到!

配置Truffle專案

下一步是編輯你的truffle.js檔案來啟用HDWalletProvider併為部署到Ropsten進行必要的配置。

STEP 1:首先,在配置檔案中定義HDWalletProvider物件。 在truffle.js檔案的頂部新增以下程式碼:

var HDWalletProvider = require("truffle-hdwallet-provider");

STEP 2:接下來,提供助記詞(mnemonic)來生成你的賬戶。

var mnemonic = "orange apple banana ... ";

警告 :在此過程中,我們強烈建議將助記符儲存在另一個(祕密)檔案中,以降低助記符洩漏風險。 如果有人知道你的助記符,他們將擁有你所有的地址和私鑰!

STEP 3:新增Ropsten網路定義:

module.exports = { networks: { ropsten: { provider: function() {returnnew HDWalletProvider(mnemonic, "https://ropsten.infura.io/") }, network_id: 3 } } };

注意事項:

雖然該示例僅定義了單個網路,但你可以像往常一樣定義多個網路。ropsten網路定義中的provider將使用例項化的HDWalletProvider 。HDWalletProvider以助記符和期望的網路為引數。 Infura主頁上提供Infura支援的 網路列表。確保使用前面拿到的Infura訪問令牌替換 。provider值被封裝在一個函式中,這可以確保它在需要之前不會被初始化。 如果連線到多個網路,這一點尤為重要。 關於該主題的更多資訊,請參閱Truffle文件的網路配置部分。預設情況下,由助記符產生的第一個賬戶將負責執行合約遷移任務。 但如果需要的話,你可以傳入引數以指定要使用的帳戶。 例如,要使用第三個帳戶:

new HDWalletProvider(mnemonic, "https://ropsten.infura.io/", 2);

賬戶索引是從零開始的,所以2表示第三個地址。

使用Faucet獲取ether

確保你的帳戶有足夠的賬戶餘額來進行部署。 可以通過稱Faucet的服務在Ropsten網路上獲取Ether。 雖然在那裡有多個Faucet網站,我們推薦的一個服務是在EthTools上託管的 。

導航至EthTools的Ether Faucet 。輸入你的助記符,並選擇你想要多少ether(最多5個)。Faucet將連結到你的第一個帳戶。 點選“Request Ether”提交請求。很快,你的賬戶將獲得請求的ether。

注意 :也可以通過MetaMask申請ether。 在Ropsten上連線你的帳戶,然後點選“Buy”按鈕,該按鈕將提供MetaMask的Ropsten測試Faucet的連結,它的工作方式與上述類似。

我們現在可以開始將合約部署到Ropsten上了!

部署合約

STEP 1: 編譯專案:

truffle compile

STEP 2:部署到Ropsten網路:

trufflemigrate--networkropsten

如果一切順利,應該可以看到類似於以下內容的輸出:

Using network 'ropsten'. Running migration: 1_initial_migration.js Deploying Migrations... ...0xd79bc3c5a7d338a7f85db9f86febbee738ebdec9494f49bda8f9f4c90b649db7 Migrations: 0x0c6c4fc8831755595eda4b5724a61ff989e2f8b9 Saving successful migration to network... ...0xc37320561d0004dc149ea42d839375c3fc53752bae5776e4e7543ad16c1b06f0 Saving artifacts... Running migration: 2_deploy_contracts.js Deploying MyContract... ...0x7efbb3e4f028aa8834d0078293e0db7ff8aff88e72f33960fc806a618a6ce4d3 MyContract: 0xda05d7bfa5b6af7feab7bd156e812b4e564ef2b1 Saving successful migration to network... ...0x6257dd237eb8b120c8038b066e257baee03b9c447c3ba43f843d1856de1fe132 Saving artifacts...

需要提醒的是,你的交易ID將與上面的不同。

注意 :如果收到錯誤Error: Exceeds block gas limit ,你可能需要為合約手動設定油量上限(gas limit)。 有關詳細資訊,請參閱Truffle配置文件。

STEP 3:如果想驗證合約是否已成功部署,可以在Etherscan的Ropsten部分進行檢查。 在搜尋欄位中,輸入部署交易ID。 在上面的例子中,交易ID是:

0x7efbb3e4f028aa8834d0078293e0db7ff8aff88e72f33960fc806a618a6ce4d3

你應該可以看到有關交易的詳細資訊,包括交易受到保護的區塊號。

恭喜! 你已經使用Infura和truffle的組合將合約部署到Ropsten上了!