文档章节

3、Windows搭建以太坊的私有链环境

王坤charlie
 王坤charlie
发布于 2017/08/29 16:02
字数 1621
阅读 50
收藏 0

1、下载Geth.exe 运行文件,并安装

https://github.com/ethereum/go-ethereum/releases/

安装后,有一个geth.exe的文件。

2、cmd进入安装目录运行:

geth -help

看看是否可用geth命令。

3、创建创世块文件。

官方文档:https://github.com/ethereum/go-ethereum/wiki/Private-network

在任意目录新建创世块文件genesis.json(这里名字也可以是任意的),这里我在geth.exe的同级目录下。

{
   "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "nonce": "0x0000000000000042",
    "difficulty": "0x000000100",
    "alloc": {
        
    },
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "timestamp": "0x00",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "gasLimit": "2100000"
}

配置自己的创世块是为了区分公有链,同一个网络中,创世块必须是一样的,否则无法联通,此方法在windows和Ubuntu下通用。

 解释一下各个参数的作用:

config   :确保某些协议升级可立即可用。注意这里chainId表示自己的私链用的网络Id,标识了私链的网络。以太坊的主网是1。

gasLimit : 注意这个参数,和后面运行合约有很大关系。何如这个参数不够大,将会影响后面合约的部署。这里用官方例子的数值。

mixhash 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。.
nonce nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
difficulty 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
alloc 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。可以预设置账户余额,如下:
"alloc": {
        "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
        "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
    }
coinbase 矿工的账号,随便填
timestamp 设置创世块的时间戳
parentHash 上一个区块的hash值,因为是创世块,所以这个值是0
extraData 附加信息,随便填,可以填你的个性信息。必须是16进制数
gasLimit 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

 

 

4、初始化创世块。

创建数据存放地址并初始化创世块:

geth --datadir "./ethDev"  init  genesis.json

启动Geth即可以启动以太坊的区块链,为了构建私有链 ,需要在Geth启动时加入一些参数,Geth参数含义如下: 

identity

区块链的标示,随便填写,用于标示目前网络的名字

init

指定创世块文件的位置,并创建初始块

datadir

设置当前区块链网络数据存放的位置

port

网络监听端口

rpc

启动rpc通信,可以进行智能合约的部署和调试

rpcapi

设置允许连接的rpc的客户端,一般为db,eth,net,web3

networkid

设置当前区块链的网络ID,用于区分不同的网络,是一个数字

console

启动命令行模式,可以在Geth中执行命令

出现下面的successfully表示成功。

5、打开geth控制台。

也就是把控制台打开,上面创建好私有链后,把命令窗口关了,重新打开命令窗口。进行操作。

geth -datadir "./ethDev" --networkid 15 console

--networkid 15 这个参数区分打开的控制台是连接哪个网络如果不设置,就会直接连到以太坊的现有网络,而不是自己的网络。这里的15等于是我创世区块里面设置好的config里面的chainId的值。就是连接到我刚创建的私有链上了。

--nodiscover 如果不让其他节点连接你的节点。可以加上参数--nodiscover

6、创建账号。

personal.newAccount()

会提示输入密码,我输入:123456

生成后:

 查看一下系统有的用户。eth.accounts

为用户取一个别名.

  很显然如果操作上面的字符串地址是很不方面的,所以下面对字符串用户进行取别名,因为是js语言,所以可以直接使用,如下:把第一个账户命名为user1

user1 =  eth.accounts[0]

 对账户进行解锁。

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

对账户进行解锁的命令  personal.unlockAccount(user1,'123456')

7、下载打开图形化钱包。

https://github.com/ethereum/mist/releases/

下载解压缩后,Ethereum-Wallet即为以太坊图形化界面,打开Ethereum Wallet.exe。这个也是操作geth的图形化界面。和我们用命令差不多。解压后执行下面的exe文件。

 

8、连接其他节点。

首先要知道自己的节点信息,在Geth命令行界面下输入命令,注意大小写

admin.nodeInfo

 

其中

enode: "enode://e892fdb873202e3bec0a6816fe94c94469006b3570dd3c359b2e58375ff654
82cd653f9276615024c5d1908768f18ae2fbb03d58279bccd0f4ddbf554510838a@0.0.0.0:30303
"

就是自己节点的信息,注意要把“0.0.0.0“换成你自己的IP。将这个信息发送给其他节点,在其他节点的命令行中输入:

admin.addPeer(‘enode://e892fdb873202e3bec0a6816fe94c94469006b3570dd3c359b2e58375ff65482cd653f9276615024c5d1908768f18ae2fbb03d58279bccd0f4ddbf554510838a@192.168.1.101:30303’)

如果添加成功,输入admin.peers会显示出新添加的节点。

9、挖矿

开始挖矿miner.start()

结束挖矿miner.stop()

挖完矿之后,查询区块高度 eth.blockNumber。已经有了53个区块。

查看账户余额

挖矿完成后,查看账户余额,可以看到第一个账户有265个以太币。

查看有几个账户: eth.accounts

查看第一个账户的余额,单位是gas:eth.getBalance(eth.accounts[0]) 

查看第一个账户的余额,单位是eth: web3.fromWei(eth.getBalance(eth.accounts[0]),"ether")

创建另外一个账号,并解锁。

 personal.newAccount("123456")
personal.unlockAccount(eth.accounts[0])

 转账

注意。转账之前要先把账号解锁。

eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(3,"ether")})

装置并不是马上到账,需要开启挖矿程序。等挖矿程序确认这笔交易。

10、挖矿确认交易。

我们新开一个窗口用与挖矿,新开一个控制台,输入命令:geth attach 连接到控制台,执行miner.start(1),开始挖矿。挖矿默认是挖到第一个账户。我们查询第二个账户,明显已经收到了3个以太币的转账。

参考文章 http://blog.csdn.net/u012974916/article/details/52769783

http://www.cnblogs.com/lvzhanhui/p/lvzhanhui_solidity.html

http://blog.csdn.net/super_wu1992/article/details/76919308

http://blog.csdn.net/u013096666/article/details/72639906

© 著作权归作者所有

下一篇: 2、安装Solidity
王坤charlie
粉丝 5
博文 198
码字总数 55881
作品 0
东城
程序员
私信 提问
加载中

评论(1)

梨涡浅笑崇明了
梨涡浅笑崇明了
您好,看到您的文章质量非常高,想邀请您成为虫洞社区的首批优质内容签约作者。虫洞社区是专业的区块链技术学习社区。虫洞社区鼓励内容生产者产生高质量内容,并给予合理的回报,也希望能帮助内容消费者获得高质量的区块链内容,并让数字货币投资者获得有价值的投资洞见。同时,虫洞社区已经积累了大量的区块链深度从业者,便于作者建立个人品牌。不知道是否方便加您微信细聊?
简述智能合约--基于交付的项目

最近刚交付的一个区块链项目。 这个是基本的智能合约的需求方案: • 建材尤其是大宗交易,订货,交割问题。 • 智能合约,解决卖家信用 “假一赔十”,基于智能合约,自动进行赔付。用户无法...

王文刚MVP
2018/08/12
0
0
书上得来终觉浅,绝知此事要躬行-以太坊平台实战篇

网上和书上的教程大多是在私有链单机CPU挖矿的情况,遗漏了实战环境中遇到的问题。接下来一步步的阐述实战经验,并结合理论分析。 有些概念先介绍下 transactionHash:交易的流水号,转账和执...

phil_code
2018/05/08
0
0
搭建基于以太坊的私有链环境

零、概述 版本号:Ubuntu-16.04 ethereum-1.6.0-stable go - 1.7.4 一、Ubuntu下安装geth sudo apt-get install software-properties-commonsudo add-apt-repository -y ppa:ethereum/ether......

战狐
2017/05/02
0
0
区块链 100 讲:区块链的 3 个阶段和 4 种分类

在前面几期《区块链100讲》我们介绍了区块链的一些基本概念,也知道区块链至今为止经历了 3个阶段。发展到现在,根据不同的划分标准,可以将区块链分为不同的类别,本期我们将重点介绍区块链...

yanyan
2018/07/10
0
0
《锋哥论道区块链》之五区块链2.0之以太坊--多节点私有链搭建

我们在服务器A上创建并启动了私有网络,但是当前只有一个节点,接下来我们将服务器B这个节点加入的私有网络中,构成多节点私有网络。具体操作如下。 1 go-ethereum安装与配置 在服务器B上安装...

区块链颠覆世界
05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

堆”和“栈

C++作为一款C语言的升级版本,具有非常强大的功能。它不但能够支持各种程序设计风格,而且还具有C语言的所有功能。我们在这里为大家介绍的是其中一个比较重要的内容,C++内存区域的基本介绍。...

SibylY
12分钟前
2
0
总结:Https

一、介绍 简单理解,https即在http协议的基础上,增加了SSL协议,保障数据传输的安全性。 它由以前的http—–>tcp,改为http——>SSL—–>tcp;https采用了共享密钥加密+公开密钥加密的方式 ...

浮躁的码农
15分钟前
2
0
数据库表与表之间的一对一、一对多、多对多关系

表1 foreign key 表2 多对一:表 1 的多条记录对应表 2 的一条记录 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 表2的多条记...

Garphy
46分钟前
6
0
MySQL 表崩溃修复

MySQL日志报错 2019-10-19 13:41:51 19916 [ERROR] /usr/local/mysql/bin/mysqld: Table './initread_hss/user_info' is marked as crashed and should be repaired2019-10-19 13:41:51 1......

雁南飞丶
56分钟前
6
0
Error和Exception

1.Error类和Exception类都是继承Throwable类 2.Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问...

大瑞清_liurq
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部