Skip to content

Commit

Permalink
some fixes to support running the explorer before genesis (holesky pr…
Browse files Browse the repository at this point in the history
…eparation)
  • Loading branch information
pk910 committed Aug 31, 2023
1 parent d64b870 commit 6bb0056
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 29 deletions.
1 change: 0 additions & 1 deletion handlers/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ func Index(w http.ResponseWriter, r *http.Request) {
"index/recentBlocks.html",
"index/recentEpochs.html",
"index/recentSlots.html",
"_svg/professor.html",
"_svg/timeline.html",
)

Expand Down
4 changes: 3 additions & 1 deletion handlers/slot.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,9 @@ func buildSlotPageData(blockSlot int64, blockRoot []byte) (*models.SlotPageData,
var blockData *rpctypes.CombinedBlockResponse
var err error
if blockSlot > -1 {
blockData, err = services.GlobalBeaconService.GetSlotDetailsBySlot(uint64(blockSlot), false)
if uint64(blockSlot) <= currentSlot {
blockData, err = services.GlobalBeaconService.GetSlotDetailsBySlot(uint64(blockSlot), false)
}
} else {
blockData, err = services.GlobalBeaconService.GetSlotDetailsByBlockroot(blockRoot, false)
}
Expand Down
48 changes: 35 additions & 13 deletions indexer/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,10 @@ func (client *IndexerClient) runIndexerClientLoop() {
defer utils.HandleSubroutinePanic("runIndexerClientLoop")

for {
err := client.runIndexerClient()
err := client.checkIndexerClient()
if err == nil {
err = client.runIndexerClient()
}
if err != nil {
client.retryCounter++
waitTime := 10
Expand All @@ -95,6 +98,19 @@ func (client *IndexerClient) runIndexerClientLoop() {
} else if client.retryCounter > 5 {
waitTime = 60
}

genesisTime := time.Unix(int64(utils.Config.Chain.GenesisTimestamp), 0)
genesisSince := time.Since(genesisTime)
fmt.Printf("genesis %v\n", int(genesisSince.Seconds()))
if genesisSince < 0 {
if genesisSince > (time.Duration)(0-waitTime)*time.Second {
waitTime = int(genesisSince.Abs().Seconds())
client.retryCounter = 0
logger.WithField("client", client.clientName).Infof("waiting for genesis (%v secs)", waitTime)
} else {
waitTime = 600
}
}
logger.WithField("client", client.clientName).Warnf("indexer client error: %v, retrying in %v sec...", err, waitTime)
time.Sleep(time.Duration(waitTime) * time.Second)
} else {
Expand All @@ -103,7 +119,7 @@ func (client *IndexerClient) runIndexerClientLoop() {
}
}

func (client *IndexerClient) runIndexerClient() error {
func (client *IndexerClient) checkIndexerClient() error {
// get node version
nodeVersion, err := client.rpcClient.GetNodeVersion()
if err != nil {
Expand All @@ -129,16 +145,6 @@ func (client *IndexerClient) runIndexerClient() error {
return fmt.Errorf("genesis fork version from RPC does not match the genesis fork version explorer configuration")
}

// get latest header
latestHeader, err := client.rpcClient.GetLatestBlockHead()
if err != nil {
return fmt.Errorf("could not get latest header: %v", err)
}
if latestHeader == nil {
return fmt.Errorf("could not find latest header")
}
client.setHeadBlock(latestHeader.Data.Root, uint64(latestHeader.Data.Header.Message.Slot))

// check syncronization state
syncStatus, err := client.rpcClient.GetNodeSyncing()
if err != nil {
Expand All @@ -149,7 +155,23 @@ func (client *IndexerClient) runIndexerClient() error {
}
client.isSynchronizing = syncStatus.Data.IsSyncing || syncStatus.Data.IsOptimistic
client.syncDistance = uint64(syncStatus.Data.SyncDistance)
if syncStatus.Data.IsSyncing || syncStatus.Data.IsOptimistic {

return nil
}

func (client *IndexerClient) runIndexerClient() error {
// get latest header
latestHeader, err := client.rpcClient.GetLatestBlockHead()
if err != nil {
return fmt.Errorf("could not get latest header: %v", err)
}
if latestHeader == nil {
return fmt.Errorf("could not find latest header")
}
client.setHeadBlock(latestHeader.Data.Root, uint64(latestHeader.Data.Header.Message.Slot))

// check latest header / sync status
if client.isSynchronizing {
return fmt.Errorf("beacon node is synchronizing")
}
if client.indexerCache.finalizedEpoch >= 0 && utils.EpochOfSlot(uint64(latestHeader.Data.Header.Message.Slot)) <= uint64(client.indexerCache.finalizedEpoch) {
Expand Down
10 changes: 3 additions & 7 deletions templates/index/recentBlocks.html
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,10 @@ <h5 class="card-title d-flex justify-content-between align-items-center" style="
</tbody>
{{ else }}
<tbody>
<tr style="height: 430px;">
<td></td>
<td style="vertical-align: middle;" colspan="4">
<div class="img-fluid mx-auto p-3 d-flex align-items-center" style="max-height: 400px; width: auto; overflow: hidden;">
{{ template "timeline_svg" }}
</div>
<tr>
<td style="text-align: center;" colspan="6">
no blocks found
</td>
<td></td>
</tr>
</tbody>
{{ end }}
Expand Down
10 changes: 3 additions & 7 deletions templates/index/recentEpochs.html
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,10 @@ <h5 class="card-title d-flex justify-content-between align-items-center" style="
</tbody>
{{ else }}
<tbody>
<tr style="height: 430px;">
<td></td>
<td style="vertical-align: middle;" colspan="4">
<div class="img-fluid mx-auto p-3 d-flex align-items-center" style="max-height: 400px; width: auto; overflow: hidden;">
{{ template "professor_svg" }}
</div>
<tr>
<td style="text-align: center;" colspan="5">
no epochs found
</td>
<td></td>
</tr>
</tbody>
{{ end }}
Expand Down

0 comments on commit 6bb0056

Please sign in to comment.