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后,然后开始安装,这玩意直接点点点,很快就好。

geth私有链的安装和使用_第1张图片

安装完成后就只有两个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。

在私有链中,chainId = 0 有可能会造成一些错误。

参数解释:

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私有链的安装和使用_第2张图片

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

三。一些基本操作

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

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

geth私有链的安装和使用_第3张图片

我们可以看到输入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();

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

 

你可能感兴趣的:(#,以太坊)