Cuentas Inteligentes de Waves. Su aplicación en los en los instrumentos financieros.

Alejandro Escandon
7 min readJul 17, 2019

En el artículo anterior, se consideraron varios casos de uso para cuentas inteligentes en negocios, incluidas subastas y programas de fidelización de clientes. Hoy, analizaremos cómo las cuentas inteligentes y los activos inteligentes pueden aumentar la transparencia y la confiabilidad de los instrumentos financieros, como las opciones, los futuros y las letras de cambio.

Opciones

Una opción es un contrato de intercambio que otorga al comprador el derecho pero no la obligación de comprar un activo a un precio específico, antes o en una fecha determinada.

Se puede implementar una opción de la siguiente manera. Utilizamos un activo inteligente para una opción y una cuenta inteligente para un participante, que asume el rol de un intercambio y emite opciones (participante de “intercambio”). El participante del “intercambio” se compromete a vender una cierta cantidad de un activo al precio sellPrice entre los números de bloques expirationStart y expirationEnd.

En el siguiente código de activos inteligentes, simplemente verificamos que se negocie solo entre los números de bloques especificados, y no verificaremos nada más, dejaremos toda la responsabilidad de observar las reglas en el código del participante de intercambio.

Código de activo inteligente:

Suponemos que las acciones se producen de la siguiente manera: el participante de “intercambio” vende opciones para comprar un activo, y otros participantes pueden transferir estas opciones o intercambiarlas. Para ejercer su derecho de compra, un comprador potencial debe transferir el número deseado de opciones a la cuenta del vendedor, es decir, a la cuenta del participante del “intercambio”.

Luego se agrega la información sobre la transferencia al estado de la cuenta del participante de “intercambio” y solo así, la cadena de bloques puede aceptar una transacción de intercambio (ExchangeTransaction) en las condiciones especificadas de compra y venta.

En el código de la cuenta inteligente, debemos asegurarnos de que cualquier transacción de intercambio que pase por el acto final de compra-venta cumpla con las condiciones especificadas, y el participante compre exactamente la cantidad de unidades que envió a la cuenta del miembro de “intercambio”. El comprador debe enviar la Transacción de datos (DataTransaction) correcta sobre la transferencia que se realizó, de modo que el participante de “intercambio” pueda evitar el doble gasto. En esta Transacción de datos, el comprador coloca en una clave igual a su dirección un valor igual al número de opciones transferidas a la cuenta del participante en el intercambio, es decir, el número de unidades de activos que puede comprar.

En esta Transacción de datos, el comprador agrega a la clave, que corresponde a su dirección, un valor que es igual al número de opciones transferidas a la cuenta del participante “intercambio”, es decir, igual al número de unidades del activo que pueden comprar.

Código de cuenta inteligente:

Futuros en cuentas inteligentes

A diferencia de las opciones, los futuros (contratos de futuros) no son un derecho, sino la obligación de un comprador de realizar una compra de activos a un precio de contrato fijo en un momento determinado en el futuro.

En general, la implementación de futuros es similar a la de las opciones. Aquí, un activo inteligente (smart asset) actúa como el futuro.

También debe asegurarse de que tanto el comprador como el vendedor firmen una orden de compra (transacción). Los futuros son obligaciones que deben cumplirse en cualquier caso. Esto significa que si el vendedor o participante rechaza sus obligaciones, cualquier participante en la red puede enviar una transacción y, por lo tanto, ejecutar el contrato.

El script de activos inteligentes controla todas las Transacciones de Transferencia y las Transacciones de Intercambio (TransferTransactions and ExchangeTransactions) de futuros de activos, y las aprueba solo si el participante-comprador ha creado una orden para una futura compra de futuros de activos del participante del “intercambio”.

Esta orden debe ser válida y cumplir con las condiciones en que se emiten los futuros. Para verificar el pedido, puede ingresar todos sus campos en el estado de la cuenta del comprador, junto con el código de byte del pedido firmado, después de lo cual se podría llevar a cabo la validación por parte de un tercero.

Actualmente, RIDE no contiene la función nativa para analizar los bytes de transacción, pero incluye todas las herramientas necesarias para su implementación. Por lo tanto, los desarrolladores pueden intentar implementar esta característica por sí mismos.

Cuentas Multi-firma / Depósito en garantía.

Una cuenta de firma múltiple permite a varios usuarios administrar activos de forma conjunta (por ejemplo, las transacciones con activos solo se podrían permitir si están firmadas por tres de cada cuatro usuarios). Para crear cuentas de firma múltiple con RIDE, podemos usar comprobantes de transacciones (proofs).

También se puede utilizar una cuenta de firma múltiple para hacer un depósito en garantía, en la cual los fondos se retienen hasta que las partes que han firmado el contrato hayan cumplido con sus obligaciones contractuales.

Registro curado de token (Token curated registry TCR)

Muchas plataformas blockchain enfrentan el problema de los activos tóxicos. Por ejemplo, en la plataforma Waves, cualquier dirección que haya pagado la tarifa de emisión puede crear un activo.

El problema de proteger a los usuarios y la propia cadena de bloques de los activos tóxicos se resuelve mediante un registro curado de token (TCR), generado por los titulares de token.

Para votar para agregar un token específico a la lista, los titulares colocan una participación igual a su parte de tokens del número total de emitidos. Se agrega un token al registro si la mayoría de sus titulares lo vota.

En nuestro ejemplo, un usuario puede agregar un token a la lista de consideración (durante el período de “desafío”) mediante la clave de estado = asset_name únicamente si el valor actual del conteo = 0.

Además, el usuario en la billetera debe tener un balance distinto de cero de este token. Luego viene el período de votación, durante el cual el usuario puede votar por cada activo en su billetera, pero solo una vez, poniendo una calificación de 1 a 10. Los votos de los usuarios se representan mediante claves que se ven así: user_address + assetID.

Cuota de suscripción

En este ejemplo, consideramos el uso de cuentas inteligentes para realizar pagos regulares de un producto o servicio a intervalos específicos: “tarifas de suscripción”.

If a user sends to a smart account (through transaction proofs) an ID TransferTransaction with a required amount of transferred funds, they could add to the account state: {key: address, value: true}.

con la ID de Transferencia con la cantidad requerida de fondos transferidos, puede escribir al estado de la cuenta {clave: dirección, valor: verdadero}.

Si un usuario envía a una cuenta inteligente a través de pruebas de transacciones (proofs) una transacción de Transferencia con ID, con una cantidad de fondos transferidos, podría agregarse al estado de la cuenta lo siguiente: {key: address, value: true}.

Esto significaría que el usuario confirma una suscripción de bienes o servicios. Cuando el período de suscripción expira, cualquier usuario en la red podría cambiar ese valor a falso.

Votando

Se pueden usar cuentas inteligentes para implementar la votación en la cadena de bloques. Un ejemplo sería votar por el mejor informe de embajadores en un programa de embajadores. El estado de cuenta se utiliza como plataforma para registrar votos para varias opciones.

En este ejemplo, solo los que han comprado el token de “votación” pueden votar. Un usuario envía un DataTransaction con (key, value) = (purchaseTransactionId, buyTransactionId). Está prohibido establecer un valor diferente para esta clave. Usando su dirección y opción de votación, un DataEntry (para guardar el dato) se puede hacer solo una vez. La votación está permitida solo dentro de un período específico.

Letra de cambio

Letra de cambio: una obligación por escrito, según la cual una parte debe pagar a la otra una cantidad fija en el momento de la reclamación o en una fecha predeterminada.

En nuestro ejemplo, se utiliza una cuenta inteligente, cuya fecha de vencimiento corresponde a la fecha de pago de la letra de cambio.

Depósito

Depósito: colocación de fondos en un banco bajo ciertas condiciones (plazo, intereses). En nuestro ejemplo, la función del banco la realiza una cuenta inteligente. Después de un cierto número de bloques, que corresponde al término del depósito, el usuario puede recibir su dinero con intereses. El script establece el número del bloque (finalHeight), después del cual el usuario puede retirar dinero de la cuenta.

heightUnit es el número de bloques en una unidad de tiempo (por ejemplo, mes, año, etc.). Primero, chequeamos la presencia de un registro con un par (key, value) = (initialTransferTransaction, futureDataTransaction). Luego, el usuario debe enviar TransferTransaction con la información correcta sobre el monto del depósito y los intereses devengados durante el período de depósito. Esta información se verifica con la Transferencia original, que se encuentra en la prueba actual de la Transferencia (proofs). depositDivisor es el número inverso de la cuota del depósito (si el depósito se acepta al 10%, la cuota del depósito es 0.1 y depositDevisor = 1 / 0.1 = 10)

heightUnit is the number of blocks in one period unit (such as a month or a year). Initially, we check the presence of a record with the pair (key, value) = (initialTransferTransaction, futureDataTransaction). Then, the user has to send a TransferTransaction with correct information on the deposited sum and interest collected over the deposit period. This information is checked against the initial TransferTransaction, which is contained in the current proof of the TransferTransaction. depositDivisor is the inverse of the deposit share (if the deposit is placed at a 10% interest, the share is 0.1 and depositDevisor equals 1/0.1 = 10).

Traducción desde original en Применение смарт-аккаунтов и смарт-ассетов Waves в финансовых инструментах y Application of Waves Smart Accounts and Smart Assets for Financial Instruments.

--

--