func (e *ServerFault) UpdateState(state interfaces.IState) error { core, err := e.MarshalCore() if err != nil { return err } verifiedSignatures := 0 for _, fullSig := range e.SignatureList.List { sig := fullSig.GetSignature() v, err := state.VerifyAuthoritySignature(core, sig, state.GetLeaderHeight()) if err != nil { if err.Error() != "Signature Key Invalid or not Federated Server Key" { return err } } if v == 1 { verifiedSignatures++ } } feds := state.GetFedServers(state.GetLeaderHeight()) //50% threshold if verifiedSignatures <= len(feds)/2 { return fmt.Errorf("Quorum not reached for ServerFault") } //TODO: do /* state.AddFedServer(e.DBHeight, e.IdentityChainID) state.UpdateAuthorityFromABEntry(e) */ return nil }
func (c *RemoveFederatedServer) UpdateState(state interfaces.IState) error { if len(state.GetFedServers(c.DBHeight)) != 0 { state.RemoveFedServer(c.DBHeight, c.IdentityChainID) } if state.GetOut() { state.Println(fmt.Sprintf("Removed Federated Server: %x", c.IdentityChainID.Bytes()[:4])) } authorityDeltaString := fmt.Sprintf("AdminBlock (RemoveFedMsg DBHt: %d) \n v %s", c.DBHeight, c.IdentityChainID.String()[5:10]) state.AddAuthorityDelta(authorityDeltaString) state.UpdateAuthorityFromABEntry(c) return nil }
func (fs *FaultState) HasEnoughSigs(state interfaces.IState) bool { if fs.SigTally(state) > len(state.GetFedServers(fs.FaultCore.DBHeight))/2 { return true } return false }
func (m *FullServerFault) HasEnoughSigs(state interfaces.IState) bool { if m.SigTally(state) > len(state.GetFedServers(m.DBHeight))/2 { return true } return false }