1+ #! /bin/bash
2+
3+ # Common Functions for Sequencer Migration Scripts
4+ # This file contains shared functionality used by multiple scripts
5+
6+ # Colors for output
7+ RED=' \033[0;31m'
8+ GREEN=' \033[0;32m'
9+ YELLOW=' \033[1;33m'
10+ BLUE=' \033[0;34m'
11+ NC=' \033[0m' # No Color
12+
13+ # Configuration
14+ SYNC_TIMEOUT=5 # 5 seconds timeout for sync operations
15+ POLL_INTERVAL=0.1 # Poll every 0.1 seconds
16+
17+ # Helper function to print colored output
18+ log () {
19+ echo -e " ${2:- $NC } [$( date ' +%H:%M:%S' ) ] $1 ${NC} "
20+ }
21+
22+ log_info () { log " $1 " " $BLUE " ; }
23+ log_success () { log " $1 " " $GREEN " ; }
24+ log_warning () { log " $1 " " $YELLOW " ; }
25+ log_error () { log " $1 " " $RED " ; }
26+
27+ # Check if required environment variables are set
28+ check_env_vars () {
29+ log_info " Checking environment variables..."
30+
31+ if [[ -z " ${L2GETH_RPC_URL:- } " ]]; then
32+ log_error " L2GETH_RPC_URL environment variable is required"
33+ exit 1
34+ fi
35+
36+ if [[ -z " ${L2RETH_RPC_URL:- } " ]]; then
37+ log_error " L2RETH_RPC_URL environment variable is required"
38+ exit 1
39+ fi
40+
41+ log_success " Environment variables configured"
42+ log_info " L2GETH_RPC_URL: $L2GETH_RPC_URL "
43+ log_info " L2RETH_RPC_URL: $L2RETH_RPC_URL "
44+ }
45+
46+ # Get block number and hash for a given RPC URL
47+ get_latest_block_info () {
48+ local rpc_url=" $1 "
49+ local temp_file=$( mktemp)
50+
51+ if ! cast block latest --rpc-url " $rpc_url " > " $temp_file " 2> /dev/null; then
52+ rm -f " $temp_file "
53+ return 1
54+ fi
55+
56+ local block_number=$( grep " ^number" " $temp_file " | awk ' {print $2}' )
57+ local block_hash=$( grep " ^hash" " $temp_file " | awk ' {print $2}' )
58+
59+ rm -f " $temp_file "
60+ echo " $block_number $block_hash "
61+ }
62+
63+ # Get block info for a specific block number
64+ get_block_info () {
65+ local rpc_url=" $1 "
66+ local block_number=" $2 "
67+ local temp_file=$( mktemp)
68+
69+ if ! cast block " $block_number " --rpc-url " $rpc_url " > " $temp_file " 2> /dev/null; then
70+ rm -f " $temp_file "
71+ return 1
72+ fi
73+
74+ local block_num=$( grep " ^number" " $temp_file " | awk ' {print $2}' )
75+ local block_hash=$( grep " ^hash" " $temp_file " | awk ' {print $2}' )
76+
77+ rm -f " $temp_file "
78+ echo " $block_num $block_hash "
79+ }
80+
81+ # Get only block number for a given RPC URL
82+ get_block_number () {
83+ local rpc_url=" $1 "
84+ cast block latest --rpc-url " $rpc_url " 2> /dev/null | grep " ^number" | awk ' {print $2}'
85+ }
86+
87+ # Check if l2geth is mining
88+ is_l2geth_mining () {
89+ local result=$( cast rpc eth_mining --rpc-url " $L2GETH_RPC_URL " 2> /dev/null | tr -d ' "' )
90+ [[ " $result " == " true" ]]
91+ }
92+
93+ # Start l2geth mining
94+ start_l2geth_mining () {
95+ log_info " Starting l2geth mining..."
96+ if cast rpc miner_start --rpc-url " $L2GETH_RPC_URL " > /dev/null 2>&1 ; then
97+ log_success " L2GETH mining started"
98+ return 0
99+ else
100+ log_error " Failed to start l2geth mining"
101+ return 1
102+ fi
103+ }
104+
105+ # Stop l2geth mining
106+ stop_l2geth_mining () {
107+ log_info " Stopping l2geth mining..."
108+ if cast rpc miner_stop --rpc-url " $L2GETH_RPC_URL " > /dev/null 2>&1 ; then
109+ log_success " L2GETH mining stopped"
110+ return 0
111+ else
112+ log_error " Failed to stop l2geth mining"
113+ return 1
114+ fi
115+ }
116+
117+ # Enable l2reth automatic sequencing
118+ enable_l2reth_sequencing () {
119+ log_info " Enabling L2RETH automatic sequencing..."
120+ if cast rpc rollupNode_enableAutomaticSequencing --rpc-url " $L2RETH_RPC_URL " > /dev/null 2>&1 ; then
121+ log_success " L2RETH automatic sequencing enabled"
122+ return 0
123+ else
124+ log_error " Failed to enable L2RETH automatic sequencing"
125+ return 1
126+ fi
127+ }
128+
129+ # Disable l2reth automatic sequencing
130+ disable_l2reth_sequencing () {
131+ log_info " Disabling L2RETH automatic sequencing..."
132+ if cast rpc rollupNode_disableAutomaticSequencing --rpc-url " $L2RETH_RPC_URL " > /dev/null 2>&1 ; then
133+ log_success " L2RETH automatic sequencing disabled"
134+ return 0
135+ else
136+ log_error " Failed to disable L2RETH automatic sequencing"
137+ return 1
138+ fi
139+ }
140+
141+ # Wait for a specific block to be reached
142+ wait_for_block () {
143+ local node_name=" $1 "
144+ local rpc_url=" $2 "
145+ local target_block=" $3 "
146+ local target_hash=" $4 "
147+
148+ log_info " Waiting for $node_name to reach block #$target_block (hash: $target_hash )..."
149+
150+ local start_time=$( date +%s)
151+ while true ; do
152+ local current_time=$( date +%s)
153+ local elapsed=$(( current_time - start_time))
154+ local block_info
155+
156+ if [[ $elapsed -gt $SYNC_TIMEOUT ]]; then
157+ log_error " Timeout waiting for $node_name to reach block #$target_block "
158+
159+ local current_block=$( echo " $block_info " | awk ' {print $1}' )
160+ local current_hash=$( echo " $block_info " | awk ' {print $2}' )
161+ log_error " $node_name is at block $current_block (hash: $current_hash )"
162+
163+ return 1
164+ fi
165+
166+
167+ if block_info=$( get_latest_block_info " $rpc_url " ) ; then
168+ local current_block=$( echo " $block_info " | awk ' {print $1}' )
169+ local current_hash=$( echo " $block_info " | awk ' {print $2}' )
170+
171+ if [[ " $current_block " -ge " $target_block " ]]; then
172+ if [[ " $current_block " -eq " $target_block " && " $current_hash " == " $target_hash " ]]; then
173+ log_success " $node_name reached target block #$target_block (hash: $target_hash )"
174+ return 0
175+ elif [[ " $current_block " -gt " $target_block " ]]; then
176+ log_success " $node_name surpassed target, now at block #$current_block (hash: $current_hash )"
177+ return 0
178+ else
179+ log_warning " $node_name at block #$current_block but hash mismatch: expected $target_hash , got $current_hash "
180+ fi
181+ fi
182+ fi
183+
184+ sleep $POLL_INTERVAL
185+ done
186+ }
187+
188+ # Check RPC connectivity for both nodes
189+ check_rpc_connectivity () {
190+ log_info " Checking RPC connectivity..."
191+
192+ if ! get_latest_block_info " $L2GETH_RPC_URL " > /dev/null; then
193+ log_error " Cannot connect to L2GETH at $L2GETH_RPC_URL "
194+ exit 1
195+ fi
196+
197+ if ! get_latest_block_info " $L2RETH_RPC_URL " > /dev/null; then
198+ log_error " Cannot connect to L2RETH at $L2RETH_RPC_URL "
199+ exit 1
200+ fi
201+
202+ log_success " Both nodes are accessible"
203+ }
0 commit comments