若是你不喜欢浪费时间在开发环境的搭建上,可使用汇智网的在线教程: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" } }