Transacciones Offchain en Ethereum/RSK

Published on Author lopez

Anterior Post

Cada contrato en Ethereum/RSK tiene asociado un almacenamiento, el llamado “storage”. Este almacenamiento tiene celdas con contenido, accesibles por dirección numérica de celda  (32 bytes de dirección). El contenido de cada celda en Ethereum es la representación en bytes de un número de 32 bytes (en RSK, se ha conseguido modificar esto para que cada celda pueda albergar una cantidad arbitraria de bytes, a decisión del programador; hoy esta característica está solo disponible para contratos precompilados). Entonces, el almacenamiento de un contrato onchain (público en la blockchain, deducible desde la blockchain por cada nodo interesado de la red), es algo como:

(direcciones y contenidos simplificados). Cada dirección no usada tiene un valor asumido (cero en Ethereum, donde todos los contenidos son números enteros). Cuando el contrato se ejecute OFFCHAIN (fuera de la blockchain, como describí en el anterior post), el estado del almacenamiento se mantiene en la memoria del nodo ejecutante del contrato, y NO SE COMPARTE con el resto de la red. El estado offchain sólo es conocido por el nodo designado para ejecutar el contrato offchain. Este estado puede ser alterado enviando transacciones offchain al contrato, y haciendo calls offchain a ese contrato en ese nodo.

Un contrato offchain tiene código especial (escrito por el programador) que anuncia la confirmación (commit) del contrato. Esta operación es un nuevo opcode de la Ethereum Virtual Machine, se podría invocar desde código solidity también. Si la operación de commit es invocada entonces el contrato y el sistema EMITE una transacción ONCHAIN, a ser repartida, minada, validada y publicada por el resto de la red. La llamo la transacción delta. Es una transacción que cuando se ejecuta ALTERA el estado público, ONCHAIN, del contrato, para reflejar el nuevo estado OFFCHAIN. Para eso le basta tener información de los valores alterados NO TODA LA HISTORIA de las transacciones offchain que se ejecutaron:

Hay detalles a decidir, por ejemplo, el costo de esas transacciones y quién paga ese costo (mi primera respuesta: paga el que envió la transacción offchain que provocó la ejecución del commit).

La transacción delta comienza a tener sentido si su tamaño y costo es MENOR que el costo probable de ejecutar todas las transacciones OFFCHAIN enviadas como si fuera ONCHAIN. Podría ser así, por ejemplo, en los contratos que mantienen saldos de token por cuenta: las transferencias podría ser cientos, y afectar a POCOS saldos, y entones, alterar en poco el storage resultante.

Aunque estas ideas podrían ser algo difíciles de implementar en una red ya en ejecución como Ethereum, en RSK tenemos una implementación nueva, pero todavía en prueba, que podría aceptar fácilmente este tipo de nueva conducta soportada. Y estaría alineado con el propósito de RSK de llevar toda esta infraestructura a una escala que permita cientos o miles de transacciones por segundo, a bajo costo. El gran desafío es dar herramientas de desarrollo a gente que no está bancarizada o que no puede afrontar grandes costos de operaciones.

Próximos temas a tratar: la transaferencia de valor (ether) en las transacciones offchain, y cómo se transfiere ese valor en la delta transaction.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez