Si leíste el artículo anterior ya sabes que una transacción en Ethereum es un conjunto de instrucciones. Es un “comando”, la ejecución de una serie de pasos. No es una típica transacción financiera, de compra-venta, te doy 50 pesos y me das un mazo de cartas de Pokemon (sí, 50 pesos salían).

Y sí, quizá este párrafo sea una obviedad, y estemos dándole la vuelta a una jaula buscando encontrar entre la melena del León algo nuevo, algo diferente. Pero creo que es una vueltita necesaria. Ethereum es una gran máquina de colaboración, y las transacciones son los posibles caminos de colaboración que tenemos a disposición. Son quizá el brazo mecánico de esa gran entelequia, que permite darle forma y sustancia a las creaciones del intelecto, a los acuerdos comunes bajo los cuales decidimos regirnos, a las deliberaciones del consenso humano.

Pero basta de consideraciones metafísicas. Volvamos a la realidad.

Tipos de Transacciones de Ethereum

Hay 3 tipos de transacciones:

  • Transacciones regulares: Juanita le manda a Juanito 1 ETH
  • Deploy de Smart Contract: Marta escribe un contrato y lo sube a la red.
  • Ejecución de Smart Contract: Roberto Carlos ejecuta el contrato de Marta, o de Carlovich, o de Alice o de GianPietro, no nos olvidemos que Ethereum es mundial y hay nombres de distintos tipos.

Cuando Marta sube su contrato, está poniendo sobre la mesa un posible camino. Una opción de colaboración, a disposición de todo aquel que quiera participar. Solo hace falta enviar una transacción y ejecutar dicho Smart Contract. Es así que la transacción que ejecuta el contrato de Marta es la expresión de un acuerdo. Es la forma en que damos el sí, en que le decimos al mundo que queremos ser parte de esa forma de colaboración que Marta dejó ahí tirada en miles de computadoras.

Pero veamos cómo se hace para que la transacción cobre vida.

La dapp, el botoncito y los primeros pasos

El contrato de Marta seguramente sea parte de alguna dapp. Eso significa que hay un front-end, un “Martafinance.io” al que los usuarios pueden ir para usar sus productos. Y seguramente tenga un botoncito que diga “swap” o “stake” o “harvest” o “mint” o lo que fuese. La mayoría de las dapps tienen botoncitos de ese tipo.

Cuando le das a ese botoncito, el código de la dapp, probablemente escrito en Javascript o algún lenguaje de programación “web2”, arma tu transacción. Ya sabe cual es tu dirección, sabe también los parámetros de tu transacción, que contrato tenés que ejecutar, si tenés que mandar ETH o no, etc etc. Todo eso se programa del mismo modo que el código del banco o de mercado pago arma la transacción que generás para mandarle a Mick Jagger los 2000 pesos del asado del domingo.

La diferencia es que para que esa transacción sea válida, acá necesitamos una firma. No alcanza con que la dapp que estás usando arme los papeles y se los mande a toda la red. Hace falta el gancho; tenés que dar el visto bueno, otro botoncito famoso, ese azul que dice “Confirm”.

Llegó el momento, llegó la hora de firmar

Acá aparecen nuestras amigas las wallets. Decimos que son “herramientas para gestionar tus llaves privadas y tus llaves públicas”. Concretamente, eso significa que encriptan tu llave privada, la guardan en algún lado (en tu teléfono, en tu browser, en un dispositivo tipo USB, según el tipo de wallet que sea) y luego la usan para poder generar firmas digitales y “agregarlas a tus transacciones”.

Cuando conectas tu wallet a una dapp, lo que estás haciendo es establecer las vías de comunicación entre ese front-end que arma las transacciones y el software que gestiona las llaves y firma. Es parecido a lo que pasa en las empresas. El encargado de compras habla con el proveedor, arregla los detalles, define las condiciones de la compra. Y luego cuando está listo le pide a su jefe, o al gerente financiero, o al gerente general que ponga la firma para concretar el acuerdo.

Sin firma no hay trato. El “Connect Wallet” es el equivalente al:

“Buen día Jorge, te adjunto el contrato con Guerrín para la compra de 12 mil pizzas para el after-office del jueves. Por favor cuando puedas pasamelo firmado que se lo mando al proveedor”

Ahora ¿como sucede esto en Ethereum realmente? ¿Cómo sabe Jorge que tiene que firmar? Acá entra el concepto de “raw transaction”. La raw transaction es un string, un conjunto de letras y números, que contiene toda la info de la transacción y está pendiente de firma. La dapp le pasa la raw transaction a la wallet para que le ponga el sello.

En el ejemplo de Jorge y su empresa, la raw transaction es un pdf con el acuerdo de compra que todavía no fue firmado. Jorge lo imprime, lo firma y se lo da a su asistente para que lo escanee de nuevo. O si está canchero, usa una firma digital y se ahorra la impresión. Después le manda el pdf al encargado de compras para que se lo devuelva al proveedor y se avance en la preparación de las pizzas, urgente, que el after es mañana viejo!

Bueno las wallets están cancheras y no imprimen nada. Usan justamente una firma digital creada a partir de tu llave privada para certificar que la transacción está ok.

Hacé la prueba, metete a tu dapp timbera favorita, dale clic al swap y fijate lo que te muestra MetaMask o tu wallet de confianza. En la parte de HEX tenés abajo un botoncito “copy raw transaction data”. Ojo, importante volver a aclararlo, esta info no vale nada sino tiene la firma, el sello de Jorge.

Pibe, ya mandé la orden, avisales que no le pongan aceitunas a la de jamón y morrones

Genial, llegamos a la parte de la estampa. “Wallet, vestíte que entrás”. Lo que hacen las wallets es recibir esta raw transaction, agregarle la firma, generar el hash de la transacción y mandarlo a la red. El hash permite validar que transaccion fue correctamente firmada.

Aa cierto, y avisarle a la dapp que ya lo hicieron, para que te salga un mensajito que diga “transacción enviada con éxito” o algo así. Volviendo a la empresa, es como que Jorge firme el PDF, se lo mande al proveedor y pegue un grito para avisarle al de compras “Pibe, ya mandé la orden de compra”.

Otra forma de pensarlo es como que la wallet es una caja mágica guarda tus llaves, recibe la raw transaction y devuelve la transacción firmada. No importa que wallet uses, la firma es siempre igual. La diferencia va a estar en donde “vive” esa caja mágica con tus llaves y como se gestiona el ingreso y salida de información. Las hardware wallets, como Ledger o Trezor, están siempre offline, por lo que para entrar a la caja hay que hacer un “caminito más largo”.

Pero importante es que haya quedado clara esta primera parte del flujo. Ya me tengo que ir al gimnasio, se me hizo tarde hoy, es un tema dificil. Aprovecho para decirte que acepto y agradezco todo tipo de feedback sobre el artículo de hoy y todas las cosas que escribimos. Nos ayuda a mejorar, sobre todo si ves algún detalle que pueda generar confusión.

En el artículo que viene vamos a seguir avanzando, nos quedan algunas cositas por ver. Todavía es un poco abstracto esto de mandar a la red y de verificar que la firma digital esté ok. ¿Quién?¿Cómo?¿Dónde?¿Cuándo? Nos enteraremos aquí, en el blog de Solow, tu proveedor de noticias favorito.

Ahhh casi me olvido. 8 de cada 10 dentistas recomiendan ver un video de Youtube después de leer un newsletter, así que te dejo nuestro canal.