Grupo Cooperativo de las Indias

Sociedad de las Indias Electrónicas

Grupo Cooperativo de las Indias

Hawala: descripción y funcionalidades

17 ago 2010

Características y procesos para optimizar redes familiares de pagos transnacionales

Desde el siglo IX las redes comerciales unidas a la emigración han generado sistemas de pago a larga distancia.

El mecanismo es sencillo: una serie de nodos {1,2,3,…,N} implantados en distintos territorios, reconocen cada uno a una serie de apoderados. El nodo 1 reconocería por ejemplo {a1,b1,c1,…,n1}, cada uno con distintos límites de crédito y el conjunto con un límite global de endedudamiento que es el máximo que el nodo 1 acepta tener como pasivo neto en ese trimestre.

Así, cuando a1 está en el territorio donde el nodo 2 desarrolla su actividad comercial, puede pedirle a este que le adelante una cierta cantidad, tras comprobar este que lo solicitado no excede el máximo que 1 otorga a a1 y que en conjunto, el nodo 1 no ha rebasado su capacidad trimestral de endeudamiento. Finalmente, cada trimestre, los nodos ajustan cuentas entre si minimizando el número de flujos en el conjunto de la red.

¿Cómo programamos esto?

Rompería el espíritu histórico de la hawala crear un software de este estilo que no fuera P2P y que cifrara las comunicaciones (hoy ya usando cifrados de clave asimétrica).

Variables a configurar por los usuarios

Cuando un nodo se diera de alta tendría que:

  • Elegir una divisa para los detalles de pago. Aunque las transacciones se hagan siempre en la misma divisa internacional (de hecho simplifica mucho hacerlas en múltiplos de 500€), a1 recibirá de 2 el equivalente a su pedido en la divisa local (no en euros) el día que hizo el pedido al tipo de cambio de ese día.
  • Fijar un máximo para su endeudamiento trimestral. Este no es el máximo de sus pasivos sino del balance entre activos y pasivos globales.

Cuando un nodo reconoce a otro nodo (1 reconoce a 2) fijaría además cual es el pago trimestral máximo que aceptaría hacerle. Como veremos más adelante esto no es igual que el crédito máximo que acepta dar a los suyos en el territorio de 2. Puede que 2 no preste a ningún usuario de 1 en el periodo, pero la optimización del número de pagos puede llevar a que se produzca un flujo entre 1 y 2.

Y finalmente cuando un nodo aceptara un usuario le otorgaría un máximo de crédito personal. El programa además cuidaría que un mismo usuario no pudiera estar adscrito a más de un nodo.

Mecanismo de crédito

Cuando a1 solicita dinero a 2 el programa comprueba que en ese momento del trimestre 1 todavía puede endeudarse y que a1 no ha sobrepasado el límite global que fijó. Si no se cumpliera la primera condición avisaría a 1 solicitándole un aumento de crédito para a1 que este podría aprobar o no. Si no se cumpliera la segunda notificaría a 1 que de querer autorizar la operación habría de aumentar temporalmente su límite máximo global de endeudamiento.

Saldos trimestrales

Se trata de minimizar el número de transferencias teniendo en cuenta las variables fijadas en la configuración de cada nodo. Aquí es donde se produce un ahorro evidente en gestión y obviamente, en comisiones, si las ejecutan a través de un banco o sistema de transferencia (como MoneyGram o Western Union).

Para ello el sistema debe comprobar los saldos. Resulta trivial que si un nodo ha prestado a usuarios de otros nodos durante el periodo lo mismo que sus usuarios han recibido de otros, no debería recibir ni emitir pagos en el saldo.

Y si tras optimizar los flujos, la cantidad es demasiado pequeña (por ej menor de un 20% del límite de pagos máximo de un nodo), también podría ser útil acumular el pago para un siguiente periodo, o al menos tras preguntar a las partes.

Pero se puede ir más allá usando algunos sencillos algoritmos matemáticos. Por ejemplo, imaginemos una red con cinco nodos. Si 1 debe 200 a 4, y 2 y 3 le deben a su vez 100 cada uno, y además 3 debe 200 a 2 y 5 debe 100 a 4… tendremos 5 relaciones de deuda establecidas que en realidad se saldarían fácilmente con tan sólo dos pagos. De hecho hay varias soluciones, pero una de ellas sería que 3 pagara 300 a 4 y 5 pagara 100 a 2.

Si dejamos para un siguiente periodo e pago de 5 a 2 por ser demasiado pequeño, habremos resuelto el saldo del periodo con tan sólo una transferencia ejecutada.

Por eso es importante también que los nodos fijen el monto de pago máximo que aceptarían a hacer a cada uno de los nodos (o en su defecto que no declararan no importarle tal máximo) para elegir soluciones óptimas para todos.

El sistema además habría de facilitar dos informes a los nodos: uno con los pagos recibidos por sus usuarios desde otros nodos y los dados por el a usuarios de otros nodos (tanto en la divisa franca como con sus equivalentes a precio del día en que se realizaron); otro con los pagos trimestrales que debe realizar.

En paralelo (otra pantalla de informes) debería mantener un histórico de estos pagos con opción de señalar si han sido ya realizados, de modo que en el momento en que el nodo deudor emprenda el pago sea avisado el nodo receptor, pero también de modo que si los nodos pactan (y deberían poder hacerlo a través del sistema) realizar los pagos en un plazo más amplio (semestralmente por ej) puedan compensarse flujos privadamente entre uno y otro.

¿Para quién sería útil y qué ganaría?

El usuario clásico y más evidente serían familias inmigrantes esparcidas por dos o más países, que ganarían en ahorro de costes y podrían ajustar sus flujos y pagos a los viajes presenciales que tuvieran que realizar, eliminando el máximo número posible de intermediaciones.

Pero evidentemente no se queda ahí: federaciones deportivas, redes de negocio transnacionales, pequeñas empresas que contratan servicios regulares que reciben a través de la red o incluso comunidades virtuales de viajeros podrían encontrar útil un sistema que reduzca los costes de transacción asociados a mover personas y asumir sus costes en áreas donde ya tienen agentes, socios o colegas.

Usos indebidos posibles

Es cierto que existe un potencial uso irregular frente a las necesidades de las haciendas de los estados: cuando la red que lo utiliza es una red de negocios, el límite máximo de pago a cada nodo puede servir también para ocultar esos pagos en otros mayores y recurrentes, contabilizándolos como descuentos o sobreprecios en transacciones habituales entre los nodos. De este modo los costes de transferencia se harían aún menores y la gestión de las cuentas se simplificaría aún más, pero las empresas no harían transparentes a las haciendas estatales el uso final de esos fondos. Seguramente habría que incorporar algún tipo de advertencia en el programa o en sus instrucciones señalando el peligro de que la legislación de los estados en los que operen los usuarios no acepte ese tipo de prácticas.

Conclusiones

El objetivo de este programa es reducir el elevado coste que los intermediarios generan a los inmigrantes, a los pequeños negocios que generan pagos internacionales más o menos reiterados y a los profesionales que trabajan regularmente para empresas en otros países a través de la red. Obviamente también sería de utilidad a PYMEs transnacionalizadas con estructuras en distintos países.

Se basa en un sistema tan antiguo como el comercio internacional, en la confianza propia de las redes y los lazos establecidos entre agentes y mercaderes. Seguramente merece la pena desarrollarlo…

Añade tu comentario

10 Comentarios a “Hawala: descripción y funcionalidades”

  1. Ivan

    ¡Uau, David! Tenía pensado publicar un post hablando sobre la hawala y su posibilidad como software (aunque de momento tan sólo había recogido unos enlaces), cuando vi tu post del otro día. En él hablabas de Bitcoin, pero lo que narras en este post podría pasar por una descripción de Ripple, un proyecto existente que vengo siguiendo con mucho interés desde hace ya tiempo.

    La intención de Ripple es convertirse en un sistema distribuido capaz de encaminar deudas en una red arbitraria de nodos con relaciones de confianza y crédito. Cada usuario decide para cada uno de los nodos con los que tiene relación de confianza cuál es el máximo crédito que le otorga, en qué moneda y bajo qué interés. Cuando se efectúa una transacción entre dos nodos entre los cuales no hay relación de confianza, el sistema encuentra un camino (o varios) de nodos entre los que sí hay confianza, ajustando sus créditos (si los límites lo permiten y el que paga acepta las condiciones del camino, como tipos de cambio). Por tanto, el sistema se basa en la confianza entre los nodos (cohesión) y realiza automática y continuamente el «ajuste trimestral» que comentas (aunque un grupo de nodos podría establecer sus propias políticas de cierre periódico de cuentas fuera de Ripple, el cual ya se habría encargado de minimizar el número de deudas pendientes). Hay animaciones y gráficos en esta página (recomiendo la presentación «Car Trip» y el diagrama «Introduction to Ripple»).

    En el ejemplo que expones, a[1] podría pedir dinero a 3, que no conoce a 1, pero el sistema encontraría un camino a través de 2 (que tiene relación tanto con 1 como con 3) para realizar la transacción (si los límites de crédito en el camino lo permitieran). Creo que con un seguimiento local de créditos otorgados y recibidos, y jugando con los créditos máximos en cada nodo de la red se puede llegar a una limitación del valor en circulación (al menos como la has expuesto), y desde luego generar los informes que enumeras. Lo que no sé cómo está es el asunto del anonimato.

    Ahora mismo tan sólo hay una implementación libre monositio (proyecto ripple en SourceForge), al menos un sitio que la executa (ripplepay.com) y un foro de compra-venta (ripplexchange.com). Ryan Fugger, su desarrollador principal, dijo que prefería de momento tener una implementación monositio y dejar el protocolo bien especificado antes de saltar a una implementación realmente distribuida. Si existiera una comunidad de usuarios interesados en la versión distribuida, creo que Ryan estaría dispuesto a cambiar de opinión, y desde luego yo, si tuviera el tiempo, estaría dispuesto a colaborar. :)

    (Por cierto, incluir esto como opción a instalar en un nodo del bazar sería la b-o-m-b-a.)

    Responder | Comentar post

    • David de Ugarte

      A pesar de ciertos parecidos, veo objetivos, estructuras y filosofías distintas. Como comentas, de momento Riple es una aplicación para servidor, mientras Hawala es un P2P puro. La diferencia es importante por cuanto afecta a la seguridad y a la “legislabilidad” del sistema. Pero sobre todo, Riple es un sistema de microcréditos abierto, intenta generar un banco basado en préstamos P2P, por eso busca escala y la escala le lleva a un sistema de confianzas delegadas. Hawala es sin embargo, un sistema de transferencias dentro de una [[comunidad]] transnacional. Los pagos sólo se autorizan entre nodos que se conocen directamente e igualmente los ajustes de balance trimestral sólo se producen entre si. No contempla el tipo de interés porque no voy a cobrar interés por mover cantidades pequeñas de mi propio dinero de una parte a otra de mi organización durante un máximo de tres meses.

      Como esta mañana comentábamos con Julen en relación con la [[democracia económica]], la diferencia básica está en desde dónde se piensa, desde la universalidad imaginada o desde la [[comunidad]] real. Y los resultados son, obviamente muy distintos.

      Responder | Comentar post

  2. Ivan

    p>Umm, entiendo a lo que te refieres pero no lo acabo de ver. Ripple es en realidad el protocolo para montar la red distribuida de encaminamiento de deudas, y RippleSite es el único software existente (de momento) que implementa el mismo mecanismo y, en efecto, es un software servidor (y además aislado), pero ello no excluye que se desarrollen aplicaciones P2P que corran usuarios individuales y usen el protocolo Ripple para comunicarse. De hecho, ésa es la razón de que exista un protocolo en desarrollo, y de que al no estar acabado no haya aún una aplicación P2P.

    Por otra parte, no veo que Ripple pretenda generar un banco, sino tantos bancos como participantes haya o, si lo prefieres, tantos como redes aisladas haya en él. Nada obliga a que Ripple conforme una única red, sino que puede usarse para crear varias redes comunitarias o al estilo del mar de flores, y generar bancos con intereses es tan sólo un uso. A donde voy es a que Ripple es una herramienta flexible que no impone una topología o uso y permite montar sobre ella redes con diferentes propósitos y protagonistas, como la web ha permitido tanto el surgimiento de portales y puntocoms, como blogs que han aprovechado las comunidades conversacionales. Y además, ya llevan terreno adelantado, ¿por qué no aprovecharlo?

    Responder | Comentar post

    • David de Ugarte

      Lo que necesitamos es simplemente un sistema que reduzca el número de transacciones entre los nodos (que no son personas, sino empresas) de una red de agentes, reduciendo los costes y permitiendo así:
      - que los colaboradores externos fuera del estado base de una organización puedan cobrar facilmente, sin comisiones ni costes extra, directamente a través de sus agentes comerciales locales
      - los viajes de negocios incluso pequeños emprendimientos que puedan hacer durante ellos los miembros de una red comercial, no se vean paralizados por problemas de pagos internacionales

      Osea lo que necesitamos es un programita que cada nodo y persona adscrita a uno tenga en su ordenador que comunique las peticiones de los individuos a sus nodos y los constraste con los distintos límites establecidos por estos, haga los cálculos con un algoritmo igual y emita los pdfs correspondientes. ¿Hace falta para comunicar a personas y nodos Riple o cualquier tipo de nuevo protocolo? No. Basta y sobra con XMPP, ni siquiera necesitas configurar puertos en los routers de los usuarios y además es proactivo. No sé si un sistema de créditos en red (osea un banco en red, o muchos, da igual) requiere otro protocolo, pero aquí no lo veo… Por cierto que hasta podría montarse hawala como un plugin de pidgin que utilizara el sistema de cifrado de este y asociara los nodos a los grupos… pero ya me parece demasiado lío.

      Responder | Comentar post

  3. Ivan

    Ojo, que una cosa es el protocolo de transporte que se use para transmitir los mensajes (XMPP, HTTP, TCP pelado o paloma mensajera) y otra la descripción de qué mensajes se han de intercambiar, cuándo y qué información incluye cada uno. Esto es lo más trabajoso de definir (y sobre todo, de definir bien), y es justamente el trabajo que llevan adelantado en Ripple y que más se podría aprovechar.

    Cuantas más vueltas le doy a lo que describes, y teniendo en cuenta que los colaboradores externos o miembros de la red no son nodos (sino asociados a ellos), menos diferencias veo con Ripple, salvo en un punto: cuándo se realiza el ajuste de transacciones. Ripple lo realiza en el momento, y en tu propuesta se retrasa hasta un momento consensuado por la comunidad. Y en cualquier caso, la minimización de transferencias parece un problema complejo de encaminamiento o de investigación operativa si se quiere algo más allá de reducir las transferencias a una por pareja de nodos, tanto que parece que los de Ripple no lo tienen rematado aún. Ojalá simplificara las cosas el tener una red donde cada nodo estuviera conectado con todos los demás, cosa que se puede asumir en una comunidad real de personas como la indiana pero, ¿se puede asumir en la red de empresas usuarias de Hawala, the software? Esto es un tema interesante…

    En fin, que es un tema complejo en el que yo aprovecharía de Ripple tanto como pudiera, que sería código si existiese una implementación de nodo distribuido, aunque de momento habría que conformarse con parte del protocolo y los algoritmos de encaminamiento. Puede que Ripple haya sido pensado desde una visión universalista o para otra comunidad, pero francamente es lo que menos me preocupa si ese conocimiento resuelve los problemas de mi comunidad. De lo contrario, no estaría usando Linux, ni la WWW, ni Firefox, ni nada de nada. Ahí radica parte de la belleza del software libre y los estándares abiertos. ;)

    En cualquier caso (por si no estaba claro entre tanto debate), esto del software para hawala me parece una idea estupenda y si hay interés y dispongo de tiempo, a ello me pondré. :)

    Responder | Comentar post

    • David de Ugarte

      Iván, la “descripción de qué mensajes se han de intercambiar, cuándo y qué información incluye cada uno” ya lo tenemos muy elegantemente resuelto, de hecho sigo sin entender por qué usar la de otro programa que ha sido inventado para otra cosa y por lo tanto transmite mucha info que a nosotros ni nos va ni nos viene y que complica trementedamente todo (Ej: tipo de interés que aplica cada nodo) y que hace más difícil algo fundamental para lo que queremos y que Riple ni se plantea: la minimización del número de transacciones en los saldos de balance.

      En tu mensaje además hablas de la “comunidad de empresas de Hawala”. ¿Eso es una [[comunidad]]? ¿Somos parte de la misma [[comunidad]] que Oracle por usar OpenOffice? No lo sabía!! Y desde luego no me refería a eso con hacer el software para una comunidad real determinada.

      Responder | Comentar post

  4. Ivan

    Por eso digo «habría que conformarse con parte del protocolo», justamente con la parte que pueda ser de utilidad para el propósito que nos ocupa. Puede ayudar a evitar que se escape algún detalle.

    Ah, ojo que yo no nunca he dicho «comunidad de empresas de Hawala», sino «red de empresas usuarias de Hawala». Mi pregunta era algo completamente práctico, ya que si se asume de la red una conexión completa todos-a-todos como la de una comunidad real podría ocurrir que fuera más sencillo minimizar las transferencias. Por eso me parece interesante discutir qué forma tendría la red de empresas.

    Responder | Comentar post

  5. versvs

    A ver si soy capaz de ordenar una respuesta que, además, sea breve. La concisión se me escapa, a veces.

    Creo que lo principal cuando uno desarrolla una herramienta es ver qué problema está solucionando. Aparte del gusto por el hecho mismo de programarla, hay que ver qué problema se soluciona. Porque el diseño de las herramientas no es neutral, cabe preguntarse qué problema soluciona Riddle. Riddle parece buen software, pero ¿se usa? Más allá del demo-site de los desarrolladores. No estoy seguro, porque está enfocado (o desenfocado) a nada en particular. Parece ser rico en funciones (algunas aún proyectadas, según comentas, sin desarrollar).
    ¿Necesitamos todas esas funciones? Seguramente no, pero no es un problema. Eso se arregla quitando código pero es que resulta que prácticamente todo lo que vamos a necesitar va a estar desarrollado como parte de otro software que nos traemos entre manos (comunicación segura entre nodos y demás). El formato exacto de los datos, realmente, no es tan importante: al final se trata de poner de acuerdo a dos máquinas y una vez la comunicación vaya asegurada (cifrado), lo otro es más sencillo de implementar.

    En ese sentido, me parece que desarrollar una herramienta específica con el foco puesto en un problema muy concreto, para la cual vamos a reutilizar código que ya tenemos disponible y que sirve a un problema concreto (y muy relacionado) con éste, es una opción más interesante :)

    Responder | Comentar post

2 Trackbacks/Pingbacks

  1. Hawala: el software

    [...] veces con montar algo para no pagar las locas comisiones de Western Union o Moneygram. ¿Qué tal programarlo? [...]

  2. La mirada universalista, la de la comunidad real y por qué a los indianos nos define la segunda

    [...] cuando los indianos debatimos con algunos amigos surge una diferencia de perspectivas. Una diferencia que a las finales podría resumirse como la [...]

Deja tu comentario

Natalia Fernández, gobernadora del Grupo Cooperativo de las Indias
Bienvenido a la «Bitácora de las Indias», el blog corporativo más antiguo del mundo, creado por la Sociedad Cooperativa de las Indias Electrónicas, cabeza del Grupo Cooperativo de las Indias, una consultora de innovación, inteligencia y redes con sede en Montevideo y oficinas en Bilbao, Buenos Aires y Madrid. Si buscas conocer más sobre nuestros enfoques, socios y clientes, visita la página del Grupo Cooperativo de las Indias. Anuncio de la Sociedad de las Indias Electrónicas (detalle)
La Sociedad Cooperativa de las Indias Electrónicas fue fundada como sociedad limitada con 3007 euros de capital el 2 de octubre de 2002 por Natalia Fernández, Juan Urrutia y David de Ugarte. Partían sin cartera de clientes, con el capital social mínimo pero con la experiencia social del primer ciberactivismo europeo y la experiencia empresarial de Piensa en Red que había sido la primera desarrolladora europea de software de gestión en movilidad y creación de redes sociales. Los comienzos fueron económicamente muy duros para una compañía casi desconocida sin capital ni agenda. Para darse a conocer en medio de lo más duro de la crisis de las puntocom crearon la primera bitácora empresarial del mundo: la Bitácora de las Indias, que ahora estás leyendo. Hoy, con más de nueve años de historia detrás, nuestra cartera de clientes se extiende por América Latina y Europa respondiendo a una amplia gama de demandas.

Bitácora de las Indias

Sociedad de las Indias Electrónicas ~ CIF F-83409656
Grupo Cooperativo de las Indias
Iturribide 22 - 48006 - Bilbao

Florencio Escardó 1486 - 11700 - Montevideo