万事开头来,无论是开发什么。首先就是搭建开发环境,今天尝试把自己搭建ethereum区块链开发环境的经验写出来,希望能对你有帮助。
说明
以太坊是一个开源的,能够部署和运行智能合约的提供去中心化的虚拟机,你可以把它理解为运行各种去中心化app的操作系统,最著名的应用就是比特币了。以太坊网络是由一个个节点组成的。然后,我们把自己写的智能合约部署到以太坊网络上去,以太坊的应用就是一个部署,操作,智能合约的程序。由于以太坊的公链对于我们开发程序来说太慢,所以首先需要先搭建一个以太坊的私有链。这过程中主要需要geth。
1.geth
首先需要安装geth,我们使用geth来创建私有链。
Mac平台
1.1 使用 Homebrew安装
brew tap ethereum/ethereum
brew install ethereum
1.2 从源码安装
git clone https://github.com/ethereum/go-ethereum
brew install go
cd go-ethereum
make geth
1.3 从网站下载命令行工具
https://ethereum.github.io/go-ethereum/downloads/
Windows平台
从下面网站下载windows平台
https://ethereum.github.io/go-ethereum/downloads/
Ubuntu平台
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
安装好geth之后,使用命令行
geth version
如果输出类似
Geth
Version: 1.7.3-stable
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.9
Operating System: darwin
GOPATH=
GOROOT=/usr/local/Cellar/go/1.9/libexec
表示安装成功
2.使用geth创建私有链
运行命令
mkdir enode1
mkdir enode2
分别创建两个文件夹,作为两个私有链节点的datadir
两个节点要能链接,必须是由同一个创始文件创建的链。
geth --datadir "enode1" init genesis.json
enode1是上文创建的文件之一, genesis.json是创世的配置文件
genesis.json如下
{
"coinbase" : "0x0000000000000000000000000000000000000001",
"difficulty" : "0x400",
"extraData" : "",
"gasLimit" : "4712388",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": {},
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
}
}
创建完成之后
使用命令
geth --identity "newEth" --rpc --rpccorsdomain "*" --datadir "enode1" --port 30303 --rpcapi "personal,db,net,eth,web3" --networkid 999 --rpcport 8080 console
我们可以看到这些信息
来启动另外一个节点
使用命令启动另外一个节点
geth --datadir "enode2" init genesis.json
geth --identity "newEth" --rpc --rpccorsdomain "*" --datadir "enode2" --port 30304 --rpcapi "personal,db,net,eth,web3" --networkid 999 --rpcport 8081 console
注意,两个节点不同的地点在datadir,port,rpcport。因为我们是在同一个计算机上运行两个节点,所以datadir,port,rpcport必须不同,如果不是在同一个计算机上则无所谓。
运行admin.peers
可以看到该节点并没有和任何节点链接
运行admin.addPeer('')添加另外一个节点,节点的地址enode://6b944fdc0a3460977e67682428b29cec7b28a400a2a5c3ef6b56673eb9f4abc8fe7316018c2073e43569ec63e6542eb7dc8b23cc93f397bc41a1f077b8cec6e4@[::]:30304就是上图我们enode2的节点地址。
我们再运行admin.peers看看
可以看到,两个节点已经运行在同一个链上。
好了,最重要的运行环境已经搭建完了,下一章我们试图部署一个智能合约。下一章地址