私链创建节点脚本(节点集群需要手动添加enode)

#!/bin/bash


echo "{
  "config": {
    "chainId": 20220726,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "ethash": {}
  },
  "alloc": {
    "0x29e3fA851BbE7E9e5Eeb8394b628c07cDf0442D9": {
      "balance": "10000000000000000000000000000"
    },
    "0xeb4E0504d69FBcc9AC594C225b2bF3C0142dccf6": {
      "balance": "10000000000000000000000000"
    }
  },

  "nonce": "0x0",
  "timestamp": "0x5ddf8f3e",
  "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "gasLimit": "0x47b760",
  "difficulty": "0x10000",
  "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
   "alloc": {
  },

  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}"> genesis.json





workDir="data"; # 定义节点数据存放目录

# 判断目录中是否存在配置文件
if [ ! -f "genesis.json" ]; then
echo "当前目录中不存在配置文件,请创建genesis.json"
fi

PORT=0
#判断当前端口是否被占用,没被占用返回0,反之1
function Listening {
   TCPListeningnum=`netstat -an | grep ":$1 " | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' | wc -l`
   UDPListeningnum=`netstat -an | grep ":$1 " | awk '$1 == "udp" && $NF == "0.0.0.0:*" {print $0}' | wc -l`
   (( Listeningnum = TCPListeningnum + UDPListeningnum ))
   if [ $Listeningnum == 0 ]; then
       echo "0"
   else
       echo "1"
   fi
}

#指定区间随机数
function random_range {
   shuf -i $1-$2 -n1
}

#得到随机端口
function get_random_port {
   templ=0
   while [ $PORT == 0 ]; do
       temp1=`random_range $1 $2`
       if [ `Listening $temp1` == 0 ] ; then
              PORT=$temp1
       fi
   done
   echo $PORT
   return $?
}

while (true)
do
echo "欢迎使用以太坊节点管理系统,输入序号选择不同的功能"
echo "1.创建一个节点 2.启动一个节点  0.退出系统"
read order

case "$order" in 
	1)
		while (true)
		do
		read -p "请输入节点名称(字母+数组):" nodeName
		if [ -d "./${workDir}/${nodeName}" ]; then
			echo "该节点名称已经存在"
		else 
			geth --datadir ${workDir}/${nodeName} init genesis.json		
			echo "节点${nodeName}创建成功"
			break;
		fi
		done	
		;;
	2)
		read -p "请输入要启动的节点名称:" nodeName
		# 校验节点名称是否存在,如果不存在则询问是否要初始化该节点
		if [ ! -d "./${workDir}/${nodeName}" ]; then
			echo "该节点名称不存在"
			read -p "是否要初始化${nodeName}节点(Y/N):" yn
			if [ "$yn" == 'Y' ] || [ "$yn" == 'y'  ]; then
				geth --datadir ${workDir}/${nodeName} init genesis.json
                       		echo "节点${nodeName}创建成功"	
			else
				break;
			fi
							
		fi
		# 创建日志文件
		if [ ! -f "log" ]; then
			mkdir log
		fi
		touch ./log/${nodeName}.log
		# 找寻端口,从30303开始,找到一个没有被占用的端口
		port1=$(get_random_port 30303 33333) # 节点port
		port2=$(get_random_port 8545 9999) # http port		
		echo $port1
		echo $port2
		# 节点静默启动
		geth --datadir ${workDir}/${nodeName} --networkid 20220726 --http --http.addr "0.0.0.0" --http.port ${port2} --http.corsdomain "*" --http.vhosts "*" --port ${port1} --http.api "admin,debug,web3,eth,txpool,personal,ethash,miner,net" --nodiscover --ipcdisable --allow-insecure-unlock --syncmode "full" --maxpeers 100 console 
		echo "节点启动成功,节点端口为${port1},http端口为${port2}";
		;;		
	*)
		exit;
esac
done

posted @ 2022-07-28 11:08  要买CT5的小曹  阅读(19)  评论(0)    收藏  举报  来源