# Qué es PorraChain

**PorraChain** es una plataforma que permite realizar apuestas de una forma descentralizada gracias a la existencia de los roles de apostantes y validadores. En principio, el smart contract corre sobre la blockchain de Polygon y utiliza su moneda nativa, MATIC, como medio de pago. El contrato inteligente **utiliza un sistema de consenso entre los participantes** para establecer el resultado correcto de la apuesta.

<figure><img src="https://862630079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSuzbdymQGrV5t2c4lubv%2Fuploads%2F4TUQAgUJUxwQkFjcRJH1%2F1.png?alt=media&#x26;token=39ec32df-d1c5-46c9-a0b8-d87588102ab6" alt=""><figcaption><p>Portada PorraChain</p></figcaption></figure>

## Cómo funciona PorraChain

El **objetivo de PorraChain es bien sencillo: permitir a los jugadores participar en porras de partidos de manera segura y sencilla**. No hay límites a la hora de participar en una porra; únicamente se necesita tener instalada la cartera de MetaMask y algunas monedas de MATIC para pagar las diferentes entradas (abajo explicaremos los distintos modos de participación) y los costes de la red.

Para asegurar el correcto desarrollo de una apuesta, los participantes pueden añadir su pronóstico a un partido y también pueden actuar como validadores del mismo. La labor de los primeros es evidente: establecen su apuesta y esperan a que se resuelva el resultado del encuentro.

En cambio, el rol del validador es nuevo con respecto a cómo suelen funcionar las apuestas tradicionales. Para entender la utilidad de los validadores tenemos que ser conscientes de cómo funciona la blockchain. Así que pongamos algo de contexto.

### Blockchain y oráculos

Uno de los mayores desafíos de la tecnología blockchain es manejar la separación existente entre la información on-chain y la información off-chain, es decir, l**a comunicación entre datos del mundo exterior con el nucleo de la cadena de bloques**. Recordemos que en la blockchain residen datos inmutables que han de ser validados por todos los participantes de la red. Es por tanto, complicado obtener e introducir datos del exterior dentro de la cadena porque el mero hecho de hacerlo incrementa el riesgo de corromper todo el sistema.&#x20;

Para salvar este problema existe lo que se conoce como oráculos. **Los oráculos no son más que sistemas que recopilan información del exterior tales como temperaturas, precios, etc. y la introducen en la blockchain para que los contratos inteligentes puedan operar con ella**.&#x20;

<figure><img src="https://862630079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSuzbdymQGrV5t2c4lubv%2Fuploads%2FlopqyA9g082q7S33O3yR%2F2.png?alt=media&#x26;token=b9759483-55b3-4af4-88a8-dd5c2ec6039b" alt=""><figcaption><p>Blockchain y oráculos</p></figcaption></figure>

Aunque es un resumen bastante simplificado, la esencia de la responsabilidad queda bastante definida: son los encargados de contarle a la blockchain cómo es el mundo fuera de la blockchain.

### Resultado final de un partido

Bien, ahora que hemos visto qué son los oráculos y cúal es su responsabilidad, podremos entender mejor la problemática que se intenta acometer en PorraChain: decidir el resultado de un partido. Este problema se puede solventar utilizando los mencionados oráculos, pero es algo complejo y costoso, así que se decidió tirar por otra opción: en lugar de utilizar oráculos, el resultado de un partido se decide de manera descentralizada a travñes del consenso de los validadores. **En PorraChain, los validadores son los oraculos**, los encargados de decirle a la blockchain cómo es el mundo real.

Para asegurar un proceso lo más justo posible, el sistema de consenso de PorraChain se basa en la mezcla de garantías, incentivos y castigos, de tal manera que aquellos validadores con conductas malintencionadas sufrirán castigos. Los pasos que ha de seguir un validador son los siguientes:

* [x] Depositar una garantía para poder participar como oráculo
* [x] Una vez el partido acaba, introducir el resultado del mismo
* [x] Una vez se consensua el resultado, recoger la garantía más las comisiones de los apostantes como recompensa por su participación como validador.

El último punto solo es posible si el validador vota y su voto pertenece al voto mayoritario.  De cualquier otra manera perderá su garantía.

#### ¿Pero, CÓMO puede el contrato inteligente determinar el resultado de manera efectiva?

La respuesta está relacionada con la teoría de juegos, y es que los validadores tenderán a validar los resultados de manera correcta puesto que en juego está su garantía y porque por otra parte tendrá a otros validadores que tampoco quieren perder su garantía, siendo la solución optima el no mentir con el resultado.&#x20;

Incluso, si el sistema descrito no desalienta las intenciones de un participante fraudulento, el hecho de no saber qué validaciones están introduciendo los demás validadores debería hacerlo. El contrato inteligente establece, durante la fase da validación, un tiempo en el cual los validadores aportan su voto sin que se pueda conocer el voto de los demás y, adicionamente, un mínimo de un 51% de dominio del resultado elegido como ganador.&#x20;

## Pasos a seguir para realizar una apuesta sobre un partido

Para realizar una apuesta tendrás que estar logueado en la web, encontrarte en la red de Polygon, haber seleccionado el partido sobre el cual quieres apostar y tener en tu monedero algunas monedas de MATIC, puesto que actualmente el precio por apuesta son 6 MATIC (puede variar), de los cuales 5 MATIC irán a la pool del bote para el premio de los apostantes, y 1 MATIC va a la pool de los validadores que se utiliza para premiar la labor de los mismos una vez se decide el resultado del partido.

Si cumples esos requisitos, es cuestión de introducir un resultado y pinchar en el botón "Apostar" para guardar tu apuesta. También, podrás retirar la apuesta siempre y cuando el partido no haya comenzado. **Es importante mencionar que solo podrás introducir/retirar una apuesta si el partido aún no ha empezado. Una vez comience el partido no podrás hacer ninguna modificación de la misma.**

<figure><img src="https://862630079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSuzbdymQGrV5t2c4lubv%2Fuploads%2FhnABMtxok0MuvEmhUKbC%2F3.png?alt=media&#x26;token=5d0c5c06-2bad-4041-ae2d-a6fa5d7092bd" alt=""><figcaption><p>Cómo realizar tu apuesta</p></figcaption></figure>

## Pasos a seguir para validar el resultado de un partido

Para colaborar como validador, deberás estar logueado en la web, encontrarte en la red de Polygon, haber seleccionado el partido que quieres validar y tener en tu monedero algunas monedas de MATIC. **Actualmente debes depositar 15 MATIC en concepto de garantía. De esta forma se pretende minimizar las conducas fraudulentas y que todos los validadores consensuen un resultado con garantías**. Al igual que ocurre con las apuestas, los validadores podrán ser validadores/dejar de serlo, es decir, hacer modificaciones, siempre y cuando el partido no haya comenzado.

Por tanto, el paso uno es apuntarte como validador de un partido. Al igual que ocurre con las apuestas, esto solo se puede hacer si el partido no ha comenzado. El coste de participar como validador son 15 MATIC, pero de nuevo, esta cantidad será devuelta tan pronto se alcance un consenso en el resultado, o se alcancen 24H después de que acabe el partido y no se haya escogido un resultado.

<figure><img src="https://862630079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSuzbdymQGrV5t2c4lubv%2Fuploads%2Fdgbk2NVjEmEQUsf05FGk%2F4.png?alt=media&#x26;token=b4f54c69-e6cd-4cdf-b7aa-02fac392b844" alt=""><figcaption><p>Participando como validador - Paso 1</p></figcaption></figure>

Una vez seas validador y hayas depositado tu garantía, verás que aparece una nueva sección en el partido en la cual puedes introducir el resultado del mismo una vez finalice. **Se ha establecido que un partido finaliza 180 minutos después de su inicio. Es un tiempo amplio con el que se pretende cubrir el tiempo reglamentario y posibles tiempos adicionales**.

Durante el tiempo en el que está en juego el partido, la sección de validación estará deshabilitada y como decimos, una vez pasen 180 minutos del inicio del partido se podrá aportar el resultado.

<figure><img src="https://862630079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSuzbdymQGrV5t2c4lubv%2Fuploads%2FGyHXU4TVj3Of9pBJfuyA%2F5.png?alt=media&#x26;token=6eef3b4e-0696-4d2e-a577-7b9eaeb4dfc0" alt=""><figcaption><p>Participando como validador - Paso 2</p></figcaption></figure>

## Estados de un partido

1. **ABIERTO** -> Se puede realizar/eliminar apuestas y apuntarte/desapuntarte como validador
2. **EN JUEGO** -> No se puede hacer nada, pero en este punto se pueden presentar dos escenarios:
   1. No hay apostantes -> La porra termina. Si hay validadores podrán recuperar su garantía.
   2. No hay suficientes validadores -> Se ha establecido, con la intención de alcanzar la máxima garantía de un resultado óptimo, que debe haber, como mínimo, la mitad de validadores que de apostantes. Concretamente, más del 51% del total de apostantes. Por ejemplo, en un partido con 10 apuestas deberán existir, al menos, 6 validadores para que la porra pueda continuar. De no cumplirse esto, la porra termina. Si hay apostantes, éstos podrán recuperar todo el dinero depositado (apuesta + comisión de validadores)
3. **EN VALIDACIÓN**. Los validadores pueden ir introduciendo su resultado. **Para alcanzar un consenso, es necesario que voten TODOS los validadores.** Aquí se presentan tres posibles escenarios:
   1. Tras 24 horas, no han votado todos los validadores. En ese caso el partido queda como suspendido. **Los apostantes podrán recoger todo su dinero (apuesta más comisión para los validadores) y los validadores que hayan aportado su resultado podrán recoger su garantía. Por otra parte, los validadores que no hayan ejercido su rol y no hayan emitido su voto, perderán su garantía**. De esta forma se buscan incentivar la participación de los validadores.
   2. Votan el 100% de los validadores pero **NO SE LLEGA A UN CONSENSO**. **Para que haya consenso, el resultado ganador debe superar el 51% del total de votos**. Esto se establece así para garantizar un resultado justo. Si se está aún dentro de las 24H de validación, los validadores pueden cambiar su resultado. Como no pueden ver qué están votando los demás, la lógica fuerza a pensar que aquellos que hayan introducido un resultado erroneo, tenderá a cambiarlo para proteger su garantía. Si en algún momento se alcanza ese 51% de votos a favor de un partido, el resultado se establecerá. Si tras 24H después del partido sin consenso, los apostantes podrán recuperar todo su dinero (apuesta y comisión para validadores) y los validadores podrán recoger su garantía.
   3. Votan el 100% de los validadores alcanzando el consenso en el resultado. Se elige al ganador o a los ganadores y podrán recoger su premio. Por otra parte, los validadores que hayan votado a favor del resultado consensuado podrán recoger su garantía más las comisiones generadas como premio por su labor.

## Escenarios depediendo del rol

Aquí os dejamos un resumen simplificado de lo que puede pasar a cada uno de los participantes de la porra dependiendo del escenario que finalmente ocurra.

|      ROL      |             NO APOSTANTES            |         NO VALIDADORES         |                                                       NO 100% VOTOS                                                       |           NO CONSENSO          | CONSENSO \*no gana apuesta                                                                                                                                                                                                                                  |                                                                                                                           CONSENSO \*gana apuesta                                                                                                                           |
| :-----------: | :----------------------------------: | :----------------------------: | :-----------------------------------------------------------------------------------------------------------------------: | :----------------------------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| **Apostante** | <mark style="color:purple;">-</mark> | Entrada + comisiones (6 MATIC) |                                               Entrada + comisiones (6 MATIC)                                              | Entrada + comisiones (6 MATIC) | -                                                                                                                                                                                                                                                           |                                                                                                      Bote repartido entre los acertantes de la apuesta a partes iguales                                                                                                     |
| **Validador** |          Entrada (15 MATIC)          |                -               | <ul><li>Si no emitió su resultado: pierde garantía</li><li>Si emitió su resultado: Recupera garantía (15 MATIC)</li></ul> |       Garantía (15 MATIC)      | <ul><li>Si su resultado emitido coincide con el resultado ganador: Recupera garantía (15 MATIC) y recibe como recompensa la parte proporcional de las comisiones</li><li>Si su resultado no coincide con el resultado ganador: Pierde su garantía</li></ul> | <p></p><ul><li>Si su resultado emitido coincide con el resultado ganador: Recupera garantía (15 MATIC) y recibe como recompensa la parte proporcional de las comisiones</li></ul><ul><li>Si su resultado no coincide con el resultado ganador: Pierde su garantía</li></ul> |
