geth私有链的安装和使用

本文详细介绍了如何使用go-Ethereum (geth) 构建以太坊私有链,包括安装配置、创世块设置、基本操作如挖矿、转账等,并解释了关键参数的作用。

一。geth说明

Ethereum 就是以太坊,以太坊有各种语言的客户端,其中最为成熟的就是go语言和Ruby的客户端,其中go客户端称为go-Ethereum,简称geth

二。安装

geth有windows版本和linux版本,官方网站还是比较慢的,卡的根本下载不了,这里选择了国内的wIndows镜像

镜像地址:https://ethfans.org/wikis/Ethereum-Geth-Mirror

下载好windons的镜像geth-windows-amd64-1.8.3-329ac18e.exe后,然后开始安装,这玩意直接点点点,很快就好。

安装完成后就只有两个exe,然后你需要新建一个文件夹privatechain,随意起名,这文件夹里以后包含的就是私有链的数据。

由于最开始需要配置第一个区块,所以还需要再建一个genesis.json的创世块的文件,文件如下:

{
  "config": {
        "chainId": 10,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x20000",
  "extraData"  : "",
  "gasLimit"   : "0x2fefd8",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
}

这个是官方的例子,但是这里修改了一个config.chainId,官方给出的是0.这里修改了为10,不要和一些常用链有关哦。

参数解释:

coinbase    矿工的账号

difficulty    设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度

extraData   附加信息,随便填

gasLimit     该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和

nonce       就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block                     Header Validity, (44)章节所描述的条件。

mixhash    与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow                    paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。

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

timestamp   设置创世块的时间戳

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

接下来对privatechain进行初始化,cd到当前文件夹执行cmd命令:

geth --datadir "D:\eth\PrivateChain" init "D:\eth\genesis.json"

初始化完成,privatechain文件夹里新增加了内容,然后启动geth

geth --datadir "D:\eth\PrivateChain" --port 30303 --networkid 10 --nodiscover  console

这个已经启动成功了,可以看到我们接着进入到了geth控制台,可以进一步输入一些命令了。

三。一些基本操作

personal.listAccounts         会出现[],表示还没有账号

personal.newAccount("123") 输入密码创建账号

我们可以看到输入123,就创建得到了地址。但是同一个密码接着创建又得到了不同的地址。这是因为私钥及地址的创建跟密码实在是没有多大关系,只是施加了稍微一些不同的影响。

此时我们现在有两个地址了。

我们来查下第一个地址的余额

eth.getBalance(eth.accounts[0])

或者

eth.getBalance("0x2b2a162a9a8ca0ee8a3ac2650e71401ca839db25")

查询发现都是0

接下来

开始挖矿:miner.start();

停止挖矿miner.stop()

挖矿时挖来的钱默认的是放到了创建的第一个账号的地址,注意首次挖矿之前需要加载一些东西到100%,会比较慢。

停止成功后会返回 true

然后我们可以再次查询eth.getBalance(eth.accounts[0]),会发现第一个账户钱就很多了。

转账:

在转账之前需要暂时解锁转出账户,否则会报错(在真实生产中有多种方法可以进行转账,本次只演示这一个):

personal.unlockAccount(eth.accounts[0]),这个操作只能解锁300秒好像,300秒后还必须再次解锁。

紧接着我们账户1向账户2转账了1

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

你敲了上行命令后再次查询余额时发现没有变,为什么呢?

这是因为转账这个操作在私有链里必须得挖矿才能实际上转入,所以开始挖矿去miner.start();

然后再次查询或者停止挖矿后查询就会发现已经转入成功了。有的同学可能发现还没有成功,不要急,接着挖,过会儿就转账了。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值