# Pact and Smart Contracts ### Kadena 1. ¿Que es Kadena? (Santiago) - Conceptos generales - Diferencia entre proof of work y proof of stake (Prueba de participación) - El KDA - El trilemma del blockchain - Como PoW en kadena resuelve el trilema - Arquitectura de Kadena - Implementacion de proof of work con la introduccion de chainweb - Diferencia entre el PoW de bitcoin al de kadena - Arquitectura final con las 20 blockchains - Kadena vs otras blockchains. - La cantidad de transacciones por segundo (`480.000` vs solana `65.000`) - Valor de fee (gas) por transaccion (incluso llega a ser gratis) #### Guión: ##### Conceptos generales Kadena es una red de blockchain relativamente nueva basada en bitcoin, el cual, cito "pretende revolucionar la blockchain y con ella al mundo". Su asset es el KDA, actualmente su valor en el mercado esta en promedio en 1.5 dolares usa el consenso de PoW. que es PoW? Proof of work es una prueba criptografica que tiene como fin desinsentivar o dificultar comportamientos maliciosos en una red de blockchain, en la cual los mineros de la red tienen como fin resolver problemas criptograficos para validar un bloque de transacciones dentro del blockchain (quien mine el bloque o solucione el problema criptografico primero obtiene una recompensa), de esta manera los bloque nuevos validados tienen una referencia al bloque anterior, y de esta manera se validan las cadenas. Este metodo de consenso es costoso computacionalmente y ademas lento, por ello muchas blockchains se han migrado a Proof of Stake (Prueba de participacion), por ejemplo Ethereum la cual usaba en sus inicios PoW, ahora en la version de ethereum 2.0 utiliza PoS. Proof of Stake es un protocolo de consenso creado para reemplazar al Proof of Work aportando una mejor seguridad y escalabilidad a las redes que lo implementen. los nodos que minan en PoS se les llama validadores. La decisión sobre qué nodo ha de validar un bloque se hace de forma aleatoria pero dando mayor probabilidad a quienes cumplan una serie de criterios. Entre estos criterios podemos mencionar la cantidad de moneda reservada y el tiempo de participación en la red, pero pueden definirse otros Por que kadena de quedo con el PoW? ##### Tridilema El Blockchain Trilemma se refiere a los 3 retos principales a los cuales se enfrentan las blockchains. (decentralizacion, escalabilidad y seguridad) 1. Decentralización ⛓️ Crear un sistema de cadena de bloques que no dependa de un punto central de control. 2. Escalabilidad La capacidad de un sistema de cadena de bloques para manejar una cantidad cada vez mayor de transacciones. 3. Seguridad La capacidad del sistema blockchain para funcionar como se espera, defenderse de ataques, errores y otros problemas imprevistos. 🛡️ El proof-work escalable asegura las transacciones, validando las transferencias con 3 transacciones validas anteriores. Podemos ver como kadena, supuestamente, tiene cobiertos todos los puntos del tridilema ##### Arquitectura de kadena chainweb es el protocolo de blockchain público que proporciona un alto nivel de escalabilidad y seguridad. A diferencia de bitcoin, que usa el mismo consenso, este incrementa la seguridad validando no con 1 bloque anterior sino con 3 por nodo de cada blockchain. como se puede ver en las imagenes, la del bitcoin es el PoW tradicional donde una transaccion es validada solo por una transaccion valida, mientras la de kadena tiene una conexion a 3 transacciones distintas, y las 3 deben validar esa sola transaccion, incrementando asi la seguridad Actualmente el chainweb de kadena cuenta con 20 cadenas de bloques, y tiene la posibilidad de agregar mas de ser necesario > (Cristhian explica las 20 blockchains de kadena) ##### Kadena vs otras blockchains Kadena tiene uno de los fee (o gas como lo llaman en kadena) (Cargo por transaccion) mas baratos, llegando incluso a ser gratis para las empresas, en stellar, por ej que tiene uno de los cargos mas bajos de $0.000006 es superado por los $0.00000000081 de kadena, A demas la cantidad de transacciones por segundo de kadena supera al blockchain mas rapido del mundo (solana, aunque no este en esta grafica) alcanzando 480.000 transacciones por segundo, mientras que solana 65.000 #### Resources: ``` - https://observatorioblockchain.com/blockchain/que-es-kadena-la-red-basada-en-bitcoin-cuyo-token-kda-hemos-anadido-a-nuestro-portafolio/ - https://academy.bit2me.com/que-es-la-criptomoneda-kadena-kda/ - https://blog.bitnovo.com/que-es-kadena-kda/ - https://www.youtube.com/watch?v=yiF-qNmE8Mk&ab_channel=TecnoInver - https://explorer.chainweb.com/mainnet - https://chainweaver.kadena.network/contracts ``` 2. ¿Que es un Smart Contract? (Cristhian) - Quien es Nick Zabo - Pionero de los smart contracts y la blockchain - Creado de la crypto moneda bit gold - Posiblemente sea satoshi nakamoto - Que son los smart contracts - Explicacion general de que es un smart contract - Ejemplo del crowdfounding. - Ejemplos de maquina dispensadora. #### Guión: - Nick Szabo Vamos a hablar de los smart contracts, los cuales son una parte esencial de la red de Kadena, pero antes de entrar directamente a hablar de los smart contracts vamos a hablar de Nick Zabo. Nick Szabo es un ingeniero en sistemas, abogado y cryptografo, y el termino smart contract fue usado por primera vez por él en 1996, esta persona fue uno de los que ayudo a desarrollar la idea de bitcoin y a propagar su filosofia en general, se puede decir que es uno de los pioneros de la blockchain y de los smart contracts. Muchos creen que es Satoshi Nakamoto, este es el seudonimo de la persona que en 2008 publico un whitepaper en el cual definia una arquitectura P2P de dinero digital, el cual fue el inicio del bitcoin. Se dice que es Satoshi Nakamoto ya que en 1998 10 años antes del bitcoin diseño un mecanismo para una moneda descentralizada a la que llamo bitgold. > Nota: P2P es una estructura de redes en la cual los ordenadores funcionan como nodos que se conectan directamente entre si sin la intervencion de un servidor. - ¿Que son smart contracts? Los smart contracts son como contratos de la vida real, en los cuales dos entidades realizan un acuerdo el cual tiene ciertas condiciones que si se cumplen ocurre algo, seria un acuerdo en el que ambas partes reciben un beneficio de la otra, la diferencia es que lo smart contracts son completamente digitales, asi que basicamente son un pequeño programa informatico que se almacena y ejecuta dentro de la blockchain. Al estar almacenado en el blockchain este programa esta descentralizado por lo que nadie tiene un control sobre el y se convierte en un programa inmutable, esto quiere decir que una ves subido el smart contract nadie puede modificarlo. Otra cosa importante y util de los smart contracts es que se elimina al intermediario por lo cual los participantes del contrato no dependen de ningun ente para finalizar la operación del contrato. Estos tienen muchos usos, por ejemplo, los bancos podrian disponer de ellos para realizar pagos automaticos u ofrecer prestamos, las compañias de seguros podrian usarlos tambien para procesar reclamaciones, etc. - Ejemplo croudfounding Por ejemplo, supongamos que un empresario requiere de una cantidad de dinero para realizar un proyecto, y existen interesados que donan al proyecto para que este se ejecute, en este caso ese dinero solo se enviaria al empresario si se completa la suma esperada, en caso contrario el dinero retornaria a los inversores automaticamente en cuanto se cumpla un plazo de tiempo estipulado, sin la necesidad de un intermediario como una empresa de crowdfunding. Por ejemplo una empresa como kickstarter, el problema con estos intermediarios es que estos requieren de una suma para operar, por ejemplo en este caso kickstarter toma parte de el dinero que se esta pasando por ese contrato para operar, pero con un smart contract ese dinero que se lleva kickstarter podriamos ahorrarnoslo. - Ejemplo vending machine Otro ejemplo para que el concepto quede mejor constituido, seria el de una maquina dispensadora, cuando una persona se acerca a una maquina espendedora ingresa una cantidad de dinero y selecciona el producto que desea recibir, entonces la maquina se encarga de revisar el inventario para ese producto y revisar si el dinero ingresado es suficiente para el producto seleccionado, si todo esta correcto despacha el producto y retorna el devuelto si hay. Además podemos imaginar una maquina espendedora futurista, que verifica si un producto se agoto y se encarga de realizar el pedido de suministros como corresponde. Esto tambien seria un ejemplo de un smart contract. Una dato importante a tener en cuenta aqui, es que como mencione antiormente cuando se cumplen las condiciones del smart contract ocurre algo, aqui la condicion seria que si se acaba el sumistro de un producto se haga la peticion de suministro para el mismo con una cierta cantidad de dinero y a una cierta cantidad de productos. - Smart Contracts en Ethereum Ahora que sabemos un poquito mas que son los smart contracts, vamos a hablar de la historia de los smart contracts relacionado a ethereum, en 2013 un programador llamado Vitalik Bulterin propuso ampliar el lenguaje de programacion de Bitcoin, para que el lenguaje pudiera incluir mas operaciones y expandirse hacia otros casos de uso, esto no tuvo mucha resonancia en el lenguaje script (El lenguaje de bitcoin) ya que este estaba diseñado para ser especialmente limitado, y asi evitar que los desarrolladores introdujeran errores en el codigo. A partir de esto Vitalik propuso un whitepaper de un nuevo blockchain llamado ethereum, el cual una de sus caracteristicas mas relevantes fue el lenguaje de programacion solidity de touring completo, lo que significa que el lenguaje tiene todos los elementos para que los programadores puedan desarrollar diversidad de casos de uso. La mayor innovacion de este blockchain fue la posibilidad de crear smart contracts, asi que se podria decir que fue ethereum quien introdujo esta tecnologia a las redes blockchain. #### Resources: ``` - Updatable: https://www.coindesk.com/markets/2019/06/06/kadena-releases-updated-smart-contract-language-for-hybrid-blockchains/ - Ventajas y desventajas: https://www.iebschool.com/blog/smart-contract-blockchain-tecnologia/#:~:text=Los%20Smart%20Contracts%20o%20contratos,considerables%20a%20abogados%20y%20bancos. - Smart contracts y ethereum: https://sheinix.medium.com/que-es-un-contrato-inteligente-a2f69b57964d - https://www.notion.so/kommit/Grant-de-Kadena-d0823b40df5f4e3f91439023bd631715?p=b789e5395a8b49daad89f8f377788f49&pm=s - https://www.youtube.com/watch?v=4ZnYGLWVpXk&ab_channel=Bit2Me - https://www.youtube.com/watch?v=QXQPCUQ5t10&ab_channel=MCLEROTV - https://www.youtube.com/watch?v=YpUG1VFEiZE&ab_channel=CryptoSheinix - https://www.youtube.com/watch?v=QClnsBzBRm4&ab_channel=DineroConOpciones - https://www.youtube.com/watch?v=EvhcIZxtCeY - https://www.youtube.com/watch?v=dCl_g5DkQco ``` 3. ¿Que es Pact? (Cristhian - Santiago) - Caracteristicas principales y diferencias con Solidity (Santiago) - User Friendly language for smart contracts. - Upgradable contracts. - El sintax de pact esta en preorder o como lo llaman en kadena prefixed, Ej: (+ 1 1) - Human readable. - Touring incomplete (Cristhian) - Las bases del lenguaje y ejemplo en local (Cristhian) - Ejemplo con el online editor (Santiago) #### Guión: - Santiago - Pact es el lenguaje de contratos inteligentes creado por kadena, el cual permite el despliegue de contratos inteligentes simples y seguros. Utilizan haskell para su desarrollo, el cual es un lenguaje funcional Es de código abierto. Podemos reportar fallos, o aportar ofrece un soporte simple para la verificacion de pagos, lo que significa que los desarrolladores pueden desplegar contratos inteligentes en la blockchain de kadena que verifican independientemente las transacciones que suceden fuera de la red de kadena, o sea en otras redes de blockchain - Caracteristicas principales y diferencias con Solidity - *Explicación rapida de las diferencias de pact y solidity* - Upgradable contracts Pact permite actualizar los contratos, para ello se debe re-desplegar con las governance keyset, algo que en solidity no, al menos nativamente, si cambia la idea de negocio o llega a haber algun error en el contrato, los programadores de pact no tendran ningun inconveniente, pero los de solidity... necesitaran crear un proxy que muestre al usuario la ultima version del contrato - Preorder Otra caracteristica particular de pact es que sus condiciones y ecuaciones aritmeticas se hacen en preorder, o prefix como lo llaman ellos. El preorder viene de los arboles como estos, donde se escribe primero la raiz y luego sus hijos de izquierda a derecha, lo que hace que una operacion como 3 - x se convierta en - 3 x, o en condicionionales por ejemplo a <= b seria <= a b - Cristhian - Human readable Una caracteristica interesante de pact es que todo el codigo que se sube a la blockchain es almacenado de la misma manera que es escrito, esto permite revisar el codigo corriendo en el ledger de manera sencilla y asegurarse de que hace exactamente. Esto puede ayudar a dos cosas, la primera a monitorear y mantener de una manera mas facil el codigo sobre el tiempo, y segundo para que cualquier persona que use el smart contract pueda leerlo de manera facil. "Ejemplo de un hello world con Pact" - Touring incomplete Como mencione en una diapositiva anterior Solidity es un lenguaje de touring completo, que como habia mencionado significa que el lenguaje tiene la capacidad para correr cualquier programa, por ejemplo los lenguajes que usamos diariamente, como elixir, javascript, python, etc etc. Touring complete es una caracteristica extremadamente importante para estos lenguajes en el dia a dia, pero para smart contracts es una caracteristica muy peligrosa en terminos de seguridad. Por esto Pact esta diseñado para ser touring incomplete, cuyo objetivo es tener solo suficiente poder para soluciones transaccionales de blockchain y ayudar a mantener la seguridad de los smart contracts. La primera restriccion de pact es que no permite bucles ilimitados o recursion, pact detecta recursion y falla inmediatamente, y los loops estan solo soportandos en circunstancias especiales. Los beneficios clave de esto es reducir el costo y mejorar el rendimiento, y ademas de esto hace que los bugs mas infames y costosos encontrados en otras plataformas sean incluso imposibles en pact, como: - Formal verification Además pact tambien viene con una suite de herramientas de validacion para validación formal llamada Z3, una herramienta open-source desarrollada por microsoft que matematicamente verifica y hace pruebas para encontrar bugs en el codigo. La verificación formal es el mismo sistema usado para proteger ambientes criticos como platanas nucleares o pilotos automaticos de aeronaves. Para quien quiera profundizar mas en la verificación formal les comparto este post acerca de ella con pact: https://medium.com/kadena-io/pact-formal-verification-for-blockchain-smart-contracts-done-right-889058bd8c3f Y tambien les comparto el github de Z3 para los que quieran investigar acerca de la herramienta: https://github.com/Z3Prover/z3 1. Reentrancy es un problema relacionado a la recursividad en llamadas a multiples funciones, que es algo que pact evita totalmente. 2. El gas overflow furing iteration es un problema de DoS que pact evita quitando la recursividad y limitando la capacidad de los loops. #### Resources: https://pact-language.readthedocs.io/en/latest/pact-reference.html#concepts Whitepaper Satoshi Nakamoto: https://bitcoin.org/bitcoin.pdf ``` - verificación formal en pact: https://medium.com/kadena-io/pact-formal-verification-for-blockchain-smart-contracts-done-right-889058bd8c3f - bugs comunes en plataformas de blockchain: https://medium.com/solidified/most-common-smart-contract-bugs-of-2020-c1edfe9340ac - Whats new in Pact 4.4: https://medium.com/kadena-io/whats-new-in-pact-4-4-db31dbcbda0e - touring incompleteness in pact: https://medium.com/kadena-io/turing-completeness-and-smart-contract-security-67e4c41704c - https://www.notion.so/kommit/Grant-de-Kadena-d0823b40df5f4e3f91439023bd631715?p=053340f4904a42e193497488d1bef216&pm=s - https://www.youtube.com/watch?v=BedEHtwLLes&list=PL4G3uLl2K-dlzQkRXeCTbfpbZUVSmRrq7&index=1&ab_channel=Kadena - https://docs.kadena.io/learn-pact/beginner/welcome-to-pact - https://github.com/kadena-io/pact-lang.org-code/blob/master/set-up-and-deploy-server/challenge Lists: - https://www.youtube.com/watch?v=BedEHtwLLes&list=PL4G3uLl2K-dlzQkRXeCTbfpbZUVSmRrq7&index=5&ab_channel=Kadena - https://www.youtube.com/watch?v=fbZpsQAqz48&list=PL4G3uLl2K-dn5-V0MogoBSlCwCUyJQJqZ&index=2&ab_channel=Kadena ``` 4. Explicación practica #### Guión - Cristhian - 1. Instalacion de pact en local - Instalación con brew - ```brew install kadena-io/pact/pact``` - Homebrew page: https://brew.sh/ - Instalación manual - Instalar z3: ```sudo apt install z3``` - Releases de pact: https://github.com/kadena-io/pact/releases, agregar el binario al /bin y darle permisos de ejecucion - Hablar acerca de los repos de ejemplos y ayuda que tiene kadena para pact - https://github.com/kadena-io/pact/tree/master/examples - https://github.com/kadena-io/pact-lang.org-code - Explicación de las bases del lenguaje pact - Sintax de operadores - Keysets (Especifica autorizacion a diferentes partes de un smart contract) - Definicion de modulos, funciones y constantes - Definicion de schemas y tablas - Tipado - Explicar el cambio del namespace de la version 4.4 de pact - En ves de usar: ``` (define-keyset "free.admin-keyset" (read-keyset "admin-keyset")) ``` Usar ``` (define-namespace "free" (read-keyset "admin-keyset") (read-keyset "admin-keyset")) (namespace "free") (define-keyset "free.admin-keyset" (read-keyset "admin-keyset")) ``` - https://pact-language.readthedocs.io/en/stable/pact-functions.html?highlight=namespace%3A%20%27free%27%20not%20defined#define-namespace - Lo nuevo de pact 4.4: https://medium.com/kadena-io/whats-new-in-pact-4-4-db31dbcbda0e - Explicación con el smart contract para hacer pagos entre cuentas - Explicación de interaccion entre modulo de payments y auth - Ejemplo de setup y deploy en server local - Send: Toma un comando en json, lo envia a la blockchain y retorna un hash de la transaccion (Se usa para cambiar datos en la blockchain o haciendo deploy de smart contracts) - Listen: Toma un hash y retorna el resultado de la transaccion - Poll: Igual a listen pero puede tomar varios hashes y retornar varios resultados - Local: Similar a send pero no toca la blockchain y solo se ejecuta en local (Se usa para testear funciones simples o hacer fetch de data de la blockchain) - Final: Mostrar el funcionamiento de la app Pact-todoMVC - (https://www.youtube.com/watch?v=s1nrWDdgM6o) - https://github.com/kadena-io/pact-todomvc - Santiago - 1. Create your test account 2. Online editor 1. ¿Que es Kadena, el KDA? 2. Proof of work vs proof of stake 3. El trilemma del blockchain 4. Arquitectura chainweb 5. Kadena vs otras blockchains 6. Nick Szabo 7. ¿Que son smart contracs? 8. Ejemplos de smart contracts 9. Smart contracts en Ethereum 10. Introduccion a pact y caracteristicas 11. Ejemplos practicos de pact