¿Qué son los Succinct Atomic Swap (SAS)?

Los desarrolladores de tecnología blockchain cada vez se enfocan más en traer nuevas funciones, en especial aquellas que permitan el funcionamiento cruzado de varias blockchain, y una de esas tecnologías son los Succinct Atomic Swap (SAS) o Intercambios Atómicos Sucintos.

Los Succinct Atomic Swap o SAS, son en realidad una evolución de los intercambios atómicos o atomic swaps que ya podemos ver desplegados en varias blockchain. La diferencia es que los SAS buscan hacer más sencilla, eficiente y segura la forma en cómo esta tecnología funciona.

Succinct Atomic Swap (SAS), mejorando a los atomic swaps

La idea de los Succinct Atomic Swap (SAS) tiene su origen en la mente de Ruben Somsen, quien el 11 de mayo de 2020, escribió en la lista de desarrollo de Bitcoin el siguiente mensaje: SAS: Succinct Atomic Swap. En dicho mensaje, Somsen describía una idea que permitía crear intercambios atómicos de forma rápida, con una menor complejidad de código y scripts, y con una baja actividad sobre la blockchain. Todo ello mientras explotaba la flexibilidad de ECDSA, e incluso apuntando al futuro con el uso de firmas Schnorr y direcciones multifirma (MultiSig).

La idea de Somsen estaba apoyada sobre el trabajo del equipo de Monero (XMR) y sus atomic swap entre Monero y Bitcoin. Y también, tomaba ideas sobre lo presentado por el usuario @TierNolan en 2013 en el conocido foro Bitcointalk. En cualquiera de los casos, la propuesta de Somsen simplifica de gran manera la forma en como los atomic swaps pueden realizarse, reduciendo al mismo tiempo el impacto de los mismos sobre la blockchain, sin renunciar a la seguridad y la privacidad de los mismos.

Pese a la brillante idea, este tipo de protocolos aún no han sido construidos, permaneciendo en un modelo experimental.

¿Cómo funciona el protocolo?

Ahora bien, el funcionamiento de este protocolo depende en primer lugar de tecnologías que ya tenemos a disposición en Bitcoin. Estamos hablando de criptografía ECDSA, o también firmas Schnorr, direcciones multifirmas, y adicionalmente de códigos de operación (OP_CODES) como CLTV, nLockTime y nSequence. En pocas palabras, en su forma más básica, no es necesario agregar nada adicional al protocolo Bitcoin, y otras criptomonedas derivadas de Bitcoin.

Iniciando el proceso

El proceso de funcionamiento de un SAS comienza cuando dos personas inician el intercambio. En este caso, nos referiremos a esas personas como Laura y Daniel. Laura tiene 1 BTC que desea intercambiar en su equivalente con Daniel que tiene Litecoin (LTC), y todo ello sin pasar por un exchange centralizado.

Así tenemos que Laura prepara 1 BTC en una transacción que ella ha firmado con una firma conjunta usando su firma y la de Daniel. Esta primera transacción que aún no ha sido enviada, llegará a la blockchain en un estado de espera. Esto es posible usando OP_CODES como CLTV y nLockTime, que permiten definir un tiempo de espera y otras condiciones necesarias para procesar la transacción. En este caso, la condición para la liberación de dicha transacción es que Daniel revele su secreto a Laura, algo que en este punto aún no ha pasado.

La programación con CLTV de esta transacción también obedece a otro punto, y es que en caso de que las partes no completen el intercambio, dicha transacción pueda ser enviada a la blockchain, y pasado un tiempo, Laura pueda desbloquearla sin problemas recuperando los fondos. Esto es posible porque CLTV puede transformar una dirección multisig en una dirección sencilla bajo ciertas condiciones que pueden programarse. Al mismo tiempo que Laura recupera sus fondos, ella revelará un secreto a Daniel, el cual le permitirá recuperar los fondos que bloquee en su transacción de Litecoin.

Preparando la segunda transacción

Mientras la primera transacción aún no se ha enviado, Laura y Daniel van preparando el resto de condiciones para el intercambio. En este punto, Laura y Daniel ahora crean una nueva y segunda transacción, pero colocan sobre esta un bloqueo a nivel de transacción (usando nSequence). Esto evitará que la transacción sea tomada por los mineros hasta que el tiempo del bloqueo pase, este tiempo es decidido por Laura y Daniel, y han decidido darle una hora de bloqueo.

Este bloqueo sobre la transacción se realiza como un seguro que evita que Laura pueda perder su dinero en caso de que Daniel actué de forma deshonesta. Y es que, gracias al bloqueo y las condiciones en la que fue creada esa transacción, Laura puede recuperar dicha transacción sin problemas. De allí que la elección del bloqueo sea el OP_CODE nSequence, ya que este permite un bloqueo relativo. Es decir, el bloqueo solo puede activarse cuando una transacción anterior y sus salidas asociadas (la primera transacción firmada por Laura y Daniel) haya sido incluida ya en la blockchain.

Enviando transacciones

Ahora bien, lo siguiente es comenzar a enviar las transacciones. Laura envía primero la segunda transacción, la cual estará bloqueada indefinidamente hasta que la primera transacción llegue a la blockchain. Sin embargo, este hecho de enviar la segunda transacción a la red es indicativo para Daniel de que Laura ha iniciado el proceso de intercambio. Así que lo siguiente que hace Daniel es crear una transacción en Litecoin por el total de intercambio, y para esa operación usa las firmas de Laura y suya.

Esta transacción en Litecoin es vista por Laura quien de acuerdo con la misma procede a enviar la primera transacción, la cual contiene 1 BTC para Daniel. Laura no podrá acceder a los fondos en Litecoin debido a que no conoce el secreto de Daniel necesario para desbloquear dicha transacción. Así una vez que Laura envía la primera transacción a la blockchain de Bitcoin, empieza a correr el reloj de los bloqueos.

Ahora bien, queda otro punto ¿Cómo es posible que Laura y Daniel sepan los secretos necesarios para desbloquear sus respectivas transacciones en Bitcoin y Litecoin? Pues bien, en este punto entra en juego algo conocido como adaptador de firmas ECDSA. Este adaptador hace posible que ECDSA bajo ciertas condiciones pueda revelar el secreto necesario para que Daniel y Laura puedan desbloquear sus transacciones. De esa forma, podrán realizar con éxito el intercambio, algo que explicaremos a continuación.

El momento de intercambio

Ahora bien, tan rápido como la primera transacción esté en la blockchain Bitcoin, comienza el proceso de intercambio. La primera transacción está firmada de forma tal que solo es válida si Daniel revela su secreto. Es decir, si Daniel quiere el Bitcoin, esto solo será posible si Daniel revela el secreto al interactuar con dicha transacción. Ello se debe a que Laura firma dicha transacción de forma tal que solo será válida bajo ese supuesto y el encargado de ello será el adaptador de firmas ECDSA. Lo mismo pasa con la segunda transacción, por lo que a Daniel solo le queda una opción, interactuar con dichas transacciones para reclamar los bitcoins que desea.

Así, cuando Daniel interactúa con la transacción para reclamar el BTC, revela el secreto a Laura. En este punto, Laura conoce el secreto de Daniel y el suyo propio, por lo que puede ir a la blockchain de Litecoin y con ambos secretos en su poder desbloquear la transacción de Litecoin que Daniel ha enviado en intercambio por el BTC. De esta forma, Laura y Daniel han realizado con éxito un Succinct Atomic Swap (SAS).

Si el proceso termina de forma exitosa, esto hará que la segunda transacción sea inválida. Pero si el proceso no se realiza, entonces la segunda transacción (bloqueada con nSequence) servirá como una transacción de reembolso, permitiéndole a Laura recuperar su BTC sin problemas. Al final, en el mejor de los casos, un SAS siempre podrá llevarse en dos simples transacciones dentro de la blockchain.