/HaciendoStellar_

/HaciendoStellar_

Desarrollando en Stellar – Intro – Clase 1

Esta clase tratará de abarcar los conceptos más básicos de la tecnología blockchain y a medida que se vaya avanzando en el curso podremos ir abordar los temas más en profundidad.

Temário

  • Intro a blockchain
    • La intro no va a ser muy detallada porque vamos a entender todo mejor cuando vayamos practicando.
    • En términos técnicos y sencillos una blockchain o cadena de bloques es una forma de almacenar información que está fundada en el concepto de que un bloque está ligado al anterior.
      • Ejemplo mínimo de una blockchain en JS: https://github.com/NatuMyers/BlockchainJavascript
      • Toda la información del bloque se ordena de forma predecible y se genera un hash. Este hash es el ID del bloque.
        • Un hash es producido por una función criptográfica de 1 sola vía (no se puede desencriptar), similar a como se guardan los passwords en una base de datos.
      • El primer bloque se llama “génesis”
      • El segundo bloque está ligado al bloque génesis, el tercer bloque al segundo bloque, y así. Un bloque contiene el ID del bloque anterior
      • Cada bloque contiene información de distintas transacciones
      • Los bloques no se pueden modificar (si se modifican se rompe la cadena)
    • No hay una única blockchain
      • Hay blockchains públicas
        • como
          • Ethereum
          • Bitcoin
          • Stellar
          • Binance chain
          • Etc.
        • estas blockchains públicas hablan de ser “Descentralizadas” porque ninguna entidad las controla.
          • Esto logra que las transacciones sean entre pares y no necesiten de una entidad central que las audite y acepte
          • En vez de eso, hay muchos validadores (programas que corren en una compu) con distintos métodos que deciden si un bloque es válido o no
            • Bitcoin usa Proof of Work
            • Ethereum también y está intentando moverse a Proof of Stake
            • Stellar usa el Stellar Consensus Protocol (https://www.stellar.org/papers/stellar-consensus-protocol)
      • Hay blockchains privadas como las de la hyperledger foundation (parte de la Linux foundation)
        • https://www.hyperledger.org/use/distributed-ledgers
        • Las blockchain privadas pueden implementarse en distintas organizaciones (no están conectadas entre sí)
        • Por ejemplo, la AFA podría tener su blockchain y todos los clubes deberían registrar sus transacciones ahí.
        • Para tener una blockchain completamente privada (dentro de una misma empresa), en general es mejor tener una base de datos y ya.
    • Desde un punto de vista de negocio, una blockchain es un ledger (libro mayor o libro contable) inmutable que guarda un registro de transacciones.
      • Estas transacciones pueden ser de un único asset (activo) (como en la blockchain de Bitcoin) 
      • o de varios assets (Redes como Ethereum o Stellar permiten representar varios assets en la misma cadena)
      • Los activos pueden representar cosas tangibles o intangibles: Moneda Fiat, una casa, un auto, arte, etc.
      • Si la red es pública, entonces se pueden ver todas las transacciones y balances libremente.
  • Intro a smart contracts
    • Los smart contracts son contratos que se suben a una blockchain, y que se pueden ejecutar. Generalmente un contrato se ejecuta mandándole un mensaje con uno o más assets, y la lógica del contrato es la que define qué hacer. En general, los contratos tienen acceso a la información guardada en la blockchain para tomar decisiones, y NO pueden acceder a internet.
    • Ejemplo:
      • Un smart contract para transferencia de bienes que reemplaza la necesidad de un escrow (fideicomiso) y entidad central.
      • A quiere comprar 100 dólares representados por el asset USDC en Ethereum. Pago 0.1 ETH.
      • B quiere vender 100 USDC a cambio de 0.1 ETH.
      • A y B podrían ponerse de acuerdo y decir “Mandame tus monedas que yo después te mando las mías”, pero deja a una parte desprotegida.
      • A y B podrían confiar en un intermediario centralizado que les cobra un 1% de comisión
      • Pero si hay un smart contract, A y B pueden leer lo que hace ese contrato que por ejemplo diría:
        • Recibo un asset de A con una petición a B (recibo 0.1 ETH de A y un mensaje pidiéndole 100 USDC a B)
        • Si no recibo respuesta de B en 1 hora, permitirle a A retirar su 0.1 ETH.
        • Si recibo un asset de B con un importe o asset incorrecto, que falle la transacción
        • Si recibo un asset de B con un importe correcto, entonces le envío los fondos de A a B, y los de B a A.
  • Intro a Stellar
    • Por qué Stellar?
      • Porque es la tecnología en la que más me interioricé y por lo tanto puedo enseñarla
      • Porque tiene documentación bastante clara y SDKs para JavaScript, C#, Python, Go, etc.
    • Abro diciendo que Stellar no tiene Smart Contracts de la forma en que si existen en Ethereum, pero los están creando y van a ser en el lenguaje Rust, que es muy utilizado para smart contracts de otras cadenas (ej.: Cosmos, Solana). https://stellar.org/blog/smart-contracts-on-stellar
    • Particularidades de la red de stellar
      • Tiene un DEX (decentralized exchange) nativo
        • Lo único que hacen los developers es construir una interfaz para poder interactuar con el DEX, pero se puede programáticamente crear órdenes de compra y venta, y habilita también a hacer PATH PAYMENTS.
          • Un path payment nos permite decir “Yo tengo la moneda ARS, y le quiero pagar a otra cuenta exactamente 500 ARS y que le llegue el equivalente en EUR”. Eso está bueno porque nunca tuvimos que comprar EUR para hacerlo
          • También es posible la otra alternativa “Yo tengo la moneda ARS y quiero que le llegue a la otra cuenta exactamente 10 EUR”
          • Ambos permiten definir un monto mínimo/máximo al cual hacer el cambio de assets
      • Tiene liquidity pools nativas
        • Si no están muy al tanto de esto, por ahora basta con decir que los que participan proveyendo liquidez sobre 2 assets en partes iguales, son recompensados con fees de transacciones (por ejemplo de los path payments)
    • La documentación de los devs https://developers.stellar.org
    • La documentación del SDK de JS https://stellar.github.io/js-stellar-sdk/
    • https://github.com/r-argentina-programa/introduccion-blockchain
    • El laboratorio https://laboratory.stellar.org/#?network=test
    • Hoy vamos a ver 2 ejemplos:
      • Realizar un pago de XLM
      • Crear una moneda propia
    • Acerca de XLM
      • XLM es el token que usa la red para pagar por transacciones y para mantener “en reserva” (por ejemplo 1 XLM se mantiene en reserva para crear una cuenta)
      • La expresión mínima de XLM es 1 stroop, que es 0.0000001 XLM (7 decimales, es decir, 1 dividido por 10 millones), este es también el menor número que Stellar soporta en la blockchain (es decir, no podemos expresar un número menor a 0.0000001). El número máximo es 922,337,203,685.4775807 (~922 mil millones).
    • Paso 1:
      • Crear una cuenta
        • Una cuenta en stellar nos da una llave privada y una llave pública. La llave privada es lo más importante y que debemos mantener secreta.
          • La llave pública empieza con G y tiene 56 caracteres
          • La llave privada empieza con S y tiene 56 caracteres
        • Multi-firma (lo vemos en detalle en otra clase).
          • Las cuentas pueden tener varios firmantes para ser más seguras
          • Las firmas también tienen un peso, y la cuenta tiene distintos “thresholds” por operaciones (https://developers.stellar.org/docs/glossary/operations/#thresholds)
            • Por ejemplo cambiar la cantidad de firmantes es un threshold “Alto”
            • Pagar es “medio”
            • Hay operaciones “bajas” que no vamos a cubrir
          • No se pueden firmar con más firmas de las necesarias (si la operación necesita peso 3 y estoy firmando con una cuenta de peso 3, e incluyo otra firma, me va a dar error)
          • Los thresholds sirven para definir por ejemplo que ciertas operaciones requieran que varias personas las firmen para que sean válidas
          • La multi-firma también sirve para uno mismo tener más control sobre su cuenta
        • Una cuenta se crea sólo cuando recibe fondos, stellar nos permite usar Friendbot que nos da 10,000 lumens (XLM) en la red de prueba
      • Explorando endpoints (fundamental para hacer debug!)
        • Las transacciones que realizamos quedan guardadas en la blockchain (como una base de datos inmutable). Stellar nos da un servidor de API llamado Horizon al cual podemos consultar. Consultemos la cuenta que acabamos de crear usando el laboratorio.
    • Paso 2: Realizar un pago de XLM
      • Una cuenta tiene balances. Por default el balance inicial que existe siempre es de XLM, porque para que una cuenta exista debe recibir al menos 1 XLM. Notemos que no podemos realizar ningún pago si sólo tenemos 1 XLM porque debe ser guardado “en reserva”
      • Creamos una segunda cuenta y simulamos un pago de XLM de la cuenta A a la cuenta B desde el laboratorio
      • XDR es un formato de transmisión (como JSON) utilizado por la red de Stellar.
      • Se puede firmar un XDR con una billetera/firma como Albedo o xBull.
      • Ejemplo en código, usamos el SDK de Stellar en nuestro ejemplo directamente en el frontend (se puede usar en el backend también). https://cdnjs.com/libraries/stellar-sdk
      • https://github.com/r-argentina-programa/introduccion-blockchain
    • Paso 3: Crear un asset propio
      • Los assets en Stellar tienen algunas características importantes. La primera es que antes de pagarle un asset a una cuenta, necesitamos que esa cuenta tenga una TRUSTLINE (línea de confianza). Una línea de confianza tiene 2 parámetros: En qué asset se quiere confiar, y por cuánto (el default es el máximo, 922,337,203,685.4775807)
      • La segunda es que un asset tiene lo que se llama una dirección canónica que está compuesta por CODIGO:EMISOR, el código puede ser de 1 a 12 caracteres, y el emisor siempre es una cuenta que comienza con G; esto es importante porque el código se puede repetir entre emisores, pero el código+emisor es único.
      • La tercera es que hay algunos assets que son derivativas (es decir, que está representando otro activo subyacente), como por ejemplo USDC de Circle y ARS de Anclap. Estos assets que pueden ser redimidos por fiat (moneda real), son emitidos por lo que se llaman Anclas o Anchors en la red, que son los que hacen lo que se llama on/off ramp, es decir la conversión de assets digitales a assets físicos y viceversa. Es importante notar que antes de usar estos assets hay que investigar bien si los anchors son confiables.
      • Modelo de Issuer/Distributor: https://developers.stellar.org/docs/issuing-assets/how-to-issue-an-asset/#why-have-separate-accounts-for-issuing-and-distribution
        • Seguridad (si hackean el distributor al menos no pueden emitir más assets)
          • Cold vs hot wallet
        • Auditabilidad/contaduría (el issuer no guarda un balance propio)
      • Para crear un asset, es tan sencillo como elegir la cuenta emisora y hacerla pagar un asset a una cuenta que cuenta con un trustline a ese asset. Veamos un ejemplo.
      • Para quemar un asset, se le manda de nuevo a la cuenta issuer
      • Mostrar ejemplo de información de un asset https://laboratory.stellar.org/#explorer?resource=assets&endpoint=single&network=public
    • Eso es todo por hoy!

Links de interés:
Sitio: https://argentinaprograma.com
Github: https://github.com/r-argentina-programa/introduccion-a-js
Youtube: https://www.youtube.com/channel/UCXfQLgiBQPIzBp8-nRsG0KA
Twitch: https://www.twitch.tv/rargentinaprograma/
Reddit: https://www.reddit.com/r/argentina/comments/d9wzkh/alguno_que_ande_corto_de_guita_pero_muy/
Slack: https://join.slack.com/t/rargentinaprograma/shared_invite/zt-129e6wmmp-VouayVxGcHGUTTXHqGPJZQ

Todos somos
#HaciendoStellar

stellar-2

2023. Haciendo Stellar. No somos un sitio oficial de Stellar Network. Aviso legal. Para saber más sobre Stellar visita stellar.org

stellar-logo