// Validate the message, given the state. Three possible results: // < 0 -- Message is invalid. Discard // 0 -- Cannot tell if message is Valid // 1 -- Message is valid func (m *DBStateMsg) Validate(state interfaces.IState) int { if m.DirectoryBlock == nil || m.AdminBlock == nil || m.FactoidBlock == nil || m.EntryCreditBlock == nil { //We need the basic block types return -1 } if state.GetNetworkID() != m.DirectoryBlock.GetHeader().GetNetworkID() { //Wrong network ID return -1 } dbheight := m.DirectoryBlock.GetHeader().GetDBHeight() if dbheight != state.GetHighestCompletedBlock()+1 && dbheight != 0 { //We only expect the next height return -1 } if m.DirectoryBlock.GetHeader().GetNetworkID() == constants.MAIN_NETWORK_ID { key := constants.CheckPoints[dbheight] if key != "" { if key != m.DirectoryBlock.DatabasePrimaryIndex().String() { //Key does not match checkpoint return -1 } } } return 1 }
func HandleV2Heights(state interfaces.IState, params interface{}) (interface{}, *primitives.JSONError) { h := new(HeightsResponse) h.DirectoryBlockHeight = int64(state.GetHighestCompletedBlock()) h.LeaderHeight = int64(state.GetTrueLeaderHeight()) h.EntryBlockHeight = int64(state.GetHighestCompletedBlock()) h.EntryHeight = int64(state.GetEntryDBHeightComplete()) h.MissingEntryCount = int64(state.GetMissingEntryCount()) h.EntryBlockDBHeightProcessing = int64(state.GetEntryBlockDBHeightProcessing()) h.EntryBlockDBHeightComplete = int64(state.GetEntryBlockDBHeightComplete()) return h, nil }
func HandleV2DirectoryBlockHead(state interfaces.IState, params interface{}) (interface{}, *primitives.JSONError) { h := new(DirectoryBlockHeadResponse) d := state.GetDirectoryBlockByHeight(state.GetHighestCompletedBlock()) h.KeyMR = d.GetKeyMR().String() return h, nil }