最近在开发一个基于Ethereum区块链的应用,于是上网搜索资料,发现网上资料太少,由于这项技术在国内较少人研究,许多问题都无法找到答案,我将这两天自己的总结写出来,希望能帮到大家。
首先我们要下载以太坊的客户端工具,我参考的是网上的视频《明说》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进行验证
接下来我们安装testrpc
testrpc不同于geth,geth是真正的以太坊环境,testrpc是在本地使用内存模拟的一个以太坊环境,对于开发调试来说更为方便快捷,当你的合约在testrpc中测试通过后再部署到geth中去
根据网上的教程我们安装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,网上搜到这样一条命令
按照命令操作以后果然回退到2.x的版本(npm执行非常慢,大家一定要有耐心)
兴高采烈的执行 truffle init命令(重新新建一个空的文件夹)
果然没有问题生成了app、contracts、migrations、test、truffle.js这几个文件
接着执行
结果
实在没办法了,弄个框架就这么麻烦吗
好在最后在https://bitshuo.com/topic/58a55366598da39107dd7e81中找到解决方法
其实好多人从3.x版本回退到2.x版本后都遇到和我一样的问题,解决的方法让我崩溃,升级到3.x版本但是在项目文件夹中执行
抱着试试看的态度执行
1.安装truffle
1.1 安装git和npm
1.3安装solc和solc-cli
1.4安装solc二进制包
2 执行truffle命令
2.1新建项目文件夹
本文快速搭建了一个以太坊的环境,并进一步探索了账户操作,转账,挖矿等操作,其中主要参考了汪晓明老师的教程。
2、搭建基于以太坊的私有链环境 - http://blog.csdn.net/sportshark/article/details/51855007
3、区块链开发环境搭建总结 - http://blog.csdn.net/wjx342529/article/details/70148987