¿Qué es un Smart Contract?
Un Smart Contract (o contrato inteligente) es un acuerdo entre partes que contiene una serie de instrucciones en forma de código y que se ejecuta en la blockchain (cadena de bloques), de manera que se almacena en una base de datos pública y no se puede modificar. Las transacciones que se producen en un contrato inteligente son procesadas por la cadena de bloques, lo que significa que se pueden enviar automáticamente sin ningún intermediario. Las transacciones solo se producen cuando se cumplen las condiciones del acuerdo preestablecido: no hay ningún tercero, de manera que no hay problemas de confianza. Pongamos un ejemplo:
Imaginemos que queremos alquilar un vehículo para pasar una semana de vacaciones. Tradicionalmente, pagaríamos por adelantado el coste de toda la semana y devolveríamos el vehículo dentro de un horario preestablecido. En cambio, con el uso de Smart Contracts podemos hacer que el propio vehículo, mediante Internet of Things, calcule el tiempo de uso y los kilómetros recorridos, de manera que se nos vaya cobrando céntimo a céntimo en tiempo real, teniendo la posibilidad de devolverlo antes de la fecha establecida y finalizar el contrato.
La ventaja de realizar esta transacción mediante un Smart Contract es que el contrato es transparente (visible para todo el mundo en la blockchain), inmutable (un vez almacenado en la blockchain, ya no se puede modificar) e imparcial (el código es objetivo). Por otro lado, uno de los inconvenientes a destacar es que, en caso de que el Smart Contract presente vulnerabilidades (no necesariamente intencionadas), se puede poner en riesgo la seguridad del dinero y los datos que se han transferido en el contrato.
¿Qué casos de uso tienen los Smart Contracts actualmente?
Además del ejemplo que hemos expuesto anteriormente, existe un amplio abanico de oportunidades en la implementación de contratos inteligentes, ya que se pueden utilizar para cualquier tipo de transacción, no tiene que ser necesariamente financiera.
— Medicina: entre otros muchos proyectos, cabe destacar EncrypGen, que ha desarrollado una aplicación que utiliza Smart Contracts para transferir los datos de los pacientes a investigadores de manera segura, sin permitir el acceso de terceros. Si los investigadores quieren usar los datos de los pacientes, tienen que pagar y el paciente debe escoger si quiere vender sus datos o no.
— Seguros: la aseguradora francesa AXA ya ha empezado a hacer pruebas con Smart Contracts para asegurar vuelos de avión. En caso de que el avión llegue a la hora, el pasajero paga el coste del seguro. En caso de que el avión llegue tarde, el Smart Contract reclama a la aseguradora el dinero y lo abona al pasajero, automatizando y agilizando todo el proceso de reclamación.
— Identidad digital y votaciones: últimamente han surgido ciertos proyectos que pretenden validar la identidad de un elector y registrar su voto. Esta información se podría utilizar para iniciar una acción tras haber cesado todas las votaciones. Como los bloques dentro de una cadena de bloques son inalterables una vez registrados, la manipulación de este registro no sería posible y evitaría muchos problemas de fraude electoral.
— Cadenas de suministro: utilizar Smart Contracts para la gestión de inventario y pedidos parece una realidad que está cada día más cerca. La adopción del Internet of Things podría hacer que las propias máquinas de una fábrica hagan un pedido de materiales cuando detectan que se están agotando.
Retos en la adopción de los Smart Contracts
Uno de los grandes retos que existen es la necesidad de ajustar los contratos inteligentes a un marco legal que es diferente en cada país (incluso en cada región dentro de cada país). Trasladar el lenguaje jurídico al mundo de la programación y probar la validez jurídica de un contrato que no tiene intermediarios parece ser bastante difícil hoy por hoy. Sin embargo, el panorama legal se está empezando a adaptar a estas nuevas formas de transaccionar.
Otro aspecto decisivo en el devenir de los contratos inteligentes será la legibilidad y accesibilidad de los contratos. Actualmente, solo los programadores expertos son capaces de entender el código (y, por lo tanto, las condiciones del contrato). Todo apunta a que, con el tiempo, surgirán formas adaptadas al lenguaje natural de leer y entender el funcionamiento del contrato. Del mismo modo, la creación de Smart Contracts se está simplificando gracias a nuevas plataformas en las que, sin programar y con un par de clics, podemos generar y poner en funcionamiento nuestro Smart Contract.
Finalmente, para un correcto funcionamiento de los contratos inteligentes, necesitamos proveer datos fiables de lo que sucede en el mundo real. Hay que tener en cuenta que, en una cadena de bloques, el único mundo conocido es aquello que se almacena en los bloques (para entendernos, podemos decir que la blockchain está aislada). Los que se encargan de proveer estos datos a los Smart Contracts son los llamados oráculos.
Los oráculos permiten hacer seguimiento de la actividad de Internet para poder transferir estos datos a la blockchain. Sus funciones son tan amplias que pueden ir desde verificar resultados de eventos deportivos, localizar objetos en cualquier lugar del mundo con la ayuda de la tecnología de geolocalización o proveer las cotizaciones de la Bolsa en tiempo real. Proyectos como Chainlink, Band Protocol o API3 tienen como objetivos mejorar la interoperatividad de las blockchains con el mundo real gracias a estos oráculos.
¿Cómo se puede programar un Smart Contract?
El lenguaje más común para programar Smart Contracts es Solidity, un lenguaje de alto nivel que tiene cierto parecido con JavaScript y que nos permite programar en la Ethereum Virtual Machine (EVM). La EVM se utiliza no sólo en la blockchain de Ethereum, sino también en otras que se basan en la misma tecnología, como podrían ser Binance Smart Chain, Polygon, Celo, TRON, RSK y muchas más. El entorno de programación (IDE) que se utiliza normalmente para publicar Smart Contracts es Remix, podéis encontrar un tutorial con los primeros pasos aquí.
Por otro lado, recientemente ha empezado a ganar adopción el uso del lenguaje Rust para programar Smart Contracts en blockchains como Solana, Terra, Polkadot, NEAR Protocol y otros. Rust introduce novedades interesantes y genera cierto debate en la comunidad de programadores sobre qué lenguaje es más óptimo a la hora de desarrollar proyectos en la blockchain. Aun así, Solidity sigue siendo el más relevante y el más utilizado por los programadores.