第二十三課 如何部署TRUFFLE智能合約到以太坊主網(以寵物商店為例)

1普碎,摘要

通過《第六課 技術小白如何開發(fā)一個DAPP區(qū)塊鏈應用(以寵物商店為例)》 學習艾帐,大家掌握了一個DAPP的編程和以太坊私有測試環(huán)境調試,本文做進一步的技術深入學習跷敬。
【本文目標】
(1)采用INFURA配置的方式把智能合約部署到ROPSTEN測試網絡讯私;
(2)采用INFURA配置的方式把智能合約部署到以太坊主網絡;
(3)了解采用.env配置的方式把助記詞保存到本地防止泄露西傀;

【前提條件】
本文假設你已完成《第六課 技術小白如何開發(fā)一個DAPP區(qū)塊鏈應用(以寵物商店為例)》的學習斤寇,在UBUTU環(huán)境編譯成功智能合約,通過瀏覽器運行寵物商店程序并點擊領養(yǎng)寵物成功拥褂。

2娘锁, 操作內容

2.1 注冊infura獲取API-KEY

地址https://infura.io

輝哥注冊后,獲得API KEY:8ce5ebd357144bef8dceae3de1915e29

2.2 增加配置文件.env

Dotenv是一個零依賴模塊饺鹃,用于從".env"文件中導入環(huán)境變量到 process.env莫秆。對DAPP來說,這樣就可以不用上傳錢包助記詞等核心機密到GITHUB悔详,便于資產安全镊屎。

如何獲取META MASK的助記詞
META MASK的助記詞是針對原創(chuàng)賬戶的。在TRUFFLE框架下默認使用第一個創(chuàng)建的ACCOUNT1進行部署操作茄螃。

2.獲取seed KEY

如何獲取imToken錢包的助記詞
imToken錢包的助記詞一般在你創(chuàng)建錢包的時候已經備份好了缝驳,之后會被刪除。錢包此時只能導出私鑰或者keystore了归苍。

2.3 增加配置文件truffle.js的ROSPTEN和MAINNET環(huán)境配置

修改配置文件配置文件truffle.js用狱,增加ROSPTEN和MAINNET環(huán)境配置內容。

/*讀取.env環(huán)境配置的文件變量定義*/
const dotenv = require('dotenv');
const result = dotenv.config();
if (result.error) {
  throw result.error;
}
console.log(result.parsed);

var NonceTrackerSubprovider = require("web3-provider-engine/subproviders/nonce-tracker");
var HDWalletProvider = require("truffle-hdwallet-provider");

/*訪問https://infura.io/注冊后獲取的api-key*/
var infura_apikey = "8ce5ebd357144bef8dceae3de1915e29";

/*讀取.env文件配置的助記詞*/
var mnemonic_ropsten = process.env.mnemonic_ropsten;
var mnemonic_mainnet = process.env.mnemonic_mainnet;

module.exports = {
  // See <http://truffleframework.com/docs/advanced/configuration>
  // to customize your Truffle configuration!
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*", // Match any network id
      gas: 4500000
    },
    local: {
      host: "127.0.0.1",
      port: 8545,
      network_id: "*", // Match any network id
      //gas: 4300000
    },
    ropsten: {
      provider: new HDWalletProvider(mnemonic_ropsten, "https://ropsten.infura.io/"+infura_apikey),
      network_id: 3,
      gas: 3012388,
      gasPrice: 30000000000
    },
    mainnet: {
      provider: function () {
        var wallet = new HDWalletProvider(mnemonic_mainnet, "https://mainnet.infura.io/Np7IGWoN2UOb0tgRWx55");
        var nonceTracker = new NonceTrackerSubprovider();
        wallet.engine._providers.unshift(nonceTracker);
        nonceTracker.setEngine(wallet.engine);
        return wallet;
      },
      gas: 6000000,
      network_id: 1,
      gasPrice: 10 * 1000000000
    }
  }
};

2.4 上傳代碼

輝哥假設你已經創(chuàng)建好了寵物商店的代碼拼弃,完成了第六課的實踐夏伊。
沒有的話,可加入輝哥知識星球吻氧,從中下載本案例代碼工程溺忧,也可加專門微信群交流技術問題。


把DAPP工程上傳到UBUNTU的ETH環(huán)境医男。記得把WINDOWS下的main.env文件改為.env文件砸狞,便于運行時環(huán)境讀取捻勉。

3.修改配置文件.png

2.5 安裝 truffle-hdwallet-provider

Infura組織是MetaMask背后的以太坊供應商镀梭。Infura提供了一個托管的以太坊節(jié)點集群,可以將你開發(fā)的以太坊智能合約部署到infura提供的節(jié)點上踱启,而無需搭建自己的以太坊節(jié)點报账。
Infura不保存你的私鑰研底,Infura可以通過使用HDWalletProvider來簽署交易。 該服務可以處理事務簽名以及與以太坊網絡的連接透罢。
在寵物商店根目錄下運行命令:

npm install truffle-hdwallet-provider

成功輸出參考如下:

duncanwang@ubuntu:~/work/dapp-guide-pet-shop$ npm install truffle-hdwallet-provider

> scrypt@6.0.3 preinstall /home/duncanwang/work/dapp-guide-pet-shop/node_modules/scrypt
> node node-scrypt-preinstall.js
...
npm WARN truffle-hdwallet-provider@0.0.6 requires a peer of truffle@4.x but none is installed. You must install peer dependencies yourself.
npm WARN pet-shop@1.0.0 No description
npm WARN pet-shop@1.0.0 No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.1.3 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"ia32"})

+ truffle-hdwallet-provider@0.0.6
added 566 packages from 381 contributors in 188.892s

輝哥在安裝truffle-hdwallet-provider時遇到了巨大的各種坑榜晦。剛開始懷疑是被墻的問題,嘗試過各種手段羽圃,最終發(fā)現是沒有安裝C/C++編譯器的歡迎乾胶,參考本文章節(jié)"3,常見問題和解決方法"解決朽寞。

2.6 安裝 dotenv

npm install  dotenv 

安裝成功的輸入如下:

duncanwang@ubuntu:~/work/dapp-guide-pet-shop$ npm install  dotenv
npm WARN truffle-hdwallet-provider@0.0.6 requires a peer of truffle@4.x but none is installed. You must install peer dependencies yourself.
npm WARN pet-shop@1.0.0 No description
npm WARN pet-shop@1.0.0 No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.1.3 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"ia32"})

+ dotenv@6.0.0
added 1 package from 1 contributor in 15.671s

如果安裝失敗识窿,請參考本文章節(jié)"3,常見問題和解決方法"解決脑融。

2.7 把智能合約部署到ROPSTEN測試網絡

(1), 在寵物商店根目錄下運行命令:

truffle migrate --network ropsten  --reset --compile-all

重新編譯成功后會部署到ropsetn測試環(huán)境喻频。成功輸出內容參考:

duncanwang@ubuntu:~/work/dapp-guide-pet-shop$ truffle migrate --network ROPSTEN  --reset --compile-all
...
Writing artifacts to ./build/contracts

Using network 'ropsten'.

Running migration: 1_initial_migration.js
  Deploying Migrations...
  ... 0xe9a11fa0cb23c1c87068c97719b1400285bb56c1d6592415104d794657c23e36
  Migrations: 0x4c6475632bd8101727d0b4bcce8f9fbc5eef43f0
Saving successful migration to network...
  ... 0xe04d70b45866abfae901396d76d8509c39c747dee203e979b60ec324d2bf3179
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Deploying Adoption...
  ... 0x824322568f00e51b7b707d212da9f9c1a2f56a1bdb9a2734ea5ce6c544f7bb2a
  Adoption: 0xa65fc2fbbfb0c74a984144df3174853fe74e2179
Saving successful migration to network...
  ... 0xe209420af44a028590408aff402829e746ef9abb109db808b75ff8aa1ec28ac3
Saving artifacts...

提取合約地址,點擊可以查看部署成功的合約鏈接:

(2) 本次因為不需要采用本地環(huán)境肘迎,所以不需要啟動ganache-cli環(huán)境甥温,但是需要在獨立環(huán)境窗口安裝,運行l(wèi)ite-server環(huán)境妓布,以便訪問寵物商店網頁姻蚓。
輸入命令:

npm install lite-server --save-dev
npm run dev

安裝成功輸出參考:

duncanwang@ubuntu:~/work/dapp-guide-pet-shop$ npm install lite-server --save-dev
npm WARN truffle-hdwallet-provider@0.0.6 requires a peer of truffle@4.x but none is installed. You must install peer dependencies yourself.
npm WARN pet-shop@1.0.0 No description
npm WARN pet-shop@1.0.0 No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"ia32"})

+ lite-server@2.4.0
added 19 packages from 24 contributors, removed 19 packages and updated 40 packages in 41.6s

lite-server運行成功參考:

> pet-shop@1.0.0 dev /home/duncanwang/work/dapp-guide-pet-shop
> lite-server

** browser-sync config **
{ injectChanges: false,
  files: [ './**/*.{html,htm,css,js}' ],
  watchOptions: { ignored: 'node_modules' },
  server: 
   { baseDir: [ './src', './build/contracts' ],
     middleware: [ [Function], [Function] ] } }
[Browsersync] Access URLs:
 --------------------------------------
       Local: http://localhost:3000
    External: http://192.168.2.209:3000
 --------------------------------------
          UI: http://localhost:3001
 UI External: http://192.168.2.209:3001
 --------------------------------------
[Browsersync] Serving files from: ./src
[Browsersync] Serving files from: ./build/contracts
[Browsersync] Watching files...

(3) 網頁訪問寵物商店
輝哥服務器的地址頁面地址:http://192.168.2.209:3000


4.主頁

(4) 領養(yǎng)寵物狗狗
點擊領養(yǎng)的流程同第六課私有以太坊環(huán)境的操作。

5.點擊領養(yǎng).png

點擊可查看輝哥本次操作成功的交易記錄:
https://ropsten.etherscan.io/tx/0x26c8458ff0fadfb74f214d421d894198594ea638a2176630cab136987cf5ef4b

2.8 把智能合約部署到以太坊主網絡

記得把有以太坊余額的助記詞配置到.env文件匣沼。
運行命令:

truffle migrate --network mainnet  --reset --compile-all

運行成功結果參考:

duncanwang@ubuntu:~/work/dapp-guide-pet-shop$truffle migrate --network mainnet --reset --compile-all
...
Writing artifacts to ./build/contracts

Using network 'mainnet'.

Running migration: 1_initial_migration.js
  Deploying Migrations...
  ... 0xa31fa855a85808c974f49d894b2116d6bdd916c52118026bb3ab02fbcbe765c9
  Migrations: 0x71636b5d2ee99a251b511226e17a27d79d73276f
Saving successful migration to network...
  ... 0xb36f92716e38e28dcb0c9e4f8fa13e54a1ab0ddd81a8ac70c8384aa680a5cb10
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Deploying Adoption...
  ... 0x047ef9057c76aac9929ff2a2d72426170b12bd513452a05281b14dbd7414a37f
  Adoption: 0xe2202412f3a6c8ce4fedd1bcad5890444416a524
Saving successful migration to network...
  ... 0x709859af998907ee1b17815f621430dc4cfdc663a5f3f4ad78517c8675c15016
Saving artifacts...

點擊可查看輝哥本次部署合同的合約地址鏈接:

運營寵物商店網址也可以完成相關的操作史简。
http://192.168.2.209:3000/

輝哥最終cancel了本次交易,就不花這蛋疼的錢了肛著。

1圆兵,主網后交易.png

3,常見問題和解決方法

3.1 安裝truffle-hdwallet-provider失敗

【輸出描述】

Error: Error: Command failed: ./configure
configure: error: in `/home/duncanwang/work/cet-token/node_modules/scrypt/scrypt/scrypt-1.2.0':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
...

【解決方法】
針對這個問題的解決枢贿,輝哥走過較多的彎路殉农,包括VPN,安裝GCC"npm install -g gcc", "npm rebuild"都沒有解決局荚。最終通過運行命令解決了超凳。

sudo apt-get install build-essential

【解決方法2】
輝哥在CentOS6.5上安裝truffle-hdwallet-provider時又遇到類似問題。采用CentOS的安裝命令
yum groupinstall "Development Tools" yum install -y gcc g++ kernel-devel
安裝成功后編譯truffle-hdwallet-provider時還是失敗耀态。
查看g++的版本轮傍,發(fā)現是V4.4.7的,這個至少需要V4.7才能成功首装。

#g++ --version
g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

最后參考《CentOS升級gcc4.4.7到gcc4.8.5》文檔创夜,花了1個多小時完成g++的版本升級后,安裝truffle-hdwallet-provider才成功仙逻。

3.2 部署到主網不成功

【輸出描述】

Running migration: 1_initial_migration.js
  Deploying Migrations...
Error encountered, bailing. Network state unknown. Review successful transactions manually.
insufficient funds for gas * price + value

【解決方法】
(1)輝哥忘記在.env中配置mnemonic_mainnet的助記詞驰吓,提示也是這個涧尿。
(2)后來輝哥使用METAMASK導出的助記詞配置給mnemonic_mainnet,也往METAMASK導入了有足夠主網ETH的賬號檬贰,還是提示錯誤姑廉。后來確認導入賬號的助記詞不能從METAMASK導出。獲取正確的助記詞就解決了翁涤。

3.3 安裝TRUFFEL5.0版本后桥言,部署到ROPSTEN網絡失敗

【輸出描述】

duncanwang@ubuntu:~/work/PuzzleBID$ truffle migrate --network ropsten  --reset
...
Error: Cannot find module 'web3-provider-engine/subproviders/nonce-tracker'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:548:15)

【解決方法】
安裝這2步之后,部署到ROPSTEN就成功了葵礼。

duncanwang@ubuntu:~/work/PuzzleBID$ sudo npm install  web3-provider-engine

duncanwang@ubuntu:~/work/PuzzleBID$ sudo node-gyp rebuild

4限书, 參考

(1)【區(qū)塊鏈】部署智能合約到以太坊主網(truffle+infura)
(2) dotenv介紹

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市章咧,隨后出現的幾起案子倦西,更是在濱河造成了極大的恐慌,老刑警劉巖赁严,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扰柠,死亡現場離奇詭異,居然都是意外死亡疼约,警方通過查閱死者的電腦和手機卤档,發(fā)現死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來程剥,“玉大人劝枣,你說我怎么就攤上這事≈ǎ” “怎么了舔腾?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長搂擦。 經常有香客問我稳诚,道長,這世上最難降的妖魔是什么瀑踢? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任扳还,我火速辦了婚禮,結果婚禮上橱夭,老公的妹妹穿的比我還像新娘氨距。我一直安慰自己,他們只是感情好棘劣,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布俏让。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舆驶。 梳的紋絲不亂的頭發(fā)上橱健,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天而钞,我揣著相機與錄音沙廉,去河邊找鬼。 笑死臼节,一個胖子當著我的面吹牛撬陵,可吹牛的內容都是我干的。 我是一名探鬼主播网缝,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼巨税,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了粉臊?” 一聲冷哼從身側響起草添,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扼仲,沒想到半個月后远寸,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡屠凶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年驰后,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矗愧。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡灶芝,死狀恐怖,靈堂內的尸體忽然破棺而出唉韭,到底是詐尸還是另有隱情夜涕,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布属愤,位于F島的核電站钠乏,受9級特大地震影響,放射性物質發(fā)生泄漏春塌。R本人自食惡果不足惜晓避,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望只壳。 院中可真熱鬧俏拱,春花似錦、人聲如沸吼句。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至搞隐,卻和暖如春驹愚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背劣纲。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工逢捺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人癞季。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓劫瞳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绷柒。 傳聞我的和親對象是個殘疾皇子志于,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內容