引言
你需要知道區塊鏈的概念及實現一個無需信任的電子貨幣的運作原理。可以先看看長版,如果你覺得太長,可以看看短版。
你需要準備什麼
一個 docker 環境, 還有…… 沒了
注:Mac下docker整合了docker-compose,其他系統需要安裝docker-compose
開發環境架構
- Ganache:以太坊測試網路, 使用Ganache,您可以快速檢視應用程式如何影響區塊鏈,並反應您的帳戶,餘額,合同建立和Gas等詳細資訊。
- Geth:在以太坊智慧合約開發中最常用的工具(必備開發工具),一個多用途的命令列工具。
- Truffle:Truffle是Dapp開發框架,他可以幫我們處理掉大量無關緊要的小事情,讓我們可以迅速開始寫程式碼-編譯-部署-測試-打包DApp這個流程。
一步搭建智慧合約開發環境
$ git clone --branch v1.0 --depth=1 https://github.com/gengxiankun/dockerfiles.git &&\
docker-compose -f dockerfiles/ethereum/ethereum-stack-compose.yml up -d
複製程式碼
由於需要分別構建(ganache/geth/truffle)三個容器,請耐心等待。 執行成功後,檢視以太坊容器:
$ docker-compose -f dockerfiles/ethereum/ethereum-stack-compose.yml ps
Name Command State Ports
-------------------------------------------------------------------------
ganache docker-entrypoint.sh Up 0.0.0.0:7454->7454/tcp, 9454/tcp
geth /usr/sbin/init Up
truffle /usr/sbin/init Up
複製程式碼
可以看到,truffle、ganache及geth容器均已執行,證明環境搭建成功了!
瞭解docker-compose.yaml檔案再進行開發
以上,我們可以看出構建了三個容器來分別執行ganache、geth及truffle。通過dockerfiles/ethereum/ethereum-stack-compose.yml
來看一下它們是如何相互運作的:
$ cat dockerfiles/ethereum/ethereum-stack-compose.yml
version: '2'
services:
ganache:
container_name: ganache
build: ./Ganache/
expose:
- "7454"
ports:
- "7454:7454"
environment:
- NETWORKID=6
- PORT=7454
restart: always
truffle:
container_name: truffle
build: ./Truffle/
volumes:
- ~/data/ethereum/:/data/
working_dir: /data
links:
- ganache:ganache
restart: always
geth:
container_name: geth
build: ./Geth/
restart: always
links:
- ganache:ganache
複製程式碼
可以看到,Ganache開放出了network_id
為6,埠
是7454的以太坊網路介面
triffle及geth通過docker內部鏈路links
連線ganache服務,直接訪問host為ganache
無序指定IP,比如truffle的網路配置及geth連線:
#truffle.js
module.exports = {
networks: {
development: {
host: "ganache",
port: 7454,
network_id: "6" // Match any network id
}
}
};
#geth連線本地ganache網路
$ docker exec -it geth geth attach http://ganache:7454
Welcome to the Geth JavaScript console!
instance: EthereumJS TestRPC/v2.1.0/ethereum-js
coinbase: 0xd08734d6ca10a2acb464d26ed033df08dd93acc3
at block: 0 (Sun, 15 Apr 2018 03:54:12 UTC)
modules: eth:1.0 evm:1.0 net:1.0 personal:1.0 rpc:1.0 web3:1.0
>
複製程式碼
truffle容器的工作目錄/data
與本地的~/data/ethereum
目錄掛載,執行truffle初始化,可以看到本地同步了容器的程式碼:
$ docker exec -it truffle truffle init
$ cd ~/data/ethereum
$ tree
.
├── contracts
│ └── Migrations.sol
├── migrations
│ └── 1_initial_migration.js
├── test
├── truffle-config.js
└── truffle.js
3 directories, 4 files
複製程式碼
如此,便可方便的在本地使用IDE開發智慧合約了!