Thomas E Lackey
27fa54c6dc
1. Updates or replaces outdated dependencies (eg, replacing a version of the Prysm client with the latest zrnt). 2. Add support for parsing Bellatrix-era BeaconState and BeaconBlocks 3. Adds flags for toggling the processing of BeaconBlocks and BeaconState. This is particularly important because processing and storing the BeaconState at this time would be too expensive to really do (see: Temporarily disable BeaconState indexing #75 and [Feature] Reduce the Amount of DB Space the Beacon Chain Needs #71) 4. Fixes flaky event handling. The previous code would not reconnect in the case of errors with the SSE connection. This enables automatic reconnection in the case of error (default in the updated v2 SSE library dependency), and also adds a timeout so that if no event is received in 2.5x the block time, the SSE connection is closed and re-established. 5. Other refactoring and cleanup (eg, changing the type of slot from int to Slot (uint64)).
101 lines
4.3 KiB
Go
101 lines
4.3 KiB
Go
// VulcanizeDB
|
|
// Copyright © 2022 Vulcanize
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Affero General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU Affero General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
package beaconclient
|
|
|
|
// This interface captured what the events can be for processed event streams.
|
|
type ProcessedEvents interface {
|
|
Head | ChainReorg
|
|
}
|
|
|
|
// This struct captures the JSON representation of the head topic
|
|
type Head struct {
|
|
Slot string `json:"slot"`
|
|
Block string `json:"block"`
|
|
State string `json:"state"`
|
|
CurrentDutyDependentRoot string `json:"current_duty_dependent_root"`
|
|
PreviousDutyDependentRoot string `json:"previous_duty_dependent_root"`
|
|
EpochTransition bool `json:"epoch_transition"`
|
|
ExecutionOptimistic bool `json:"execution_optimistic"`
|
|
}
|
|
|
|
// This struct captures the JSON representation of the finalized_checkpoint topic.
|
|
type FinalizedCheckpoint struct {
|
|
Block string `json:"block"`
|
|
State string `json:"state"`
|
|
Epoch string `json:"epoch"`
|
|
ExecutionOptimistic bool `json:"execution_optimistic"`
|
|
}
|
|
|
|
// This struct captures the JSON representation of the chain_reorg topic.
|
|
type ChainReorg struct {
|
|
Slot string `json:"slot"`
|
|
Depth string `json:"depth"`
|
|
OldHeadBlock string `json:"old_head_block"`
|
|
NewHeadBlock string `json:"new_head_block"`
|
|
OldHeadState string `json:"old_head_state"`
|
|
NewHeadState string `json:"new_head_state"`
|
|
Epoch string `json:"epoch"`
|
|
ExecutionOptimistic bool `json:"execution_optimistic"`
|
|
}
|
|
|
|
// A struct to capture whats being written to the eth-beacon.slots table.
|
|
type DbSlots struct {
|
|
Epoch uint64 // The epoch.
|
|
Slot uint64 // The slot.
|
|
BlockRoot string // The block root
|
|
StateRoot string // The state root
|
|
Status string // The status, it can be proposed | forked | skipped.
|
|
}
|
|
|
|
// A struct to handle the details of an embedded Eth1-block (ie, the ExecutionPayload)
|
|
type DbExecutionPayloadHeader struct {
|
|
BlockNumber uint64
|
|
Timestamp uint64
|
|
BlockHash string
|
|
ParentHash string
|
|
StateRoot string
|
|
ReceiptsRoot string
|
|
TransactionsRoot string
|
|
}
|
|
|
|
// A struct to capture whats being written to eth-beacon.signed_block table.
|
|
type DbSignedBeaconBlock struct {
|
|
Slot uint64 // The slot.
|
|
BlockRoot string // The block root
|
|
ParentBlock string // The parent block root.
|
|
Eth1DataBlockHash string // The eth1 block_hash
|
|
MhKey string // The ipld multihash key.
|
|
ExecutionPayloadHeader *DbExecutionPayloadHeader // The ExecutionPayloadHeader (after Bellatrix only).
|
|
}
|
|
|
|
// A struct to capture whats being written to eth-beacon.state table.
|
|
type DbBeaconState struct {
|
|
Slot uint64 // The slot.
|
|
StateRoot string // The state root
|
|
MhKey string // The ipld multihash key.
|
|
}
|
|
|
|
// A structure to capture whats being written to the eth-beacon.known_gaps table.
|
|
type DbKnownGaps struct {
|
|
StartSlot uint64 // The start slot for known_gaps, inclusive.
|
|
EndSlot uint64 // The end slot for known_gaps, inclusive.
|
|
CheckedOut bool // Indicates if any process is currently processing this entry.
|
|
ReprocessingError string // The error that occurred when attempting to reprocess these entries.
|
|
EntryError string // The error that caused this entry to be added to the table. Could be null.
|
|
EntryTime string // The time this range was added to the DB. This can help us catch ranges that have not been processed for a long time due to some error.
|
|
EntryProcess string // The entry process that added this process. Potential options are StartUp, Error, ManualEntry, HeadGap.
|
|
}
|