Armando una Blockchain (4)

Published on Author lopezLeave a comment

Anterior Post
Siguiente Post

En este post quiero describir algunas de las partes esenciales a implementar en el ejemplo de blockchain que estoy escribiendo en:

https://github.com/ajlopez/BlockchainSharp

usando C# y TDD (Test-Driven Development). Lo principal a implementar son:

– Bloques
– Transacciones

y los conceptos de:

– Cuenta
– Estado de Cuenta
– Smart Contracts (ejecutados en una máquina virtual)

He decidido usar Cuenta y Saldo, a la Ethereum, en vez de usar los UTXO (Unspent Transactions Output) de Bitcoin. Ver un buen post sobre la diferencia en Thoughts on UTXOs by Vitalik Buterin, Co-Founder of Ethereum.

Además, necesito utilitarios para:

– Codificar/Decodificar entidades a ser transmitidas/recibidas entre los nodos (he decidido usar arreglos de bytes para transmitir, bien podría, en otra implementación, por ejemplo, JavaScript pero aún en ésta de C#, usar simples JSONs).
– Calcular Hashes
– Implementar Tries immutables (algo hay ya de código en el proyecto)
– Firmar transacciones y verificar la firma
– Verificar la integridad del bloque
– Verificar que las transacciones son válidas (p.ej. que las cuentas que envían valores tienen saldo suficiente)
– Cálculo de Proof of Work en los mineros, como es usual en las implementaciones de Bitcoin y Ethereum.
– Almacenar algunas entidades: bloques completos, bloques parciales (Ethereum usa Block Header), estado de cuenta (saldo…), en general usar tries inmutables con algún soporte fuera de memoria.

Hace unos días, comencé a escribir una clase Transaction, que tiene cuentas y valores. Cada cuenta es identificada por una dirección (actualmente un string hexadecimal aleatorio):

Cada transacción tiene uno o más entradas y salidas. Cada entrada/salida es una dirección y un valor. Los valores son instancias de System.Numerics.BigInteger, así puedo manejar grandes cantidades de unidades pequeñas. En el mundo de las criptomonedas es usual el uso de valores enteros que expresan fracciones mínimas..

Próximos pasos: agregar transacciones a los bloques, aplicar transacciones a los estados de cuenta, validar que los valores estén disponibles, almacenar los estados resultantes en tries, etc,…

Nos leemos!

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

Leave a Reply

Your email address will not be published. Required fields are marked *