文章目录

  • 一、前期准备
  • 二、安装goland环境
  • 三、安装go版本的以太坊源码,并编译
  • 四、私有链搭建
  • 五、私有链节点加入
  • 六、部署智能合约
  • 七、参考链接

一、前期准备

  1. 安装更新相关组件
 sudo yum update -y && yum install git wget bzip2 vim gcc-c++ ntp epel-release nodejs cmake -y


  1. 在自己喜欢的目录下执行以下操作。这里作者在/opt/module下新建了一个blockchain文件夹,所有操作在该文件夹下进行。
 cd /opt/modulemkdir blockchain

  1. 安装VSCode
## install key and repository
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
## update
yum check-update
sudo yum install code

  1. 输入code,会出现软件界面

二、安装goland环境

  1. 获取资源包
wget https://studygolang.com/dl/golang/go1.7.3.linux-amd64.tar.gz

  1. 解压,解压后多了一个go目录
tar -zxvf go1.7.3.linux-amd64.tar.gz

  1. 下面配置环境变量
vi ~/.bashrc
export GOPATH=/opt/module/blockchain/Go
export GOROOT=/opt/module/blockchain/go
export PATH=$PATH:$GOROOT/bin


注意: 圈出部分根据自己下载的路径灵活修改,如果用这种方式出错,应该是没有安装bashrc相关的组件,直接在etc/profile中修改,效果一样。

三、安装go版本的以太坊源码,并编译

  1. 获取资源,通过这个步骤,blockchain文件夹下面又多一个go-ethereum
git clone https://github.com/ethereum/go-ethereum.git


  1. 进入到go-ethereum,分别执行以下命令
git checkout v1.7.2
make geth
make all


  1. 配置geth的环境变量,然后查看版本号确认安装成功 环境变量的配置,文件vi ~/.bashrc。(sudo vi
    /etc/profile和下面命令效果一样,profile属于全局)
vi ~/.bashrc

  1. 查看版本信息,确认是否配置成功
geth version

geth -h

出来一大堆信息,也证明配置成功了。

  1. 安装配置cmake环境,智能合约编译需要cmake。为了方便后续环境配置,避免各种权限问题,这里还是先新建一个文件夹,在blockchain文件夹下新建cmake:
mkdir cmake
  1. 进入到cmake目录下,下载安装相关组件
cd cmake/
wget https://cmake.org/files/v3.12/cmake-3.12.3.tar.gz


  1. 解压
tar -zxvf cmake-3.12.3.tar.gz


  1. 进入到cmakr-3.12.3
cd cmake-3.12.3/

注意: 这个时候进行安装,会一直出错,下面先进行下面的操作,避免错误的发生。

先修改默认安装路径,找到图片中内容,默认路径修改一下。

 vi bootstrap

  1. 安装(这时候应该就不会出错了)
sudo ./bootstrap && make && make install

如果使用这个命令安装出错,分别执行下面命令

sudo ./bootstrap
sudo make
sudo make install


至此,应该就可以安装成功了。

  1. 添加环境变量
vi ~/.bashrc

  1. 刷新使其生效
 source ~/.bashrc

  1. 查看是否配置成功
cmake -version

  1. 关闭防火墙,如果之前关闭过,可以跳过这一步
systemctl stop firewalld
systemctl disable firewalld
  1. 时钟同步
systemctl enable ntpd
systemctl start ntpd

至此,环境准备完毕,下面可以开始搭建私有链

四、私有链搭建

  1. 在blockchain目录下,创建一个文件夹,用来存放我们的私有链相关信息,自己命名,灵活修改。
 mkdir blockchain-test-1

  1. 进入到新建的目录下 cd blockchain-test-1。初始化一个创世区块(也就是私有链的第一个区块,区块链中之后的区块,都是接着这块向下添加的)新建一个文件:
touch genesis.json

vi genesis.json

添加以下内容:

{  "nonce": "0x0000000000000042",  "timestamp": "0x00",  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",  "extraData": "0x00",  "gasLimit": "0x80000000",  "difficulty": "0x400",  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",  "coinbase": "0x2D356ee3F5b8718d8690AFCD31Fe2CB5E602677e",  "alloc": {},  "config": {  "chainId": 15,  "homesteadBlock": 0,  "eip155Block": 0,  "eip158Block": 0  }
}
  1. 初始化创世区块节点信息
geth --datadir node0 init genesis.json

  1. 执行geth的控制台,将输出重定向到geth.log中
geth --datadir node0 console 2>> geth.log

  1. 新建账号、查看账号及账号余额
personal.newAccount(“111111”)
personal.newAccount(“222222”)

新建了两个账户,111111,222222分别是两个账户的密码。

  1. 查看挖矿的账户、当前区块数等

  1. 发起交易、查看交易池状态等,另开一个终端窗口,查看日志信息
tail -f geth.log

刚开始两个账号金额都是0,两个账户额度都是0,此时是不能交易的,先挖矿,让accounts[0]有点币,一般开启挖矿默认将挖到的币存入到accounts[0]中,也可以使用miner.setEtherbase(eth.accounts[1])设置coinbase为账户1,这里不执行这个操作,就用默认的,让accounts[0]中有点钱

  1. 启动挖矿后,第一次启动会很慢(可能五六七八…分钟),稍等一会
 miner.start(3)

当出现successfully时,说明挖到了,再查看账号accounts[0]时,已经有金额了

可以观察到每次挖到一个新的区块都需要经历四个阶段。分别是commit new mining work => successfully sealed new block => block reached canonical chain => mined potential block,即先提交要打包某个区块的任务,然后成功打包该区块,该区块接到主链上(主链最后一个区块号一般会比当前的目标区块小一些,因为有分叉),成功完成挖矿。每条记录后面的number指明的是当前挖矿的目标区块序号。

现在accounts[0]有额度了
从accounts[0]向accounts[1]转账
先解锁accounts[0],否则会报错

personal.unlockAccount(eth.accounts[0])

eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:999999)


执行挖矿以完成交易

miner.start(3)

3是线程数,自己根据情况写

另一个终端日志显示

tail -f geth.log


挖矿未完成之前,accounts[1]额度还是0

等了几分钟,日志出现了successfully,看一下交易是否完成了

查看资源池状态,可以看见pending从1变成0,再看accounts[1]是不是转进了999999

txpool.status
eth.getBalance(eth.accounts[1])

此时accounts[1]已经有一笔交易进入,金额999999,和预期效果一样。

好了,交易完成,停止挖矿吧

miner.stop


注: 只要实际上有在挖矿,start返回null或true都无所谓。

五、私有链节点加入

  1. 新建一个节点并初始化
 geth --datadir node1 init genesis.json

  1. 启动上一个节点(node0节点)的rpc服务,并把网络id设置成2018,其他不设置(默认rpc端口8545,监听端口30303,ip地址127.0.0.1)
geth --datadir node0 -networkid 2018 -rpc console 2>> geth.log


另开一个终端(作为node1节点)启动新节点的rpc服务,把网络id设置成2018(要相同),rpc的端口默认8545,节点监听的端口默认是30303,这两个端口都被上一个节点占用了(因为我是在一台机器上),因此这个新节点的这两个端口都要手动设置(我这里分别设成8546和30304),ip地址仍是默认。

geth --datadir node1 -networkid 2018 -rpc -rpcport 8546 -port 30304 console 2>> geth.log


查看新节点的enode,并拷贝

admin.nodeInfo.enode


在另一个终端上(node0的终端上),进入上一个节点的console,加入新节点(注意,这里复制的内容会不一样,看生成的是什么就复制什么,不要复制这个)

admin.addPeer("enode://d0c1d8ac14393a00151585bd4c93a251cf682d503a13ed222ce55009d7200640f5ecd9baefaac5e818caf23cbcd0bbd2290b5c02fc4bb110a79ef5259ae5a686@[::]:30304")


出现上图,说明连接成功。

六、部署智能合约

编写合约,使用remix,谷歌浏览器打开这个网站 https://remix.ethereum.org/#optimize=false
官方在线编译器:
https://ethereum.github.io/browser-solidity
https://remix.ethereum.org

pragma solidity ^0.4.18;
contract Test{string public name;function Test() public {name = "zch";}function getName() public view returns (string) {return name;}function setName(string _name) public {name = _name;}
}


• 点击complie Test.sol
• 点compliation Details找到WEB3DEPLOY一项,拷贝里面的代码

• 将上述代码直接黏贴进console,或者可以保存在某个js文件中再load进来(比较优雅)。如果报错说没有unlock则需要先解锁一个账户。

personal.unlockAccount(eth.accounts[0])


然后开始挖矿进行部署,否则合约实例的address是undefined。

miner.start()



另一个终端查看日志

tail -f geth.log


停止挖矿,调用合约。

test.getName.call()


其他操作和交易时是一样的,交易前记得解锁账户,产生交易后记得挖矿。

写操作
• 为该节点设置默认账户,这样在调用set函数时就会自动让你付款。这种方法适用于只有一个账户的节点或者只有一个账户经常使用的多账户节点。

eth.defaultAccount=eth.accounts[0]


调用setName()

test.setName("ch")

执行后,查看名字还是原来的,因为写操作需要通过矿工对链做出更改和同步,有代价,所以要启动挖矿,挖矿结束后再次查看,发现名字已经修改过来了。最后停止挖矿。


七、参考链接

https://blog.csdn.net/Wonderful_sky/article/details/83898257

https://www.cnblogs.com/yunxintryyoubest/p/10640260.html

Linux环境下搭建区块链私有链+部署智能合约相关推荐

  1. 如何在linux环境下搭建Tor代理服务器

    如何在linux环境下搭建Tor代理服务器 一.简介 首先, Tor官方提供已不再提供单独的Tor内核下载,只提供集成了Tor内核的Tor-Browser下载.Tor Browser 内置了Tor,f ...

  2. qt5.9支持linux,Linux环境下搭建Qt5.9开发环境

    在Linux环境下搭建Qt开发环境有两种方式:一种是图形界面的安装,另一种是源代码的安装.下面,分别就这两种安装方式进行说明. 一.图形界面的安装. 1. 在QT官网下载Qt安装包,这里下载最新(20 ...

  3. Windows环境下安装HBase(Hadoop3.1.3、HBase2.2.5)与Linux环境下搭建HBase高可用集群

    Windows环境下安装HBase 下载HBase 官网: https://hbase.apache.org/downloads.html 不同版本集合:https://archive.apache. ...

  4. 在Linux 环境下搭建 JDK 和 Tomcat

    参考地址(华华老师):http://www.cnblogs.com/liulinghua90/p/4661424.html [在Linux环境下安装JDK] 1.首先下载一个JDK版本 官网地址:ht ...

  5. 【Rhapsody学习笔记(二)】Linux环境下的Rhapsody集成引擎安装部署

    Rhapsody的安装部署包括Rhapsody引擎的部署(服务端),以及Rhapsody IDE(客户端)的安装部署,其中,IDE可以安装在多台不同的windows客户机上,本文仅介绍CentOS7环 ...

  6. Linux环境下搭建Apache服务器(完整版)

    Linux下搭建Apache服务器(完整版) 什么是Apache? Apache Licence是著名的非盈利开源组织Apache采用的协议.该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权, ...

  7. Windows和Linux环境下搭建SVN服务器

    --------------------------Windows下搭建SVN服务器----------------------------- 一.安装SVN服务端 软件包Setup-Subversi ...

  8. Linux环境下搭建Tomcat+mysql+jdk

    Linux环境 1.下载并安装一个VMware workstation, 这个是虚拟机的平台(自行度娘下载~),虚拟机是在后面要在里面搭建Linux系统. 2.下载一个centos安装包,linux版 ...

  9. 转载:linux环境下搭建discuz论坛

    今天写一个Linux下搭建Discuz论坛的全过程教程. 本例使用的Linux系统为:RHEL5.3. 1.[root@linux ~]# mkdir /mnt/cdrom 2.[root@linux ...

最新文章

  1. java项目集成mybatis_JAVA应用程序单独集成Mybatis使用Demo
  2. python3精要(42)-异步生成器
  3. 【软考-软件设计师】汇编程序基本原理
  4. 使用JSONP,jQuery的ajax跨域获取json数据
  5. SVM原理以及Tensorflow 实现SVM分类(附代码讲了一下原理)
  6. localtunnel:本地端口的服务映射到公网
  7. 前端学习(2653):对比vue2中的实现
  8. 新架构让数据中心犹如PC
  9. python网络爬虫系列教程_Python网络爬虫系列教程连载 ----长期更新中,敬请关注!...
  10. 曲线拟合最小二乘法对数c语言实现,数值计算_第6章曲线拟合的最小二乘法
  11. python基础教程百度云-python从入门到精通视频教程百度云资源
  12. Docker容器系列教程(三):jenkins环境搭建与插件安装
  13. php 横杠箭头,为什么我的箭头下面有一横线?
  14. 多元线性回归实现代码
  15. 初识XUL用户界面UI开发
  16. 前端encodeURI , decodeURI对字符串编码解码 , 以及把url中的%0A %20解码成换行和空格
  17. LinkedIn Camus实践及踩坑记录
  18. 关于 nodejs-websocket 的 wss 设置
  19. 【论文速递】CVPR2022-Blind2Unblind:具有可见盲点的自监督图像去噪
  20. 减肥服务APP开发详细内容

热门文章

  1. 百度手机卫士精准定位伪基站
  2. .native是什么?
  3. 【机器学习】什么是决策树模型?如何去构建决策树?何时使用决策树?何时使用神经网络?
  4. paddlenlp Windows本地搭建语义检索系统
  5. 仿360网站广告实现换肤特效
  6. 安装蓝鲸智云社区版5.0.4监控页面调用接口失败
  7. 第二章 网站开发基础之HTML教程 - 二、常用HTML标签:frameset,框架集(块级元素)
  8. winform控件之BindingNavigator
  9. Towards Universal Object Detection by Domain Attention翻译
  10. 梯度下降法(GD、SGD、BGD、MINI-BGD)