搭建区块链技术开发和运行环境(二)
最近在开发一个基于Ethereum区块链的应用,于是上网搜索资料,发现网上资料太少,由于这项技术在国内较少人研究,许多问题都无法找到答案,我将这两天自己的总结写出来,希望能帮到大家。概述目前Hyperledge fabric的开发环境是使用一个运行在Vagrant里的Ubuntu映像,并在里边依次运行若干Docker容器。 从概念上说,就是在一个主机上启动了一个虚拟机,然后在其上依次启动Docke
最近在开发一个基于Ethereum区块链的应用,于是上网搜索资料,发现网上资料太少,由于这项技术在国内较少人研究,许多问题都无法找到答案,我将这两天自己的总结写出来,希望能帮到大家。
- 注:你的主机不能运行在虚拟机中。如果你尝试运行在虚拟机中,会得到一个条启动错误信息(VT-x不可用)。
- Git client
- Go - 1.6 or later
- Vagrant - 1.7.4 or later
- VirtualBox - 5.0 or later
- 在BIOS中打开虚拟化(Virtualization)选项
首先我们要下载以太坊的客户端工具,我参考的是网上的视频《明说》http://ethcast.com/v1,由于我对这方面没有任何的基础完全按照视频的内容进行操作下载的是go语言的客户端。
推荐其他方法:hyperledger 区块链 环境搭建与测试 - https://www.jianshu.com/p/f0b569097ed4
环境搭建
本次的以太坊环境是用go语言开发,虚拟机内部运行的是javascript. 可能有人不太理解,举个例子,java虚拟机本身就是用c开发的(windows平台上),但是运行在虚拟机之上运行的是java语言。
环境准备
一台能联网的Ubuntu64位机器(已经安装git),如果是其他机器类型,请参考其他安装教程,点我
开始安装
两种安装方式,任意选择一种(建议使用第一种):
第一种使用 Personal Package Archives 直接安装,命令如下:
1
2
3
4
|
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
|
第二种安装方式,使用源码安装,自己用go语言进行编译,命令如下:
1.下载源码
1
|
git clone https://github.com/ethereum/go-ethereum
|
2.安装go的运行环境,参考本文
3.绑定运行环境到go
1
|
sudo apt-get install -y build-essential golang
|
4.进入到源码目录中,开始编译源码
1
2
|
cd go-ethereum
make geth
|
5.运行
1
|
build/bin/geth
|
初步探索
进入虚拟机并输出日志
1
|
get --dev console 2>> geth-log
|
全局变量
其中有一些是全局变量,你可以认为是javascript的全局变量,全局变量拥有自己的方法和函数。
如下eth变量:
如下的的personal变量:
下面对用户操作,对矿机的操作,转账操作,挖矿操作,实际都在运用这些全局变量中的参数,然后穿上适当的方法。
账户操作
1.创建新账户
1
|
personal.newAccount('123456')
|
创建成功后,会展示创建成功的地址,其中上面的表达式中,中间传入的123456为密码
2.查看一下系统有的用户
1
|
eth.accounts
|
因为我之前有个用户,所以在有两个用户
3.为用户取一个别名,很显然如果操作上面的字符串地址是很不方面的,所以下面对字符串用户进行取别名,因为是js语言,所以可以直接使用,如下:
1
2
|
user1 = eth.accounts[0]
user2 = eth.accounts[1]
|
4.对账户进行解锁,为了安全起见,一般一个用户在创建的时候都是出于锁定的状态,有日志状态可以看到,如下
对账户进行解锁的命令
1
|
personal.unlockAccount(user2,'123456')
|
开始挖矿
开始之前我们检查一下账户user1和user2的金额,你会发现两者的金额都为0
1
2
|
eth.getBalcance(user1)
eth.getBalcance(user2)
|
开始挖矿,命令如下:
1
|
miner.start()
|
停止挖矿命令:
1
|
miner.stop()
|
运行一会后你去查看用户的账户金额
发现第一个账户中已经含有金额。也就是说默认是挖到了第一个账户中。
转账测试
现在我们模拟从第一个账户像第二个账户转账的命令
1
|
eth.sendTransaction({from:user1,to:user2,value:8})
|
需要说明的是转账后,账户2并没有立即收到钱,而在是挖矿之后才收到的,主要原因是当前的交易还没有并入到区块链中,我们从日志中可以获取相关信息
像地址0x0b52…写的的交易0xab24..,在区块8中才写入,我们可以查看区块8进行验证
在上述操作完成之后我开始搭建ethereum中一个框架truffle,这个框架安装整整花费我3天的时间才完成,基本上所有的问题都在这上面,所以我重点描述这方面
首先安装truffle之前我们要先安装nodejs和npm(git在后面的安装中会用到,必须安装)
- <span style="font-size:18px;"> sudo apt-get install git
- sudo apt-get install nodejs-legacy
- sudo apt-get install npm</span>
注意:我们安装的nodejs和npm必须是较新的版本,不然在之后安装truffle的时候会出问题,下面提供升级的方法
- <span style="font-size:18px;"> sudo npm cache clean -f
- sudo npm install -g n
- sudo n stable</span>
- <span style="font-size:18px;"> sudo npm install -g solc solc-cli --save-dev</span>
- <span style="font-size:18px;"> sudo add-apt-repository ppa:ethereum/ethereum
- sudo apt-get update
- sudo apt-get install solc</span>
接下来我们安装testrpc
testrpc不同于geth,geth是真正的以太坊环境,testrpc是在本地使用内存模拟的一个以太坊环境,对于开发调试来说更为方便快捷,当你的合约在testrpc中测试通过后再部署到geth中去
- <span style="font-size:18px;"> sudo npm install -g ethereumjs-testrpc</span>
- <span style="font-size:18px;"> sudo npm install -g truffle</span>
- <span style="font-size:18px;">npm config set registry https://registry.npm.taobao.org
- npm install -g truffle
- ln -s /usr//local/nodejs/node-v7.0.4/bin/truffle /usr/local/bin/truffle</span>
根据网上的教程我们安装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 版本
- <span style="font-size:18px;">npm install -g truffle@2.1.1 (编译过程出现其他问题)</span>
- <span style="font-size:18px;">npm uninstall truffle
- <span>npm install -g truffle@~2.1.1 (解决上述问题)</span>
- </span>
按照命令操作以后果然回退到2.x的版本(npm执行非常慢,大家一定要有耐心)
兴高采烈的执行 truffle init命令(重新新建一个空的文件夹)
果然没有问题生成了app、contracts、migrations、test、truffle.js这几个文件
接着执行
- <span style="font-size:18px;">truffle compile</span>
结果
实在没办法了,弄个框架就这么麻烦吗
好在最后在https://bitshuo.com/topic/58a55366598da39107dd7e81中找到解决方法
其实好多人从3.x版本回退到2.x版本后都遇到和我一样的问题,解决的方法让我崩溃,升级到3.x版本但是在项目文件夹中执行
- <span style="font-size:18px;">truffle init webpack</span>
抱着试试看的态度执行
- 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
- <span style="font-size:18px;"></span>
truffle compile
testrpc(在新的控制台窗口中执行)
- <span style="font-size:18px;"></span>
truffle migrate
npm run dev
至此操作结束,打开浏览器输入 localhost:8080就能看到期望的转账demo界面
总结
本文快速搭建了一个以太坊的环境,并进一步探索了账户操作,转账,挖矿等操作,其中主要参考了汪晓明老师的教程。
2、搭建基于以太坊的私有链环境 - http://blog.csdn.net/sportshark/article/details/51855007
3、区块链开发环境搭建总结 - http://blog.csdn.net/wjx342529/article/details/70148987
更多推荐
所有评论(0)