Running a notary service
------------------------

At present we have several prototype notary implementations:

1. ``SimpleNotaryService`` (single node) -- commits the provided transaction input states without any validation.
2. ``ValidatingNotaryService`` (single node) -- retrieves and validates the whole transaction history
   (including the given transaction) before committing.
3. ``RaftValidatingNotaryService`` (distributed) -- functionally equivalent to ``ValidatingNotaryService``, but stores
   the committed states in a distributed collection replicated and persisted in a Raft cluster. For the consensus layer
   we are using the `Copycat <http://atomix.io/copycat/>`_ framework.

To have a node run a notary service, you need to set appropriate configuration values before starting it
(see :doc:`corda-configuration-file` for reference).

For ``SimpleNotaryService``, simply add the following service id to the list of advertised services:

.. parsed-literal::

  extraAdvertisedServiceIds: "net.corda.notary.simple"

For ``ValidatingNotaryService``, it is:

.. parsed-literal::

  extraAdvertisedServiceIds: "net.corda.notary.validating"

Setting up a ``RaftValidatingNotaryService`` is currently slightly more involved and is not recommended for prototyping
purposes. There is work in progress to simplify it. To see it in action, however, you can try out the :ref:`notary-demo`.