()
| 193 | } |
| 194 | |
| 195 | func (ds *DbftService) CheckSignatures() error { |
| 196 | log.Debug() |
| 197 | |
| 198 | //check if get enough signatures |
| 199 | if ds.context.GetSignaturesCount() >= ds.context.M() { |
| 200 | //build block |
| 201 | block := ds.context.MakeHeader() |
| 202 | sigs := make([]SignaturesData, ds.context.M()) |
| 203 | for i, j := 0, 0; i < len(ds.context.Bookkeepers) && j < ds.context.M(); i++ { |
| 204 | if ds.context.Signatures[i] != nil { |
| 205 | sig := ds.context.Signatures[i] |
| 206 | sigs[j].Index = uint16(i) |
| 207 | sigs[j].Signature = sig |
| 208 | |
| 209 | block.Header.SigData = append(block.Header.SigData, sig) |
| 210 | j++ |
| 211 | } |
| 212 | } |
| 213 | |
| 214 | block.Header.Bookkeepers = ds.context.Bookkeepers |
| 215 | |
| 216 | //fill transactions |
| 217 | block.Transactions = ds.context.Transactions |
| 218 | |
| 219 | hash := block.Hash() |
| 220 | isExist, err := ds.ledger.IsContainBlock(hash) |
| 221 | if err != nil { |
| 222 | log.Errorf("DefLedger.IsContainBlock Hash:%x error:%s", hash, err) |
| 223 | return err |
| 224 | } |
| 225 | if !isExist { |
| 226 | // save block |
| 227 | result, err := ds.ledger.ExecuteBlock(block) |
| 228 | if err != nil { |
| 229 | return fmt.Errorf("CheckSignatures DefLedgerPid.RequestFuture Height:%d error:%s", block.Header.Height, err) |
| 230 | } |
| 231 | err = ds.ledger.SubmitBlock(block, result) |
| 232 | if err != nil { |
| 233 | return fmt.Errorf("CheckSignatures DefLedgerPid.RequestFuture Height:%d error:%s", block.Header.Height, err) |
| 234 | } |
| 235 | |
| 236 | ds.context.State |= BlockGenerated |
| 237 | payload := ds.context.MakeBlockSignatures(sigs) |
| 238 | ds.SignAndRelay(payload) |
| 239 | } |
| 240 | } |
| 241 | return nil |
| 242 | } |
| 243 | |
| 244 | func (ds *DbftService) ChangeViewReceived(payload *p2pmsg.ConsensusPayload, message *ChangeView) { |
| 245 | log.Debug() |
no test coverage detected