# Bienvenidos

Plataforma descentralizada para circulos de ahorro.

## ¿Que es Bloinx?

Bloinx es una dapp de ahorro solidario para facilitar la administración de las comúnmente conocidas como “Susu”, “Tandas”, “vaquitas”, “ahorro cooperativo” etc. dependiendo el país donde te encuentres.&#x20;

### ...una ¿dapp?

Quizás notaste que en el párrafo anterior pusimos dapp y no app y no fue un error, es acrónimo de aplicación descentralizada. Mas sobre esto [aqui.](/espanol/mas-sobre-blockchain)


# Antes de empezar...

Bloinx es una aplicación que te permite crear y participar en circulos de ahorro de forma confiable sin importar en que parte del mundo se encuentran.

Las rondas de ahorro en Bloinx se realizan con "stable coins",criptomonedas con valor estable a 1 dólar, de este modo tus ahorros quedan protegidos a las fluctuaciones de valor del mercado cripto.&#x20;

Al participar en rondas de Bloinx y hacer pagos en tiempo podras ganar BLX! Mas adelante tendremos mas noticias sobre como usar tus tokens.


# Reglas

1. **Crea tu ronda**
   * Al crear una ronda en Bloinx serás la/el administrador/a.
   * Como admin deberás indicar el número de invitadxs, el monto del pago y la periodicidad.
   * Toma en cuenta que no podrás modificar estos datos y que cada invitadx solo puede registrarse en un turno de la ronda.
2. **Registra a tus invitados**
   * En el momento de registro tu y tus invitadxs deberan realizar un pago por adelantado.
   * Antes de iniciar la ronda deberás verificar que las direcciones registradas correspondan a las de tus invitadxs. En caso de que no reconoscas alguna dirección, podrás eliminarla. Recuerda que una vez iniciada la ronda, no podrás hacer cambios en lxs participantes.
3. **Pagos y retiros**
   1. Cuando la ronda inicie, todos lxs invitadxs tendrán los dias que indicaste para hacer el primer pago. La persona en el primer turno no paga.
   2. Una vez pasado el tiempo de pago, la persona que eligió el primer turno podra cobrar su ronda. Esto se repite por el numero de participates de al ronda.
   3. Si uno de tus invitadxs no paga a tiempo, se tomará su cuota inicial para cubrir su aportación en ese turno.
      1. La primera vez que un invitado no pague a tiempo, no podrá disponer de su cuota inicial al finalizar su ronda. Y no afectará a los demás invitados.
      2. A partir de la segunda vez que un invitado no pague a tiempo, impactará en el monto del que todos los invitados podrán disponer al final de la ronda.
   4. Si tu o tus invitados tienen pagos pendientes, podrán ponerse al corriente mientras esté corriendo la ronda.
4. **Fin de la ronda**
   1. Al finalizar la ronda lo que se encuentra en la bolsa de garantias se repartirá entre los usuarios con pagos a tiempo.
   2. Los tokens BLX se distribuirán a los usuarios que hayan realizado sus pagos puntualmente.


# Guia para usuarios


# Crea tu wallet

Puedes acceder a Bloinx con las siguientes wallets:

{% content-ref url="/pages/on8rsCm9gTMC3ZI2ZuhC" %}
[Metamask](/espanol/guia-para-usuarios/instala-tu-wallet/metamask)
{% endcontent-ref %}

{% content-ref url="/pages/BDuNrgkx9HH9jGQRvSVI" %}
[Valora (próximamente)](/espanol/guia-para-usuarios/instala-tu-wallet/valora-proximamente)
{% endcontent-ref %}


# Metamask

{% embed url="<https://youtu.be/tDDWOVQ4WEY>" %}

Metamask es una wallet usada por millones de personas en todo el mundo para hacer transacciones con criptomonedas. Para acceder a Bloinx debes instalar la aplicación que está disponible para iOS y Android.&#x20;

* iOS: <https://metamask.app.link/skAH3BaF99>
* Android: <https://metamask.app.link/bxwkE8oF99>

Da click en crear billetera.&#x20;

Elije una contraseña.

A continuación se te mostrarán 12 palabras las cuales debes anotar y guardar en un lugar seguro, recuerda que en caso de que cambies de teléfono o se te desinstale la aplicación estas palabras será la única forma de acceder a tu wallet.&#x20;

Confirma el orden de las palabras y listo!


# Valora (próximamente)

Disponible próximamente


# Accede a la aplicación

Para poder acceder a la aplicación tendrás que usar el explorador de Metamask, así el sitio pueda conectarse con tu wallet.

Y coloca este url <https://bloinx.app/> aqui:.

![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2F4inOoWCg95yd9cwGp7oN%2Fimage.png?alt=media\&token=3537ee6a-969c-4541-9820-6cd290bda44b)![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FyP4fBD8jENnc3SGW6IGZ%2Fimage.png?alt=media\&token=71029ccd-fe9e-4ce5-9fce-f985b4c0032d)

Regístrate e inicia sesión.

<div align="left"><figure><img src="https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FDc3xCwciIEpyumstqaHb%2Fregistro.jpg?alt=media&amp;token=e59c8065-6d1b-42b5-a330-5b1fc175f4d0" alt="" width="375"><figcaption></figcaption></figure></div>

Para iniciar da click en conecta tu wallet, elige la red con la que quieres acceder a Bloinx.

![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FXYKNLa2AJ0LeB0fBG8BI%2Fimage.png?alt=media\&token=90f0ce62-22a0-4649-b100-b78708d02c37)![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FXM1qzqMM0tRM1Sa67Yj3%2Fimage.png?alt=media\&token=e347d313-0fe1-4283-9e8c-3fce63749b12)

Si no tienes dada de alta la red, el sitio te preguntará si la quieres agregar.

![](https://lh5.googleusercontent.com/xFc1dsIogWBtDyw1Gy36ico7_nVP4LXNHfNr5ugNGH2JnF8tQwWZvXQrCYyuQGCslnadW8At4bfIkTRQQmtnRs-Oqd14TQIPwxo06k8X4_APcR-QePAjcW5aKNMj4D4zCoaMiae-)![](https://lh5.googleusercontent.com/lgrQ7LWr4CwzXs5hIbJuhmmZJsfaJlgjE6RZ-Na_WfCpd_KyJfCYRpIHUjMp5rKNyY0JYFRcmxrvo4Ov8YZ4ZgJTO4eybaWxbyXvUulmnFxwbjLtwEYyEvaYJTM38wp7Rf7Uc9tR)

Elije la wallet con la que quieras acceder a Bloinx.

![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FJbbJvJeOGzqJeopXbecp%2Fimage.png?alt=media\&token=0efc9b71-2df0-4316-b85d-a62534ec5f5d)

Si el botón rosa sigue diciendo “Conecta tu wallet” da click de nuevo. Sabrás que tu wallet está conectada correctamente cuando el botón se vea asi.

![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FgBaVu2738BdSeq7JWNuT%2Fimage.png?alt=media\&token=cf276ff4-fa5a-4fd7-9b56-6cd6cd874a88)

{% embed url="<https://youtu.be/cVuQoHN6yQI>" %}


# Agrega fondos a tu wallet

(en la red de prueba)

Para poder participar en las rondas es necesario que cuentes con alguna de las siguientes "stable coins" dependiendo de la red en la que estes y token nativo para pagar por el costo de transacción:

<table><thead><tr><th width="130.33333333333331">Red</th><th width="151">Stable Coin</th><th>Dirección de stable coin</th></tr></thead><tbody><tr><td>Celo</td><td>cUSD</td><td>0x765DE816845861e75A25fCA122bb6898B8B1282a</td></tr><tr><td>Polygon</td><td>USDC</td><td>0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174</td></tr></tbody></table>

Si estas usando Metamask debes agregar la dirección del token que usarás para poder ver tu saldo, el siguiente video muestra como hacerlo.

<div align="left"><figure><img src="https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FqAgMme0IohrIXfmZQjXo%2Fagregar_token.jpg?alt=media&amp;token=07cfdaa7-f046-4dda-8372-237744c00c50" alt="" width="375"><figcaption></figcaption></figure></div>

{% embed url="<https://youtu.be/YnegmiRvSDA>" %}


# Polygon

* [**Bybit**](https://partner.bybit.com/b/Bloinx)**:** Exchange global donde puedes comprar y vender criptomonedas utilizando diversos medios de pago. Una vez que hayas adquirido los tokens, deberás transferirlos a tu wallet para participar en Bloinx. Puedes utilizar nuestro número de referido 50740 si lo deseas.


# Celo

* [**Bybit**](https://partner.bybit.com/b/Bloinx)**:** Exchange global donde puedes comprar y vender criptomonedas utilizando diversos medios de pago. Una vez que hayas adquirido los tokens, deberás transferirlos a tu wallet para participar en Bloinx. Puedes utilizar nuestro número de referido 50740 si lo deseas.


# Crea una ronda

Si estás organizando la ronda serás el encargado de crearla en Bloinx y al momento de crearla, te llamaremos de cariño “admin”.

Ya que hayas iniciado sesión y conectado tu wallet crea una nueva ronda dandole click a Crear Ronda.

<div align="left"><figure><img src="https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FgifBJYBXkSannkPN68Fd%2Fcrear_ronda%20(2).jpg?alt=media&amp;token=dbc94d63-01ff-4389-b575-a498e0ce96d2" alt="" width="375"><figcaption></figcaption></figure></div>

Podrás elegir el número de participantes, el monto a pagar y la periodicidad. Verifica los datos y crea la ronda.

<div align="left"><figure><img src="https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FLEPjICilGQ8BNpIUzhBa%2F3.jpg?alt=media&amp;token=8ff8568c-153b-4b62-83f3-cbb757b9eead" alt="" width="375"><figcaption></figcaption></figure> <figure><img src="https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FQhMtC0ItYhnxLV7JOWhR%2F4.jpg?alt=media&amp;token=3cc2fcaa-e3fa-421f-8372-4c8fccd77d47" alt="" width="375"><figcaption></figcaption></figure></div>

Al crear la ronda verás el siguiente cuadro de confirmación de tu wallet en el que se muestra el costo de creación de la ronda. Confirma la transacción.

<div align="left"><figure><img src="https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FAdyWAJ91iqDB20gMbICA%2F5.jpg?alt=media&amp;token=31105ff9-2ad4-4c29-b8cd-d1264c4f5f3e" alt="" width="288"><figcaption></figcaption></figure></div>

Una vez creada la ronda podrás proceder a registrarte.

{% embed url="<https://youtu.be/6Tw1XbU2dZw>" %}


# Registro de admin

Ya que creaste la ronda, podrás entrar a elegir tu lugar.&#x20;

![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FuDqL9oVclugqkvg3sQ7e%2Fimage.png?alt=media\&token=ddfbf103-5306-420d-8b0b-c344c986349a)

Lo primero que se muestra es una explicación del primer pago que se hará a la ronda, lee con atención. Si estás de acuerdo acepta las condiciones y presiona aprobar.

![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FZziB8Qhm5zyXXqSTiBs6%2Fimage.png?alt=media\&token=475f1bac-2519-450c-9013-7da8569b62c0)![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2Fri3M30AFfEmNO6cJpfOX%2Fimage.png?alt=media\&token=84d88afa-5f24-41b0-abe0-7714d9565d60)

A continuación podrás ponerle un nombre a la ronda, este nombre únicamente será para que tú te organices. También debes elegir tu motivación y tu lugar para poder registrarte. En la sección de detalles de pago podras ver el desglose del pago inicial que se compone de un pago por adelantado y 5% de tarifa de servicio.

![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FVQRf2i6q7QERrsjM3rom%2Fimage.png?alt=media\&token=9e7cfe42-8237-48a3-a4a3-8f783d37142d)![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FxXJUlVxRjjt83ZpuVngc%2Fimage.png?alt=media\&token=e808934d-d67d-48b4-9c85-b716af567eb5)

Una vez que te hayas registrado entra a los detalles de la ronda y agrega los correos de las personas que invitaras a tu ronda que deben coincidir con los correos con los que se registraron en Bloinx.&#x20;

![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FOFUuKOGGMJrhkdRxxcB9%2Fimage.png?alt=media\&token=9c2a46a8-1e86-4ec7-89d0-9a4c898b181d)![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FpFGnfK4QOOH5dwRCubgi%2Fimage.png?alt=media\&token=ff2164d5-59b8-462f-9f25-80b7bf2a93ea)

Ya que todos tus invitados se hayan registrado podrás iniciar la ronda, es importante que verifiques que las direcciones sean las de tus amigos. A partir del momento en que se inicie la ronda empezará a contar el tiempo, si tienes dudas cuando son los cambios de turno lo podrás revisar en los detalles de la ronda.

![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FHWpqTazHbzhBEQjIbuJV%2Fimage.png?alt=media\&token=3cb717cd-1052-4043-ae88-42cce6821320)![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FPFteAgrxpZ2JXJnZQGaW%2Fimage.png?alt=media\&token=57253259-4c27-4526-96d8-f50a18ca9c36)


# Registro de invitad\@s

Ya que hayas recibido el correo donde te avisamos que tu amig@ te ha invitado a una ronda podrás acceder a Bloinx y ver la ronda en tu pantalla principal. Recuerda que debes iniciar sesión y conectar tu wallet.

![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FrmjryVXFb3qybBtjiyLw%2Fimage.png?alt=media\&token=62504f6a-93c3-4dae-aad8-1105992b0d82)

Lo primero que se muestra es una explicación del primer pago que se hará a la ronda, lee con atención. Si estás de acuerdo acepta las condiciones y presiona aprobar.

![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FSOi5dCfKm8w7O75EETNE%2Fimage.png?alt=media\&token=98c247cc-a53e-4458-a9bc-13c1ad451b65)![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2F51aH5PziT8QKcIPrSehU%2Fimage.png?alt=media\&token=fb2404ff-b08d-4138-916b-122a78abd167)

A continuación podrás ponerle un nombre a la ronda, este nombre únicamente será para que tú te organices. También debes elegir tu motivación y tu lugar para poder registrarte.

![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FjZTG6qZkjUG9RoosebA1%2Fimage.png?alt=media\&token=1b5afba6-777e-4d9a-8605-963465252593)![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FTsyuJ1ciTxkufNgEqKJ8%2Fimage.png?alt=media\&token=cd6a2e50-089b-4e2b-8b7b-8735db59d641)

Ya que te hayas registrado debes esperar a que la/el admin pueda iniciar la ronda. A partir de que se inicie la ronda empieza a contar el tiempo, si tienes dudas cuando son los cambios de turno lo podrás revisar en los detalles de la ronda.

![](https://lh6.googleusercontent.com/Mvsi8KmLjkZfWuBK7kncz9hayAcghveV7iv0HP2Mksk0qGhhdXTZ59BkUju_ByocJnxbGxUzwCPa-l7jNRj5Ygri3gLoVaKmp1dI5VYTcaDjao49KDteNK8TDXfLsrewgrZm869V)![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2F0whG8XFdHsdUrWZIQeIL%2Fimage.png?alt=media\&token=9f38d8f8-f16e-4013-9ee4-d02894133cdc)


# Pagos y cobros

Una vez que inicio la ronda podras ver la informacion relevante en tu pantalla principal.

![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2F3qaZ9JIQ2ALwvEDfuy8Y%2Fimage.png?alt=media\&token=db44bd87-7ed4-4298-b50e-8321ec4b0a4e)

Los puntos representan los turnos, y para que siempre recuerdes el turno que elegiste lo podras ver con el el simbolo de "ud. esta aqui".

Cuando estes a tiempo en pagos el boton de "Pagar" cambiara a "Adelantar pago". Y cuando te toque cobrar se te activará el boton de "cobrar"

![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2FGSmgbTypTJr7RFvhGKBj%2Fimage.png?alt=media\&token=40a56c68-c3e2-4c0d-a7cb-22403de85986)


# Sobre nosotros

### Misión

Bloinx es una plataforma donde las personas crean y administran círculos de ahorro seguros y autogestionables.

### Visión

BX Smart Labs visualiza una comunidad global donde las personas pueden ayudarse mutuamente a alcanzar sus metas financieras y con ello mejorar su condición de vida.

### Sobre la comunidad

La comunidad Bloinx está formada por desarrolladores, diseñadores, organizadores y participantes de circulos de ahorro que quieren ayudarse mutuamente a mejorar su situación financiera.

### Continuemos la conversación

Twitter [@BXSmartLabs](https://twitter.com/BXSmartLabs)

Facebook [Bloinx](https://www.facebook.com/Bloinx)

Telegram <https://t.me/bloinx>

Linkedin [BX Smart Labs](https://www.linkedin.com/company/bx-smart-labs/)

Discord[ Bloinx](https://discord.gg/caCA3nDd)


# Whitepaper

(en desarrollo)

[Antecedentes](/espanol/whitepaper/antecedentes)

[Nuestra propuesta](/espanol/whitepaper/nuestra-propuesta)

[Tokenomics](/espanol/whitepaper/tokenomics-v1)


# Antecedentes

(en desarrollo)

Según la Organización Internacional del Trabajo, 2 mil millones de personas trabajan de manera informal lo que representa el 61% de la población mundial total, el porcentaje aumenta en los países emergentes y en desarrollo con un 67% y 90% respectivamente [(1)](https://www.ilo.org/wcmsp5/groups/public/---dgreports/---dcomm/documents/publication/wcms_626831.pdf). Como resultado de sus ingresos fluctuantes, es difícil para las familias estructurar sus finanzas y tener un fondo de emergencia o adquirir electrodomésticos. En caso de emergencia, se les excluye del sistema financiero formal porque la mayoría de las instituciones requieren prueba de empleo para otorgar préstamos o se les imponen tasas de interés impagables.&#x20;

Por lo anterior, las personas optan por organizaciones de microfinanzas alternativas (Donoso, Altunbaş y Kara, 2011) como las asociaciones de ahorro y crédito rotativas (RoSCA), que están “formadas por un núcleo de participantes que acuerdan hacer contribuciones regulares a un fondo dado, total o parcialmente, a cada colaborador en rotación ”(Ardener, 1964, p. 201).&#x20;

Estas asociaciones son comunes en países de América Latina, Asia y África y también están presentes en grupos de inmigrantes en países desarrollados. En las RoSCAs, las personas que acceden al fondo primero obtienen un préstamo a bajo interés (o sin intereses) y las que acceden a él en último lugar lo utilizan para ahorrar.&#x20;

Gugerty, M.K. no encontró evidencia de que las personas prefirieran los primeros lugares y descubrió que un motivador común es "No puedes ahorrar solo" (7). RoSCAS tiene un alto factor social, en muchos países todos los participantes se reúnen en un evento donde todos realizan sus pagos. Estas asociaciones suelen estar formadas por personas vinculadas entre sí por lo que existe un compromiso social de pagar con regularidad aunque ya se haya recibido el fondo.

Kovsted y Lyk-Jensen (1999) identifican tres tipos de RoSCA según el orden de asignación de fondos; puede ser con lugares fijos, aleatorios y de licitación. Se ha observado que las RoSCA con lugares fijos tienen menos probabilidades de experimentar problemas con los pagos en comparación con la asignación aleatoria (6). En el caso de licitar RoSCA, el fondo se asigna al mejor postor disminuyendo los pagos de los demás participantes, por lo que las personas que más esperan son las que obtienen un fondo mayor (8).


# Nuestra propuesta

(en desarrollo)

Bloinx es una aplicación donde los usuarios podrán crear y unirse a círculos de ahorro desde su computadora o teléfono. Dado que se ejecutará en blockchain, los pagos y retiros se realizarán de forma remota y todas las transacciones estarán disponibles y registradas permanentemente. De esta manera, las RoSCA serán autogestionadas y accesibles desde cualquier lugar. También implementaremos un sistema de confianza.


# Tokenomics V1

(en desarrollo)

Al terminar las rondas de manera puntual, los usuarios recibirán BLX, el token nativo de Bloinx que representa el cumplimiento de los participantes en la ronda.

La cantidad de BLX se calcula con la siguiente formula:

&#x20;       BLX = 10 x monto de reintegro del registro x turno que elegiste ^ 2

Entre mas esperes para poder retirar, mas tokens ganarás! Por ejemplo, en una ronda de pagos de 5 cUSD lxs usuarixs en turno 1 ganan 50 BLX, lxs de turno 5 ganan 1250 BLX y lxs de turno 10 5000 BLX.

![](https://2446604449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHaBMgYIt7Jz60DntFBj4%2Fuploads%2F37KHzuWB26Ss1e1lF0D5%2Fimage.png?alt=media\&token=1c6b01bf-957e-45df-98fc-a02af1dd5be0)

\
Dirección: 0x37836007FC99C7cB3D4590cb466692ff7690074c\
Max. cantidad de tokens: 100,000,000 BLX

Haremos un airdrop inicial de 77,000 BLX como agradecimiento a las personas que nos han apoyado participando en los pilotos y la versión Beta.


# Tokenomics V2

Proximamente...

Al terminar las rondas de manera puntual, los usuarios recibirán BLX, el token nativo de Bloinx que representa el cumplimiento de los participantes en la ronda.

Para controlar la emisión a travez del tiempo en esta version hemos incluido una reducción trimestral de la emision de tokens, que constará de 8 trimestres. El primer trimestre iniciará a partir de XXX.

La cantidad de BLX se distribuye según la siguiente formula:

&#x20;       BLX = 5 x monto de pago x (turno que elegiste / trimestre)

Por ejemplo, esta ronda es de 4 personas con pagos de 10 USDC durante el primer trimestre.

&#x20;       BLX = 5 x 10 x (turno que elegiste / 1)

| TURNO | BLX    |
| ----- | ------ |
| 1     | 50.00  |
| 2     | 100.00 |
| 3     | 150.00 |
| 4     | 200.00 |

En el segundo y tercer trimestre la emisión seria la siguiente:

&#x20;        BLX = 5 x 10 x (turno que elegiste / 2)

&#x20;        BLX = 5 x 10 x (turno que elegiste / 3)

| TURNO | BLX 2do Trimestre | BLX 3er Trimestre |
| ----- | ----------------- | ----------------- |
| 1     | 25.0              | 16.7              |
| 2     | 50.0              | 33.3              |
| 3     | 75.0              | 50.0              |
| 4     | 100.0             | 66.67             |

Es importante mencionar que el token BLX se otorgara al finalizar la ronda, unicamente a las personas que cumplieron puntualmente con sus pagos.

(Supply)

(distribucion en porcentaje)


# Mas sobre blockchain

### ¿Que es una dapp?

Un dApp, o aplicación descentralizada, asegura que la información no esté centralizada bajo el control de una sola entidad, sino que se valide y almacene automáticamente mediante un sistema distribuido como la blockchain, con múltiples nodos. Una vez que una transacción se valida y acepta en la blockchain, no puede modificarse; cualquier intento de alteración por parte de un nodo será detectado por los demás, garantizando la integridad de la información. En Bloinx, las rondas se realizan en dos redes: Celo, donde puedes crear rondas con cUSD, y Polygon, donde puedes utilizar USDC. Ambas son criptomonedas con valor equivalente al dólar estadounidense (USD). Para enviar y recibir criptomonedas e interactuar con dApps, necesitarás una [wallet](/espanol/guia-para-usuarios/instala-tu-wallet/metamask) que posea una llave pública y una privada. La llave pública identifica tus transacciones, mientras que la privada se utiliza para firmarlas. Es crucial guardar la llave privada con seguridad y no compartirla con nadie.


# FAQs

**Solo veo que tengo CELO/ MATIC y no la "stable coin" con la que participare en la ronda, ¿Qué hago?**&#x20;

Revisa esta [sección](/espanol/guia-para-usuarios/agrega-fondos-a-tu-wallet).

**En Metamask no me sale activo el botón de "Confirmar" ¿Qué hago?**&#x20;

Dale click al monto a cobrar de gas, no debes cambiar nada, solo guarda y ahora estará activo el botón.


# Welcome

Decentralized platform for saving circles.

## What is Bloinx

Bloinx is a comunity saving dapp that helps manage saving circles also known in diferent regions as “Susu”, “Tandas”, “vaquitas”, “ahorro cooperativo” etc.&#x20;

### ...a dapp?

You may have noticed in the previous paragraph the word dapp, its not a typo, this is short for decentralized application. More about this here.


# Before we start...

Bloinx is an application that allows you to create and participate in savings circles reliably no matter where you are in the world.&#x20;

The savings rounds in Bloinx are made with "stable coins", cryptocurrencies with value equivalent to one dollar, in this way your savings are protected to the fluctuations of value of the crypto market.&#x20;

By participating in Bloinx rounds and making timely payments you can earn BLX! Later we will have more news on how to use your tokens.


# About us

### Mission

Bloinx is a platform where people create and participate in secure and self-managing savings circles.

### Vision

BX Smart Labs envisions a global community where people can help each other achieve their financial goals and thereby improve their living conditions.

### Community Statement

The Bloinx community is made up of developers, designers, organizers and participants of savings circles who want to help each other improve their financial situation.

### Let's continue the conversation

Twitter [@bloinx\_io](https://twitter.com/bloinx_io)

Facebook [Bloinx](https://www.facebook.com/Bloinx)

Telegram <https://t.me/bloinx>

Linked-in [BX Smart Labs](https://www.linkedin.com/company/bx-smart-labs/)


# Contribution guidelines

Let's build together!

There is still work to be done and we would like YOU to build with us.\
\
[Here](https://github.com/orgs/Bloinx/projects) you will find the projects we are working on. You can take any unassigned issue in the Todo column that are not marked as "TeamOnly". The issues with the "good first issue" label are a good place to start. Go [here](https://github.com/Bloinx/bloinx-v1/issues) to view some of the issues waiting for you.

1. Go into the issue and assign it to your self.
2. Fork and clone the repository
3. Create a branch in the fork\
   The branch should be based on the `development` branch in the master repository.&#x20;
4. Commit changes on your branch
5. Push the changes to your fork
6. Create a Pull Request\
   In the Github UI of your fork, create a Pull Request to the `development` branch of the repository. If the branch has merge conflicts or has been outdated, please do a rebase against the `development` branch.


# Smart contracts documentation

**Bloinx Smart contracts**

**Terminology**

| Round               | Is the complete cycle of the saving circle that is divided in turns according to the number of participants.             |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| Turn                | Is one period of the saving circle. I.E In a weekly round of 5 people, the suns last 1 week and the round lasts 5 weeks. |
| Administrator/admin | The creator of the round.                                                                                                |

**Rules**

1. Create a saving round
   1. The user that creates the saving round will have the administrator role, they must indicate the number of guests, the amount of the payment(per turn), the periodicity and invite others to participate in their round.
   2. Take into account that you will not be able to modify this data and that each guest can only register for one turn of the round.
2. Registration
   1. In the registration stage, users will be able to select a turn and must make a payment in advance as a security deposit that will be reimbursed according to payment fulfillment.
   2. The admin is responsible to verify that the registered addresses correspond to those of their guests. In case a guest is not in the correct round, they will be able to remove them.
   3. Important: once the round has started, no changes in the users is possible.
3. Payments and withdrawals
   1. When the round starts, all the guests will have the days you indicated in periodicity to make the first payment. The person on the first turn does not pay.
   2. Once the payment time has passed, the guest in the first turn will be able to collect the accumulated fund. This is repeated for the number of participants in the round.
   3. If one of your guests does not pay on time, the initial fee will be taken from them to cover their contribution for that turn.
   4. The first time a guest does not pay on time, they will not have his initial fee at the end of the round. And it will not affect the other guests.
   5. From the second time that a guest does not pay on time, they will impact the amount that all guests will receive at the end of the round.
   6. If users have pending payments, they can catch up while the round is running.
4. End of the round
   1. At the end of the round, what is in the safety deposit pool will be distributed among users with timely payments.
5. Round out of funds
   1. If several users miss payments the round could run out of funds to pay the person in turn. If this is the case, the total balance of the round smart contract will be sent to a general account.

**Main.sol**

**This factory pattern smart contract is used to**

| Method      | Parameters  | Required | Type   | Description                       |
| ----------- | ----------- | -------- | ------ | --------------------------------- |
| CreateRound | \_warranty  | Yes      | uint   | Security deposit                  |
|             | \_saving    | Yes      | uint   | Save amount or payment per turn   |
|             | \_groupSize | Yes      | uint   | Number of users size >1 && <=10   |
|             | \_payTime   | Yes      | uint   | Duration of one turn in seconds   |
|             | \_token     | Yes      | IERC20 | Token to user in the saving round |

If the Round creation method is executed correctly, the function returns the address of the new smart contract (SavingGroups).

**Call example:**

contractInstance.methods.createRound(warranty, saving, groupSize, payTime,token)

.send({

from: userAddressWallet,

to: contractAddress

})

**Response example:**

\[

{

"from": "0xd9145CCE52D386f254917e481eB44e9943F39138",

"topic": "0xfdebb0c30fbd3c4fe101775e6bf17ea692258188ce7edb5666366f58f1529ffc",

"event": "RoundCreated",

"args": {

"0": "0xb8f43EC36718ecCb339B75B727736ba14F174d77",

"childRound": "0xb8f43EC36718ecCb339B75B727736ba14F174d77"

}

}

]

The Value of childRound returns the address of the new SavingGroups smart contract. This value changes each time a round is created.

**SavingGroups.sol**

The SavingGroups.sol smart contract features the Stages Enum, enums are a way to create user-defined data types and are implicitly convertible to integers.

| Enum Name | Value          | Description                                                                                                                                                                                            |
| --------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Stage     | Setup -> 0     | In this stage the users register to the saving round. And the admin is able to start the round.                                                                                                        |
|           | Save -> 1      | In this stage the users are able to make payments and withdrawals according to the registration order. No changes in the user list are possible at this stage.                                         |
|           | Finished -> 3  | When the time of the last turn has passed, the saving round can pass to this stage. In this stage the calculation of the security deposit returns is done. No more payments are allowed at this stage. |
|           | Emergency -> 4 | If there are no funds for a withdrawal, the round enters in this stage to indicate the round did not end correctly. The available balance in the SC can be sent to a general account.                  |

The smart contract features a struct with the user information so the smart contract can manage the round correctly. The users are stored in a mapping.

| Struct Name | Parameters         | Type    | Description                                                                                                                                                             |
| ----------- | ------------------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| User        | userAddr           | address | Stores the users address                                                                                                                                                |
|             | userTurn           | uint    | Stores the selected turn by the user                                                                                                                                    |
|             | availableCashIn    | uint    | Stores the user’s security deposit balance                                                                                                                              |
|             | availableSavings   | uint    | Stores the user’s fund balance. Represents the deposits other users have done for this user to withdraw                                                                 |
|             | assignedPayments   | uint    | Stores the user’s payments that have been assigned to other users' funds.                                                                                               |
|             | unassignedPayments | uint    | Stores the user’s payments that haven’t been assigned to other users' funds.                                                                                            |
|             | latePayments       | uint    | Stores the number of turns the user has not paid. The user is able to pay later but this value will not be modified                                                     |
|             | owedTotalCashIn    | uint    | Stores how much of the security deposits has been taken because of this user's late payments.                                                                           |
|             | isActive           | bool    | <p>Variable to indicate if the user is registered.<br>If a user registers and is removed, the user is still in the User mapping but has this variable set to false.</p> |
|             | withdrewAmount     | uint    | Stores the amount the user has withdrawn from the round.                                                                                                                |

The smart contract has 6 mandatory parameters shown in the following table.

| Method      | Parameters   | Type            | Description                                               |
| ----------- | ------------ | --------------- | --------------------------------------------------------- |
| constructor | \_cashIn     | uint            | Safety deposit to be paid on registration.                |
|             | \_saveAmount | uint            | Payment in each turn.                                     |
|             | \_groupSize  | uint            | Number of turns >1 && <= 10                               |
|             | \_admin      | Address payable | Wallet address of the round creator, can’t be null (0x0). |
|             | \_payTime    | uint            | Time of one turn in seconds.                              |
|             | \_token      | IERC20          | Token address to be used in the saving round.             |

The constructor is executed only once in the smart contract deployment, that comes from the CreateRound function in Main.sol.

Inside the constructor the amounts of \_saveAmount and \_cashIn are converted to the unit of wei.

The constructor has 3 main validations:

1. Validates that the administrator address is non-zero or null.
2. Validates that the group size is greater than one and less than or equal to ten.
3. Validates that the time given by the user is greater than zero and is multiplied by the seconds in a day.

Example: \_payTime = 2 -> 2 \* 86,400 = 2 days.

Events within Saving Groups.

Events are a simplified way of sending information to external systems like a frontend or a subgraph.

| Event             | Parameter                                          | Description                                                                                                                                       |
| ----------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| RegisterUser      | address user, uint turn                            | Executed when a user is registered to the saving round. Returns the user address and the turn.                                                    |
| PayCashIn         | address user, bool success                         | Executed when a user is registered to the saving round and the safety deposit is paid. Returns the user address and payment success.              |
| PayFee            | address user, bool success                         | Executed when a user is registered to the saving round and the fee is paid. Returns the address of the remover, user address and payment success. |
| RemoveUser        | address removed by, address user, bool success     | Executed when a user is removed. Returns the user address and payment success.                                                                    |
| PayTurn           | address user , bool success                        | Executed when a user makes a payment to the round. Returns the user address and payment success.                                                  |
| WithdrawFunds     | address user , uint amount, bool success           | Executed when a user whidraws the fund corresponding to their turn. Returns the user address, withdrawn amount and payment success.               |
| EndRound          | address round address , uint start at, uint end at | Executed when the round ended. Returns the round address and the start and end times.                                                             |
| EmergencyWithdraw | Address round address, uint funds transferred      | Executed when the insufficient funds are transferred to a general account. Returns user address and funds transferred.                            |

**Fee Cost.**

The fee cost is currently calculated in the constructor:

feeCost = (saveAmount / 10000) \* 500;

It corresponds to 5%. And it is transferred to the Team Bloinx wallet

**Methods table**

| Method                                                    | Parameters    | Type    | Modifier                              | Validations                                                                   | Description                                                                                                                                                                                                                                                                                               |
| --------------------------------------------------------- | ------------- | ------- | ------------------------------------- | ----------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p>registeUser</p><p>(public)</p>                         | \_userTurn    | uint    | atStage                               | <p>Is user already registered,</p><p>Is group already full, is turn taken</p> | User inputs the turn for registration ion the round. The user must have already approved the token smart contract.                                                                                                                                                                                        |
| <p>removeUser</p><p>(public)</p>                          | \_userTurn    | uint    | atStage                               | If the caller is the admin, is the turn empty, is the deleted user the admin  | Admin can remove users before in the SetUp stage.                                                                                                                                                                                                                                                         |
| <p>stratRound</p><p>(public)</p>                          |               |         | <p>onlyAdmin</p><p>atStage</p>        | Is group full                                                                 | <p>When all the turns are taken, the admin can start the round.<br>This function advances the stage to Saving.<br>The block time is recorded as the start time of the round from which the turns start counting.<br>No changes in the registered accounts are allowed once this function is executed.</p> |
| <p>addPayment</p><p>(external)</p>                        |               |         | <p>isRegisteredUser</p><p>atStage</p> | Is pay amount correct                                                         | Users can pay any amount up to all planned payments.                                                                                                                                                                                                                                                      |
| <p>withdrawTurn</p><p>(public)</p>                        |               |         | <p>isRegisteredUser</p><p>atStage</p> | Is it time to withdraw for the user, has the user withdrawn                   | This function transfers the fund to the assigned user.                                                                                                                                                                                                                                                    |
| <p>completeSavingsAndAdvanceTurn<br>(private)</p>         | turn          | uint    | atStage                               |                                                                               | <p>Called from addPayment, withdrawTurn and endRound.<br>Executed once in a turn by each user.<br>Transfers funds to the corresponding variables of User and advances turn if the time determines it should.</p>                                                                                          |
| <p>payLateFromSavings<br>(private)</p>                    | \_userAddress | address | atStage                               |                                                                               | <p>If the user owes the security deposit it is taken from the assigned fund to withdraw.<br></p>                                                                                                                                                                                                          |
| <p>emergencyWithdraw<br>(public)</p>                      |               |         | atStage                               | Is stuck balance more than cero                                               | If the round is out of funds to make payments the stuck balance can be sent to a general account.                                                                                                                                                                                                         |
| endRound                                                  |               |         | atStage                               | Is the round finished                                                         | Transfers the corresponding amount of the security deposit to each user                                                                                                                                                                                                                                   |
| <p>futurePayments<br>(public)<br>(view)</p>               |               |         |                                       |                                                                               | Returns the total amount left to pay in the round by the caller                                                                                                                                                                                                                                           |
| <p>obligationAtTime<br>(public)<br>(view)</p>             | userAddress   | address |                                       |                                                                               | Returns the amount the user is required to have paid at the called time.                                                                                                                                                                                                                                  |
| <p>getRealTurn</p><p>(public)<br>(view)</p>               |               |         |                                       |                                                                               | Returns the turn according to the block time when the function is called.                                                                                                                                                                                                                                 |
| <p>getUserAvailableCashIn</p><p>(public)<br>(view)</p>    | \_userTurn    | uint    |                                       |                                                                               | Returns availableCashIn from user struct.                                                                                                                                                                                                                                                                 |
| <p>getUserAvailableSavings</p><p>(public)<br>(view)</p>   | \_userTurn    | uint    |                                       |                                                                               | Returns availableSavings from user struct.                                                                                                                                                                                                                                                                |
| <p>getUserAmountPaid</p><p>(public)<br>(view)</p>         | \_userTurn    | uint    |                                       |                                                                               | Returns assignedPaymentsfrom user struct.                                                                                                                                                                                                                                                                 |
| <p>getUserUnassignedPayments</p><p>(public)<br>(view)</p> | \_userTurn    | uint    |                                       |                                                                               | Returns unassignedPayments from user struct.                                                                                                                                                                                                                                                              |
| <p>getUserLatePayments</p><p>(public)<br>(view)</p>       | \_userTurn    | uint    |                                       |                                                                               | Returns latePayments from user struct.                                                                                                                                                                                                                                                                    |
| <p>getUserOwedTotalCashIn</p><p>(public)<br>(view)</p>    | \_userTurn    | uint    |                                       |                                                                               | Returns owedTotalCashIn from user struct.                                                                                                                                                                                                                                                                 |
| <p>getUserIsActive</p><p>(public)<br>(view)</p>           | \_userTurn    | uint    |                                       |                                                                               | Returns isActive from user struct.                                                                                                                                                                                                                                                                        |

**Modifiers table**

| Method           | SC               | Parameters | Type    | Description                                                                                                                                 |
| ---------------- | ---------------- | ---------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| atStage          | SavingGroups.sol | \_stage    | Stages  | <p>Verifies the current stage.<br>Is used to limit functions to determined stages.</p>                                                      |
| onlyAdmin        | Modifiers.sol    | admin      | address | <p>Verifies if the function caller is the admin.<br>Is used to define the functions available only to the admin.</p>                        |
| isRegisteredUser | Modifiers.sol    | user       | bool    | <p>Verifies if the caller is registered on this round.<br>Is used to define functions only available for users registered to the round.</p> |


