首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >以太坊多节点私有链部署

以太坊多节点私有链部署

作者头像
飞狗
发布2018-09-10 11:46:03
1.3K0
发布2018-09-10 11:46:03
举报

1.1 参考文档

https://g2ex.github.io/2017/09/12/ethereum-guidance/

1.2 GO语言安装

  1. 下载https://dl.google.com/go/go1.10.linux-amd64.tar.gz
  2. 解压
  3. 设置环境变量
  4. 运行go version获取go的版本信息,说明安装成功

1.3 安装ethereum

  1. 下载https://codeload.github.com/ethereum/go-ethereum/zip/v1.8.3
  2. 解压,cd根目录下
  3. make all
  4. 设置环境变量
  5. 运行geth version获取geth的版本信息,说明安装成功

1.4 搭建私有链

1.4.1 创建目录和genesis.json文件

  • 创建私有链根目录./testnet
  • 创建数据存储目录./testnet/data0
  • 创建创世区块配置文件./testnet/genesis.json
{

 "config": {

 "chainID": 1024,

 "homesteadBlock": 0,

 "eip155Block": 0,

 "eip158Block": 0

 },

 "alloc": {},

 "coinbase": "0x0000000000000000000000000000000000000000",

 "difficulty": "0x400",

 "extraData": "",

 "gasLimit": "0x2fefd8",

 "nonce": "0xdeadbeefdeadbeef",

 "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",

 "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",

 "timestamp": "0x00"

}

1.4.2 初始化操作

cd ./testnet

geth --datadir data0 init genesis.json

成功后显示:

<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"><v:formulas></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path></v:stroke></v:shapetype><v:shape id="图片_x0020_6" o:spid="_x0000_i1027" type="#_x0000_t75" style="width:414.75pt;height:59.25pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title=""></v:imagedata></v:shape>

1.4.3 启动私有节点

cd ./testnet

geth --networkid 1024 --identity "bootnode" --rpc --rpcaddr "192.168.0.1" --rpcport "8545" --datadir data0 --port "30303" --nodiscover console

1.4.4 创建账号

personal.newAccount()

1.4.5 查看账号

eth.accounts

1.4.6 查看账号余额

eth.getBalance(eth.accounts[0])

1.4.7 启动&停止挖矿

启动挖矿: miner.start(1)

其中 start 的参数表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的 DAG 文件,这个过程有点慢,等进度达到 100% 后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。

停止挖矿,在 console 中输入: miner.stop() 挖到一个区块会奖励5个以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户,可以通过 miner.setEtherbase() 将其他账户设置成 coinbase。

1.4.8 转账

目前,账户 0 已经挖到了 3 个块的奖励,账户 1 的余额还是0:

eth.getBalance(eth.accounts[0]) 15000000000000000000 eth.getBalance(eth.accounts[1]) 0 我们要从账户 0 向账户 1 转账,所以要先解锁账户 0,才能发起交易:

personal.unlockAccount(eth.accounts[0]) Unlock account 0x3443ffb2a5ce3f4b80080791e0fde16a3fac2802 Passphrase: true

发送交易,账户 0 -> 账户 1: amount = web3.toWei(5,'ether') "5000000000000000000" eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})

需要输入密码 123456

 INFO [09-12|07:38:12] Submitted transaction fullhash=0x9f5e61f3d686f793e2df6378d1633d7a9d1df8ec8c597441e1355112d102a6ce recipient=0x02bee2a1582bbf58c42bbdfe7b8db4685d4d4c62
"0x9f5e61f3d686f793e2df6378d1633d7a9d1df8ec8c597441e1355112d102a6ce"

此时如果没有挖矿,用 txpool.status 命令可以看到本地交易池中有一个待确认的交易,可以使用 eth.getBlock("pending", true).transactions 查看当前待确认交易。

使用 miner.start() 命令开始挖矿: miner.start(1);admin.sleepBlocks(1);miner.stop();

新区块挖出后,挖矿结束,查看账户 1 的余额,已经收到了账户 0 的以太币:

web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')

1.4.9 连接到其他节点

可以通过 admin.addPeer() 方法连接到其他节点,两个节点要要指定相同的 chainID。

假设有两个节点:节点一和节点二,chainID 都是 1024,通过下面的步骤就可以从节点一连接到节点二。

首先要知道节点二的 enode 信息,在节点二的 JavaScript console 中执行下面的命令查看 enode 信息:

admin.nodeInfo.enode"enode://d465bcbd5c34da7f4b8e00cbf9dd18e7e2c38fbd6642b7435f340c7d5168947ff2b822146e1dc1b07e02f7c15d5ca09249a92f1d0caa34587c9b2743172259ee@[::]:30303" 然后在节点一的 JavaScript console 中执行 admin.addPeer(),就可以连接到节点二:

admin.addPeer("enode://d465bcbd5c34da7f4b8e00cbf9dd18e7e2c38fbd6642b7435f340c7d5168947ff2b822146e1dc1b07e02f7c15d5ca09249a92f1d0caa34587c9b2743172259ee@127.0.0.1:30304")

addPeer() 的参数就是节点二的 enode 信息,注意要把 enode 中的 [::] 替换成节点二的 IP 地址。连接成功后,节点二就会开始同步节点一的区块,同步完成后,任意一个节点开始挖矿,另一个节点会自动同步区块,向任意一个节点发送交易,另一个节点也会收到该笔交易。

通过 admin.peers 可以查看连接到的其他节点信息,通过 net.peerCount 可以查看已连接到的节点数量。

除了上面的方法,也可以在启动节点的时候指定 --bootnodes 选项连接到其他节点。

1.4.10 创建Windows节点

1. 初始化新节点:

G:\blockchain\testnet>"C:\Program Files\Geth\geth.exe" --datadir data0 init genesis.json

注意:

  • 新节点的 networkid 要与 boot node 一致
  • 需要与 boot node 使用同一个创世区块genesis.json

2. 启动新节点:

G:\blockchain\testnet>"C:\Program Files\Geth\geth.exe" --networkid 1024 --identity "onenode" --rpc --rpcport "8545" --datadir data0 --port "30303" --nodiscover console(不指定IP地址,默认访问http://localhost:8545

指定IP****地址,访问http://192.168.0.158:8545****:

"C:\Program Files\Geth\geth.exe" --networkid 1024 --identity "onenode" --rpc --rpcaddr "192.168.0.158" --rpcport "8545" --datadir data0 --port "30303" --nodiscover console

3. 建立节点间联系:

使用admin.nodeInfo.enode获取主节点的节点信息,如:

"enode://acb58e7dc684a0663f29be62c75db56efcb16d77ed9320e6d8d0969be436f06eb83f222367be071dac0337d007fb17033d820b287fe5b79982e820b8d7d86338@[::]:30303?discport=0"

其中@[::]****修改为@[192.168.0.1]****,即实际IP****地址。

在新节点加入有两种方式:

1是在testnet/data0/geth/目录 下添加static-nodes.json,内容为:

[

"enode://acb58e7dc684a0663f29be62c75db56efcb16d77ed9320e6d8d0969be436f06eb83f222367be071dac0337d007fb17033d820b287fe5b79982e820b8d7d86338@[192.168.0.1]:30303?discport=0"

]

2 使用命令添加

admin.addPeer("enode://acb58e7dc684a0663f29be62c75db56efcb16d77ed9320e6d8d0969be436f06eb83f222367be071dac0337d007fb17033d820b287fe5b79982e820b8d7d86338@[192.168.0.1]:30303?discport=0");

4. 查看节点间的联系

admin.peers

5. 查看节点信息

admin.nodeInfo

6. 创建账号

0xd4ed594d42c53f3e0ecf2b04d847b582f7afc7be/123456

0x8aa41e6394cf59efda41c8ca6c3030d35a0aaa02/123456

0xcd96c4200610a8fee23327757a2da91666c6ff98/123456

7. 注意事项:

启动挖矿,才能确认交易和同步数据区块。

1.4.11 Windows客户端Ethereum Wallet连接Linux部署的私有链

G:\blockchain\Ethereum-Wallet-win64-0-10-0>"Ethereum Wallet.exe" --rpc http://192.168.0.1:8545

远程RPC****连接的风险提示:

<v:shape id="图片_x0020_8" o:spid="_x0000_i1026" type="#_x0000_t75" style="width:415.5pt;height:212.25pt; visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png" o:title=""></v:imagedata></v:shape>

<v:shape id="图片_x0020_7" o:spid="_x0000_i1025" type="#_x0000_t75" style="width:415.5pt;height:229.5pt; visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png" o:title=""></v:imagedata></v:shape>

1.5 geth相关参数

1.5.1 启动geth时指定同步区块数据路径

geth --datadir=/home/blockchain/ethereum

1.5.2 查看区块内容

eth.getBlock(0)

1.5.3 查看区块数目

eth.blockNumber

1.5.4 查看交易

eth.getTransaction("0xa838434f36d753af82f863a40c27a8e4620c654265f876b3df75e1d54d169139")

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.07.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 参考文档
  • 1.2 GO语言安装
  • 1.3 安装ethereum
  • 1.4 搭建私有链
    • 1.4.1 创建目录和genesis.json文件
      • 1.4.2 初始化操作
        • 1.4.3 启动私有节点
          • 1.4.4 创建账号
            • 1.4.5 查看账号
              • 1.4.6 查看账号余额
                • 1.4.7 启动&停止挖矿
                  • 1.4.8 转账
                    • 1.4.9 连接到其他节点
                      • 1.4.10 创建Windows节点
                        • 1.4.11 Windows客户端Ethereum Wallet连接Linux部署的私有链
                        • 1.5 geth相关参数
                          • 1.5.1 启动geth时指定同步区块数据路径
                            • 1.5.2 查看区块内容
                              • 1.5.3 查看区块数目
                                • 1.5.4 查看交易
                                相关产品与服务
                                数据保险箱
                                数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档