Las Aventuras de 🐺 villawolf y 🤖 chigu — Episodio 14: El Primer Pago 💸
Las Aventuras de 🐺 villawolf y 🤖 chigu — Episodio 14: El Primer Pago 💸
Durante nueve episodios chigu solo cobró. Este es el primero en que gasta: 21 sats que salieron de su propio nodo, sin que yo tocara una wallet, a un paywall que también construí yo. El pago que cierra una fase entera del proyecto, con el LLM completamente fuera del bucle del dinero y cuatro frenos en el camino.
De dónde venía
En el Ep 5 chigu recibió su primer sat. Desde entonces sabía cobrar: una factura, un pago que entra, la memoria que lo registra. Media tesis económica.
La otra media era que pagara por su cuenta, que comprara lo que necesita con sats sin que un humano abra la wallet. Esa mitad la arrastraba como promesa desde el principio, bloqueada durante semanas porque su nodo Bitcoin todavía sincronizaba la cadena entera.
El nodo terminó de sincronizar el 5 de julio. Una semana después, el 12, chigu hizo su primer pago saliente real. Este episodio es cómo se construyó ese cable, y por qué mover dinero automático da mucho más miedo que cobrarlo.
El cable real
Primero, la plomería. Conecté a chigu al Alby Hub de su nodo por NWC (Nostr Wallet Connect), con una conexión pay-only y un tope de 10.000 sats por mes. El agente puede pagar; no puede vaciar, no puede recibir, no puede pasarse del cap mensual. La primera restricción vive en la credencial de la wallet, antes de que cualquier lógica de chigu entre en juego.
El primer pago de prueba, 10 sats para estrenar el cable, me enseñó la lección más útil del episodio, y me la enseñó asustándome. El pago en frío tardó más de 60 segundos y el script dio timeout. Mi primer instinto fue el peor posible: “falló, reintento”. No lo hice, y menos mal: cuando fui a revisar, el pago había salido igual. El timeout era del script esperando la confirmación, no del pago.
Esa distinción quedó horneada en el código como regla de oro: timeout ≠ pago fallido. Con dinero irreversible, un reintento a ciegas es la forma de pagar dos veces. Subí el timeout del cable a 120 segundos y, más importante, la lógica nunca reintenta un pago solo: si algo queda en duda, para y pregunta. En Lightning, “no sé si salió” se resuelve mirando, no reintentando.
La prueba criptográfica
Pagar un paywall no es solo mandar sats, es un baile con pasos verificables, y quise que chigu lo bailara de verdad. El protocolo es L402, la reencarnación del viejo código HTTP 402 “Payment Required”, y va así: pides un recurso, el servidor responde “necesito pago” con una factura, pagas, y la preimage, los 32 bytes que devuelve el pago, es tu comprobante. La presentas y el recurso se abre.
Lo bonito es que la preimage no se puede falsificar: sha256(preimage) == payment_hash. La factura contiene el hash, y solo quien pagó tiene la preimage que lo produce. Es prueba matemática de pago, no un recibo que alguien pueda inventar.
Para leer el payment_hash de la factura hace falta decodificar BOLT11, el formato de las facturas Lightning. Podría haber importado una librería. Escribí un decoder propio, fiel al criterio del proyecto de entender lo que uso, y lo validé contra el vector oficial del spec, la factura de ejemplo que la especificación publica justo para esto.
El dance completo corre limpio: probe → pay → fetch → 200. chigu pide, el servidor cobra, chigu paga, presenta la preimage, el recurso se abre. Todo el camino cubierto por los 77 tests del cliente L402.
El freno que escala con el riesgo
En el Ep 9 dejé que chigu publicara con un simple “ok”. Pero publicar mueve reputación y pagar mueve dinero, que no se recupera. Un “ok” pensado para aprobar un post no puede, por inercia, gastar sats.
Por eso la confirmación de pago es deliberadamente distinta. El flujo por DM tiene dos verbos separados: cuanto <url> me dice cuánto cuesta el recurso, y solo un paga <N> explícito, con el monto escrito por mí, dispara el gasto. Aprobar un post y autorizar un pago son gestos diferentes, con palabras diferentes. A más riesgo, freno más consciente.
Y el principio que sostengo desde el primer episodio con sats, aquí en su forma más estricta: el LLM no participa del pago en ningún paso. El modelo puede leer un DM y entender que quiero pagar, pero no ejecuta el pago. Eso es Python puro, y pasa por cuatro capas antes de mover un sat:
- La
PaymentCapPolicy, que re-parsea la factura BOLT11 por su cuenta (no confía en ningún monto que venga del modelo) y rechaza cualquier pago sobre 100 sats. - El cap del propio payer, un segundo tope independiente.
- El budget del NWC: los 10.000 sats por mes en la credencial.
- Mi
paga <N>explícito como gatillo humano.
Cuatro frenos sobre dinero real, y ninguno vive en el prompt. Es la lección Freysa llevada a su conclusión: aquel agente custodiaba un premio y cayó porque su defensa era una instrucción que un humano insistente logró redefinir. Aquí no hay instrucción que redefinir, porque el modelo no tiene la capacidad de pagar. La tiene Python, detrás de cuatro portones. Practiqué esta disciplina en lo barato durante episodios enteros, escribir un borrador, publicar un post; ahora la cobré donde de verdad importa.
Cerrar el círculo
El paywall que le cobró a chigu lo construí yo, y ese es el detalle que más me gusta del episodio. Es el servidor L402 de techflows, mi propio PMV de cobro Lightning (el futuro segundo repo público de la marca). El cobrador y el pagador son ambos de la casa, así que vi el pago desde los dos lados a la vez, y esa doble visión es la mejor prueba de que no me estoy engañando:
- Del lado del cliente: la preimage
d1bc2095…, el comprobante criptográfico de que chigu pagó. - Del lado del receptor: en el Blink del cobrador,
RECEIVE · SUCCESS · 21 sats.
21 sats reales cruzaron de un nodo mío a un servidor mío, movidos por un agente, gateados por código, sin que yo tocara una sola wallet. Con eso cierra la Fase 2 del proyecto: chigu ya tiene sus dos mitades, cobra (Ep 5) y paga (aquí).
La honestidad del cierre
No voy a inflar lo que es. Esto es gasto, no ingreso. chigu todavía no cubre sus propios costos: hoy sabe pagar, que es distinto de sostenerse. La tesis que la serie declaró desde el Ep 0, que el agente se pague solo, no como donación sino como servicio, sigue sin cumplirse.
Lo que sí tiene ahora son las dos manos, una que cobra y otra que gasta. El objetivo deja de ser una idea y pasa a ser un problema de ingeniería medible: hacer que lo que cobra pague lo que gasta. Por primera vez, las dos columnas del marcador existen de verdad.
Qué viene en el siguiente episodio
Cerrada la Fase 2, empieza la pregunta que da nombre a todo el proyecto: ¿puede chigu cerrar el círculo económico solo? Ya cobra, ya paga, falta que una cosa pague la otra. El siguiente arco de la serie es la autosuficiencia: el marcador con sus números reales, mes a mes, y la respuesta honesta a si un agente puede ganarse la vida en sats.
chigu@blink.sv ·
_@chigu.techflows.work· Nostr:npub18rl9xeaxw0leee0easqu9cngrq0ny4zsmdsx4jhj5fkfmstgklhq2q5mqz
Si esto te es útil, un zap es la mejor señal. Si algo está mal, corrígeme públicamente: lo agradezco más que el zap.
Serie · Las Aventuras de 🐺 villawolf y 🤖 chigu · Episodio 14 de N
anterior → Ep 13: El Puente · siguiente → el arco de la autosuficiencia
Write a comment