以太坊上搭建自己的私有链

  首先介绍一下什么是公有链和私有链

公有链:世界上任何一个人都可以参与的区块链。用户可以查看,可以发送交易,也可以参与保持数据一致性的运算等。

私有链:完全的私有链是指写权限是由一个人或一个单个组织控制的链。私有链的读权限是可以公开的或者是有限度的在一定范围公开的。比如私有链可以用在数据库的管理,公司内部的管理等。

联盟链:联盟链是指,数据一致性的运算被预先设定好的几个节点共同控制的链。比如,有15家银行组成了一个财团链,在这个链上的每一个节点的每一次的操作都需要10个节点的共同签名才能被验证。这区快链上的读权限可能是公开的,也有可能是部分公开的。


这genesis(创世)区块是区块链的起点,是它的第一块区块,0号区块,唯一一个没有前任的区块。这个协议确保了没有其他节点会和你的节点的区块链版本一致,除非它们的创世区块和你的一模一样。通过这种方法,你就可以创建任意多的私有区块链。

如:CustomGenesis.json
{

    "nonce": "0x0000000000000042",  

   "timestamp": "0x0",

 "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",

    "extraData": "0x0", 

    "gasLimit": "0x8000000",   

    "difficulty": "0x400",

"mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",

    "coinbase": "0x3333333333333333333333333333333333333333",  

   "alloc": {     }

}

Mix hash
一个256位的哈希值,和nonce配合,一起用来证明在区块链上已经做了足够的计算量(工作证明)。这个nonce 和 mixhash 的组成,必须满足一个在黄皮书中所描述的数学上的条件,黄皮书 4.3.4。
Nonce
一个64位的哈希值,和mixhash配合,一起用来证明在区块链上已经做了足够的计算量(工作证明)
Difficulty
定义挖矿的目标,可以用上一个区块的难度值和时间戳计算出来,值越高,矿工越难挖到区块
Alloc 预先填入一些钱包和余额
Coinbase
160位的钱包地址。在创世区块中可以被定义成任何的地址,因为当每挖到一个区块的时候,这个值会变成矿工的etherbase地址
Timestamp  一个unix的time()函数的输出值,时间戳
extraData  32字节长度,可以为私有链留下一些信息,如你的姓名等,用以证明这个私有链是你创建的

gasLimit   当前链,一个区块所能消耗的gas上限


创建私有链中用到的命令行参数

--nodiscover
添加这个参数,确保没有人能发现你的节点。不然的话,可能有人无意中会链接到你的私有区块链。

--maxpeers 0

使用maxpeers 0,如果你不希望其他人连接到您的测试链。当然,您也可以调整这个数,如果你知道有多少同伴会连接你的节点

--rpc

在你的节点上激活RPC接口。这参数在geth中默认启用。

--rpcapi "db,eth,net,web3"

这个命令描述哪些接口可以通过RPC来访问,默认情况下,geth开启的是web3接口。

--rpcport "8080"

将端口号设置成8000以上的任何一个你网络中打开的端口。默认是8080。

--rpccorsdomain http://chriseth.github.io/browser-solidity/

设置可以连接到你的节点的url地址,以执行RPC客户端的任务。最好不要使用通配符 * ,这样将允许任何url都可以链接到你的RPC实例。

--datadir "/home/TestChain1"

私有链的数据目录,确保与公共以太坊链的数据目录区分开来。

--port "30303"

这是“网络监听的端口”,您可以用它手动的和你的同伴相连。

--identity "TestnetMainNode"

为你的节点设置一个ID。用于和你们的一系列同伴进行区分。


接下来来创建自己的私有链

用cmd打开命令行

创建上面的创世区块文件CustomGenesis.json,并把内容paste进去,如:


然后创建自己的目录文件,如:F:\chains\TestChain3 ,然后需要在此文件里再创建一个chaindata的子文件夹,把创建的创世区块文件CustomGenesis.json放进去里面。然后在cmd指令中,输入

geth --identity "mydev" --rpc --rpccorsdomain "*" --datadir "F:\chains\TestChain3\chaindata" --rpcapi "db,eth,net,web3,admin,miner,personal,rpc" --networkid 100 init "./CustomGenesis.json"

或者我们可以创建一个init.bat文件,把上面的命令行语句放进去


输入好后在命令行窗口上按回车运行,或者直接双击这个init.bat文件,私有链就创建了。

然后,为了方便下次打开私有链,我们再创建一个start.bat文件,在里面输入


然后我们双击运行,出现


表示启动成功,然后运行我们的Mist客户端,出现


注意右上角有个PRIVATE-NET的标志,表示是私有链,然后LAUNCH进去客户端,我们就进入私有链了。

进去之后我们可以创建几个新账户,


在 F:\chains\TestChain3\chaindata\keystore 上可以看到这些账户


然后来挖一下矿,在上面运行start.bat后的命令行窗口(注意运行时不要关闭),输入miner.start(),其开始挖矿



就表示开始挖到矿了,返回我们的Mist客户端,可以看到账户的以太币数量不断增加


我们可以在这个创建的这些账户之间进行以太币交易操作,或者构建上一篇讲的多重钱包签名合约,但由于是在私有链上,所以要使交易运行完成,就要就是挖矿,将这些交易进行打包成区块加入到区块链上。

大家可以操作玩玩,这主要是在一台主机上,下面再讨论一下如何在两台主机加入到同一私有链中,然后进行交易操作。



阅读更多

更多精彩内容