Geth搭建私有链

1.安装geth客户端
输入命令:
sudo add-apt-repository -y ppa:ethereum/ethereum  #启动PPA储存库
sudo apt-get update  #访问源列表里的每个网址,并读取软件列表,然后保存到电脑

sudo apt-get install ethereum #安装Go Ethereum


2.安装完成后检查
利用命令 geth version,检查是否安装成功


3.建立目录和genesis.json
mkdir tmpPrivate
cd tmpPrivate/
vim genesis.json
(如果没有vim命令,可以安装,如图)


vim genesis.json


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

用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的

时候自己创建即可以。

coinbase

矿工的账号,随便填

timestamp

设置创世块的时间戳

parentHash

上一个区块的hash值,因为是创世块,所以这个值是0

extraData

附加信息,随便填,可以填你的个性信息

gasLimit

该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

常遇到的几个错误:

  • Fatal: invalid genesis file: missing 0x prefix for hex data:这个错误信息意思很明白,就是你的json文件中,对于16

  • 进制数据,需要加上0x前缀

  • Fatal: invalid genesis file: hex string has odd length: 从v1.6开始,设置的十六进制数值,不能是奇数位, 比如不能是

  • 0x0,而应该是0x00。

  • Fatal: failed to write genesis block: genesis has no chain configuration :这个错误信息,就是说,你的json文件中,

  • 缺少config部分。看到这个信息,我们不需要把geth退回到v1.5版本,而是需要加上config部分。

  • Error: invalid sender undefined: 这个错误不会导致初始化失败,但是会在以后的转账(eth.sendTransaction),或者

  • 部署智能合约的时候产生。解决方法就是chainId 不能设置为0。 如果你完全按照github上给的官方配置文件,就会产

  • 生这个错误。


4.执行命令,创建创世区块
geth --datadir "./" init genesis.jso n

注意:
这时候可以注意一下,此时当前目录下面会新增出两个文件夹geth和keystore
geth中保存的是区块链的相关数据
keystore中保存的是该链条中的用户信息


5.启动,创建自己的私有链条

geth --datadir "./" --nodiscover console 2>>geth.log

注意:

–datadir 代表文件夹地址,

--nodiscover 表示私有链不要让公网上的节点发现

其中的代码 console 2>> geth.log 代表将控制台的一部分输出,输出到文件geth.log上

去。



打开另一个终端,找到geth.log的所在目录,执行命令 tail -f geth.log 从而持续的输出以太坊的日志

6.在自己的私有链上创建用户
输入命令eth.accounts, 我们会发现返回值为[]
这是因为此时虽然以太坊的私有链已经被创造出来,但还没有任何账户。


输入命令personal.newAccount("xxx"), 该命令将创造一个新的用户,该用户的密码是xxx. 当然用户也可以将xxx 改为123,或者123456,或者任意密码
再次输入命令 eth.accounts, 我们会发现一个新的用户被创建了出来,这就代表我们已经创建了一个账户,重复personal.newAccount() & eth.accounts 我们可以创建若干个账户出来

7.挖矿

在命令行中执行命令 miner.start(), 开始在我们的区块链上进行挖矿



注意:


1. 挖矿挖到的ether币会默认保在第一个账户中,即eth.acccounts[0]中。


2. 挖矿是执行智能合约的基础。如果停止挖矿的话,不仅以太币会停止生成,所有智能


合约的调用也会不起作用。


3. 如果真的要停止挖矿,可以执行命令miner.stop()来停止挖矿


4. 按上面的命令,应该是可以实现以太坊挖矿的。如果不行的话,有可能就是之前有存


在的链,此时应该删除之前的数据。在Mac下即删除~/.ethash文件夹和里面的文件即可


5挖矿启动后,查看主账户的以太币数量

acc0 = eth.accounts[0]

eth.getBalance(acc0)


执行命令 tail -f geth.log 从而持续的输出以太坊的日志,生成区块的日志记录截图:



8.交易

每个账户的公钥(地址)是一切以太坊账户操作的核心,但地址字符串太长,我们用ac

c0/acc1 分别代表accounts[0]和[1],另外设置要转移0.01个以太币。


使用eth.sendTransaction来将0.01个以太币从acc0转移到acc1中。

acc0 = eth.accounts[0]

acc1 = eth.accounts[1]

amount = web3.toWei(0.01)

eth.sendTransaction({from: acc0, to: acc1, value: amount})

截图:


注意:

1.之所以交易时报错,是因为

这个是以太坊的一个保护机制,每隔一段时间账户就会自动锁定,这个时候任何以太币在账户之间的转换都会被拒

绝,除非把该账户解锁.

这个时候我们就需要执行 personal.unlockAccount(acc0) 并输入密码来解锁acc0才可。(如上图)

2.输入完交易的命令,我立即就查看acc1余额,发现是0!!!

这是因为交易提交未被处理,我们可以通过这可以通过查看txpool.status来验证,如果我们看到pending:1,pending表

示已提交但还未被处理的交易;

要使交易被处理,必须要挖矿。(如上图,我开启了挖矿)

这个成功转账的截图(但第一次查看仍然是0):




博文地址 : http://m.blog.csdn.net/vinsuan1993/article/details/75208203


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值