以太坊区块链学习之搭建私链

初学者了解以太坊,最好的办法之一就是先搭建一条私链,在上面创建账户,部署合约,并试着与之交互。当完成了这一系列步骤后,对在以太坊上进行应用开发,就是顺理成章的事情了。

开发需要

geth客户端,本篇是基于MacOS10.12的操作系统,建议使用Mac或者装有unbuntu的电脑进行开发,其实如果要长期学习区块链的话,不建议使用Windows。

第一步

创建一个genesis.json文件,内容如下:

[plain] view plain copy
  1. {  
  2.   "config": {  
  3.         "chainId": 10,  
  4.         "homesteadBlock": 0,  
  5.         "eip155Block": 0,  
  6.         "eip158Block": 0  
  7.     },  
  8.   "coinbase"   : "0x0000000000000000000000000000000000000000",  
  9.   "difficulty" : "0x2000",  
  10.   "extraData"  : "",  
  11.   "gasLimit"   : "0x8000000",  
  12.   "nonce"      : "0x0000000000000042",  
  13.   "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",  
  14.   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",  
  15.   "timestamp"  : "0x00",  
  16.   "alloc": {}  
  17. }  

如果你是初次接触区块链,不必对文件中的内容感到困惑,更不用被他们吓到,当你完成了私链的搭建,并在其上完成了创建账户、挖矿、部署合约以及与之交互的工作后,再回过头看这份JSON文件,你就会明白其中许多键值对的含义了。在后续的博客中,我会进行解释。

第二步
打开终端,创建一个目录,把JSON文件放入该目录

[plain] view plain copy
  1. mkdir privateNet  
  2. mv 你的genesis.json privateNet/  
  3. cd privateNet  

第三步
创建创世区块。

[plain] view plain copy
  1. geth --datadir "./" init genesis.json  

以太坊区块链学习之搭建私链

--datadir "./"指定私链数据存放的文件夹位置,init初始化genesis.json,创建创世区块。如果执行成功,在终端大致会是这个样子
同时,查看你指定的存放私链数据的文件夹,会多出两文件夹geth、keystore。这两个文件夹是干什么用的呢?geth文件夹下用来存放私链的相关数据,keystore文件夹下存放的是该链的用户信息。在围绕私链的一系列动作完成后,你会有所理解。

第四步

创建私链

[plain] view plain copy
  1. geth --datadir "./"  console 2>>geth.log  

console 2>>geth.log 将私链的日志打印到geth.log中,在你的存放私链的文件夹里你会找到该文件,另开一个终端,来到geth.log所在目录,执行命令:

[plain] view plain copy
  1. tail -f geth.log  

你将在这个终端中实时的看到私链的状况。

至此,私链已经搭建完成。当然,我们应该体验一把辛苦搭建的私链

创建账户

回到之前创建私链的那个终端,可以看到,此时的终端处于待输入状态,输入

[plain] view plain copy
  1. eth.accounts  

将会返回[],此时的私链还没有账户,输入

[plain] view plain copy
  1. personal.newAccount("password")  

回车后会返回一串hash,返回的hash代表创建账户的地址,这条命令中的password代表该账户的密码,可以随意指定。这是再输入eth.accounts将会返回刚刚创建的账户的地址,根据返回值我们可以知道,账户以数组形式存在,因此我们输入eth.accounts[0],也会返回刚刚创建账户的地址。

查询账户余额
输入

[plain] view plain copy
  1. eth.getBalance(eth.accounts[0])  

返回值为账户余额,此时账户余额为0。

挖矿
听到挖矿,第一反应肯定是,挖币赚钱,没错,接下来我们也要挖出我们的“以太币”,来“赚钱”了!输入:

[plain] view plain copy
  1. miner.start(1)  

返回值会为true或者null,这都没什么影响,查看另一个终端,会看到有块正在生产。命令中的参数1代表只用当前机器的一块处理器进行挖矿,如果不输入参数,默认是“全力挖矿”,这样电脑会很容易发热。
以太坊区块链学习之搭建私链

在geth终端再次输入

[plain] view plain copy
  1. eth.getBalance(eth.accounts[0])  

会返回一长串数字,这些数字就是你在过去几秒或者几分钟内挖出的币,如果这是真的以太币,那你在过去几秒已经赚取了不菲的财富了!你可能会疑惑,为什么几秒钟的功夫就能够得到这么多币呢?这是因为你产生了足够多的区块。那为什么产生区块的速度这么快呢?这是因为,在最开始我们的genesis.json文件中,有一项叫做

[plain] view plain copy
  1.   
[plain] view plain copy
  1. "difficulty" : "0x2000"  

这一项用来控制我们挖矿的难度,我们设置的难度“偏低”,大家可以改变它的值,重新搭建私链试试。

至此,你已经掌握了私链的搭建以及创建账户、查看余额、挖矿的工作了,下一篇博客将讲述如何在这个私链上部署合约并与之交互。

当然,别忘了停止挖矿:输入指令:

[plain] view plain copy
  1. miner.stop()  

返回true,挖矿停止。



原文发布时间为:2018年02月06日
本文作者:FlyingApe
本文来源:CSDN,如需转载请联系原作者。

上一篇:Flex结合java实现一个登录功能


下一篇:php curl 分离header和body信息