若是你不喜歡浪費時間在開發環境的搭建上,可使用匯智網的在線教程:node
在終端中執行如下命令,肯定是32位架構仍是64位架構:linux
~$ uname –p x86_64
若是你看到輸出x86_64,那麼就是64位系統,不然是32位。webpack
確保你安裝了下載工具wget:web
~$ wget –V GNU Wget 1.17.1 built on linux-gnu
若是尚未安裝wget,使用apt-get來安裝npm
~$ sudo apt-get install wget
##2.1 安裝Node.js 首先根據你的ubuntu是32位仍是64位,分別下載不一樣的預編譯版本,咱們使用官方長期支持的8.10.0LTS版本: 64位:~$ wget https://nodejs.org/dist/v8.10.0/node-v8.10.0-linux-x64.tar.gz
32位:~$ wget https://nodejs.org/dist/v8.10.0/node-v8.10.0-linux-x86.tar.gz
而後解壓到當前目錄,以64位爲例:json
~$ tar zxvf node-v8.10.0-linux-x64.tar.gz
而後接下來修改.bashrc來設置相關的環境變量:ubuntu
~$ echo "export NODE_HOME=$HOME/node-v8.10.0-linux-x64" >> .bashrc ~$ echo "export NODE_PATH=$NODE_HOME/lib/node_modules" >> .bashrc ~$ echo "export PATH=$NODE_HOME/bin:$PATH" >> .bashrc
最後從新載入.bashrc(或者從新登錄)來使node生效:windows
~$ source .bashrc
如今,你可使用node了:跨域
~$ node –v v8.10.0
##2.2 安裝Geth 在終端執行如下命令:瀏覽器
~$ wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.8.3-329ac18e.tar.gz ~$ mv get-linux-amd64-1.8.3-329ac18e geth ~$ echo export PATH=$HOME/geth:$PATH >> .bashrc ~$ soure .bashrc
安裝完畢後,執行命令驗證安裝成功:
~$ geth version Geth Version: 1.8.3-stable
~$ npm install –g solc
安裝完畢後,執行命令驗證安裝成功
~$ solcjs –version 0.40.2+commit.3155dd80.Emscripten.clang
~$ npm install –g web3@0.20.2
安裝驗證:
~$ node –p 'require("web3")' {[Function: Web3] providers:{…}}
執行如下命令安裝truffle開發框架:
~$ npm install –g truffle
驗證安裝:
~$ truffle version Truffle v4.1.3 (core 4.1.3)
執行如下命令安裝webpack:
~$ npm install –g webpack@3.11.0
驗證安裝
~$ webpack –v 3.11.0
建立一個節點目錄node1,並在其中建立私鏈的創世塊配置文件:
~$ mkdir node1 ~$ cd node1 ~/node1$ touch private.json
而後編輯內容以下:
{ "config": { "chainId": 7878, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "difficulty": "200", "gasLimit": "2100000", "alloc": { "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" }, "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" } } }
執行geth的init命令初始化私鏈節點:
~/node1$ geth --datadir ./data init private.json
這會在當前目錄下建立data目錄,用來保存區塊數據及帳戶信息:
~/node1$ ls data private.json
能夠上述命令寫到一個腳本init.sh裏,這樣避免每次都輸入那麼多記不住的東西:
~/node1$ touch init.sh ~node1$ chmod +x init.sh
編輯內容以下:
#!/bin/bash geth --datadir ./data init private.json
在部署下一個節點時,就能夠直接執行這個腳本進行初始化了。例如,在另外一臺機器上:
~/node1$ ./init.sh
從指定的私鏈數據目錄啓動並設定一個不一樣的網絡編號來啓動節點:
~/node1$ geth --rpc --datadir ./data --networkid 7878 console
一樣,你能夠用一個腳本console.sh來簡化啓動節點時的輸入:
~/node1$ touch console.sh ~/node1$ chmod +x console.sh
編輯內容以下:
#!/bin/bash geth --rpc \ --rpcaddr 0.0.0.0 \ --rpccorsdomain "*" \ --datadir ./data \ --networkid 7878 \ console
~/node1$ ./console.sh
在geth控制檯,使用eth對象的accounts屬性查看目前的帳戶列表:
> eth.accounts []
由於咱們尚未建立帳戶,因此這個列表仍是空的。
在geth控制檯,使用personal對象的newAccount()方法建立一個新帳戶,參數爲你本身選擇的密碼:
> personal.newAccount('78787878') 0xd8bcf1324d566cbec5d3b67e6e14485b06a41d49
輸出就是新建立的帳戶地址(公鑰),你的輸出不會和上面的示例相同。geth會保存到數據目錄下的keystore文件中。密碼要本身記住,之後還須要用到。
在geth控制檯,使用personal對象的getBalance()方法獲取指定帳戶的餘額,參數爲帳戶地址:
> eth.getBalance(eth.accounts[0]) 0
或者直接輸入帳戶地址:
> eth.getBalance('0xd8bcf1324d566cbec5d3b67e6e14485b06a41d49') 0
新建立的帳戶,餘額果真爲0。
沒錢的帳戶什麼也幹不了,須要挖礦來掙點錢。 在geth控制檯執行miner對象的start()方法來啓動挖礦:
> miner.start(1)
等幾分鐘之後,檢查帳戶餘額:
> eth.getBalance(eth.accounts[0]) 2.695e+21
錢很多了,2695ETH了,目前市值將近500萬人民幣了,哈。 執行miner對象的stop()方法中止挖礦:
> miner.stop()
在部署合約時須要一個解鎖的帳戶。在geth控制檯使用personal對象的unlockAccount()方法來解鎖指定的帳戶,參數爲帳戶地址和帳戶密碼(在建立帳戶時指定的那個密碼):
> eth.unlockAccount(eth.accounts[0],'78787878') true
執行如下命令建立項目目錄並進入該目錄:
~$ mkdir demo ~$ cd demo
而後用webpack模版初始化項目骨架結構:
~/demo$ truffle unbox webpack Downloading… Unpacking… Setting up… Unbox successful. Sweet!
執行如下命令安裝nmp包:
~/demo$ npm install
truffle.js中,修改port爲8545,由於geth默認在8545端口監聽:
module.exports = { networks:{ development: { … port: 8545 … } } }
在 另外一個終端,執行如下命令啓動節點軟件,以便部署合約並執行交易:
~$ cd node1 ~/node1$ ./console.sh >
注意:爲了在節點上部署合約,別忘了啓動geth後先解鎖帳戶:
> personal.unlockAcount(eth.accounts[0],'78787878') true
執行如下命令編譯項目合約:
~/demo$ truffle compile
執行如下命令來部署合約:
~/demo$ truffle migrate
若是你以前忘了在geth控制檯解鎖帳戶,會看到以下錯誤,參考前面說明進行解鎖便可:
Error: authentication needed: password or unlock
若是已經正確地解鎖了帳戶,你會看到部署過程中止在以下狀態:
Replacing Migrations… … 0x3088762a5bc9…
這是由於truffle在等待部署交易提交,可是咱們在私鏈中尚未啓動挖礦。 如今切換回geth終端窗口,查看交易池的狀態:
> txpool.status { pending:1, queued:0 }
果真有一個掛起的交易!啓動挖礦就是了:
> miner.start(1)
稍等小會兒,再查看交易池的狀態:
> txpool.status { pending:0, queued:0 }
交易已經成功提交了。咱們能夠中止挖礦了,由於它太佔CPU了:
> miner.stop()
如今切換回truffle那個終端,部署過程也正確地執行完了。
執行如下命令來啓動DApp:
~/demo$ npm run dev
在瀏覽器裏訪問http://localhost:8080便可。 若是你但願從別的機器也能夠訪問你的DApp應用,修改一下package.json:
{ scripts:{ "dev": "webpack-dev-server –-host 0.0.0.0" } }