• Skip to main content
  • Skip to primary sidebar

Pienso Luego Pienso

Interés mutuo a escala.

Diferencias: Smart Contracts vs la Programación Tradicional

mayo 24, 2021 By Facundo

En este nuevo paradigma de programación, el dinero es software. Para entenderlo, debemos arrancar por identificar el potencial de los mecanismos de encriptación asimétrica. Claves pública y privada.

Entonces, ¿alguna vez tuviste poder ejecutivo dentro de un servidor? ¿Te acordás cómo conseguiste permisos? En mi experiencia, los conseguí bajo dos mecanismos. En el primero, el servidor te solicita usuario y contraseña. Pero previo a esto, durante el inicio del handshake, el server provee a tu software de autenticación de una clave pública con la cual cifrarás y luego enviarás tus credenciales al servidor. Puesto que este mensaje puede únicamente ser descifrado con la clave privada progenitora de la clave pública que nos fue dada, nos garantizamos que el server realiza la validación de nuestras credenciales dentro de sus fronteras, lejos de terceros en el medio.

El segundo mecanismo requiere que tu clave pública haya sido asociada, a priori, dentro del servidor, al usuario con el que buscas conectarte. Así, ante un posterior intento de logueo, tu “Buenas, soy Juan Carlos; quiero ingresar” se comunicará cifrado –y por lo tanto firmado– con tu clave privada. Ahí, aplicando voodoo matemático, la máquina huésped verifica, no tu usuario y password, sino que la clave pública que ya residía en los registros de la máquina sirva para descifrar el mensaje. De evaluar a true, bien te conectaste o alguien más lo hizo usando la clave privada que de alguna manera te robó. No queremos que eso pase.

Esto, hasta acá, es la base del inminente cambio de paradigma del sistema financiero mundial.

¿Cuál es el punto de partida de un smart contract?

Las aplicaciones descentralizadas (dApps) carecen de void main(String args[]). Tampoco hay instalación. Para dejarla funcionando, te conectas a un nodo por RPC1, tras lo cual compilas y luego deployas tus smart contracts. Similarmente a OOP, la máquina virtual de la blockchain le asigna una posición en memoria a cada instancia, deployada, de un smart contract. La diferencia reside en que mientras que la programación tradicional esto sucede en RAM y es por lo tanto volátil, en una blockchain esta asignación es permanente. Eterna y Verdadera: Bloque n, transacción j, código de smart contract deployado en posición x.

Ahora, bajo este modelo, como programadores nos nacen algunas preguntas.

¿Qué pasa cuando quiero modificar mi código? ¿Cómo funciona el versionado? ¿Es posible dar de baja, deprecar, remover o desactivar alguna funcionalidad subida a la blockchain (o como se llame)? ¿Se puede ser dueño de su código? Y si otros devs ya pasaron por estas dudas, ¿Qué convenciones emergieron, hasta ahora, en el desarrollo de contratos inteligentes?

Mi conceptualización preferida encasilla a una blockchain como una base de datos donde pagás para escribir pero no para leer. La diferencia reside en que, en vez de actualizar una fila, la nueva transacción queda grabada como un evento precedido por todas las transacciones anteriores. Un bloque de la blockchain apunta al hash del bloque anterior… como cada commit de git apunta a su precedente.

Puesto que todas las operaciones que mutan un dato son en realidad inserciones, notarás sin esfuerzo las operaciones que requieren fondos; porque son de escritura. Desplegar un contrato inteligente o transferir aquello que te pertenece, sean fichas, monedas o tokens, cuesta. En este mundo, la encriptación asimétrica respalda tu propiedad privada. No necesitás el aparato legal de un estado, un rey o la iglesia. La blockchain es la institución.

¿Cómo se interactúa con un Smart Contract?

Tras deployar un conjunto de contratos, la máquina virtual te informará en donde encontrarás a cada contrato desplegado. Esta address es un tipo de dato nativo representado con 40 caracteres hexadecimales. De desplegar el mismo contrato de nuevo, con el mismo nombre, no encontrarás colisiones. Terminás con menos dinero contratos con el mismo nombre, bajo dos address distintas. Cada uno verá su constructor llamado por única vez, dejando su estado inicial limpio, y será autogobernado por la lógica definida dentro sus funciones.

Después tenemos las billeteras. Estoy seguro de que sabés que las usás para administrar el dúo de claves pública/privada que usás para firmar transacciones criptográficas y demostrar la posesión de una cuenta. En las blockchains de tipo Ethereum Virtual Machine (EVM), la VM guarda en la address de tu cuenta todas tus transacciones pasadas junto al historial de tus tokens. 

Esas son los dos tipos de cuenta que maneja la VM. Las billeteras reciben el nombre de cuentas externas. Y el otro tipo referencia a los contratos que hemos desplegado nosotros u otros devs.

Para conectarse a la blockchain, los navegadores usan librerías de JS. Las más conocidas son Ethers y Web3, siendo Ethers la predilecta hoy por la comunidad. Para enviar y recibir mensajes, usan el protocolo JSON-RPC. Y parte de la magia de estas librerías reside en su integración con las billeteras de tipo add-on, que podemos instalar en nuestro browser2. Estas billeteras te permiten crear un nuevo par de claves como también importar las 12 palabras a partir de las cuales la wallet derivará tu clave privada, y, de esta última, tu clave pública & consecuente address.

¿Qué es lo fundamental para entender Solidity?3

Cuando te metas a ver código, a menudo vas a ver al término ERC20. Refiere a un standard que emergió para transaccionar con tokens.4 ERC20 es también una interfaz.

En tu proyecto, lo normal es tener un contrato por archivo en disco. Los contratos que implementan ERC20 definen las reglas de creación, transferencia y destrucción de tokens que, por lo general, son del mismo tipo del contrato. También, los smart contracts pueden, como las billeteras, almacenar más de un tipo de token. Así que, ahora, cuando leas Total Value Locked (TVL) ya sabés que alude al monto de dinero almacenado dentro del smart contract en forma de tokens. ¿Cómo se hace? Teniendo una variable de instancia de tipo mapping donde las keys son de tipo address y su valor corresponde su balance de tokens:

mapping(address => uint256) myBalances;

Viendo la interfaz ERC20 que copié acá abajo, notarás 3 funciones de tipo view, indicando su naturaleza read-only, y 3 funciones adicionales en donde algún tipo de fondos será requerido. Todas son de tipo external porque no son privadas —es una interfaz (:

Metí varias cositas juntas. El tema es profundo pero apunté a condensar varias cosas como intro para que vaya tomando forma.

  1. Por Remote Procedure Call
  2. como Nifty, Metamask o Liquality
  3. El lenguaje de programación de smart contracts más popular
  4. La traducción más agraciada de token (a mi gusto) es ficha. Una moneda es una ficha.

Relacionado

Filed Under: Uncategorized

Primary Sidebar

Ehh..

¿Qué onda este blog?

Tecnologías mejor pagas

Contacto

Artículos Coso

No Hedge, No Edge (para entender Bitcoin)

El Sueño del Pibe: Escapar de la Oficina Rutina

Ciudades Europeas Con Mayor Demanda de Programadores

La Descentralización Como Táctica de Combate Militar

Programador Responde Dudas Sobre Aprender a Programar

¿Por qué No Volvería a Aprender Java?

Cómo es Buscar Trabajo de Programador en Australia

Payoneer vs TransferWise

Algunas Consideraciones Sobre Países Europeos al Trabajar en Sistemas

Observaciones de un Programador Viviendo en Munich

El Funcionamiento de La Subcomunicación

El libro que conecta Arte e Ingeniería

Cómo Vestirse Bien

Más Marihuana = Menos Balas

Indicadores de una Barba Poco Agradable

Pronosticando Puestos Desafiantes Como Programador

Cobrar En Pesos Ya Fue

Ofertas

🇩🇪 BERLIN

🇳🇱 AMSTERDAM

🌍 Remoto

🇪🇸BARCELONA RELOCATION (EU citizenship required)
↬Backend Java (+3 yrs)
↬Frontend (+3 yrs)
↬Ruby (+3 yrs)
↬y mas!

Más info»

 

Propinas Recíprocas

|>Brave, el browser para ver YouTube libre de publicidad.

|>TransferWise, el banco remoto de viajeros y freelancers.

Recent Comments

  • Andrés Quevedo on Por Qué Perdí el Tiempo Yendo a la Facultad de Sistemas: “Hola Facu, espero puedas leerme. En estos momentos me encuentro en Australia con una working holiday, por suerte tengo un…”
  • Facundo on Por Qué Perdí el Tiempo Yendo a la Facultad de Sistemas: “Copado Lucas. ¿Te molestaría contarme cómo hiciste para aprender y conseguir el primer trabajo? No sabría bien qué indicarte porque…”
  • Lucas on Por Qué Perdí el Tiempo Yendo a la Facultad de Sistemas: “Hola Facundo, quería agradecerte por el blog. Voy arrancar en Enero con mi primer laburo como dev (fullstack javascript, con…”
  • Facundo on Todo Sobre La Iniciación En El Kitesurf: “Buena pregunta. Creo que la que va es comprar usado, lo vas a rockear bastante. Por courier imagino te van…”
  • Bruno Verano on Todo Sobre La Iniciación En El Kitesurf: “Buenas…estoy por arrancar con un curso de kite y llegué hasta acá. Antes q nada gracias por la info, me…”
  • Facundo on ¿Qué onda este blog?: “Cuando yo estudiaba y laburaba, tuve varios colegas que dejaron la carrera una vez que tenian algunos añitos de experiencia…”
  • Facundo on Cómo Es Buscar Trabajo de Programador En Australia: “No che, pero tengo un amigo de ese palo que consiguió sponsor desde afuera y ahora se mudó para allá.…”

Licencia de Creative Commons
Este obra está bajo una licencia de Creative Commons Reconocimiento 4.0 Internacional.

 

Cargando comentarios...