Algorand
# Algorand

Algorand es una criptomoneda basada en tecnologías de cadenas de bloques (blockchain ) que aspira a ser escalable. La plataforma soporta Smart contracts, y su algoritmo de consenso se basa en una prueba de apuesta y un protocolo de acuerdo Bizantino. Su moneda nativo es ALGO.

## Historia

Algorand fue fundada en 2017 por Silvio Micali, un profesor del MIT. Algorand está compuesto de una empresa y una fundación. La Fundación Algorand maneja el crecimiento del ecosistema, la financiación de premios, investigaciones criptográficas, gobernanza on-chain y la descentralización de la red Algorand, incluyendo nodos. El desarrollo del protocolo de Algorand está supervisado por Algorand Inc, una corporación privada establecida en Boston.

La red de prueba de Algorand fue lanzada al público en abril de 2019, y la red principal en junio de 2019.

## Investigación

La Fundación Algorand es la organización paraguas para el núcleo del equipo de blockchain para criptografía y ciencias de la computación dirigida por el criptógrafo Tal Rabin.

Otros miembros notables del equipo de investigación son Craig Gentry y Shai Halevi.

## Diseño

### Algoritmo de consenso

Algorand usa una protocolo de acuerdo Bizantino que se basa en el proof of stake. Siempre que la mayoría del stake esté en manos no maliciosas, el protocolo puede tolerar usuarios maliciosos, consiguiendo consenso sin una autoridad central.

El consenso en Algorand requiere 3 pasos: proponer, confirmar y escribir el bloque en la blockchain. Los pasos son proponer, voto débil y voto de certificación.

La primera fase usa principios de la prueba de stake. Durante esta fase, un comité de usuarios en el sistema se selecciona de manera aleatoria, aunque de una manera ponderada, para proponer un nuevo bloque. La selección del comité se realiza mediante un proceso llamado "cryptographic sortition", donde cada usuario determina si están en el comité ejecutando un función random verificable (FRV). Si la FRV indica que el usuario es elegido, la VRF devuelve una prueba criptográfica que se puede usar para verificar que un usuario que el usuario está en el comité. La probabilidad de que un usuario esté en comité estará influenciada por el número de tokens que tiene dicho usuario en stake.

Después de determinar que un usuario está en el comité de selección del bloque, ese usuario puede proponer un bloque y lo disemina en la red para que sea analizado durante la 2ª fase. El usuario incluye una prueba criptográfica desde a FRV en su bloque propuesto para demostrar su participación en el comité.

En la 2ª fase un protocolo de acuerdo Bizantino se usa para votar en los bloques propuestos. En esta 2ª fase se forma un nuevo comité por medio de una sortición criptográfica. Cuando los usuarios han determinado que están en este comité de 2ª fase, analizan los bloques propuestos que reciben (incluyendo la verificación de la 1ª fase del comité) y votan si alguno de los bloques pueden ser adoptados. Si el comité de votación llega a un consenso en un nuevo bloque, entonces el nuevo bloque se disemina en la red.

Mediante el algoritmo de consenso de Algorand, la pertenencia en ambos comités cambia en cada fase. Esto protege a los usuarios contra ataques dirigidos, dado que un atacante no sabrá de antemano qué usuarios van a estar en el comité. 2 bloques diferentes de Algorand no pueden alcanzar consenso en la misma ronda. De acuerdo a un auditoria de seguridad externa, el modelo también tiene en cuenta aspectos temporales y acciones de los adversario, etc. Cuando el adversario tiene control sobre la entrega de mensajes.

### Smart contracts

Los contratos inteligentes en Algorand se conocen como ASC1 (Algorand Smart Contracts). Algorand diferencia los contratos en dos grandes categorías, Smart contracts y firmas inteligentes. El tipo de contrato que se escribe determinará cuándo y cómo la lógica del programa es evaluada. Los contratos de Algorand se escriben en TEAL, que es un lenguaje en ensamblador interpretado por una máquina virtual de Algorand (MVA) que corre en un nodo de Algorand.

