一、什么是区块链
区块链(Blockchain)的概念于 2008 年在中本聪的论文《比特币:一种点对点的电子现金系统(Bitcoin: A Peer-to-Peer Electronic Cash System)》中首次提出。区块链可以理解为一种公共记账的机制(技术方案),它并不是一款具体的产品。其基本思想是:通过建立一组互联网上的公共账本,由网络中所有的用户共同在账本上记账与核账,来保证信息的真实性和不可篡改性。而之所以名字叫做‚区块‛链,顾名思义,是因为区块链存储数据的结构是由网络上一个个“存储区块”组成一根链条,每个区块中包含了一定时间内网络中全部的信息交流数据。随着时间推移,这条链会不断增长。
区块链按照访问和管理权限可以分为:公有链(Public Blockchain)、私有链(Private Blockchain)、联盟链(Consortium blockchain)。
以下是三种区块链的介绍:
1、公有链(Public blockchains) 公共区块链是指全世界任何人都可读取的、任何人都能发送交易且交易能获得有效确认的、任何人都能参与其中共识过程的区块链——共识过程决定哪个区块可被添加到区块链中和明确当前状态。作为中心化或者准中心化信任的替代物,公共区块链的安全由“加密数字经济”维护——“加密数字经济”采取工作量证明机制或权益证明机制等方式,将经济奖励和加密数字验证结合了起来,并遵循着一般原则:每个人从中可获得的经济奖励,与对共识过程作出的贡献成正比。这些区块链通常被认为是“完全去中心化”的。 2、联盟链(Consortium blockchains) 联盟区块链是指其共识过程受到预选节点控制的区块链;例如,不妨想象一个有15个金融机构组成的共同体,每个机构都运行着一个节点,而且为了使每个区块生效需要获得其中10个机构的确认(2/3确认)。区块链或许允许每个人都可读取,或者只受限于参与者,或走混合型路线,例如区块的根哈希及其API(应用程序接口)对外公开,API可允许外界用来作有限次数的查询和获取区块链状态的信息。这些区块链可视为“部分去中心化”。 3、私有链(Private blockchains) 完全私有的区块链是指其写入权限仅在一个组织手里的区块链。读取权限或者对外开放,或者被任意程度地进行了限制。相关的应用囊括数据库管理、审计、甚至一个公司,尽管在有些情况下希望它能有公共的可审计性,但在很多的情形下,公共的可读性并非是必须的。
二、动手搭建自己的私有区块链
本次将介绍如何在CentOS 6上搭建以太坊私有链。
1
操作系统准备
我使用的操作系统是CentOS 6.5。
[root@localhost ~]# cat /etc/redhat-release CentOS release 6.5 (Final)
2
golang安装
1)安装yum源:
[root@localhost ~]# rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
2)安装golang:
[root@localhost ~]# yum install golang
3
下载以太坊源代码
[root@localhost ~]# mkdir /opt/software
[root@localhost ~]# cd /opt/software
[root@localhost software]# wget https://github.com/Jackge1979/go-ethereum/archive/v1.7.3.zip
4
安装以太坊
[root@localhost software]# unzip v1.7.3.zip
[root@localhost software]# ls
go-ethereum-1.7.3 v1.7.3.zip
[root@localhost software]# cd go-ethereum-1.7.3
[root@localhost go-ethereum-1.7.3]# pwd
/opt/software/go-ethereum-1.7.3
输入make进行编译
[root@localhost go-ethereum-1.7.3]# make
编译成功。
进入go-ethereum-1.7.3/build/bin子目录。
可以看到在该子目录下生成的 geth 这可执行文件。
这样,我们的以太坊就安装完成了。
5
创世区块文件的准备
在go-ethereum-1.7.3/build/bin目录下,创建init.json的文本文件:
[root@localhost bin]# vi init.json
{ "config": { "chainId": 10, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc": {}, "coinbase": "0x0000000000000000000000000000000000000000", "difficulty": "0x02000000", "extraData": "", "gasLimit": "0x2fefd8", "nonce": "0x0000000000000042", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" }
6
创世区块初始化
在go-ethereum-1.7.3/build/bin目录下,执行以下命令以完成创世区块的创建:
[root@localhost bin]# ./geth --datadir "/opt/chain" init init.json
这样,创世区块就初始化完成了。
7
启动以太坊
执行的以下命令启动以太坊:
[root@localhost bin]# ./geth --rpc --rpccorsdomain "*" --datadir "/opt/chain" --port "30303" --rpcapi "db,eth,net,web3" --networkid 100000 console
一直到出现Welcome to the Geth JavaScript console! 句话,并自动进入geth的命令行则说明以太坊私有链安装成功了。
到目前为止,我们的私有链就搭建成功了。