eth私有链环境搭建linux

2017-01-09 18:54:53 ziyuzhiye 阅读数 25622
  • 连接私有网络 PrivateNet

    循序渐进,深入浅出的讲解太坊... 2、学习以太坊区块链环境搭建,Geth,智能合约,Ethereum-Wallet,Mist; 3、基于Weui +SpringBoot + Solidity 打造自己的区块链钱包; 4、链接Ethereum Public Network,发布代币。

    37人学习 曹一峰
    免费试看

摸索以太坊区块链技术几个月了。最近打算逐步的把自己学到的东西和大家分享一下。

在阅读本文之前,希望大家能对区块链的概念能有所了解。这样操作过程中的环节理解更深入。下面开始进入准备。

因为本次是windows环境下的私有链环境搭建,所以需要做以下准备

1.win10系统,64位

2.以太坊钱包(我用的0.8.1版本 https://github.com/ethereum/mist/releases/tag/0.8.1

3.以太坊geth客户端(我用的是1.4.11版本 https://github.com/ethereum/go-ethereum/releases/tag/v1.4.11

首先,将geth客户端的压缩包解压,得到geth.exe放置在任意位置(注意,文件路径中不能出现中文。本文以D盘的blockchain文件夹为例) 
这里写图片描述

然后在该文件夹下创建创世块的初始化文件genesis.json 
内容如下 
{ 
“difficulty”: “0x40000”, 
“extraData”: “Genesis Block”, 
“gasLimit”: “0xffffffff” 
}

注释 “difficulty”: “0x40000”,//难度,该值越大,出块越慢。 “extraData”: “Genesis Block”,//附加信息,随意填写 “gasLimit”: “0xffffffff”//每个块所能容载的gas上线,可以暂时理解为

win键 + r 进入cmd命令行 
键入 d: 是命令行进入d盘 
键入 cd blockchain 进入d盘的blockchain目录 
键入 geth –help 查看是否能够输入帮助信息 
键入 geth –datadir “%cd%\chain” init genesis.json 将创世块信息初始化 
键入 geth –datadir “%cd%\chain” console 打开geth的控制台 
在控制台键入 personal.newAccount(‘123.abc’) 创建用户 123.abc 为用户的密码,自定义即可(该用户用来启动私有链时的矿工) 
键入 exit 退出geth控制台 
键入 geth –targetgaslimit 4294967295 –rpc –rpcaddr “192.168.1.104” –rpcport “8101” –port “30301” –rpcapi “eth,web3,personal” –networkid 2016 –identity 2016 -nodiscover -maxpeers 5 –datadir “%cd%\chain” -unlock 0 -rpccorsdomain “*” –mine console 启动私有链节点 
注释

targetgaslimit –每个块的gas上限,这里可以暂时理解为容量 rpc –启动rpc通信,可以进行智能合约的部署和调试 rpcaddr –rpc接口的地址 rpcport –rpc接口的端口号 port –网络监听端口,用于节点之间通信 rpcapi –设置rpc的范围,暂时开启eth,web3,personal足够 networkid –设置当前区块链的网络ID,是一个数字,可以随便写 identity –区块链的标示,随便填写,用于标示目前网络的名字 nodiscover 禁止被网络中其它节点发现,需要手动添加该节点到网络 maxpeers 最大节点数量 datadir –设置当前区块链网络数据存放的位置 unlock –解锁某用户(此处用用户坐标来控制,解锁后的用户调用接口发起交易时,不要需要提供密码) rpccorsdomain 限制rpc访问源的ip,代表不限制 mine 允许挖矿 console –启动命令行模式,可以在Geth中执行命令*

键入回车 
命令行中出现Passphrase: 
键入 刚才创建用户是定义的密码 
然后等待出现类似如下信息时: 
I1208 17:49:49.023354 ethash.Go:291] Generating DAG: 0% 
I1208 17:49:55.636941 ethash.go:291] Generating DAG: 1% 
I1208 17:50:01.952089 ethash.go:291] Generating DAG: 2% 
I1208 17:50:08.887566 ethash.go:291] Generating DAG: 3% 
I1208 17:50:15.176846 ethash.go:291] Generating DAG: 4% 
I1208 17:50:21.314108 ethash.go:291] Generating DAG: 5% 
I1208 17:50:27.396949 ethash.go:291] Generating DAG: 6% 
则证明开始创建创世块,等待进度至100%后,便会开始挖矿了。

这时,解压以太坊钱包到任意目录(本文以d盘ethwallet为例) 
打开ethwallet文件夹,运行Ethereum-Wallet.exe 
出现如下画面 
这里写图片描述 
关闭该窗口

出现如下窗口 
这里写图片描述 
如果右上角出现“PRIVATE-NET”则证明钱包客户端已经连接到了我们的私有节点。 
点击“LAUNCH APPLICATION” 
进入钱包主页面 
如下 
这里写图片描述

由于挖矿比较消耗cpu,所以此时打开控制台 
键入 miner.stop() 停止挖矿。不要在意输出的刷屏,只管输入完成后回车即可,如果输入正确,回车后会输出“true”。 
键入 miner.start(1) 使用一个cpu挖矿,减少对电脑性能的消耗。

下面我们进入下一个环节,交易 
因为我们现在只有一个用户,没办法正常交易,所以现在主页面点击“ADD ACCOUNT” 创建另外一个用户,按照步骤输入密码,确认密码后,创建用户工作就完成了。 
点击“ACCOUNT2”进入账户详情页面,复制用户地址 
这里写图片描述 
复制时,会出现提示“Warning: you are on the Test Network. Be careful not to transfer real funds to this account.”。不用理他,点击OK。 
然后点击钱包界面的“SEND”,进入交易发送界面

这里写图片描述 
点击“FROM”下方输入栏,选择交易的发起人,我们选“Main account” ,因为当前只有他的账户下有以太币。“TO”下方的输入栏我们输入刚才复制的“ACCOUNT2”的地址。“AMOUNT”处输入本次要交易的以太币数量,以10个为例。输入10。其他的地方不用管,我们把滚动条拖到最下方,左下方有个“SEND”按钮,点击一下。弹出如下窗口 
这里写图片描述 
在输入栏中输入主账户的密码,点击“SEND TRANSACTION”交易就发出去了。 
页面会自动跳转会主页面。我们将滚动条滚到下面。 
这里写图片描述 
我们可以看到我们刚才从主账户像“ACCOUNT2”发起的交易。 
这里写图片描述

好了,这样的话,一个私有链搭建就完成了。也进行了一个简单的交易。万里长征的第一步迈出去了。不要觉得很麻烦,因为后续的种种比这要麻烦的多。 
后续的Linux环境搭建,以及智能合约我也会慢慢的更新。希望大家共同学习,共同进步



转自http://blog.csdn.net/u014409380/article/details/53522581

2020-02-12 10:15:05 qq_30113287 阅读数 222
  • 连接私有网络 PrivateNet

    循序渐进,深入浅出的讲解太坊... 2、学习以太坊区块链环境搭建,Geth,智能合约,Ethereum-Wallet,Mist; 3、基于Weui +SpringBoot + Solidity 打造自己的区块链钱包; 4、链接Ethereum Public Network,发布代币。

    37人学习 曹一峰
    免费试看

windows搭建方法

1. 搭建以太坊私有链节点

下载Geth ,下载地址: https://geth.ethereum.org/downloads/

2. 创建创世区块文件

在安装目录下创建一个genesis.json文件,内容如下:

 

{
"config": {
"chainId": 1337,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"ethash": {}
},
"nonce": "0x0",
"timestamp": "0x5ddf8f3e",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x47b760",
"difficulty": "0x00002",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"0x1e82968C4624880FD1E8e818421841E6DB8D1Fa4" : {"balance" : "30000000000000000000"}
},
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

3. 初始化创世区块信息并指定数据文件存放位置

geth init ./genesis.json --datadir "F:\eth\test"

此命令会创建一个文件夹test,test文件夹为节点相关数据

4. 启动节点

geth --datadir test --allow-insecure-unlock --identity test --networkid 613 --rpc --rpcport "8545" --rpccorsdomain "*" --rpcapi "db,eth,net,web3" console  

启动成功后会进入节点的虚拟机环境,可以执行一些命令

5. 创建其他节点

用相同的配置文件初始化一个文件夹为test0的节点

geth init ./genesis.json --datadir "F:\eth\test0"

启动这个节点

geth --datadir test0 --allow-insecure-unlock --identity test0 --port 30304 --networkid 613 --ipcdisable --rpc --rpcport "8546" --rpccorsdomain "*" --rpcapi "db,eth,net,web3" console

6. 俩个节点连接

查询第一个节点的enode

admin.nodeInfo

可以看到第一个节点的enode为                                                                                                                  enode://c963b939ec6e6a1a741f267664264647938d1dea880c39ee1e8a888bf8461b0b0cb500dcc98f5b7eb2e520800049c6575239499aa48f3ddc02bf294fd03a18ab@127.0.0.1:30303

打开第二个节点,让第二个节点连接上第一个节点

admin.addPeer("enode://c963b939ec6e6a1a741f267664264647938d1dea880c39ee1e8a888bf8461b0b0cb500dcc98f5b7eb2e520800049c6575239499aa48f3ddc02bf294fd03a18ab@127.0.0.1:30303")

输入命令  admin.peers

可以看到第二个节点已经能够连接第一个节点了。

linux搭建方法

linux搭建方法与windows大同小异

写了一个以太坊节点管理脚本,仓库地址:https://github.com/wangjinxin613/ethNodeRun

将仓库克隆下来,运行./start.sh 即可

基于solidity的分布式虚拟宠物系统 – HelloPet

这是一个完全分布式的虚拟宠物系统,不需要中心服务器,运行于以太坊网络上,需要依赖MetaMask浏览器插件。新加入的节点可以捕猎一只宠物,并且经过12小时后可进行下一次捕猎,宠物可以收藏可以流通。任何人可以给任何人的宠物喂食,喂食可以留言,留言内容永久存储在区块链系统里,哪怕千年之后,这些数据依然会存在,只要以太坊还运行着一个节点。

项目地址:https://github.com/wangjinxin613/HelloPet

演示地址:https://wangjinxin613.github.io/HelloPet/

合约部署-使用remix

 

网址:remix.ethereum.org

如上图所示,第一次使用remix需要启动一些功能的开关。

启动上边的三个即可,其他的我也没用过...

下边可以尝试运行一个小例子,官网的HelloWorld


pragma solidity ^0.4.0;

contract HelloWorld{
uint public balance;
function update(uint amount) public returns (address, uint){
balance += amount;
return (msg.sender, balance);
}
}
新建一个文件,命名为HelloWorld.sol,将上述代码复制到这个文件里。

如上图所示,可以看到编译结果,对号证明编译无错误。建议勾选自动编译(Auto compile),就不用每次手动编译了。

然后就可以运行了。 

如上图所示,点击deploy即可部署合约,需要支付一定的gas; 

这个合约的功能是存一个数,并且可以读取这个数。

点击update 存一个数,点击balance就能取到这个数了。 
————————————————

私有链网络也可以使用remix部署合约(需搭配浏览器插件MetaMask)

 

附录(ethereum JavaScript Console内置对象和方法):

eth:包含一些跟操作区块链相关的方法
net:包含以下查看p2p网络状态的方法
admin:包含一些与管理节点相关的方法
miner:包含启动&停止挖矿的一些方法
personal:主要包含一些管理账户的方法
txpool:包含一些查看交易内存池的方法
debug:包含一些debug的方法
web3:包含了以上对象,还包含一些单位换算的方法

1、admin对象

admin.addPeer(nodeURL) // 为本客户端新建与目标节点的链接
admin.peers // 返回已有连接对象组成的数组
admin.nodeInfo // 返回节点信息
admin.datadir // 返回当前节点存储数据的文件夹
admin.importChain(file) // 从编组二进制格式的数据导入区块
admin.exportChain(file) // 把区块导出为二进制格式
admin.chainSyncStatus // 返回区块链同步状态信息
admin.startRPC(host, portNumber, corsheader, modules) // 启动JSON-RPC的HTTP服务
admin.stopRPC() // 关闭JSON-RPC的HTTP服务
admin.verbosity(level) // 设置日志冗水平,1-6级
admin.setSolc(path2solc) // 设置solidity编译器,例如:admin.setSolc('/some/path/solc')
admin.sleepBlocks(n) // 等待n个区块
/*****以下是与智能合约有关的方法*****/
admin.saveInfo(contract.info, filename) // 把合约info按照json格式写到目标文件
admin.startNatSpec() // 启动协议NatSpec构建合同和事务
admin.stopNatSpec() // 停止NatSpec
admin.getContractInfo(address) // 按合约地址返回json格式的合约信息
admin.register(address, contractaddress, contenthash) // 将内容hash注册到合约的代码hash
admin.registerUrl(address, codehash, contenthash) // 在区块链中注册带有内容哈希值的网址
2、miner对象

miner.start() // 开始挖矿
miner.stop() // 停止挖矿
miner.startAutoDAG() // 开启auto DAG
miner.stopAutoDAG() // 关闭auto DAG
miner.makeDAG(blockNumber, dir) // 产生epoch的DAG
miner.hashrate // 返回当前hash rate
miner.setExtra("extra data") // 在产生区块的时候设置额外的信息
miner.setGasPrice(gasPrice) // 设置旷工的gasprice
miner.setEtherbase(account) // 设置默认旷工账户,用于接受挖矿奖励
3、personal对象

personal.newAccount(passwd) // 新建账户
personal.listAccounts // 列举所有账户
personal.deleteAccount(addr, passwd) // 删除账户
personal.unlockAccount(addr, passwd, duration) // 解锁账户,可以限定时间,解锁期间可以进行交易
4、txpool对象

txpool.status // 返回挂起和排队中的交易的数量
5、debug对象

debug.setHead(blockNumber) // 根据区块序号设置区块头,用于回滚
debug.seedHash(blockNumber) // 返回目标区块所在的epoch的hash
debug.processBlock(blockNumber) // 使用debug模式的VM执行block
debug.getBlockRlp(blockNumber) // 返回区块的Rlp编码的十六进制
debug.printBlock(blockNumber) // 打印区块信息
debug.dumpBlock(blockNumber) // 返回相应区块的状态并返回账户列表
6、eth对象:源自web3.eth

// 一些web3之外的eth方法
eth.sign(signer, data)
eth.pendingTransactions // 返回pending的交易
eth.resend(tx, <optional gas price>, <optional gas limit>) // 重新发送pending的交易

2019-01-07 12:31:10 shang1989 阅读数 228
  • 连接私有网络 PrivateNet

    循序渐进,深入浅出的讲解太坊... 2、学习以太坊区块链环境搭建,Geth,智能合约,Ethereum-Wallet,Mist; 3、基于Weui +SpringBoot + Solidity 打造自己的区块链钱包; 4、链接Ethereum Public Network,发布代币。

    37人学习 曹一峰
    免费试看

我们在研究和使用以太坊的过程中,碰到了许多坑,走了许多的弯路。用以太坊作为关键词去百度或者谷歌搜索,虽然能够搜到许多结果,但其实对于我们来说,这些结果存在2个问题:1,网上的这些文章互相拷贝,虽然看起来很多,但其实就那么两篇;2,一些文章里介绍的步骤虽然看起来很合理,很顺畅,但其实真正跑起来,还是存在一定困难的。本文将以最简单、最正确的方式搭建以太坊私有链,一来,作为我们学习自己成果的记录,二来,给后来人一些指引,避免像我们以前趟坑走弯路。本系列偏向于实战,将以连载的形式来进行记录,本次将介绍如何在CentOS6.5上搭建以太坊私有链。

先总体说一下步骤:

1.操作系统准备

2. golang安装

3.下载以太坊

4. 安装以太坊

5. 创世区块文件的准备

6. 创世区块初始化

7. 以太坊启动

 

下面以图文的形式详细介绍每一个步骤:

1. 操作系统准备

我们使用的操作系统是CentOS6.5,安装之后需要系统能够上网,因为后面的步骤需要联网安装以太坊所需的环境。系统安装好之后,执行 cat /etc/redhat-release确认系统版本,以下是我们执行的结果:

[root@ZC_VM_10_100_142_62 ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)

2. golang安装

首先执行 rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm 安装yum源。以下是我们执行结果的截图:

安装以太坊时yum源安装

注意

(1).这个步骤需要联网,这是在上一步我们强调系统需要能够上网的原因

(2).注意安装结果是否成功,如我们上面的截图中第二个红框所示

yum源安装成功后就可以使用下面的命令安装golang了:

yum install golang

下面是我们的安装结果:

yum install golang

注意:

(1)中间有一步需要确认,输入小写的y,然后回车即可

(2)注意安装结果是否成功

3. 下载以太坊源代码

我们是从https://github.com/ethereum/go-ethereum/releases/tag/v1.4.12 这个地址下载的zip压缩格式的源代码,为防止将来该地址不再能用,我们将zip压缩格式的源代码放到本站,地址是:http://www.huiyanghua.com/js/go-ethereum-1.4.12.zip

4. 安装以太坊

将下载的zip格式的源码包解压缩并进入解压缩后的目录。

我们的结果如下:

然后在go-ethereum-1.4.12目录下执行 make命令开始进行编译。

我们的结果如下:

编译成功后,将在go-ethereum-1.4.12目录下出现build/bin这样的子目录,并且在该子目录下出现geth这样的可执行文件,如上图所示。

这样,我们的以太坊就安装完成了。

5. 创世区块文件的准备

在go-ethereum-1.4.12/build/bin目录下创建init.json的文本文件,内容如下:

{
    "nonce": "0×0000000000000042",
    "mixhash": "0×0000000000000000000000000000000000000000000000000000000000000000",
    "difficulty": "0×4000",
    "alloc": {},
    "coinbase": "0×0000000000000000000000000000000000000000",
    "timestamp": "0×00",
    "parentHash": "0×0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "GenesisBlock",
    "gasLimit": "0xffffffff"
}

我们的结果如下:

6. 创世区块初始化

在go-ethereum-1.4.12/build/bin目录下执行以下命令以完成创世区块的创建:

./geth  --datadir "/app/chain" init init.json

注意:上面命令中--datadir后面的 /app/chain可以任意指定,无需提前创建,但是一定要保证有足够的磁盘空间。init.json是我们在上一步创建的文件,注意文件名要一致。

执行完成后,将会出现类似以下信息:

I0927 14:31:07.374864 ethdb/database.go:82] Alloted 16MB cache and 16 file handles to /app/chain/chaindata
I0927 14:31:07.402544 cmd/geth/main.go:299] successfully wrote genesis block and/or chain rule set: 244469eaad4c9c7a245fa4962a6ed7346e9925317f222b580e7f3113f9722657

我们的执行结果如下:

这样,创世区块就初始化完成了,下面将要进行最后一步,以太坊的启动。

7. 以太坊启动

仍然在go-ethereum-1.4.12/build/bin目录下执行,执行的命令是:

./geth --rpc --rpccorsdomain "*" --datadir "/app/chain" --port "30303" --rpcapi "db,eth,net,web3" --networkid 100000 console

注意:上面命令中--datadir 后的"/app/chain"要跟我们上一步的--datadir 参数一致。

执行完此命令后将会出现类似以下信息:

I0927 14:32:17.538013 ethdb/database.go:82] Alloted 128MB cache and 1024 file handles to /app/chain/chaindata
I0927 14:32:17.554665 ethdb/database.go:169] closed db:/app/chain/chaindata
I0927 14:32:17.554722 cmd/utils/flags.go:592] WARNING: No etherbase set and no accounts found as default
I0927 14:32:17.555722 ethdb/database.go:82] Alloted 128MB cache and 1024 file handles to /app/chain/chaindata
I0927 14:32:17.575639 eth/backend.go:621] upgrading db log bloom bins
I0927 14:32:17.575767 eth/backend.go:629] upgrade completed in 138.089µs
I0927 14:32:17.575802 ethdb/database.go:82] Alloted 16MB cache and 16 file handles to /app/chain/dapp
I0927 14:32:17.580530 eth/backend.go:172] Protocol Versions: [63 62], Network Id: 100000
I0927 14:32:17.580584 eth/backend.go:201] Blockchain DB Version: 3
I0927 14:32:17.581103 core/blockchain.go:206] Last header: #0 [244469ea…] TD=0
I0927 14:32:17.581122 core/blockchain.go:207] Last block: #0 [244469ea…] TD=0
I0927 14:32:17.581131 core/blockchain.go:208] Fast block: #0 [244469ea…] TD=0
I0927 14:32:17.582008 p2p/server.go:313] Starting Server
I0927 14:32:19.644094 p2p/discover/udp.go:217] Listening, enode://e1f793e06289097df035e55d68f7667658630b48c1e7fd70b5dee7445db5bec9d808b6f329b774954e7800d3498a2e6307aa989b53a0758eed8f3d7cd5d584e4@[::]:30303
I0927 14:32:19.650870 node/node.go:366] HTTP endpoint opened: http://localhost:8545
I0927 14:32:19.652471 p2p/server.go:556] Listening on [::]:30303
I0927 14:32:19.652892 node/node.go:296] IPC endpoint opened: /app/chain/geth.ipc
Welcome to the Geth JavaScript console!

一直到出现Welcome to the Geth JavaScript console! 句话,并自动进入geth的命令行则说明以太坊私有链安装成功了。

注意:以上命令中 --datadir参数后面的"/app/chain"要和上一步保持一致。

我们的结果如下:

2017-03-30 17:56:14 striver_jt 阅读数 10377
  • 连接私有网络 PrivateNet

    循序渐进,深入浅出的讲解太坊... 2、学习以太坊区块链环境搭建,Geth,智能合约,Ethereum-Wallet,Mist; 3、基于Weui +SpringBoot + Solidity 打造自己的区块链钱包; 4、链接Ethereum Public Network,发布代币。

    37人学习 曹一峰
    免费试看

参考文章地址:http://blog.csdn.net/sportshark/article/details/51855007

 

搭建环境:Ubuntu

 

具体的安装可以参考官方指南:

https://github.com/ethereum/Go-ethereum/wiki/Building-Ethereum

 

一:进入ubuntu终端命令行:

分别输入:

sudo apt-get installsoftware-properties-common

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

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

sudo apt-get update

sudo apt-get install ethereum

系统联网执行完命令后就会完成安装,完成安装后,输入geth命令,可以看到geth启动的信息(连接的是公有链)。或者输入geth --help

如果现实出命令行各种参数提示信息,则说明安装成功。

注意:如果安装过程中出错,不要灰心急于放弃,阅读其出错信息,然后解决它,然后继续安装,一般出错都是由于需要依赖其他组件,则先安装其他组件。

 

二:创世块:

在以上安装成功之后,直接启动,即可连接公有链。现在通过配置创世块来创建私有链。同一个网络中,创世块必须是一样的,否则无法联通。

创建一个eth的根目录的文件夹,在根目录下新建创世块json文件piccgenesis.json。内容如下:

{

"nonce":"0x0000000000000042",

"mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",

"difficulty": "0x4000",

"alloc": {},

"coinbase":"0x0000000000000000000000000000000000000000",

"timestamp": "0x00",

"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",

"extraData":"SecBroBlock",

"gasLimit":"0x0000ffff"

}

 

参数解释:

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的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

 

 

切换到刚刚存放piccgenesis.json的目录中:执行以下命令:

 

basepath=$(cd `dirname $0`; pwd)

 

获取当前的目录

 

geth --datadir "$basepath/chain"init piccgenesis.json

 

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

 

geth --identity"PICCetherum" –rpc--rpccorsdomain "*" --datadir "$basepath/chain" --port"30303" --rpcapi "db,eth,net,web3" --networkid 95518console

 

命令解释:

参数名称         参数描述

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

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

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

port 网络监听端口

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

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

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

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

 

启动成功如下:

 



启动了节点后,就进入了geth命令行模式,输入personal.newAccount() 根据提示输入密码就会给你新建了一个账户。

 

 

三:连接其他节点:

         五:连接其他节点:

 

首先要知道自己的节点信息,在Geth命令行界面下输入命令,注意大小写

admin.nodeInfo

系统会显示

enode:"enode://1e3c1727cd3bee9f25edeb5dbb3b880e03e41f8eec99566557f3ee0422734a8fcad17c161aa93d61bdbfb28ed152c143c7eb501db58bc63502a104a84b62d742@0.0.0.0:30303“

其中

enode://1e3c1727cd3bee9f25edeb5dbb3b880e03e41f8eec99566557f3ee0422734a8fcad17c161aa93d61bdbfb28ed152c143c7eb501db58bc63502a104a84b62d742@0.0.0.0:30303

就是自己节点的信息,注意要把”0.0.0.0”换成你自己的IP。将这个信息发送给其他节点,在其他节点的命令行中输入:

admin.addPeer(‘enode://1e3c1727cd3bee9f25edeb5dbb3b880e03e41f8eec99566557f3ee0422734a8fcad17c161aa93d61bdbfb28ed152c143c7eb501db58bc63502a104a84b62d742@192.168.1.101:30303’)

如果添加成功,输入admin.peers会显示出新添加的节点。

 

六:

开始挖矿的命令:

miner.start()

结束挖矿:

Miner.stop()

2019-07-31 16:06:18 m0_37964218 阅读数 121
  • 连接私有网络 PrivateNet

    循序渐进,深入浅出的讲解太坊... 2、学习以太坊区块链环境搭建,Geth,智能合约,Ethereum-Wallet,Mist; 3、基于Weui +SpringBoot + Solidity 打造自己的区块链钱包; 4、链接Ethereum Public Network,发布代币。

    37人学习 曹一峰
    免费试看

操纵系统:ubuntu 16.04 64位

 

安装Go语言环境

一.更新服务器源

apt-get update

 

二.安装Go语言包

1.下载安装包

curl -O https://storage.googleapis.com/golang/go1.10.1.linux-amd64.tar.gz

 

2.下载完成后,解压至/usc/local目录下

tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz

 

三.配置Go语言环境变量

1.在.bashrc文件底部加上如下两条Go语言环境变量

vim ~/.bashrc

 

export GOPATH=/usr/local/GO

export PATH=$GOPATH/bin:$PATH

 

2.使环境变量生效,查看版本号后没问题,说明配置成功。

source ~/.bashrc

go version

 

参考链接: http://www.cnblogs.com/X-knight/p/9522511.html

 

安装geth

一.启动板存储库

apt install software-properties-common

add-apt-repository -y ppa:ethereum/ethereum

 

二.安装Go Ethereum的稳定版本

apt-get update

apt-get install ethereum

 

参考链接:https://blog.csdn.net/niekai01/article/details/65679843

 

创建你的genesis文件(可以参考下面链接的1.3步骤)

puppeth

 

devnet

 

2

 

1

 

这两个地址需要新开一个当前服务器连接窗口通过命令获取,可以参考下面链接的1.2步骤

geth --datadir . account new

 

红色区域为获取到的账户文件存放位置,可自行修改地址

 

1515  (请指定您的链/网络ID,不要使用1到10之间的任何东西)

 

2

 

2

 

genesis.json

 

ctrl + c 退出puppeth

 

下图为完整操作步骤

 

 

参考链接

https://hackernoon.com/setup-your-own-private-proof-of-authority-ethereum-network-with-geth-9a0a3750cda8

 

执行命令创建区块运行节点

一.创建块数据和钱包文件目录

mkdir /data

mv genesis.json /data/

 

二.执行命令,制造区块(geth的参数项目很多,可以geth –help 来获得详细信息)

geth --datadir /data/ init /data/genesis.json

 

三.执行一条最简单的geth命令,来创建自己的私有链条,需要先开个screen运行,因为一旦服务器连接退出程序也就中止了。

nohup geth --datadir /data/ --nodiscover --rpc --rpcapi net,eth,web3,personal --rpcaddr 0.0.0.0 --networkid 1515 > geth.log 2>&1 &  (后台运行)

geth attach /data/geth.ipc

exit (退出)

ps -aux|grep geth (kill geth进程)

 

四.创建账户,因为默认是没有账户的,我们可以用eth.accounts 查看,创建账户是为了下面挖矿准备地址。

personal.newAccount("xxxx")    xxx换成自己想输入的密码即可

 

五.开始挖矿(4为挖矿线程数),我们可以看到区块在增长

miner.start(4)

 

eth.blockNumber

 

web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')   查看挖矿收益,默认收益为第一个地址,可以通过miner.setEtherbase(address) 指定收益地址

 

eth.coinbase 挖矿收益地址

 

eth.accounts查看所有用户

 

 

六.我们用top可以看到cpu已经开始挖矿了

top

 

七.在我们刚才第三步指定了日志文件为/data/geth.log,日志显示正常提交。

tail -f /data/geth.log

 

参考链接:https://blog.csdn.net/niekai01/article/details/65679843

 

搭建第二个节点与第一个节点进行同步

1.安装go语言环境

2.安装geth

3.将第一个节点的genises文件拷贝到第二个节点

4.执行命令创建区块,运行节点

admin.nodeInfo.enode    在第二个节点执行

 

admin.addPeer("enode://ea5556fdc67937a67c3a03182721cb7dd618c0499933ba1bd0e9c840c71e7fd40a1812f404ee46c8d0cfee582edaddc2107f6eb3045385ba4b70c8ab642fd0b0@47.52.166.216:30303?discport=0")

在第一个节点输入admin.addPeer(第二个节点的返回结果),将ip改为第二个节点的ip

 

net.peerCount   查看连接,正常我们可以从一号和二号节点分别看到一个连接

 

admin.peers  可以查看连接到的节点详情

 

eth.blockNumber  可以看到两个节点块数据一致

 

以上步骤为ETH私有链搭建所有流程,命令不懂的可以直接百度ETH常用命令即可