最近在開發一個基於Ethereum區塊鏈的應用,於是上網搜尋資料,發現網上資料太少,由於這項技術在國內較少人研究,許多問題都無法找到答案,我將這兩天自己的總結寫出來,希望能幫到大家
首先我們要下載以太坊的用戶端工具,我參考的是網上的視頻《明說》http://ethcast.com/v1,由於我對這方面沒有任何的基礎完全按照視頻的內容進行操作下載的是go語言的用戶端,
我用的是Ubuntu系統,具體安裝代碼是
sudo apt-get install software-properties-commonsudo add-apt-repository -y ppa:ethereum/ethereumsudo apt-get updatesudo apt-get install ethereums
安裝成功後
首先我們開啟服務命令是 geth --datadir "~/ethdev" --dev
之後我們進入控制台命令 geth --dev console 2>>file_to_log_output
進入控制台後查看當前賬戶命令:eth.accouonts
建立賬戶:
personal.newAccount('123456')//參數是帳號的密碼
查看使用者
eth.accounts
建立第二個賬戶
personal.newAccount('123456')//參數是密碼
我們將兩個賬戶分別賦值給user1和user2
建立第二個賬戶
personal.newAccount('123456')
我們將這兩個賬戶分別賦值給user1和user2
user1 = eth.accounts[0]user2 = eth.accounts[1]
下面是用戶端操作的一些命令
查看賬戶餘額:eth.getBalance(user1) 查看當前的區塊號:eth.blockNumber() 開啟日誌:tail -f file_to_log_output(新視窗中開啟) 挖礦命令:miner.start() 停止挖礦:miner.stop()
轉賬命令:eth.sendTransaction({from :user1,to:user2,value:web3.toWei(3,"ether")}) 此時執行挖礦命令會報錯因為user1時預設鎖定的,我們應該先解鎖賬戶
personal.unlockAccount("0xshbfksugfksjb24sfsd","123456")//參數分別是賬戶和密碼
之後重新執行轉賬命令,轉賬需要挖礦進行確認
在上述操作完成之後我開始搭建ethereum中一個架構truffle,這個架構安裝整整花費我3天的時間才完成,基本上所有的問題都在這上面,所以我重點描述這方面
首先安裝truffle之前我們要先安裝nodejs和npm(git在後面的安裝中會用到,必須安裝)
安裝命令
sudo apt-get install git sudo apt-get install nodejs-legacy sudo apt-get install npm
注意:我們安裝的nodejs和npm必須是較新的版本,不然在之後安裝truffle的時候會出問題,下面提供升級的方法
升級版本
sudo npm cache clean -f sudo npm install -g n sudo n stable
安裝solc和solc-cli
sudo npm install -g solc solc-cli --save-dev
因為我們要在geth中使用solidity編譯,所以還要安裝solc二進位包
sudo add-apt-repository ppa:ethereum/ethereum sudo apt-get update sudo apt-get install solc
接下來我們安裝testrpc
testrpc不同於geth,geth是真正的以太坊環境,testrpc是在本地使用記憶體類比的一個以太坊環境,對於開發調試來說更為方便快捷,當你的合約在testrpc中測試通過後再部署到geth中去
安裝testrpc
sudo npm install -g ethereumjs-testrpc
安裝truffle
sudo npm install -g truffle
可能遇到的問題:truffle安裝失敗的機率很高,還會報很多錯誤 解決辦法:使用淘寶鏡像安裝可順利安裝
npm config set registry https://registry.npm.taobao.orgnpm install -g truffleln -s /usr//local/nodejs/node-v7.0.4/bin/truffle /usr/local/bin/truffle
根據網上的教程我們安裝truffle成功後先建立一個檔案夾
mkdir test
進入該檔案夾中
cd test
我們先執行truffle init 命令
網上介紹執行之後檔案夾中會產生一下檔案和檔案夾
app、contracts、migrations、test、truffle.js
但是我們發現我們的檔案夾中並沒有app檔案夾,當時我抱著試一試的想法繼續按照網上的教程進行操作
註:以下操作並沒有成功
執行 truffle compile命令,發現出現些許問題,沒有理會繼續執行
開啟我們的testrpc,重新啟動一個新的控制台輸入testrpc即可
在原來的test檔案夾下執行truffle migrate命令
再執行truffle serve
之後訪問localhost:8080
操作成功的話會顯示如下介面
但是我們訪問時發現介面顯示 cannot get connect
以上是完全按照教程執行,但是並沒有成功
為瞭解決這個問題在網上搜尋了很久,最後發現問題是網上教程使用的truffle是2.x的版本,而我們現在下載的版本是3.x的,3.x的版本與2.x的有許多改動,但是網上並沒有3.x的教程,苦尋無果的情況下我只好將版本回退到2.x,網上搜到這樣一條命令
若要安裝 truffle 2 版本
npm install -g truffle@2.1.1 (編譯過程出現其他問題)
卸載 後重新安裝
npm uninstall trufflenpm install -g truffle@~2.1.1 (解決上述問題)
按照命令操作以後果然回退到2.x的版本(npm執行非常慢,大家一定要有耐心)
興高采烈的執行 truffle init命令(重新建立一個空的檔案夾)
果然沒有問題產生了app、contracts、migrations、test、truffle.js這幾個檔案
接著執行
truffle compile
結果
Could not find expected contract or library in ‘ConvertLib.sol’: contract or library ‘ConvertLib’ not found. Compilation failed. See above.
實在沒辦法了,弄個架構就這麼麻煩嗎
好在最後在https://bitshuo.com/topic/58a55366598da39107dd7e81中找到解決方案
其實好多人從3.x版本回退到2.x版本後都遇到和我一樣的問題,解決的方法讓我崩潰,升級到3.x版本但是在專案檔夾中執行
truffle init webpack
抱著試試看的態度執行
sudo npm install -g truffle
將版本升級到3.x之後執行
truffle init webpack
果然產生的檔案中包含app檔案夾,並且其中有一個README.md其中有操作步驟
First run truffle compile, then run truffle migrate to deploy the contracts onto your network of choice (default “development”).
Then run npm run dev to build the app and serve it on http://localhost:8080
按照上述步驟執行後終於獲得成功
現在我將整個正確的步驟貼出來
1.安裝truffle
1.1 安裝git和npm
sudo apt-get install git sudo apt-get install nodejs-legacy sudo apt-get install npm
1.2 升級版本
sudo npm cache clean -f sudo npm install -g n sudo n stable
1.3安裝solc和solc-cli
1.4安裝solc二進位包
sudo add-apt-repository ppa:ethereum/ethereum sudo apt-get update sudo apt-get install solc
1.5安裝testrpc
sudo npm install -g ethereumjs-testrpc
1.6安裝truffle
sudo npm install -g truffle
1.7 控制台輸入truffle得到相應的提示則說明成功
2 執行truffle命令
2.1建立專案檔夾
mkdir linux
2.2進入檔案夾中
cd linux
3.3執行一系列命令
truffle init webpack
truffle compile
testrpc(在新的控制台視窗中執行)
truffle migrate
npm run dev
至此操作結束,開啟瀏覽器輸入 localhost:8080就能看到期望的轉賬demo介面