Aex
Entregado · AprobadoTrack Event Pass · Entrega: 17 sep 2026

Aex Pass

Un pase para entrar a un Meet que no se puede usar dos veces, controlado por un contrato en Stellar.

La idea

Organizar un Meet pagado tiene dos problemas: saber quién pagó y evitar que un mismo pase se use dos veces. Normalmente eso lo controla una planilla o un servidor del organizador, y hay que confiar en él. Aex Pass pone esas reglas en un contrato: un programa público en la blockchain que las aplica solo y que nadie puede cambiar, ni siquiera el anfitrión.

  • Anfitrión

    Organiza el Meet, cobra el pase y deja entrar a la gente.

  • Invitado

    Compra su pase y lo usa para entrar.

  • Contrato

    Las reglas del evento, guardadas en la blockchain. Nadie se las puede saltar.

Las dos reglas

Regla 1

Solo tiene pase quien lo compró

buy exige la firma del comprador y cobra en la misma operación: o se paga y se anota el pase, o no pasa nada. Cada cuenta puede comprar un solo pase.

Regla 2

Cada pase se usa una sola vez

check_in solo lo puede firmar el anfitrión, y solo acepta un pase comprado. Un pase usado se rechaza siempre, lo intente quien lo intente.

¿Cómo sabe el contrato quién es el anfitrión? Lo guardó al nacer. No lo recibe como dato en cada llamada, así que nadie puede hacerse pasar por él.

El recorrido de un pase

Cada cuenta tiene un pase que pasa por tres estados. Solo se puede avanzar, nunca volver atrás.

Sin pase
buyfirma el invitado · paga 1 XLM
Comprado
check_infirma el anfitrión
Usado
check_inotra vez
Rechazado #4
  • Si alguien sin pase intenta entrar, check_in lo rechaza con el error 3.
  • Si alguien que ya compró intenta comprar otra vez, buy lo rechaza con el error 2.

Qué hace cada función

FunciónQuién firmaQué haceCosto
__constructor(host, token, price, name)El anfitrión, al desplegarGuarda las reglas del evento: quién cobra, con qué activo, cuánto y cómo se llama. Corre una sola vez.Comisión de despliegue
buy(buyer)El invitadoCobra el precio, se lo paga al anfitrión, anota el pase como Bought y publica el evento bought.Comisión + renta
check_in(buyer)El anfitriónPasa el pase de Bought a Used y publica el evento checked_in.Comisión
pass_of(buyer)NadieDevuelve el estado del pase de esa cuenta: sin pase, Bought o Used.Gratis (lectura)
name() · price() · host()NadieDevuelven la configuración del evento.Gratis (lectura)

El contrato está escrito en Rust con soroban-sdk, compilado a WebAssembly y publicado en Stellar testnet. El código completo tiene unas 160 líneas y está en GitHub ↗.

Qué guarda en la blockchain

Las reglas del evento

Anfitrión, activo, precio y nombre. Se escriben una vez, al desplegar, en el storage de la instancia del contrato.

Un dato por cada pase

Pass(dirección) = Bought o Used, en el storage persistente. Es lo que consulta pass_of.

Eventos

bought (quién compró y a qué precio) y checked_in (quién entró). Son avisos para que otras apps se enteren; el estado real está en el storage.

Lo que no guarda: el link del Meet

Todo lo que está en la blockchain lo puede leer cualquiera. El anfitrión comparte el link por fuera; el contrato solo prueba quién pagó y quién entró.

Cuando algo sale mal

Antes de enviar una transacción, el CLI o la página la simula. Si el contrato la rechaza, la simulación falla con un código de error y la transacción no se envía: no queda registrada y no se cobra nada.

CódigoNombreCuándo pasa
#1InvalidPriceAl desplegar, con un precio de 0 o menos.
#2AlreadyBoughtUna cuenta intenta comprar un segundo pase.
#3NoPassEl anfitrión hace check-in de alguien que no compró.
#4AlreadyUsedUn segundo check-in con el mismo pase.

Cuánto cuesta

Cada transacción paga una comisión a la red. Estas son las reales de mi ejecución con el CLI:

Desplegar
0,011 XLM
Comprar
17,64 XLM
Check-in
0,00076 XLM
Leer
Gratis

¿Por qué la compra costó tanto? Guardar datos en la red cuesta renta, y cada dato tiene un tiempo de vida (TTL). buy extiende ese tiempo a 120 días para el pase, el contrato y su código, y casi toda la comisión fue esa renta. Es XLM de prueba, pero la lección es real: el plazo hay que ajustarlo a la duración del evento.

Glosario

Blockchain
Un registro público y compartido que nadie puede editar a escondidas. Stellar es una blockchain.
Testnet (red de prueba)
Una copia de Stellar para practicar. Funciona igual que la real, pero el XLM no vale dinero.
Contrato
Un programa que vive en la blockchain y aplica reglas por sí solo.
Stellar CLI
La herramienta oficial de Stellar para la terminal: compila, publica y usa contratos con comandos.
Invocar
Llamar a una función de un contrato, como buy (comprar) o check_in (dejar entrar).
Cuenta
Una dirección pública (empieza con G) y una llave secreta. La dirección se puede compartir; la llave no.
Firmar
Aprobar una operación con la llave secreta. El contrato comprueba que firmó la persona correcta.
Transacción
Un pedido enviado a la red, como «comprar pase». Queda registrado para siempre y se ve en el explorador.
Simular
Probar una transacción antes de enviarla. Si la simulación falla, no se envía y no se cobra nada.
Evento
Un aviso público que deja el contrato cuando pasa algo: bought (compró) y checked_in (entró).
Storage (almacenamiento)
Los datos que guarda el contrato en la red. Guardarlos tiene un costo: la renta.
TTL
El tiempo de vida de un dato guardado. Mientras más largo, más renta se paga.
XLM y stroops
XLM es la moneda de Stellar. Un stroop es su unidad mínima: 1 XLM son 10.000.000 stroops.
Explorador
Una página que muestra todo lo que pasa en la blockchain. Aquí usamos stellar.expert.