Parity vs Geth vs Quorum en Redes Permisionadas

Todas las ideas y comentarios expuestos en este artículo son mi punto de vista personal en base a las experiencias que tuve trabajando con los distintos clientes de ethereum.

Geth es el cliente Etherum desarrollado en Golang. Existen muchos artículos alrededor de Geth, una característica principal para redes permisionadas es que no permite que el precio del gas sea 0.

Quorum es un fork de Geth desarrollado por JpMorgan para ser utilizado de manera permisionada a nivel empresarial, y por tal motivo cuenta con ciertas características como precio de gas 0, restringir el acceso a la red a ciertos nodos participantes y poder enviar transacciones privadas a nivel de nodo.

Parity es otro cliente de Ethereum y a diferencia de Geth, este se encuentra desarrollado en Rust. Además Parity posee muchas características para una red permisionada, como el Secret Store, poder enviar transacciones privadas, permisionado a nivel de address en distintas capas de la blockchain.

Vamos a revisar cada una de estas capas y comentar las diferencias de cada implementación de cliente Ethereum en el uso de una red permisionada.

Storage

El storage es la parte de la blockchain que guarda el estado global, por lo general se utiliza una base de datos Key/value.

Geth utiliza LevelDB así como Quorum.

Parity utiliza RocksDB según los propios desarrolladores porque tiene mejor performance que LevelDB[1], pero a la vez se encuentran probando ParityDB para reemplazar algunas funcionalidades de RockDB por problemas de performance[2] y la cual ya se puede probar.

Secret Store

El Secret Store es el lugar donde se almacenan los secretos para tareas de encriptación/desencriptación.

Geth no cuenta con un Secret Store.

Quorum tiene Constellation y Tessera, las cuales son redes paralelas a Geth que se encarga de gestionar las transacciones privadas, secretos, encriptación y desencriptación de los datos enviados en una transacción privada

Parity por su lado cuenta con un Secret Store, el cual a diferencia de Quorum es parte de la misma red permisionada. Una parte de los nodos de la red pueden formar una red Secret Store cuya tarea será la generación de llaves privadas, secretos, encriptación y desencriptación. La llave privada se divide en partes, y cada una de estas partes es almacenada por cada miembro de la red del secret store. Para poder reconstruir y obtener toda la llave se definen reglas a nivel de smart contract.

Transacciones Privadas

Geth no cuenta con transacciones privadas de facto.

Quorum se apoya en Constallation o Tessera para poder brindar transacciones privadas, las cuales son a nivel de nodo, lo que quiere decir que cualquier cuenta del nodo puede ver las transacciones privadas realizadas por otra cuenta del mismo nodo. Actualmente Quorum se encuentra trabajando para poder brindar transacciones privadas de address hacia address.

Parity se apoya en el Secret Store comentado en la parte de arriba para poder brindar transacciones privadas. La manera como ellos implementan este mecanismo es agnostico del cliente de Ethereum, pudiendo ser implementado en Geth. Parity crea un contrato público especial en el cual se guarda el código y el estado del contrato privado de manera encriptada. Se apoya en ciertos validadores los cuales son los únicos que pueden cambiar la información del estado y del código del contrato.

La ventaja de Parity esta en que se puede enviar transacciones privadas entre address, la desventaja es que solo permite una transacción privada por bloque, actualmente se encuentran trabajando para permitir multiples transacciones privadas.

Permisos

Parity tiene varias características construidas para el permisionado, las cuales fueron realizadas para el proyecto Web Energy, en este sentido Parity cuenta con permisos a nivel de network, con lo cual puedes determinar que tu nodo se comunique con ciertos nodos y todo seteado a nivel de contrato inteligente.

Otra característica importante es el poder limitar los tipos de transacciones que puede realizar una cuenta(transacción básica, creación de contrato, llamada de contrato), y tener todas estas reglas también a nivel de contrato inteligente.

Además en Parity se puede setear un whitelist que tenga las cuentas para las cuales el precio del gas será 0, así como poder setear y regular el precio del gas que una cuenta usará, y estas reglas también se almacenan en el contrato inteligente.

Quorum te permite restringir el acceso a la red mediante un archivo permissioned-nodes.json.

Consenso

En redes permisionadas de blockchain es ideal utilizar un consenso que no sea proof of work. Geth, Quorum y Parity tienen consensos utilizando el mecanismo de proof of authority, en el cual un conjunto de nodos validadores son los encargados de generar los bloques.

Parity puede tener las cuentas validadoras seteadas en un contrato inteligente. Cuenta con Aura, Tendermint (el cual tiene bugs y están cambiando por Substrate). Además de poder recompensar a los validadores en base a una lógica que se encuentra en contrato inteligente.

Geth no cuenta con consensos BFT (Bizantine Fault Tolerance), lo cual es una gran desventaja ya que si un nodo es hackeado, este puede falsear las transacciones.

Quorum cuenta con IBFT, el cual es bizantine fault tolerance y soporta mayores transacciones por segundo a diferencia de los demás clientes.

Para un mayor análisis de los diferentes consensos mi compañero de trabajo realizará un artículo.

Conclusiones

Para el caso de las redes permisionadas es muy importante que esta pueda contar con varias capas de permisionado, y mejor aún si todo esta configuración es realizada a nivel de contrato inteligente, lo que hace que sea más seguro. Para este caso el ganador es Parity, al contar con varias opciones y además de trabajarlas en un proyecto como Web Energy que verá la luz el 2019.

También es muy importante que el costo del gas sea 0, porque en el caso de que tengamos un costo, esto puede desencadenar en que se terminen nuestras reservas de ethers seteados en el genesis. Esta característica la cumplen muy bien Quorum y Parity.

Las transacciones privadas son importantes ya que distintas empresas que formen una red privada pueden desear compartir ciertos secretos o una empresa podría tener datos privados que no desea que sean vistos por la competencia. Para este escenario Parity y Quorum lleva la delantera al tener transacciones privadas, pero todavía tiene que trabajar para poder tener varias transacciones privadas por bloque en el caso de Parity y transacciones de cuenta a cuenta en el caso de Quorum.

Referencias

[1] https://ethereum.stackexchange.com/questions/13639/database-used-for-parity

[2] https://github.com/paritytech/parity-ethereum/issues/7865

--

--