infura.io提供了託管的以太坊節點,那麼,如何將智能合約部署到infura提供的託管節點?本教程將介紹如何配置truffle來將你的智能合約經過infura發佈到以太坊網絡上。git
若是你尚未看過前序教程,建議先閱讀它們:github
Infura是一個託管的以太坊節點集羣,能夠將你開發的以太坊智能合約部署到infura提供的節點上,而無需搭建本身的以太坊節點。npm
可能你還不瞭解Infura,但若是你使用過MetaMask,那麼就已經接觸過Infura了,由於它是MetaMask背後的以太坊供應商。windows
出於安全緣由,Infura無論理你的私鑰,這意味着Infura不能表明你簽署交易。安全
可是,Infura能夠經過使用HDWalletProvider
來簽署交易。 該服務能夠處理事務簽名以及與以太坊網絡的鏈接。 點擊這裏瞭解更多關於HDWalletProvider的信息 。網絡
本教程將向你展現如何使用Infura將現有的dapp遷移到Infura支持的以太坊網絡。 在這個特定的例子中,咱們將遷移到Ropsten測試網絡。 咱們假設你已經有了一個dapp, 若是須要一個測試dapp,可使用Truffle提供的寵物店dapp。併發
若是你但願立刻開始學習以太坊DApp開發,能夠訪問匯智網提供的出色的在線互動教程:app
Infura的HDWalletProvider是一個獨立的npm軟件包,以下安裝:ide
npm install truffle-hdwallet-provider
注意 :若是你在Windows上安裝而且遇到MSBUILD錯誤,則可能須要安裝Windows構建工具。 在具備管理員權限的控制檯中,運行
npm install -g windows-build-tools
而後再次嘗試安裝。函數
在使用Infura以前,須要註冊Infura訪問令牌 。
填寫並提交表格後你就能夠收到訪問令牌。 相關信息將顯示在屏幕上併發送到你提供的電子郵件。 須要記錄下來這個訪問令牌並確保它不被別人看到!
下一步是編輯你的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() { return new HDWalletProvider(mnemonic, "https://ropsten.infura.io/<INFURA_Access_Token>") }, network_id: 3 } } };
注意事項:
new HDWalletProvider(mnemonic, "https://ropsten.infura.io/<Infura_Access_Token>", 2);
帳戶索引是從零開始的,因此2表示第三個地址。
確保你的賬戶有足夠的帳戶餘額來進行部署。 能夠經過稱Faucet的服務在Ropsten網絡上獲取Ether。 雖然在那裏有多個Faucet網站,咱們推薦的一個服務是在EthTools上託管的 。
注意 :也能夠經過MetaMask申請ether。 在Ropsten上鍊接你的賬戶,而後點擊「Buy」按鈕,該按鈕將提供MetaMask的Ropsten測試Faucet的連接,它的工做方式與上述相似。
咱們如今能夠開始將合約部署到Ropsten上了!
STEP 1: 編譯項目:
truffle compile
STEP 2:部署到Ropsten網絡:
truffle migrate --network ropsten
若是一切順利,應該能夠看到相似於如下內容的輸出:
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上了!