> What is the purpose of this function? 

Returns the state of the grader.
Note: not all graders have to save their state. The list of graders that have to save their state is [here](https://github.com/edx/edx-platform/blob/anton/video-player-grading/common/lib/xmodule/xmodule/video_module/video_scoring.py#L86).

> Contrarily to `getGrader`, that must be implement in every derived class (hence the throw Error statement in it), `getState` is only used in GradeOnPercent.

`getGrader` is required to redefine in every derived class.
`getState` is optional. That's why it does not throw an exception.
`getProgress ` is `GradeOnPercent ` grader specific method.

[There](https://github.com/edx/edx-platform/blob/anton/video-player-grading/common/lib/xmodule/xmodule/js/src/video/11_grader.js#L188) is you can find a function that grabs states from graders.

Current solution makes the code easily extensible.