make public_key an abstractmethod, update docs
update docstrings