1. 程式人生 > >基於以太坊的DAPP實現

基於以太坊的DAPP實現

基於以太坊的DAPP實現

系統採用vm下ubuntu16.04

一、 以太坊介紹

       以太坊是一個開源的有智慧合約功能的公共區塊鏈平臺。通過其專用加密貨幣以太幣(Ether)提供去中心化的虛擬機器(“以太虛擬機器” Ethereum Virtual Machine)來處理點對點合約。

       與比特幣的區別:以太坊是一個公有鏈平臺,而比特幣是一個電子貨幣系統。以太坊提供了儲存和智慧合約功能,有合約賬戶和外部賬戶。

二、 開發工具介紹

(1)以太坊客戶端: Geth(go語言實現)、 testrpc(Node.js語言實現)
Geth和testrpc都可以用來搭建一個測試網路,但是Geth是更加真實的網路,而testrpc只是在記憶體中模擬的

(2)開發框架Truffle:Truffle是一個世界級的Ethereum開發環境,測試框架以及資產管理通道,旨在使Ethereum開發更加容易。其本質是Dapp開發框架,它可以幫我們處理大量無關緊要的小事情,讓我們可以迅速的開始寫程式碼-編譯-部署-測試-打包DApp這個流程。

(3) web3.js: Ethereum JavaScript API,web3.js 是一個庫的集合,它允許您使用HTTP或IPC連線與本地或遠端以太節點進行互動。(用來呼叫合約)

(4)React: React 是一個用於構建使用者介面的 JAVASCRIPT 庫。React主要用於構建UI。React 擁有較高的效能,程式碼邏輯非常簡單,越來越多的人已開始關注和使用它。

(5)Solidity語言: Solidity 是一個面向合約的高階語言,其語法類似於JavaScript 。是執行在以太坊虛擬機器中的程式碼。Solidity 是靜態型別的程式語言,編譯期間會檢查其資料型別。支援繼承、類和複雜的使用者定義型別。

(6)IDE:REMIX—Solidity web IDE,可以用來開發和測試

(7)以太坊測試網路:Kovan(PoA共識演算法,Proof of Authority,權威證明)

三、私有鏈搭建

1、安裝Geth、安裝nodejs、npm、truffle

(1)安裝Geth
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
geth --help 檢視是否安裝成功
(2)安裝nodejs、npm、truffle
cd  /opt

//下載到opt目錄下
wget https://nodejs.org/dist/v6.10.2/node-v6.10.2-linux-x64.tar.xz
tar -xvf node-v6.10.2-linux-x64.tar.xz -C /usr/local/

mv –f /usr/local/node-v6.10.2-linux-x64 /usr/local/node 
sudo ln -s /usr/local/node/bin/node /usr/bin/node
sudo ln -s /usr/local/node/lib/node /usr/lib/node
sudo ln -s /usr/local/node/bin/npm /usr/bin/npm

sudo npm install -g truffle 
sudo npm install -g ethereumjs-testrpc

sudo ln -s /usr/local/node/bin/testrpc /usr/bin/testrpc
sudo ln -s /usr/local/node/bin/truffle /usr/bin/truffle

//檢查是否安裝成功
truffle –version
testrpc 

2、搭建以太坊私有鏈並啟動節點互連

(1)建立儲存目錄
cd /opt
mkdir private-geth
cd /opt/private-geth
(2)建立創世紀區塊檔案
//建立創世紀區塊檔案,是一個json格式的檔案:
sudo gedit genesis.json
{
    "config": {
        "chainId": 7,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "coinbase" : "0x0000000000000000000000000000000000000000",
    "difficulty" : "0x40000",
    "extraData" : "",
    "gasLimit" : "0xffffffff",
    "nonce" : "0x0000000000000042",
    "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp" : "0x00",
    "alloc": { }
}
(3)初始化創世紀節點,並設定data目錄

注意:後面要用幾個節點就啟動幾個,修改00為01、02….

sudo geth --datadir ./data/00 init genesis.json
(4)啟動第一個節點(指定埠)
sudo geth --datadir ./data/00 --networkid 7 --port 30303 --rpc --rpcaddr "localhost" --rpcport 8200 	 -- "db,eth,net,web3,personal,admin,miner" console
(5)通過繼續輸入下面的命令獲取節點例項的enode url:
admin.nodeInfo.enode
(6)啟動第二個節點(指令除了修改埠號外,其他於啟動第一個節點相同)
sudo geth --datadir ./data/00 --networkid 7 --port 30304 --rpc --rpcaddr "localhost" --rpcport 8201 	 -- "db,eth,net,web3,personal,admin,miner" console
(7)連線到第一個節點
admin.addPeer(enode url)
(8)每個節點檢查
admin.peers
net.peerCount

3、基於Truffle框架的開發流程及請求呼叫流程

開發流程:
(1)cd 到工作目錄,建立dir
(2)cd 到dir中建立專案
 truffle unbox react
 create-react-app my-app(專案名稱,這個可以不用建立dir,它會自己建立)  
(3)下載ipfs-api(如果要用到)
	npm install –save ipfs-api
(4)寫入合約
(5)cd 到專案dir,編譯合約
//進入truffle控制檯
truffle develop
//編譯專案下合約 
compile
(6)利用web-IDE將合約部署到Kovan測試鏈上,這裡要複製好合約地址,app.js裡面會用到
(7)cd 到專案dir,啟動ipfs daemon
(8)配置ipfs跨域
(9)修改App.js,引入要的內容
(10)cd 到專案dir,利用npm start啟動專案
請求呼叫流程:
User——>UI APP->Web3.js->Dapps->P2P Network

4、程式碼實現

我主要實現了基於區塊鏈的ip\域名註冊,儲存,變更。現在轉做SDN,原先程式碼在舊電腦的虛擬機器裡面,所以不太確定有沒有把虛擬機器刪了,有的話再貼上。