ethereum私有链部署

本篇主要给开发人员阅读,要了解以太坊,区块链等概念基本知识,网络上搜索下就好。本篇进行私有链部署,当然你也可以直接在以太坊的测试链上进行,就省去私有链部署过程。

工具

我们需要如下客户端:

geth(以太坊节点客户端):

通过geth可以加入一个以太坊链,也可以建立一个自己的私有链然后加入。

mist(依托geth的图形化钱包管理客户端):

可在钱包中进行账户管理及合约操作并测试

链元数据(创世块)

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

{ "alloc": { "bd2d69e3e68e1ab3944a865b3e566ca5c48740da": { "balance": "4000000000000000000000000000000" }, "ca9f427df31a1f5862968fad1fe98c0a9ee068c4": { "balance": "5000000000000000000000000000000" } }, "nonce": "0x0000000000000042", "difficulty": "0x060000", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x0000000000000000000000000000000000000000", "timestamp": "0x00", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "missummerwillenyuan", "gasLimit": "0x4c4b40" }

 

参数

描述

mixhash

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

nonce

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

difficulty

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

alloc

用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。

coinbase

矿工的账号,随便填

timestamp

设置创世块的时间戳

parentHash

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

extraData

附加信息,随便填,可以填你的个性信息

gasLimit

该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

步骤

1.使用命令行通过geth 设置创世区块及区块链保存目录

[bath]geth –datadir “C:\Users\zhouwr\AppData\Roaming\Ethereum\willenchain” init genesis.json [/bath]

2.通过geth 启动该区块链

[bath]geth –identity “willenetherum” –rpc –rpccorsdomain “*” –datadir “C:\Users\zhouwr\AppData\Roaming\Ethereum\willenchain” –port “30303” –rpcapi “db,eth,net,web3″ –networkid 95518 console[/bath]

上面的步骤一个区块链已经创建成功,那么我们加入账号使用他们

账号

添加账号,当然测试用,我们就把创始分配有以太币的账号加进来

[bath]geth –datadir “C:\Users\zhouwr\AppData\Roaming\Ethereum\willenchain”  account import ca9f427df31a1f5862968fad1fe98c0a9ee068c4.key[/bath]

使用如下脚本查看账号

[bath]geth -datadir “C:\Users\zhouwr\AppData\Roaming\Ethereum\willenchain” account list[/bath]

或者启动区块链后使用如下命令查看账号:

[bath]eth.accounts[/bath]

当然同时我们可以使用图形化钱包来查看账号

参数

描述

identity

区块链的标示,随便填写,用于标示目前网络的名字

init

指定创世块文件的位置,并创建初始块

datadir

设置当前区块链网络数据存放的位置

port

网络监听端口

rpc

启动rpc通信,可以进行智能合约的部署和调试

rpcapi

设置允许连接的rpc的客户端,一般为db,eth,net,web3

networkid

设置当前区块链的网络ID,用于区分不同的网络,是一个数字

console

启动命令行模式,可以在Geth中执行命令

nodiscover

禁止被网络中其它节点发现,需要手动添加该节点到网络

verbosity

打印详细的日志信息

图型化钱包及交易

可以启动钱包Ethereum-Wallet-win64-0-8-5了,我们可以看到有个主账户并有好多ether,现在我们在钱包中新建一个账户,然后主账户转账1000ether给新建的账户,输入密码之后我们看到状态是确认中,那么我们需要在geth的命令行界面启动挖矿命令:miner.start(),将该笔交易记录到区块中,因为我们设置的挖矿难度很低,所以开启后看到挖出几个区块之后我们要停止挖矿,miner.stop(),不然会浪费好多区块,再回到图形化钱包,我们已经看到新账户已经到账ether 了。

网络

使用VirtualBox创建以太windows 7虚拟机,然后重复第一个节点的创建步骤在虚拟机上部署geth和以太坊钱包,同样需要初始化文件hdgenesis.json(同一个文件拷贝一份),并运行初始化命令,然后再运行启动命令,启动之后运行admin.nodeInfo.enode命令获取新节点的enode信息,然后在第一个节点上运行 admin.addPeer(enode URL)来添加新节点,注意将enode URL中[::]替换为新节点的IP地址,添加成功后运行admin.peers命令即可查看对等节点信息。

至此,一套基于geth的本地简单私有网络创建完成,可以在这套环境上进行简单的智能合约创建和测试。

智能合约

基本上,现今我们的应用创新场景有如下可行的:

底层创新:基本上是区块链算法上的创新,如修改一下共识机制之类的创新。

平台创新:Baas,区块链即服务,就是能够帮助企业快速部署一条私有链,将链作为服务提供给需要的企业。

场景创新:再一条固定的以太坊区块链上,将可行的应用场景引入进来,解决一些问题,比如信息保密需求,工作量确认并不可抵赖等需求场景,然后根据场景建模数字化成响应的智能合约,就创建了不同场景的应用,解决了问题,提供人们服务。

我觉得个人可以尝试的就是场景创新,虽然这个门框比较低,但是抓住历史机会也是会成功的,因为过了一段时间再看,虽然技术门槛是低,但是进入时间恰当的话,经过时间积累,会形成其他壁垒,如用户习惯,服务质量,大众效应。

 

部署使用过程参考https://my.oschina.net/stevex/blog/746669

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>