搭建区块链技术开发和运行环境(二)

版权声明:本文为EnweiTech原创文章,未经博主允许不得转载。 https://blog.csdn.net/English0523/article/details/79581410

最近在开发一个基于Ethereum区块链的应用,于是上网搜索资料,发现网上资料太少,由于这项技术在国内较少人研究,许多问题都无法找到答案,我将这两天自己的总结写出来,希望能帮到大家。

概述
目前Hyperledge fabric的开发环境是使用一个运行在Vagrant里的Ubuntu映像,并在里边依次运行若干Docker容器。 从概念上说,就是在一个主机上启动了一个虚拟机,然后在其上依次启动Docker容器。
Host -> VM -> Docker
这个模型允许开发者利用他们自己喜欢的操作系统和编辑器来开发,与此同时呢,又可以让系统运行在一个与开发团队一致的受控环境中。
  • 注:你的主机不能运行在虚拟机中。如果你尝试运行在虚拟机中,会得到一个条启动错误信息(VT-x不可用)。

准备项
  • Git client
  • Go - 1.6 or later
  • Vagrant - 1.7.4 or later
  • VirtualBox - 5.0 or later
  • 在BIOS中打开虚拟化(Virtualization)选项
注:Note: 虚拟化(Virtualization)选项一般在BIOS的CPU或安全设置中。
步骤
设置GOPATH环境变量
请确保你正确设置了你主机上的GOPATH环境变量. 正确设置了之后,你就能够在主机和虚拟机上构建代码了。

首先我们要下载以太坊的客户端工具,我参考的是网上的视频《明说》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]

 

如果你在查看user1.则如下,已经成功赋值
图片名称

4.对账户进行解锁,为了安全起见,一般一个用户在创建的时候都是出于锁定的状态,有日志状态可以看到,如下

ehcoo

对账户进行解锁的命令

1
personal.unlockAccount(user2,'123456')

 

开始挖矿

挖矿的过程,主要是对miner这个全局变量进行操作
ehcoo

开始之前我们检查一下账户user1和user2的金额,你会发现两者的金额都为0

1
2
eth.getBalcance(user1)
eth.getBalcance(user2)

开始挖矿,命令如下:

1
miner.start()

 

停止挖矿命令:

1
miner.stop()

 

开始挖矿后台输出挖矿日志:
ehcoo

运行一会后你去查看用户的账户金额

ehcoo

发现第一个账户中已经含有金额。也就是说默认是挖到了第一个账户中。

转账测试

现在我们模拟从第一个账户像第二个账户转账的命令

1
eth.sendTransaction({from:user1,to:user2,value:8})

 

ehcoo

需要说明的是转账后,账户2并没有立即收到钱,而在是挖矿之后才收到的,主要原因是当前的交易还没有并入到区块链中,我们从日志中可以获取相关信息

ehcoo

像地址0x0b52…写的的交易0xab24..,在区块8中才写入,我们可以查看区块8进行验证

ehcoo


下面是客户端操作的一些命令

查看账户余额:eth.getBalance(user1)
查看当前的区块号:eth.blockNumber()
打开日志:tail -f file_to_log_output(新窗口中打开)
挖矿命令:miner.start()
停止挖矿:miner.stop()

转账命令:eth.sendTransaction({from :user1,to:user2,value:web3.toWei(3,"ether")})
此时执行挖矿命令会报错因为user1时默认锁定的,我们应该先解锁账户

personal.unlockAccount("0xshbfksugfksjb24sfsd","123456")//参数分别是账户和密码

之后重新执行转账命令,转账需要挖矿进行确认


在上述操作完成之后我开始搭建ethereum中一个框架truffle,这个框架安装整整花费我3天的时间才完成,基本上所有的问题都在这上面,所以我重点描述这方面

首先安装truffle之前我们要先安装nodejs和npm(git在后面的安装中会用到,必须安装)

安装命令         
[plain]  view plain  copy
  1. <span style="font-size:18px;">        sudo apt-get install git  
  2.         sudo apt-get install nodejs-legacy  
  3.         sudo apt-get install npm</span>  



注意:我们安装的nodejs和npm必须是较新的版本,不然在之后安装truffle的时候会出问题,下面提供升级的方法

升级版本
   
[plain]  view plain  copy
  1. <span style="font-size:18px;">    sudo npm cache clean -f  
  2.     sudo npm install -g n  
  3.     sudo n stable</span>  

安装solc和solc-cli
   
[plain]  view plain  copy
  1. <span style="font-size:18px;">    sudo npm install -g solc solc-cli --save-dev</span>  



因为我们要在geth中使用solidity编译,所以还要安装solc二进制包

   
[plain]  view plain  copy
  1. <span style="font-size:18px;">    sudo add-apt-repository ppa:ethereum/ethereum  
  2.     sudo apt-get update  
  3.     sudo apt-get install solc</span>  


接下来我们安装testrpc

testrpc不同于geth,geth是真正的以太坊环境,testrpc是在本地使用内存模拟的一个以太坊环境,对于开发调试来说更为方便快捷,当你的合约在testrpc中测试通过后再部署到geth中去


安装testrpc
  
[plain]  view plain  copy
  1. <span style="font-size:18px;">      sudo npm install -g ethereumjs-testrpc</span>  

安装truffle
  
[plain]  view plain  copy
  1. <span style="font-size:18px;">      sudo npm install -g truffle</span>  

可能遇到的问题:truffle安装失败的概率很高,还会报很多错误
解决办法:使用淘宝镜像安装可顺利安装

[plain]  view plain  copy
  1. <span style="font-size:18px;">npm config set registry https://registry.npm.taobao.org  
  2. npm install -g truffle  
  3. 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 版本
[plain]  view plain  copy
  1. <span style="font-size:18px;">npm install -g [email protected] (编译过程出现其他问题)</span>  


卸载 后重新安装
[plain]  view plain  copy
  1. <span style="font-size:18px;">npm uninstall truffle  
  2. <span>npm install -g truffle@~2.1.1 (解决上述问题)</span>  
  3. </span>  

按照命令操作以后果然回退到2.x的版本(npm执行非常慢,大家一定要有耐心)

兴高采烈的执行 truffle init命令(重新新建一个空的文件夹)

果然没有问题生成了app、contracts、migrations、test、truffle.js这几个文件

接着执行

[plain]  view plain  copy
  1. <span style="font-size:18px;">truffle compile</span>  



结果

Could not find expected contract or library in ‘ConvertLib.sol’: contract or library ‘ConvertLib’ not found.
Compilation failed. See above.

实在没办法了,弄个框架就这么麻烦吗


好在最后在https://bitshuo.com/topic/58a55366598da39107dd7e81中找到解决方法


其实好多人从3.x版本回退到2.x版本后都遇到和我一样的问题,解决的方法让我崩溃,升级到3.x版本但是在项目文件夹中执行


[plain]  view plain  copy
  1.   
[plain]  view plain  copy
  1. <span style="font-size:18px;">truffle init webpack</span>  


抱着试试看的态度执行


[plain]  view plain  copy
  1. sudo npm install -g truffle  


将版本升级到3.x之后执行


[plain]  view plain  copy
  1. 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


[plain]  view plain  copy
  1. sudo apt-get install git  
  2. sudo apt-get install nodejs-legacy  
  3. sudo apt-get install npm  

 1.2 升级版本

[plain]  view plain  copy
  1. sudo npm cache clean -f  
  2. sudo npm install -g n  
  3. sudo n stable  


1.3安装solc和solc-cli


1.4安装solc二进制包
    

[plain]  view plain  copy
  1. sudo add-apt-repository ppa:ethereum/ethereum  
  2. sudo apt-get update  
  3. sudo apt-get install solc  


1.5安装testrpc
    
[plain]  view plain  copy
  1. sudo npm install -g ethereumjs-testrpc  

1.6安装truffle
    
[plain]  view plain  copy
  1. sudo npm install -g truffle  

1.7  控制台输入truffle得到相应的提示则说明成功



2 执行truffle命令
   2.1新建项目文件夹

[plain]  view plain  copy
  1. mkdir  linux  


2.2进入文件夹中
[plain]  view plain  copy
  1. cd linux  


3.3执行一系列命令
[plain]  view plain  copy
  1. truffle init  webpack  

[plain]  view plain  copy
  1. <span style="font-size:18px;"></span>  

truffle compile




testrpc(在新的控制台窗口中执行)

[plain]  view plain  copy
  1. <span style="font-size:18px;"></span>  


truffle migrate




npm run dev



至此操作结束,打开浏览器输入 localhost:8080就能看到期望的转账demo界面

总结

本文快速搭建了一个以太坊的环境,并进一步探索了账户操作,转账,挖矿等操作,其中主要参考了汪晓明老师的教程。

[参考文档]
1、区块链开发环境搭建_百度文库 https://wenku.baidu.com/view/1bc7901932687e21af45b307e87101f69e31fbb6.html

2、搭建基于以太坊的私有链环境 -  http://blog.csdn.net/sportshark/article/details/51855007

3、区块链开发环境搭建总结 -  http://blog.csdn.net/wjx342529/article/details/70148987

猜你喜欢

转载自blog.csdn.net/English0523/article/details/79581410