Hacki
All BUIDLs

About the project

Qué construimos

Cuando varias personas comparten un fondo común, alguien tiene que ser el tesorero. Eso crea un punto único de confianza: esa persona puede gastar de más, pagar a quien no debía, o equivocarse, y nadie se entera hasta semanas después. La alternativa habitual es una multisig on-chain: rígida, cara de operar y hostil para quien no sabe de cripto.

WIP le da la billetera a un agente, con un contrato social que no puede romper. Un integrante pide un pago en lenguaje natural. El agente lo valida contra un reglamento que el grupo escribió por adelantado —topes, lista blanca, presupuesto mensual, firmas múltiples— y solo entonces mueve USD₮ de verdad. Cada pagoy cada rechazoquedan escritos.

El modelo de seguridad

Esta es la pieza donde gastamos el rigor.

El parser nunca decide.El lenguaje natural solo traduce lo que pides a una intención estructurada, con expresiones regulares. No puede alucinar un monto. Si el texto es ambiguo devuelve un error pidiendo reformular en vez de adivinar. Quien decide es código determinista y testeado. Eso es lo que separa esto de un juguete que le entrega las llaves a un modelo de lenguaje.

Nueve chequeos, en orden fijo.El primero que falla corta la evaluación:

  1. El beneficiario existe y tiene dirección
  2. Está en la lista blanca del reglamento
  3. Quien pide no es quien recibe
  4. El monto es válido
  5. No supera el tope por transacción
  6. No supera el tope diario
  7. No supera el presupuesto mensual
  8. El balance real leído de la cadena alcanza
  9. La vía de aprobación: automática, varias firmas o administrador

Invariantes que el código garantiza:

  • Un pago solo pasa a ejecución desde el estado aprobado, nunca directo
  • Quien pide un pago no puede aprobarlo — se comprueba en la API, no solo escondiendo el botón
  • Una persona vota una sola vez, forzado por la base de datos
  • Un solo veto rechaza el pago de inmediato
  • Los presupuestos cuentan solo pagos ejecutados; los rechazados nunca consumen
  • Antes de ejecutar se re-evalúan los chequeos 5 a 8: entre que se pidió y se aprobó, el balance pudo cambiar
  • El estado "ejecutando" se persisteantesde llamar a la cadena, para que quede rastro si el proceso muere a mitad
  • Una transferencia fallidanunca se reintenta sola: un pago duplicado por un reintento es mucho peor que uno que falla y avisa

Cómo lo probamos

Entra en la demo con Google y recibes tu propia tesorería en Sepolia, con cuatro integrantes y un reglamento. Un botón la fondea con USD₮ de prueba.

Luego pídele un pago escribiendo. Verás los nueve chequeos correr uno a uno antes del veredicto. Prueba estos tres:

  • paga $50 a juan@wip.demo por el café— se aprueba solo y devuelve un hash
  • paga $380 a maria@wip.demo por el rediseño— pide dos firmas de terceros
  • paga $3,000 a carlos@wip.demo para el evento— se rechaza, y no se envía nada

Qué usamos de WDK

La integración vive en un solo archivo por diseño, para que se pueda leer de un tirón. Hay dos backends, ambos con paquetes oficiales:

  • @tetherto/wdk-cli1.0.0-beta.3 — invoca el binario como proceso hijo. Es el camino local y el que verifica que el contrato del CLI es el real.
  • @tetherto/wdk-wallet-evm1.0.0-beta.17 — el SDK en proceso, que es lo que hace posible la demo pública: en serverless no hay binario que lanzar. Además expone estimación de comisión antes de firmar, que el CLI no ofrece.

Cambiar de uno a otro es una variable de entorno, no una refactorización.

Red y token

Sepolia testnet.El token que mueve la demo es un ERC-20 propio con los mismos 6 decimales que USD₮, desplegado por nosotros:0xf95bee261a5f25634979be54173c1283d662c060

Lo decimos claro porque importa:no es el USD₮ de Tether.El USD₮ de testnet en Sepolia existe y el CLI lo trae registrado (0xd077A400968890Eacc75cdc901F0356c943e4fDb), pero no encontramos forma pública de obtener fondos durante el hackathon. Preferimos un mock declarado antes que hacer pasar por USD₮ el token de otro emisor. Cambiar al oficial es una variable de entorno.

Transacciones reales en cadena

Estas salieron del código del repo y existen en Sepolia:

  • Despliegue del token:0x3a1e144c6fa0e520749061100da7301c39a7acd7ae4f7efb1db883877a453985
  • Transferencia manual desde el CLI:0x0b5f567bf1ae6eb42a08fefcafb09d3031394a75c26728e9e25851e878f57b42
  • Pago pedido en lenguaje natural:0x6334f1e1147fd48ed04eb295b88f425f5fd2726b87b42a4265aa6dfbfc45e8ab

El último es el que cuenta: alguien escribió"paga $50 a[juan@wip.demo](mailto:juan@wip.demo)por el café de la oficina", el motor corrió sus nueve chequeos, resolvió que procedía, y el agente movió 50 tokens. Sin intervención humana entre la frase y la firma.

Stack

Next.js 16 · TypeScript estricto · Prisma 7 sobre Postgres · Privy para la identidad · Motion para el movimiento · Tailwind 4.

Multi-inquilino: una seed maestra deriva una tesorería por usuario con su índice BIP-44. La base guarda el índice,nunca una frase semilla. Es un modelo custodial, apropiado para una demo en testnet donde el dinero no vale nada, y lo declaramos como tal.