func NextECBlock(prev interfaces.IEntryCreditBlock) (interfaces.IEntryCreditBlock, error) { e := NewECBlock() // Handle the really unusual case of the first block. if prev == nil { e.GetHeader().SetPrevHeaderHash(primitives.NewHash(constants.ZERO_HASH)) e.GetHeader().SetPrevLedgerKeyMR(primitives.NewHash(constants.ZERO_HASH)) e.GetHeader().SetDBHeight(0) } else { v, err := prev.HeaderHash() if err != nil { return nil, err } e.GetHeader().SetPrevHeaderHash(v) v, err = prev.Hash() if err != nil { return nil, err } e.GetHeader().SetPrevLedgerKeyMR(v) e.GetHeader().SetDBHeight(prev.GetHeader().GetDBHeight() + 1) } if err := e.(*ECBlock).BuildHeader(); err != nil { return nil, err } return e, nil }