探索Colab多终端(tmux)的应用——使用colab搭建以太坊私链

背景

  • 平常练习项目框架搭环境简直是痛苦之源,自从有了colab,感觉生活质量都提高不少。
  • colab最主要的是应用的环境非常的干净,而且炸了立马可以重来,非常的方便。
  • 但是colab主要的问题是它无法实现终端的多开,例如Hadoop, Spark,或者要搭建区块链的测试框架都有多开终端的需求,然而colab目前来说没有一个完整的解决方案针对这个问题。
  • 这篇博客就针对这种情况,做了一套方案来解决这个问题。
  • 本文以以太坊私链为例(也是公司提得一个要求)
  • 其实通过这个方法,也可以解决colab同时运行多个命令行,甚至同时运行多个colab的问题。

本文目标

  • 使用colab配合tmux搭建含有三个主节点和一个轻节点的以太坊私链。

1. 安装以太坊的环境

##Block[1]
!sudo apt-get update
!sudo apt-get install software-properties-common
!sudo add-apt-repository -y ppa:ethereum/ethereum
!sudo add-apt-repository -y ppa:ethereum/ethereum-dev
!sudo apt-get update
!sudo apt-get install ethereum

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

1.1. 检查环境安装情况

!geth -h

  
 
  • 1

1.2. 进入目标文件夹/home/[YOUR_NAME]/eth

##Block[2]
cd /
##Block[3]
cd home
##Block[4]
mkdir zzy
##Block[5]
cd zzy
##Block[6]
mkdir eth
##Block[7]
cd eth

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2. 创建创世块

##Block[8]
%%writefile genesis.json
{
  "config": { "chainId": 666, "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": { },
  "number": "0x0",
  "gasUsed": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

3. 安装tmux并准备多终端操作

# block[9]
!sudo apt-get install tmux

  
 
  • 1
  • 2

4. 创建第一个全节点

  • 注意,这一部分是,执行完第一句话之后,在窗口下方的窗格栏中进行输入,模拟的是终端fullnode1中的输入。
  • 我们下面这一个区域在做的其实就相当于,新建一个名为fullnode1的终端窗口。
  • 然后下方带井号的都为输入进终端的文段。
# blcok[10]
!tmux new -s fullnode1
'''通过创世块准备创建文件夹fullnode1'''
#geth --datadir fullnode1 --networkid 20140628 --rpc --rpccorsdomain "*" init ./genesis.json
'''创建完全链fullnode1并放置于端口16333 rpc端口为8546 rpc地址为0.0.0.0'''
'''创可以使其他的链能过连接上''
#geth --syncmode "full" --rpcaddr 0.0.0.0 --datadir fullnode1 --networkid 20140628 --rpc --rpccorsdomain "*" --nodiscover --port 16333 --rpcport 8546 console
'''-----下面只是供测试使用------'''
#personal.newAccount("123")
#eth.coinbase
#eth.accounts
#[Stop the block]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 完成上述输入之后,直接终止这个区块的运行,它仍然会在后台工作。

4.1. 我们此时看一下tmux运行了哪些终端

# block[11]
!tmux ls

  
 
  • 1
  • 2

fullnode1: 1 windows (created Sat Mar 20 09:14:15 2021) [80x23]

4.2. 此时我们创建第二个节点,并获取enode供第一个节点添加peer

# block[12]
!tmux new -s fullnode2
#geth --datadir fullnode2 --networkid 20140628 --rpc --rpccorsdomain "*" init ./genesis.json
#geth --syncmode "full" --rpcaddr 0.0.0.0 --datadir fullnode2 --networkid 20140628 --rpc --rpccorsdomain "*" --nodiscover --port 16334 --rpcport 8547 console
#admin.nodeInfo.enode
## [get output:"enode://accdbb60692a8fcc149e2de2d9727c11bbeea46c5ea11f94a81be8f838f81d26c0311c02eb4b0c4865332e4f567ac2816ecf991c14350e498a64cb71c08f063d@127.0.0.1:16334?discport=0"]
## [Stop the block]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4.3. 我们回到fullnode1并添加fullnode2作为peer

# block[13]
!tmux attach -t fullnode1
#admin.addPeer("enode://accdbb60692a8fcc149e2de2d9727c11bbeea46c5ea11f94a81be8f838f81d26c0311c02eb4b0c4865332e4f567ac2816ecf991c14350e498a64cb71c08f063d@127.0.0.1:16334?discport=0")
#admin.peers
## [Stop the block]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 此时如果在终端中输入net.peerCount,则会返回一个1,表明已经成功添加了。

4.4. 那我们继续创建第三个全节点和一个轻节点

  • 第三个全节点fullnode3
# block[14]
!tmux new -s fullnode3
#geth --datadir fullnode3 --networkid 20140628 --rpc --rpccorsdomain "*" init ./genesis.json
#geth --syncmode "full" --rpcaddr 0.0.0.0 --datadir fullnode3 --networkid 20140628 --rpc --rpccorsdomain "*" --nodiscover --port 16335 --rpcport 8548 console
#admin.nodeInfo.enode
##[get output:"enode://466572b8a5953ad4b67a85cdfc2739fac6b7c62f8720fc3ef25d41078069f4a7782a5d01914b4088cc98dc5f59ee38bc711edcc8839ed805e8a539149403c33a@127.0.0.1:16335?discport=0"]
## [Stop the block]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 第四个轻节点lightnode1
    • 注意,轻节点特别的一点在于系统原先对于轻节点的限制是有不能超过某个百分比,如果你想改变这个限制,你就需要在创建的时候,引入light.sever这一个参数,本文轻节点占总共的25%(三全一轻),所以你需要让你的值大于25
# block[14]
!tmux new -s lightnode1
#geth --datadir lightnode1 --networkid 20140628 --rpc --rpccorsdomain "*" init ./genesis.json
#geth --light.serve 50 --rpcaddr 0.0.0.0 --datadir lightnode1 --networkid 20140628 --rpc --rpccorsdomain "*" --nodiscover --port 16336 --rpcport 8549 console
#admin.nodeInfo.enode
##[get output:"enode://60d3936ac28149ae94fa3cb446d1a14902356455bf9fec0b2024a738eb97c1b276ce9ffe0acf3438d856cbf8f30e9fec130b753aef52bc824dd31db33cbac426@127.0.0.1:16336?discport=0"]
## [Stop the block]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4.4. 恢复第一个节点,并连接剩余的全节点和轻节点

  • 注意enode要自己去看,别直接复制哈!
# block [15]
!tmux attach -t fullnode1
#admin.addPeer("enode://466572b8a5953ad4b67a85cdfc2739fac6b7c62f8720fc3ef25d41078069f4a7782a5d01914b4088cc98dc5f59ee38bc711edcc8839ed805e8a539149403c33a@127.0.0.1:16335?discport=0")
#admin.addPeer("enode://967821ce21d2ddefef3575558f83ec4161eb9e00b41041d5ac90e2c854cc88b2a072a439b938d528e0849e7b737a947cb332dbcd6a07f013bafecb1f7136843a@127.0.0.1:16336?discport=0")
#admin.peers
#net.peerCount

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 使用net.peerCount能够验证搭建最终是否全部都连接上了。
  • 现在连接在fullnode1的设备有三台,连接已经成功。
    在这里插入图片描述

文章来源: blog.csdn.net,作者:Mr. Water,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/narcissus2_/article/details/115037345

(完)