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
}
Example #3
0
func (fs *FaultState) HasEnoughSigs(state interfaces.IState) bool {
	if fs.SigTally(state) > len(state.GetFedServers(fs.FaultCore.DBHeight))/2 {
		return true
	}
	return false
}
Example #4
0
func (m *FullServerFault) HasEnoughSigs(state interfaces.IState) bool {
	if m.SigTally(state) > len(state.GetFedServers(m.DBHeight))/2 {
		return true
	}
	return false
}