# Blockchain "Masterclass" ## Versión muy (muy) reducida Hay cinco cosas a entender a la hora de trabajar con una blockchain: 1. Los sistemas _descentralizados_ (como blockchain) son considerados _canales abiertos_ (que pueden ser escuchados y potencialmente intervenidos). Por esto, es necesario usar algoritmos criptográficos para proporcionar unas garantías fundamentales: **confidencialidad, autenticidad, integridad, y no repudio**. 2. ⁠Una blockchain es una máquina de estados, de naturaleza atómica y transaccional, compuesta de: <center><p> <img style="width: 70%" src="https://polkadot-blockchain-academy.github.io/pba-content/singapore-2024/syllabus/3-Blockchain/img/headers-link-state-body.svg" /> </p></center> 1. **Una cadena de bloques:** lista enlazada por hash del elemento inmediatamente anterior. Esto, para garantizar la integridad de las operaciones, y de merkle trees (arboles n-arios, donde el valor del nodo es el hash de la concatenación de los hashes de los nodos hijos, hasta las hojas, que son o bien las operaciones, o el estado), y que se usan para poder verificar rápidamente cambios en el estado de la base de datos sin necesitar de mucha información. 2. **Un estado:** este estado puede ser cualquier base de datos, pero típicamente es un trie n-ario de llave-valor. Es un trie n-ario, porque así es muchísimo más fácil usar hashes para calcular los prefijos de las llaves, y leer la información muchísimo más rápido. Pero para efectos prácticos, **las bases de datos de una blockchain suelen ser de tipo llave-valor**. 3. Para modificar el estado de una blockchain, **se precisa de una función de transformación del estado** ($STF = f(S_0, tx(...params)) \rightarrow S$). Una colección de estas funciones ejecutadas en un tiempo definido, genera un bloque nuevo. <center><img src="https://polkadot-blockchain-academy.github.io/pba-content/singapore-2024/syllabus/3-Blockchain/img/state-machine/state-machine-general.svg" /></center> 4. ⁠Dependiendo de la blockchain, esas STF pueden ser: 1. Un conjunto fijo de operaciones (como Bitcoin, Litecoin, Dogecoin, Monero, etc), que almacena y verifica transacciones de manera histórica para cada dirección (UTXO)[\[1\]][1], 2. Un sistema de cuentas y balances (como Ethereum, Polygon, etc.) que, junto a una máquina virtual (quasi-Turing completa) permite ejecutar funciones (Smart Contracts) que pueden almacenar su propio estado interno, y tener una API[\[2\]][2], o 3. Un **Runtime** (como Substrate: Polkadot, Kusama, Kreivo, AlephZero, Moonbeam, etc.) que incluye un conjunto de operaciones (API) actualizables en el tiempo[\[3\]][3], y que además, puede correr Smart Contracts. 5. **Desarrollar un protocolo básicamente significa diseñar estas STF**: funciones que que determinen, dado el estado actual, y unos parámetros de entrada, reglas de negocio donde la salida sea un nuevo estado, o un error indicando por qué no se pudo cambiar el estado. ## Versión extendida Ver https://polkadot-blockchain-academy.github.io/pba-content/singapore-2024/ (capítulos 1 al 3). [1]: https://polkadot-blockchain-academy.github.io/pba-content/berkeley-2023/syllabus/3-Blockchain/1-Overview_of_Blockchains_slides.html#/9/2/0 [2]: https://polkadot-blockchain-academy.github.io/pba-content/berkeley-2023/syllabus/3-Blockchain/1-Overview_of_Blockchains_slides.html#/9/4 [3]: https://polkadot-blockchain-academy.github.io/pba-content/berkeley-2023/syllabus/5-Substrate/1-Intro-to-Substrate_Slides.html#/7/8