@@ -169,11 +169,11 @@ cd contrib/
169169
170170# Clone local-network repo if it doesn't exist
171171if [ ! -d " local-network" ]; then
172- git clone https://github.com/semiotic-ai/local-network.git
172+ # git clone https://github.com/semiotic-ai/local-network.git
173+ git clone https://github.com/edgeandnode/local-network.git
173174 cd local-network
174175 # Checkout to the horizon branch
175- # git checkout suchapalaver/test/horizon
176- git checkout semiotic/horizon_upgrade
176+ git checkout horizon
177177 cd ..
178178fi
179179
@@ -212,6 +212,42 @@ if [ -z "$code" ] || [ "$code" == "0x" ]; then
212212 exit 1
213213fi
214214echo " Controller contract verified."
215+
216+ # Ensure HorizonStaking is deployed before proceeding (agent needs it at startup)
217+ staking_address=$( jq -r ' ."1337".HorizonStaking.address' horizon.json)
218+ echo " Checking HorizonStaking contract at $staking_address "
219+
220+ # Retry a few times in case chain is still settling
221+ for i in {1..30}; do
222+ code=$( docker exec chain cast code $staking_address --rpc-url http://localhost:8545 2> /dev/null || true)
223+ if [ -n " $code " ] && [ " $code " != " 0x" ]; then
224+ echo " HorizonStaking contract verified."
225+ break
226+ fi
227+ echo " HorizonStaking not deployed yet (attempt $i /30), waiting..."
228+ sleep 2
229+ done
230+
231+ # If still no code, force a redeploy of graph-contracts and re-verify
232+ if [ -z " $code " ] || [ " $code " = " 0x" ]; then
233+ echo " HorizonStaking has no code; forcing graph-contracts redeploy..."
234+ # Keep files as files (avoid bind mount turning into a directory)
235+ echo " {}" > horizon.json
236+ echo " {}" > subgraph-service.json
237+ docker compose up -d --no-deps --force-recreate graph-contracts
238+ # Wait for contracts to be deployed
239+ interruptible_wait 300 ' docker ps -a | grep graph-contracts | grep -q "Exited (0)"' " Waiting for contracts to be deployed (redeploy)"
240+
241+ # Re-check the (possibly updated) staking address and code
242+ staking_address=$( jq -r ' ."1337".HorizonStaking.address' horizon.json)
243+ echo " Re-checking HorizonStaking contract at $staking_address "
244+ code=$( docker exec chain cast code $staking_address --rpc-url http://localhost:8545 2> /dev/null || true)
245+ if [ -z " $code " ] || [ " $code " = " 0x" ]; then
246+ echo " ERROR: HorizonStaking still has no code after redeploy. Check 'docker logs graph-contracts'."
247+ exit 1
248+ fi
249+ echo " HorizonStaking contract verified after redeploy."
250+ fi
215251echo " Contract deployment successful."
216252
217253docker compose up -d tap-contracts
@@ -224,43 +260,47 @@ interruptible_wait 300 'docker ps | grep block-oracle | grep -q healthy' "Waitin
224260
225261# export INDEXER_AGENT_SOURCE_ROOT=/home/neithanmo/Documents/Work/Semiotic/indexer-rs/indexer-src
226262# If INDEXER_AGENT_SOURCE_ROOT is set, use dev override; otherwise start only indexer-agent
263+ # export INDEXER_AGENT_SOURCE_ROOT=/home/neithanmo/Documents/Work/Semiotic/indexer-rs/indexer-agent
227264if [[ -n " ${INDEXER_AGENT_SOURCE_ROOT:- } " ]]; then
228- echo " ***********INDEXER_AGENT_SOURCE_ROOT set; using dev override for indexer-agent...************"
229- docker compose up -d indexer-agent
230-
265+ echo " INDEXER_AGENT_SOURCE_ROOT set; using dev override for indexer-agent."
266+ docker compose -f docker-compose.yaml -f overrides/indexer-agent-dev/indexer-agent-dev.yaml up -d
231267else
232- echo " ***** Starting indexer-agent from image... ***** "
268+ echo " Starting indexer-agent from oficial release "
233269 docker compose up -d indexer-agent
234270fi
235271
236272echo " Waiting for indexer-agent to be healthy..."
237273# timeout 300 bash -c 'until docker ps | grep indexer-agent | grep -q healthy; do sleep 5; done'
238274interruptible_wait 300 ' docker ps | grep indexer-agent | grep -q healthy' " Waiting for indexer-agent to be healthy"
239275
276+ # Ensure indexer-agent DB migrations completed (denylist tables must exist)
277+ echo " Waiting for indexer-agent DB migrations (denylist tables) ..."
278+ # Use double-quoted outer string to avoid single-quote escaping issues in SQL
279+ interruptible_wait 180 " docker exec postgres psql -U postgres -d indexer_components_1 -tAc \" SELECT to_regclass('public.scalar_tap_denylist')\" | grep -q scalar_tap_denylist" " Waiting for scalar_tap_denylist table"
280+ interruptible_wait 180 " docker exec postgres psql -U postgres -d indexer_components_1 -tAc \" SELECT to_regclass('public.tap_horizon_denylist')\" | grep -q tap_horizon_denylist" " Waiting for tap_horizon_denylist table"
281+
240282echo " Starting subgraph deployment..."
241283docker compose up --build -d subgraph-deploy
242- sleep 10 # Give time for subgraphs to deploy
284+ # Wait for subgraph-deploy job to complete successfully, mirroring docker-compose depends_on
285+ interruptible_wait 600 ' docker ps -a | grep subgraph-deploy | grep -q "Exited (0)"' " Waiting for subgraph-deploy to complete successfully"
243286
244287echo " Starting TAP services..."
288+
289+ # Ensure Redpanda is running before starting services that depend on it
290+ echo " Ensuring redpanda is running..."
291+ docker compose up -d redpanda
292+ echo " Waiting for redpanda to be healthy..."
293+ interruptible_wait 300 ' docker ps | grep redpanda | grep -q healthy' " Waiting for redpanda to be healthy"
294+
245295echo " Starting tap-aggregator..."
246296docker compose up -d tap-aggregator
247297sleep 10
248298
249- # tap-escrow-manager requires subgraph-deploy
299+ # tap-escrow-manager requires subgraph-deploy and redpanda
250300echo " Starting tap-escrow-manager..."
251301docker compose up -d tap-escrow-manager
252- # timeout 90 bash -c 'until docker ps --filter "name=^tap-escrow-manager$" --format "{{.Names}}" | grep -q "^tap-escrow-manager$"; do echo "Waiting for tap-escrow-manager container to appear..."; sleep 5; done'
253302interruptible_wait 90 ' docker ps --filter "name=^tap-escrow-manager$" --format "{{.Names}}" | grep -q "^tap-escrow-manager$"' " Waiting for tap-escrow-manager container to appear"
254303
255- # Start redpanda if it's not already started (required for gateway)
256- if ! docker ps | grep -q redpanda; then
257- echo " Starting redpanda..."
258- docker compose up -d redpanda
259- echo " Waiting for redpanda to be healthy..."
260- # timeout 300 bash -c 'until docker ps | grep redpanda | grep -q healthy; do sleep 5; done'
261- interruptible_wait 300 ' docker ps | grep redpanda | grep -q healthy' " Waiting for redpanda to be healthy"
262- fi
263-
264304# Get the network name used by local-network
265305NETWORK_NAME=$( docker inspect graph-node --format=' {{range $net,$v := .NetworkSettings.Networks}}{{$net}}{{end}}' )
266306echo " Local-network is using Docker network: $NETWORK_NAME "
298338
299339# Run the custom services using the override file
300340docker compose -f docker-compose.yml -f docker-compose.override.yml up --build -d
301- rm docker-compose.override.yml
341+
302342
303343# Wait for indexer-service and tap-agent to be healthy with better timeouts
304344echo " Waiting for indexer-service to be healthy..."
345385# Gateway now generates config with increased max_lag_seconds in gateway/run.sh
346386# -v "$(pwd)/local-network/tap-contracts.json":/opt/tap-contracts.json:ro \
347387docker run -d --name gateway \
348- --network local-network_default \
388+ --network " $NETWORK_NAME " \
349389 -p 7700:7700 \
350390 -v " $( pwd) /local-network/horizon.json" :/opt/horizon.json:ro \
351391 -v " $( pwd) /local-network/tap-contracts.json" :/opt/contracts.json:ro \
@@ -376,6 +416,7 @@ interruptible_wait 100 'curl -f http://localhost:7700/ > /dev/null 2>&1' "Waitin
376416# Build and start indexer-cli for integration testing (last container)
377417echo " Building and starting indexer-cli container for integration testing..."
378418docker compose -f docker-compose.yml -f docker-compose.override.yml up --build -d indexer-cli
419+ rm -f docker-compose.override.yml
379420
380421# Wait for indexer-cli to be ready
381422echo " Waiting for indexer-cli to be ready..."
0 commit comments