De cero a tu dApp en Stellar
Crash course de blockchain y Stellar, y después a construir con Cavos, Trustless Work, Scaffold Stellar y un agente de código.
Taller práctico · @bitfalt
Hola, soy bitfalt
- Backend Engineer en Nexus.
- Estudiante de maestría en el TEC.
- Hoy les explico las bases de blockchain y Stellar, y después construimos dApps conversando con un agente.
El mapa de hoy
Primero entender, después construir: salís con las bases claras y una dApp corriendo en testnet.
- 1Fundamentos de blockchainbloques, wallets, contratos, DeFi
- 2Stellar por dentroledger, cuentas, Soroban
- 3Las piezasCavos y Trustless Work
- 4Scaffold Stellar y agentesel repo del taller
- 5Demo en vivo
- 6Manos a la obra
Fundamentos de blockchain
- ¿Qué problema resuelve una blockchain?
- ¿Qué es una transacción y qué es un bloque?
- ¿Cómo se ponen de acuerdo miles de computadoras?
- ¿Qué guarda una wallet?
- ¿Qué es un smart contract?
- ¿Por qué se pagan comisiones (gas)?
- ¿Qué son los tokens y las stablecoins?
- ¿Qué es DeFi, por encima?
Alguien tiene que llevar las cuentas
Cuando le pagás a alguien, un banco actualiza su libro contable: resta de tu cuenta y suma en la otra. Funciona, pero ese libro lo tiene una sola entidad:
- puede congelar, censurar o equivocarse,
- tiene horarios, fronteras y comisiones,
- y solo esa entidad ve el libro completo.
Una blockchain es ese mismo libro, pero copiado en miles de computadoras que se ponen de acuerdo sobre qué se anota.
Probá hacer trampa en un libro compartido
Cinco computadoras (nodos) tienen la misma lista de pagos. Probá los botones.
Una transacción es una orden firmada
La armás“pagarle 10 a Luis”, “llamar a este contrato”
La firmáscon tu llave secreta, desde tu wallet
La enviás a la reda cualquier nodo
Los nodos la revisan¿firma válida?, ¿hay saldo?, ¿comisión?
Entra en un bloquey queda anotada para siempre
Quién
la cuenta que la envía y la paga
Qué
pagar, crear una cuenta, llamar a un contrato…
Comisión
lo que pagás para que la red la procese
Firma
la prueba de que la autorizaste vos
Hash: la huella digital de los datos
Cambiá una sola letra y mirá qué pasa.
- Siempre igual: el mismo texto da el mismo hash.
- Cualquier cambio, por mínimo que sea, da un hash totalmente distinto.
- No tiene vuelta: del hash no se puede sacar el texto.
- Bitcoin y Stellar usan SHA-256; Ethereum usa Keccak-256. La idea es la misma.
Un bloque guarda el hash del anterior
Editá el texto del Bloque 2: se rompe ese bloque y todos los que vienen después.
¿Qué es el nonce? Viene de “number used once”: un número que se usa una sola vez. El minero lo va cambiando (0, 1, 2…) hasta que el hash cumpla la dificultad. En Ethereum, “nonce” también es el contador de transacciones de una cuenta; en Stellar ese contador se llama número de secuencia.
¿Cómo se ponen de acuerdo?
Consenso: las reglas para decidir qué bloque es el siguiente, aunque haya nodos caídos o tramposos.
Bitcoin
Prueba de trabajo
Gana quien resuelve primero el acertijo de los ceros (lo que hizo el botón Minar). Hacer trampa cuesta electricidad y máquinas.
Gasta mucha energía. Un bloque cada ~10 min.
Ethereum, Solana
Prueba de participación
Los validadores dejan plata en garantía. Si hacen trampa, la pierden; si cumplen, ganan recompensas.
Mucho menos energía. Ethereum: un bloque cada 12 s.
Stellar
Acuerdo federado (SCP)
Cada validador elige en qué otros confía, y votan en rondas hasta confirmar el mismo bloque. Sin minería y sin premio por validar.
Un ledger cada ~5 s, final al instante.
Block explorers: el buscador de la blockchain
Busca en la testnet de Stellar. Sin internet muestra datos guardados.
Como todo es público, cualquiera puede ver cada bloque, cuenta y transacción. Un explorer lo muestra bonito.
| Red | Explorers |
|---|---|
| Bitcoin | mempool.space |
| Ethereum | etherscan.io |
| Solana | solscan.io, explorer.solana.com |
| Stellar | stellar.expert, Stellar Lab |
Úsenlos para depurar: si una transacción falló, el explorer dice por qué.
Transparente por defecto… o con privacidad
Zcash · desde 2016
Transacciones blindadas que ocultan quién envía, quién recibe y cuánto. Es opcional: sus direcciones transparentes funcionan como las de Bitcoin.
Aztec · capa 2 de Ethereum
Contratos inteligentes privados, escritos en Noir. Su red Alpha salió en 2026 y todavía está en fase temprana.
La pieza clave: las pruebas de conocimiento cero, que demuestran que algo es válido sin mostrar los datos.
Una wallet no guarda plata: guarda llaves
Generá llaves reales de Stellar, acá mismo y sin internet.
- Pública: tu dirección. Se comparte, como un número de cuenta.
- Secreta: la que firma. Quien la tenga controla la cuenta.
- Firmar prueba que fuiste vos sin mostrar la secreta.
Todas las redes usan pares de llaves: Bitcoin y Ethereum con la curva secp256k1, Solana y Stellar con Ed25519.
¿Dónde vive la llave?
| Tipo | Ejemplos | Quién guarda la llave |
|---|---|---|
| Extensión o app | MetaMask, Phantom, Freighter | vos, en tu navegador o celular |
| Hardware | Ledger, Trezor | vos, en un aparato aparte |
| Embebida | Cavos, Privy | vos, en un espacio aislado; entrás con correo |
| Custodial | un exchange | la empresa: le tenés que creer |
La frase semilla
12 o 24 palabras que regeneran tu llave secreta. Quien las tenga, tiene tu cuenta. Nadie legítimo te las va a pedir.
MetaMask es de Ethereum, Phantom de Solana y Freighter de Stellar. En el taller vas a poder usar Freighter o entrar con correo gracias a Cavos.
Un smart contract es como una máquina expendedora
Meté monedas y elegí algo.
| Máquina expendedora | Smart contract |
|---|---|
| Meter monedas | enviar una transacción con un pago |
| Apretar un botón | llamar a una función |
| Las reglas de la máquina | el código del contrato |
| Precios a la vista | código público: cualquiera lo revisa |
| Nadie atiende | no hace falta un intermediario |
Un contrato en papel necesita a alguien que lo haga cumplir. Un smart contract se cumple solo: si pagás y se cumplen las reglas, entrega; si no, no. Y no hay a quién convencer.
Smart contract: un programa con reglas que nadie se salta
Una “alcancía con meta”, en Rust como en Soroban (simplificado). Ana es la dueña; la meta es 50.
¿Por qué se pagan comisiones?
- Para evitar spam: si fuera gratis, alguien llenaría la red de basura.
- Porque el espacio es limitado: cada bloque tiene un tope. Si hay más demanda, se paga más.
- “Gas” es el nombre que les puso Ethereum: el combustible que gasta cada operación.
| Red | Unidad mínima | Cómo se cobra |
|---|---|---|
| Bitcoin | satoshi 0.00000001 BTC | por tamaño de la transacción; sube con la demanda |
| Ethereum | gwei 0.000000001 ETH | gas usado × precio del gas; la parte base se quema |
| Solana | lamport 0.000000001 SOL | 5,000 lamports por firma, más prioridad opcional |
| Stellar | stroop 0.0000001 XLM | 100 stroops por operación, más recursos si llama a un contrato |
Cuando hay fila: una subasta por espacio
Tokens: saldos que lleva la red o un contrato
Fungibles
Todos valen lo mismo y se pueden partir: dólares digitales, puntos de lealtad, la moneda de un juego.
No fungibles (NFT)
Cada uno es único: una entrada a un evento, una insignia de asistencia, un título de propiedad.
| Red | Cómo se hace un token |
|---|---|
| Ethereum | un contrato ERC-20 (fungible) o ERC-721 (NFT) |
| Solana | el programa de tokens SPL |
| Stellar | activos nativos de la red (con trustline), o un contrato que cumple la interfaz SEP-41 |
Un token es solo una tabla de “quién tiene cuánto” con reglas para moverlo. Su valor depende de lo que lo respalde.
Stablecoins: dólares que viven en la blockchain
Una stablecoin vale ~1 dólar porque el emisor guarda 1 dólar por cada token y lo cambia 1 a 1.
Respaldadas por dinero: USDC (Circle), USDT, EURC. Por cripto: DAI. Algorítmicas: UST, que colapsó en 2022.
DeFi: servicios financieros hechos con contratos
Intercambiar
Cambiar un token por otro sin un exchange en medio (DEX).
Prestar
Pedir prestado dejando una garantía; o prestar y ganar intereses.
Dar liquidez
Poner tokens en un fondo para que otros intercambien, y cobrar comisiones.
Oráculos
Traer datos de afuera, como el precio de un activo.
| Red | Ejemplos conocidos |
|---|---|
| Ethereum | Uniswap (DEX), Aave (préstamos) |
| Solana | Jupiter, Raydium (DEX) |
| Stellar | el DEX de la propia red, Soroswap y Aquarius (DEX), Blend (préstamos) |
Los riesgos
Errores en los contratos, precios que se mueven rápido y garantías que se liquidan. No es para el taller, pero conviene saber que existe.
Un DEX automático (AMM): precio por fórmula
Cuatro redes, lado a lado
Cada cuadrito es un bloque. El amarillo es el más nuevo.
Repaso rápido
Stellar por dentro
- ¿Qué es el ledger y cómo cierra cada 5 segundos?
- ¿Qué son las cuentas G, S, C y M?
- ¿Cuánto XLM necesita una cuenta para existir?
- ¿Qué trae una transacción de Stellar?
- ¿Cómo funcionan los activos y las trustlines?
- ¿Cómo se cobran las comisiones?
- ¿Qué es Soroban y qué es el TTL?
- ¿Qué redes y herramientas hay?
Stellar en corto
- Rápida y final. Cada ~5 segundos cierra un ledger y lo que entró ahí ya no se revierte.
- Barata. Una operación simple cuesta 0.00001 XLM; llamar a un contrato, fracciones de centavo.
- Hecha para pagos. Activos como USDC son nativos de la red, con un DEX incorporado.
- Soroban son sus contratos inteligentes, escritos en Rust.
- XLM (lumen) es su moneda: paga comisiones y reservas.
Testnet es la red de práctica: misma tecnología, plata de mentira. Friendbot te regala 10,000 XLM de prueba.
El ledger: una foto de toda la red cada 5 s
Cada ledger guarda el estado completo: cuentas, saldos, trustlines, ofertas del DEX y datos de contratos. Más el hash del ledger anterior.
Para cerrar uno, los validadores corren el Stellar Consensus Protocol:
- cada validador elige un quórum de nodos en los que confía,
- se proponen las transacciones candidatas,
- se vota, se acepta y se confirma.
Proponer“estas transacciones van en el ledger 800”
Votarsi es coherente con lo que ya votó
Aceptarcuando su quórum lo apoya
Confirmares seguro: cierra y es final
Las letras de Stellar
G… Cuenta
Tu dirección pública. Tiene saldos, trustlines y un número de secuencia.
56 caracteres. Se comparte.
S… Secreta
La llave que firma por esa cuenta. Controla todo lo que hay en la G.
Nunca se comparte.
C… Contrato
La dirección de un contrato de Soroban. También puede tener saldos y firmar como “rol”.
Un escrow es una C.
M… Muxed
Una G más un número. Sirve para que un exchange dé una dirección por cliente con una sola cuenta.
Para que una G exista on-chain, alguien tiene que crearla con al menos 1 XLM. Antes de eso es solo una dirección calculada.
¿De qué es esta dirección?
Elegí una respuesta.
¿Cuánto XLM necesita una cuenta?
Esa reserva no se gasta: se libera si quitás la trustline o la oferta. En testnet Friendbot te da 10,000 XLM, así que sobra.
Anatomía de una transacción real
Tocá un campo
Cada fila es un campo de la transacción. Tocalo para ver qué significa.
Operaciones: hasta 100 por transacción, todo o nada
| Operación | Qué hace |
|---|---|
create_account | crea una cuenta G y le deposita XLM |
payment | envía XLM o cualquier activo |
path_payment | envía un activo y llega otro, convertido en el DEX |
change_trust | agrega o quita una trustline |
manage_sell_offer | pone una oferta en el DEX |
set_options | firmantes, umbrales, dominio |
invoke_host_function | llama a un contrato de Soroban |
Atómica
Si una operación falla, no se aplica ninguna. Ana le da 10 USDC a Luis y Luis le da 50 XLM a Ana en la misma transacción: o pasan las dos, o ninguna.
Una transacción que llama a un contrato lleva una sola operación. Sus límites se miden en recursos (CPU, lectura, escritura).
Activos: código + emisor
- XLM es nativo: no tiene emisor ni trustline.
- Todo lo demás se identifica por código + emisor. Cualquiera puede crear un “USDC”, pero el de Circle es el de su emisor.
- Trustline: para recibir un activo, tu cuenta primero lo acepta. Así nadie te llena la cuenta de tokens basura.
- SAC (Stellar Asset Contract): cada activo tiene un contrato que lo hace usable desde Soroban.
Comisiones en Stellar
Comisión de inclusión
100 stroops × cantidad de operaciones. Lo que ponés es un máximo: sin congestión pagás el mínimo.
Comisión de recursos solo contratos
Según lo que consume: CPU, datos leídos y escritos, tamaño, eventos y el “alquiler” del almacenamiento.
| Ejemplo real (testnet) | Pagó |
|---|---|
| Transacción con 43 operaciones | 4,300 stroops 0.00043 XLM |
| Llamada a un contrato | 4,333 stroops 0.0004333 XLM |
Lo cobrado va a una cuenta bloqueada: no se lo queda nadie. Con un “fee bump”, otra cuenta puede pagar la comisión por vos: así funcionan las apps sin gas.
Soroban: los contratos de Stellar
- Rust → WebAssembly. Se compila a un archivo Wasm y se despliega con una dirección
C…. require_auth()exige la firma de una dirección.- Almacenamiento con fecha de vencimiento (TTL).
- Eventos que el frontend puede escuchar.
- Simulación: antes de enviar, la red te dice el resultado y la comisión.
#[contractimpl]
impl Reputation {
pub fn review(env: Env, reviewer: Address,
subject: Address, rating: u32, …)
-> Result<(), Error> {
reviewer.require_auth();
if !(1..=5).contains(&rating) {
return Err(Error::InvalidRating);
}
let storage = env.storage().persistent();
storage.set(&key, &review);
storage.extend_ttl(&key, THRESHOLD, EXTEND_TO);
…
}
}
Los datos de un contrato tienen vencimiento
Cada dato tiene un TTL: cuánto tiempo más vive sin que nadie lo renueve.
| Temporal | barato; al vencer se borra para siempre |
| Persistente | al vencer se archiva y se puede restaurar |
| Instancia | como persistente, vive con el contrato |
En la red el TTL se mide en ledgers: 1 día = 17,280 ledgers.
Redes y herramientas
| Red | Para qué |
|---|---|
| Mainnet | plata real; las cuentas se crean con XLM real |
| Testnet | practicar; Friendbot da 10,000 XLM; se reinicia de 2 a 4 veces por año |
| Futurenet | probar funciones nuevas antes de que salgan |
| Herramienta | Para qué |
|---|---|
| Stellar CLI | compilar, desplegar e invocar contratos desde la terminal |
| Stellar Lab | armar y firmar transacciones desde el navegador |
| Freighter | la wallet de extensión de Stellar |
| stellar.expert | explorer de bloques, cuentas y contratos |
| Stellar RPC | la API para hablar con la red y simular contratos |
Pagos y DeFi en Stellar
DEX y pagos con conversión
La red trae un libro de órdenes y fondos de liquidez. Un path_payment manda colones digitales y llegan dólares, convertidos en el camino.
Anchors
Empresas que conectan la red con bancos: depositás moneda local y recibís el activo, o al revés. Hablan protocolos estándar (SEPs).
DeFi en Soroban
Soroswap y Aquarius para intercambiar, Blend para préstamos, y contratos de cualquiera que quiera construir encima.
Repaso de Stellar
Las piezas: Cavos y Trustless Work
- ¿Por qué cuesta construir en web3?
- ¿Cómo entra alguien sin instalar una wallet?
- ¿Cómo se guarda plata hasta que se cumpla algo?
- ¿Quién firma cada paso de un escrow?
Por qué cuesta construir en web3
- Las wallets asustan: instalar una extensión y anotar 24 palabras es donde se pierde la gente.
- Mover plata con reglas (“te pago cuando entregues”) es difícil de hacer bien y peligroso de hacer mal.
- Pegar el contrato con la app: direcciones, tipos y despliegues que se rompen a cada cambio.
Y un cuarto problema
Los modelos se saben Ethereum de memoria, pero de Stellar saben menos y con versiones viejas. Sin contexto, inventan APIs.
Cavos, Trustless Work, Scaffold Stellar y las skills para agentes resuelven uno cada uno.
Entrar con correo: Cavos
- Login con correo o Google. Cavos le crea al usuario una cuenta Stellar normal (
G…). - Sin extensiones ni 24 palabras. La llave vive en un espacio aislado: ni tu página ni Cavos pueden leerla.
- Firma como cualquier wallet. Cuando hay que aprobar algo, Cavos muestra su propia ventana.
- ¿Ya tenés Freighter? “Use a wallet” sigue funcionando.
Cómo funciona Cavos por dentro
Entrás con tu correote llega un código de 9 caracteres, o usás Google
Se calcula tu cuenta G…existe como dirección antes que on-chain
La llave vive en el vaultun iframe aislado en vault.cavos.xyz
La app pide firmarcon signXdr, igual que Freighter
El vault aprueba o preguntasegún los límites de la app
Tu página no ve la llave
Un error o una librería maliciosa en tu sitio no puede robarla.
Llamar a un contrato pide aprobación
El vault muestra qué se firma y en qué red.
Otro dispositivo
Se abre con una passkey o con recuperación en la nube, según cómo configures la app.
Plata con reglas: Trustless Work
Un escrow es un tercero neutral que guarda la plata y la suelta cuando se cumple lo acordado. Acá ese tercero es un contrato: nadie puede salir corriendo con la plata.
| Rol | Qué hace |
|---|---|
| Approver | aprueba cada hito (el cliente) |
| Service provider | entrega y marca hitos como hechos |
| Release signer | libera la plata |
| Dispute resolver | decide si hay desacuerdo |
Single-release
Un solo pago al final. Compras, depósitos de alquiler.
Multi-release
Un pago por hito. Freelance, bounties, grants.
Trustless Work despliega un contrato (una dirección C…) por trato. Vos no escribís la lógica del escrow.
Un escrow, paso a paso
Montos en USDC. La plataforma cobra 1% y Trustless Work 0.3%, descontados al liberar.
Scaffold Stellar y tu dApp
- ¿Cómo se pega un contrato con una app web?
- ¿Qué trae el repo del taller?
- ¿Qué piezas necesita tu idea?
- ¿Cómo hacemos que el agente no invente?
El andamio: Scaffold Stellar
Guardás tu contrato en Rust
Se compila a WebAssembly
Se despliega en testnet
Se genera un cliente TypeScript
Lo usás en React como cualquier librería
import { reputation } from "@stellar-scaffold/app-lib/clients"
const { result } = await reputation.score_of({ subject })
Todo eso pasa solo, cada vez que guardás, mientras corre npm start.
Scaffold Stellar es un proyecto open source de The Aha Company. Todo el taller está construido sobre él: stellarscaffold.org
El repo del taller: scaffold-stellar-agentic
- Escrow Studio: crear, fondear, aprobar, liberar y disputar escrows.
- Un contrato propio (
contracts/reputation) desplegado en cada guardado. - Dos formas de entrar: correo con Cavos o Freighter.
- Skills para agentes en
.agents/skills. - Lo armé sobre Scaffold Stellar para que cualquiera pueda describir una idea y construirla.
El checklist del Escrow Studio, con lo que ya sabés
| Paso del checklist | El concepto detrás |
|---|---|
| Sign in o conectar una wallet | tu par de llaves y tu cuenta G… |
| Get test XLM (Friendbot) | crea la cuenta y paga reserva y comisiones |
| Add a USDC trustline | aceptar el activo; 0.5 XLM de reserva |
| Get test USDC (swap) | stablecoin, comprada en el DEX de la red |
| API key de Trustless Work | la API que arma las transacciones del escrow |
Cómo encaja todo
No toda app necesita un escrow
Elegí una idea para ver qué piezas usa.
¿On-chain u off-chain?
On-chain
nadie puede alterarlo, pero es público para siempre
Off-chain
privado y editable, pero hay que confiar en quien lo guarda
Depende
el agente te explica las ventajas y te pregunta
Agentes que no adivinan
No se trata de escribir mejores prompts: se trata de darle al agente contexto verificado.
AGENTS.md: las reglas del proyecto, en un archivo que leen todos los agentes.- Skills: manuales cortos que el agente abre solo cuando los necesita.
npm run check: el agente verifica cada paso (tests, tipos, lint).
.agents/skills/
build-dapp/ idea → app, paso a paso
trustless-work/ escrows (solo si hacen falta)
cavos/ login con correo
scaffold-stellar/ contratos ↔ app
soroban-contracts/ contratos en Rust
stellar-basics/ conceptos y errores
Funciona con el agente que ya usás
| Agente | Cómo encuentra las skills |
|---|---|
| Claude Code | CLAUDE.md importa AGENTS.md; skills como /build-dapp |
| Codex | AGENTS.md y .agents/skills; $build-dapp |
| Cursor, Copilot | AGENTS.md y .agents/skills |
| Gemini, Antigravity | AGENTS.md y .agents/skills |
| OpenCode, Pi y otros | AGENTS.md les dice qué archivo abrir |
Una sola fuente
Las skills viven en .agents/skills (estándar abierto). Para las herramientas que buscan en otro lado hay copias sincronizadas, y si un agente no soporta skills, igual las lee porque AGENTS.md le dice dónde están.
Lo probamos con una sola frase
“Quiero una app para vender distintos artículos usando escrows”
- contrato de publicaciones con 11 tests, en testnet
- tres páginas: mercado, vender y mis pedidos
- un escrow por compra, con roles bien puestos
Unos 17 minutos, npm run check en verde.
“Quiero hacer una aplicación de votaciones para encuestas”
- no usó escrows: nadie guarda plata
- preguntó: ¿voto abierto o secreto?, ¿quién puede votar?, ¿login con correo?
- contrato con 12 tests y tres páginas en español
Unos 17 minutos, npm run check en verde.
Cada agente anotó dónde se trabó, y cada traba se corrigió en las skills que van a usar hoy.
Demo en vivo
- 1Sign in con correo
- 2Friendbot, trustline y USDC de prueba
- 3Un escrow completo en el Escrow Studio
- 4Le pedimos una app nueva al agente
/build-dapp Quiero una app de votaciones para mi comunidad: cualquiera crea una encuesta, cada persona vota una vez y se ven los resultados en vivo. Que la gente entre con su correo.
Mientras el agente trabaja: fijate cómo elige las piezas, qué te pregunta sobre on-chain y off-chain, y cómo verifica cada paso.
Manos a la obra
En GitHub: Use this template para crear tu propio repo, clonalo y corré:
npm run setup:tools npm install npm run doctor npm start
En app/.env va el App ID de Cavos y, si tu idea usa escrows, la API key de Trustless Work. Los pasos están en el README.
github.com/bitfalt/scaffold-stellar-agentic
Ideas para hoy
Sin escrows
| Encuestas y votaciones | contrato |
| Libro de visitas de un evento | contrato |
| Insignias de asistencia | NFT |
| Propinas para creadores | pago directo |
| Puntos de lealtad | token |
Con escrows
| Depósito de alquiler | single-release |
| Clases prepagadas | multi-release |
| Bolsa de chambas con reseñas | multi + contrato |
| Bounties de hackathon | multi-release |
| Marketplace de segunda mano | single + contrato |
Si algo falla
| Ves esto | Significa |
|---|---|
op_no_trust | falta la trustline de USDC |
underfunded | no hay saldo suficiente: Friendbot o swap |
op_low_reserve | no alcanza el saldo mínimo de la cuenta |
Error(Contract, #3) | el contrato rechazó la acción (error número 3) |
| network mismatch | tu wallet no está en Testnet |
| Trustless Work 401 | falta o está mal la API key |
Primero, esto
npm run doctor
Revisa herramientas, app/.env, la red y tus claves. Si no, buscá la transacción en stellar.expert o pegale el error a tu agente: tiene un decodificador de errores en las skills.
Glosario de bolsillo
¿Construiste algo? Mostralo
Compartí tu repo en Discussions → Show and tell del repositorio, con una captura de lo que hiciste.
Gracias a Scaffold Stellar (The Aha Company), la base de todo esto, y a Trustless Work y Cavos.
github.com/bitfalt/scaffold-stellar-agentic