区块链发展背景:码农的区块链:搭建一个私有链环境!

  最近在研究区块链。打算先搭建一个测试环境开始运行。这里记录整个搭建过程,供后来人参考。整体上,分为三个步骤,安装相关软件,初始化系统,建立集群,以及最后一步,挖矿。我们采用的是以太坊,相对其他区块链,这是一个成熟的环境。虽然近期有硬分支的事件,对企业应用来说,功能上还算是比较完善的。

  安装部署

  1、安装Go环境

  如果机器无法上外网,还得配置一下代理。Ubuntu配置代理的方式网上很多,这里不介绍。

  curl-Ohttps://storage.googleapis.com/golang/go1.5.1.linux-amd64.tar.gz

  tar-C/usr/local-xzfgo1.5.1.linux-amd64.tar.gz

  mkdir-p~/go;echo"exportGOPATH=$HOME/go">>~/.bashrc

  echo"exportPATH=$PATH:$HOME/go/bin:/usr/local/go/bin">>~/.bashrc

  source~/.bashrc

  2、安装ethereum

  sudoapt-getinstallsoftware-properties-common

  sudoadd-apt-repository-yppa:ethereum/ethereum

  sudoadd-apt-repository-yppa:ethereum/ethereum-dev

  sudoapt-getupdate

  sudoapt-getinstallethereum

  在执行sudoadd-apt-repository-yppa:ethereum/ethereum的时候碰到这个问题:

  :~#sudoadd-apt-repository-yppa:ethereum/ethereum

  CannotaddPPA:'ppa:ethereum/ethereum'.

  PleasecheckthatthePPAnameorformatiscorrect.

  按照AskUbuntu的意见,修改为:

  sudoapt-getinstallsoftware-properties-common

  sudo-Eadd-apt-repository-yppa:ethereum/ethereum

  sudo-Eadd-apt-repository-yppa:ethereum/ethereum-dev

  sudoapt-getupdate

  sudoapt-getinstallethereum

  3、安装solc编译器

  sudoadd-apt-repositoryppa:ethereum/ethereum-qt

  sudoadd-apt-repositoryppa:ethereum/ethereum

  sudoapt-getupdate

  sudoapt-getinstallcpp-ethereum

  同样的,如果碰到PPAName错误的警示,则执行如下操作:

  sudo-Eadd-apt-repositoryppa:ethereum/ethereum-qt

  sudo-Eadd-apt-repositoryppa:ethereum/ethereum

  sudoapt-getupdate

  sudoapt-getinstallcpp-ethereum

  这样相关软件已经安装完毕。

  搭建私链

  1、启动geth服务

  geth--datadir"/root/chain"console

  其中datadir用于指定数据目录。这个目录不能够预先创建,否则命令会失败。执行结果如下:

  

  2、创建账号

  执行之后,进入geth的交互模式。接着建立一个账号,然后退出。这个账号用于执行创世操作。然后exit退出

  >personal.newAccount("密码");

  "0xea5c99831c2e4a0e094facdbac1befcf6c92e543"

  >exit

  3、创建创世区块

  编译创建创世区块所需要的脚本,注意alloc下的key需要和上述的账号保持一致。

  {

  "alloc":{

  "0xea5c99831c2e4a0e094facdbac1befcf6c92e543":{

  "balance":"1000"

  }

  },

  "nonce":"0x0000000000000042",

  "difficulty":"0x020000",

  "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",

  "coinbase":"0x0000000000000000000000000000000000000000",

  "timestamp":"0x00",

  "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",

  "extraData":"CNNMoneyJackMainterview:Warsstartwhentradestops,20160902",

  "gasLimit":"0xffffffff"

  }

  各个参数的含义如下:

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

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

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

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

  coinbase:矿工的账号,随便填

  timestamp:设置创世块的时间戳

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

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

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

  创建数据存放地址并初始化创世块

  geth--datadir"/root/chain"initgenesis.json

  执行结果如下:

  4、启动私链

  执行如下脚本

  geth--identity"phoenix"--rpc--rpccorsdomain"*"--datadir"/root/chain"--port"30303"--rpcapi"db,eth,net,web3"--networkid98888console

  各参数说明如下:

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

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

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

  port:网络监听端口,默认是8080

  rpc:启动rpc通信,可以进行智能合约的部署和调试。它在geth中通常被默认激活。

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

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

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

  此外,还可以使用如下参数:

  nodiscover:使用这个命令可以确保你的节点不会被非手动添加你的人发现。否则,你的节点可能被陌生人的区块链无意添加,如果他和你有相同的初始文件和网络ID。

  maxpeers:如果你不希望其他人连接到你的测试链,可以使用maxpeers0。反之,如果你确切知道希望多少人连接到你的节点,你也可以通过调整数字来实现。

  rpcapi:这个命令可以决定允许什么API通过RPC进入。在默认情况下,geth可以在RPC激活web3界面。请注意在RPC/IPC界面提供API,会使每个可以进入这个界面(例如dapp’s)的人都有权限访问这个API。注意你激活的是哪个API。Geth会默认激活IPC界面上所有的API,以及RPC界面上的db,eth,net和web3API。

  rpccorsdomain:这个可以指示什么URL能连接到你的节点来执行RPC定制端任务。务必谨慎,输入一个特定的URL而不是wildcard(*),后者会使所有的URL都能连接到你的RPC实例。

  启动后界面如下,光标停留在最后的命令行上,可以执行以太坊命令。可以看到Listeningon[::]:30303和WelcometotheGethJavaScriptconsole!的提示,说明已经启动成功

  注意:如果想将Ubuntu作为永久区块链节点使用,当使用nohup命令时,Geth启动参数console必须去掉,否则Geth会自动停止。

  执行结果如下:

  

  5、查看节点信息

  常用命令:

  net.listening:查看网络是否在监听;

  admin.peers:查看当前连接的节点。目前还是空的。

  admin.nodeInfo:查看当前节点的信息。

  执行:

  >admin.nodeInfo

  得到当前节点信息如下:

  {

  enode:"enode://dfd047d64a3d8c9d9c2834bc8c3bbf41a79e6797956fa99469b872d97a7978e4e[::]:30303",

  id:"dfd047d64a3d8c9d9c2834bc8c3bbf41a79e6797956fa99469b872d97a7978e4e7a6d9605ec6e77164515f6f09d979999ca3ef91eebcd2a6c91ebdfe167de094",

  ip:"::",

  listenAddr:"[::]:30303",

  name:"Geth/v1.5.0-unstable/linux/go1.5.1/phoenix",

  ports:{

  discovery:30303,

  listener:30303

  },

  protocols:{

  eth:{

  difficulty:131072,

  genesis:"0xaab381212b8108c488c8d21c06042a9081b94bfb87665110520d3c295626e79b",

  head:"0xaab381212b8108c488c8d21c06042a9081b94bfb87665110520d3c295626e79b",

  network:98888

  }

  }

  }

  注意enode节点,这是当前节点的标识。后续会用到这个值。

  6、查看账户信息

  在创建创世节点时,我们创建了个默认账户。可以通过如下命令查看账户余额。

  >eth.accounts

  ["0x4b691e86c622127ed8e1d49899ad8c1d19834327"]

  >primary=eth.accounts[0]

  "0x4b691e86c622127ed8e1d49899ad8c1d19834327"

  >balance=web3.fromWei(eth.getBalance(primary),"ether");

  20

  配置第二台私链服务器

  第二台私链服务器,需要把第一台的步骤基本都要重复一遍。两台服务器配置一样才可以通讯。需要改变的地方是:

  第三步创建genesis.json的时候,完全使用第一台服务器的配置,不要用新建的account来创建。

  需要将第一台服务器添加到静态节点列表中。

  添加静态节点列表

  在{datadir}下添加文件static-nodes.json,内容如下:

  [

  "enode://dfd047d64a3d8c9d9c2834bc8c3bbf41a79e6797956fa99469b872d97a7978e4e第一个节点的IP地址:30303"

  ]

  执行如下脚本启动节点:

  geth--identity"phoenix"--rpc--rpccorsdomain"*"--datadir"/root/chain"--port"30303"--rpcapi"db,eth,net,web3"--networkid98888console

  启动成功后,查看当前连接的节点:

  >admin.peers

  [{

  caps:["eth/62","eth/63"],

  id:"dfd047d64a3d8c9d9c2834bc8c3bbf41a79e6797956fa99469b872d97a7978e4e7a6d9605ec6e77164515f6f09d979999ca3ef91eebcd2a6c91ebdfe167de094",

  name:"Geth/v1.5.0-unstable/linux/go1.5.1/phoenix",

  network:{

  localAddress:"10.15.244.204:56808",

  remoteAddress:"10.15.244.203:30303"

  },

  protocols:{

  eth:{

  difficulty:131072,

  head:"0xaab381212b8108c488c8d21c06042a9081b94bfb87665110520d3c295626e79b",

  version:63

  }

  }

  }]

  挖矿

  激动人心的时刻到了。作为一个伪金融圈人士,最大的梦想,古时候叫拥有一个聚宝盆,现在叫拥有一个印钞权,在数字货币时代,叫拥有一个挖矿机。自己搭建的区块链,想怎么挖就怎么挖吧。

  私链启动起来之后,挖矿其实很简单了。首先必须保证的有一个账号:

  >eth.accounts

  ["0x1b39aa2446de648dd6928a759c542690cc32757b"]

  >eth.getBalance(eth.accounts[0]).toNumber();

  0

  账号里没钱。那就开始挖吧。挖矿其实很简单,一个命令就开始了。默认的,挖到的钱,都放在当前账号中。如果有多个账号,默认的放到第一个账号中。在geth环境下,运行:

  >miner.start();

  或者运行命令行:

  geth--mine--minerthreads=4

  minerthreads用来指定运行的线程数。默认为当前CPU的核数。如果有多个账号,可以指定挖矿收入放到第几个账号,注意编号是从0开始的:

  miner.setEtherbase(eth.accounts[0])

  或者命令行执行:

  geth--etherbase0--mine2>>geth.log//0isindex:firstaccountbycreationorderOR

  geth--etherbase'0x1b39aa2446de648dd6928a759c542690cc32757b'--mine2>>geth.log

  半小时后,查看下账户余额:

  >eth.getBalance(eth.accounts[0]).toNumber();

  1.5971875e+21

  话说,e+21,那是多大的数字啊??一辈子还没见过这么多钱。头条的同学们,记得帮忙点赞啊。

  声明:本文由入驻区块网专栏作者撰写,观点仅代表作者本人,绝不代表区块网赞同其观点或证实其描述。

  更多名家专栏精品文章:http://www.qukuaiwang.com.cn/zhuanlan.html

文章内容系本站作者个人观点,不代表本站对其观点赞同或支持,文章的版权归该作者所有。如需转载,请注明文章来源。本文地址:http://www.cis.net.cn/kejikuaixun/43055.html
留言与评论(共有 条评论)
验证码:

最新文章

码农的区块链:搭建一个私有链环境!

科技快讯
最近在研究区块链。打算先搭建一个测试环境开始运行。这里记录整个搭建过程,供后来人参考。整体上,分为三个步骤,安装相关软件,初始化系统,建立集群,以及最后一步,挖矿。我们采用的是以太坊,相对其他区块链,这是一个成熟的环境。虽然近期有硬分支的事件,对企业应用来说,功能

从来就没有真正的郁金香泡沫

科技快讯
前言:在绝大多数人的认知中,荷兰曾经发生过郁金香狂热,最后泡沫破灭。而本文则表示,从来就没有真正的郁金香狂热,并非所有荷兰的阶层都卷入其中,之所以荷兰郁金香泡沫如此著名,很大程度是因为宣传的原因,有一些人将其影响故事化,并放大,从而导致这种叙事的延续。当然这是一家之言,历史上是否真正存在郁金香泡沫?大家怎么看?本

REMME正在通过区块链技术实现无密码的未来

科技快讯
随着数十亿人和设备在任何时间点都连接到互联网上,网络安全也许就变得非常重要了。尽管该方法包含了所有的漏洞,但敏感数据–包括个人身份和财务记录–仍然存储在通过口令身份验证访问的集中服务器上。虽然大多数公司尽最大努力遏制网络攻击,但恶意的行为者总是想方设法利用毫无戒心的用户并窃取访问权。调查显示,大约80%的人

Etheremon去中心化的以太小怪兽世界

科技快讯
Etheremon是一款基于以太坊(Ethereum)网络的去中心化应用。游戏模拟出一个以太小怪兽(etheremon)的世界,玩家可以在这个世界里捕捉,转化和交易它们。作为一款去中心化应用,没有人可以控制etheremon世界,也不允许使用外挂作弊。区块链游戏《Etheremon》中

韩国政府对1CO的立场将在11月宣布

科技快讯
据一位高级官员称,预计韩国政府将在11月宣布其对1CO的立场。该决定将遵循该国金融监管局最近向国内区块链公司发出的调查结果。对于1CO的立场预计11月宣布政府政策协调办公室主任洪南基周四在议会审计中表示,“韩国政府可能会宣布其对争议地位的广泛立场。他解释说,该国的金融监管局(FSS)

韩国为区块链行业和加密数字资产进行分类

科技快讯
根据韩国区块链资讯网站TheBChain7月5日的报道,韩国政府正起草以区块链和加密数字资产技术为中心的新行业分类。据报道,自4月以来,包括国家统计局,科技部,信息和通信部在内的一些机构一直致力于分类系统,并希望在本月底之前提供最终草案。同时韩国也在考虑来自160多个机构的

加密货币本周损失了380亿美元,牛市还在否?

科技快讯
自周一以来,加密货币市场下跌超过了380亿美元,比特币和Altcoins一直在做“自由落体”,前十大加密货币全都是红色,必然会让人好奇的追问,加密货币的这个牛市还在吗?加密货币市场经历了艰难的一周,随着资本逃离市场,整体损失了

圣马力诺共和国将成为下一个区块链枢纽

科技快讯
在爱沙尼亚的波利比乌斯公司的帮助下,圣马力诺的微观结构正在成为区块链创新的基础上发展起来的枢纽。圣马力诺与爱沙尼亚波利比乌斯公司合作圣马力诺这个多山的小国通过圣马力诺创新研究所宣布成立一家新公司,根据圣马力诺的法律,该公司将致力于开发一种首创的区块链创新生态系统。即将建立一个基础设施和法律框架,以满足微型计

百度超级链与青岛仲裁委员会达成合作,共建区块链司法仲裁系统

科技快讯
近日,青岛仲裁委员会宣布与百度超级链达成合作,双方将基于国产自研的XuperChain底层技术,搭建区块链司法仲裁系统,用于解决电子证据实时保全、电子送达、在线审理与裁决的问题。据悉,该系统的上线,是青岛仲裁委员会积极探索传统司法与新兴技术结合迈出的重要一步,将大大缩短审理周期,在受理能力、审判能力上实现跨越式的提升,且有效降

2017第一届全球区块链高峰论坛在线报名完满关闭

科技快讯
2017年6月14日,为期两天的“驱动创新·链接未来”第一届全球区块链高峰论坛将在成都隆重开幕。活动报名通道自开启以来,得到了各界广泛关注,门票销售十分火爆。5月25日,报名人数突破了原定的千人规模。为了让更多爱好区块链的