<commit_before>= Transaction Transference Protocol - Version 2 (DRAFT)

Date: Jun 6th 2015 +
Author: <NAME> <<EMAIL>>

== Consideraciones

* No se puede depender sólo de los eventos informativos IncomingCryptoReceivedEvent e IncomingCryptoReversedEvent porque pueden detectarse transacciones crypto confirmadas sin que haya visto la primer confirmación (porque estaba apagado el equipo por ejemplo). El protocolo de traspaso de transacciones sólo depende de un evento que exige el traspaso de transacciones pendientes, usaresmo el evento IncomingCryptoTransactionsWaitingTransferenceEvent.

== Problemas de la versión 1

* No separaba los conceptos de transacción de la red crypto y transacción de la plataforma. Cosa que notaremos más adelante.
* No plantea cómo organizar las cosas para reutilizar el protocolo para comunicar MetaTransactionInformation provenientes de los network services.
* Problema "menor", podría ser más eficiente


== Definiciones preliminares

Agente:: Thread que realiza un trabajo en paralelo.
Transacción crypto:: Mecanismo por el cual una red de crypto currencies registra el traspaso de valor de un usuario a otro.
Transacción:: Tarea de modificar los estados de las wallets y crypto volt de manera transaccional
Action:: Enum que lista qué debe hacerse con la transacción crypto que se traspasa. Los valores son:
** APPLY: Para que se aplique la transacción
** REVERT: Para revertir la transacción

CryptoState:: Enum que lista los cuatro posbles estados de una transacción crypto. Estos son:
** IDENTIFIED: Cuando se ve la transacción crypto en la red pero sin ninguna confirmación
** RECEIVED: Cuando la transacción crypto obtiene la primer confirmación.
** CONFIRMED: Cuando la tramsacción crypto obtiene suficientes confrmaciones para considerar la transacción irreversble.
** REVERSED: Cuando se reverte la transacción.

Specialist:: Enum que lista qué tipo de plug-in debe tomar poseción de la transacción a traspazar. Este enum es necesario dado que este plug-in debe dar distintas transacciones a distintos plug-ins, por ende cuando un plug-in venga a tomar posesión de una transacción debe indicar qué tipo de transacciones maneja.
CryptoTransaction:: Contenedor de datos con la información de una transacción. Esta información es: 
** Hash de la transacción
** Dirección de Origen
** Dirección de Destino
** Crypto Currency
** CryptoState
** Monto

Transaction:: Contenedor de datos con la información de una transacción. Estos datos son:
** Un identificador distintivo (TransactionId)
** Un elemento de tipo CryptoTransaction
** Un valor de Action (Apply, Revert)
** Un valor de Specialist (en principio los receptores de transacciones crypto pueden ignorar este campo, en cualquier caso para mencionar al incomingcrypto se usa el valor CRYPTO_ROUTER)
** Un timestamp que coloca quien genera la transaccón. (En este caso la red bitcoin)

TransactionStatus:: Estado interno que guarda un plug-in sobre cadaa transacción que describe su relación con la misma. El estado puede ser:<commit_msg>updated CryptoStatus enum documentation<commit_after>= Transaction Transference Protocol - Version 2 (DRAFT)

Date: Jun 6th 2015 +
Author: <NAME> <<EMAIL>>

== Consideraciones

* No se puede depender sólo de los eventos informativos IncomingCryptoReceivedEvent e IncomingCryptoReversedEvent porque pueden detectarse transacciones crypto confirmadas sin que haya visto la primer confirmación (porque estaba apagado el equipo por ejemplo). El protocolo de traspaso de transacciones sólo depende de un evento que exige el traspaso de transacciones pendientes, usaresmo el evento IncomingCryptoTransactionsWaitingTransferenceEvent.

== Problemas de la versión 1

* No separaba los conceptos de transacción de la red crypto y transacción de la plataforma. Cosa que notaremos más adelante.
* No plantea cómo organizar las cosas para reutilizar el protocolo para comunicar MetaTransactionInformation provenientes de los network services.
* Problema "menor", podría ser más eficiente


== Definiciones preliminares

Agente:: Thread que realiza un trabajo en paralelo.
Transacción crypto:: Mecanismo por el cual una red de crypto currencies registra el traspaso de valor de un usuario a otro.
Transacción:: Tarea de modificar los estados de las wallets y crypto volt de manera transaccional
Action:: Enum que lista qué debe hacerse con la transacción crypto que se traspasa. Los valores son:
** APPLY: Para que se aplique la transacción
** REVERT: Para revertir la transacción

CryptoStatus:: Enum que lista los cuatro posbles estados de una transacción crypto. Estos son:
 ** PENDING_SUBMIT: Cuando la transacciòn se creò internamente, pero aun no fue distribuida en la red de Bitcoin.
 ** ON_CRYPTO_NETWORK: Cuando se ve la transacción crypto en la red pero sin ninguna confirmación
 ** ON_BLOCKCHAIN: Cuando la transacción crypto obtiene la primer confirmación.
 ** IRREVERSABLE: Cuando la tramsacción crypto obtiene suficientes confrmaciones para considerar la transacción irreversble.
 ** REVERSED: Cuando se reverte la transacción.

Specialist:: Enum que lista qué tipo de plug-in debe tomar poseción de la transacción a traspazar. Este enum es necesario dado que este plug-in debe dar distintas transacciones a distintos plug-ins, por ende cuando un plug-in venga a tomar posesión de una transacción debe indicar qué tipo de transacciones maneja.
CryptoTransaction:: Contenedor de datos con la información de una transacción. Esta información es: 
** Hash de la transacción
** Dirección de Origen
** Dirección de Destino
** Crypto Currency
** CryptoState
** Monto

Transaction:: Contenedor de datos con la información de una transacción. Estos datos son:
** Un identificador distintivo (TransactionId)
** Un elemento de tipo CryptoTransaction
** Un valor de Action (Apply, Revert)
** Un valor de Specialist (en principio los receptores de transacciones crypto pueden ignorar este campo, en cualquier caso para mencionar al incomingcrypto se usa el valor CRYPTO_ROUTER)
** Un timestamp que coloca quien genera la transaccón. (En este caso la red bitcoin)

TransactionStatus:: Estado interno que guarda un plug-in sobre cadaa transacción que describe su relación con la misma. El estado puede ser:
{'fraction_non_alphanumeric': 0.042242210086733054, 'fraction_numerical': 0.0022486347574686796, 'mean_word_length': 5.328252032520325, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3026647', 'n_tokens_mistral': 1795, 'n_tokens_neox': 1763, 'n_words': 851}