Análisis técnico · THORNode · XEC

Qué encontramos dentro del branch xec-client

La revisión de la rama de starsquid muestra que XEC ya no aparece como decoración simbólica: entra en paths reales del cliente UTXO de THORNode, con signing, construcción de transacciones, precisión contable, CashAddr por red y protecciones contra ambigüedad BCH/XEC.

Por eCash Magazine México · 16 de agosto de 2026
starsquid/xec-clientUTXO client1 XEC = 100 base unitsCashAddrdisabled-by-default

Resumen: xolosArmy revisó técnicamente la rama starsquid/xec-client de THORNode. La conclusión es contundente: XEC entra como una cadena UTXO real dentro del stack compartido de THORChain, no como un string decorativo.

La rama todavía no significa aceptación oficial ni merge garantizado, pero sí representa desarrollo activo del lado THORChain. La tarea correcta ahora es validar, documentar, comparar y alinear Tonalli/Teyolia alrededor de la arquitectura que el upstream parece preferir.

La integración nativa de eCash (XEC) en THORChain acaba de cruzar una frontera importante. Hasta hace poco, la narrativa pública giraba alrededor del Draft MR de xolosArmy: una prueba de trabajo comunitaria que abrió la puerta técnica. Ahora el foco se movió hacia una rama del propio entorno THORChain, starsquid/xec-client, que implementa una versión más upstream-style de la integración.

La diferencia no es menor. El MR comunitario empujaba una integración amplia: cadena XEC, cliente UTXO, mocknet, Docker, wallet/regtest, tests y wiring de simulación. La rama de starsquid se ve más quirúrgica: mete XEC dentro del stack UTXO existente, trabaja precisión y conversión de montos, endurece fees, normaliza CashAddr, deja la configuración desactivada por defecto y agrega tests focalizados.

La tesis cambió: ya no hablamos de “si XEC podría entrar”, sino de cómo se está diseñando su entrada como cadena UTXO real.

XEC entra al cliente UTXO compartido

El primer hallazgo importante aparece en el mecanismo de carga de chains. En la rama revisada, XEC entra junto con BTC, BCH, LTC, DOGE y ZEC dentro del cliente UTXO compartido. Eso significa que la cadena no se registra como un símbolo aislado, sino como parte del mismo camino técnico que THORNode usa para observar, construir y firmar transacciones UTXO.

case common.BTCChain, common.BCHChain, common.XECChain, common.LTCChain, common.DOGEChain, common.ZECChain: return utxo.NewClient(...)

También se observó que en la lógica de signing/building, XEC se trata como cadena no-SegWit junto con BCH, DOGE y ZEC, y usa una configuración propia para construir scripts de pago. Esa es una señal técnica clave: el branch no solamente declara XEC; lo conecta a paths reales de construcción de transacciones.

La contabilidad respeta la naturaleza de eCash

Uno de los riesgos más importantes de integrar XEC en software heredado de Bitcoin/BCH es la unidad base. En eCash, 1 XEC equivale a 100 base units. La rama revisada introduce una arquitectura de conversión que conserva precisión explícita para XEC de 2 decimales mientras mantiene compatibilidad con cadenas UTXO tradicionales de 8 decimales.

RPC amount → native base units → THORChain 1e8 representation

El test clave valida que 100 native base units de XEC se convierten correctamente a common.One dentro de la representación de THORChain y que los decimales de XEC se preservan como 2. También se revisó soporte para montos extremadamente grandes, incluyendo el caso de 20 trillones de XEC, donde la representación 1e8 puede exceder uint64 pero el monto nativo todavía se puede convertir correctamente al wire amount.

CashAddr se maneja por red y sin confundir BCH con XEC

El segundo bloque crítico es direcciones. En common/ecash.go, XEC define prefijos por red: ecash para MainNet/StageNet/ChainNet, ectest para TestNet y ecregtest para MockNet.

La decisión de diseño es que una dirección externa puede existir como ecash:q..., pero THORChain trabaja internamente con forma canónica sin prefijo. Esa normalización prefixless evita romper la gramática de memos, donde el carácter : ya tiene significado como separador.

Protecciones observadas

El candado contra THORName es una pieza clave

Uno de los hallazgos más importantes es la protección contra colisión con THORName. El problema es sutil: un memo con dirección XEC prefijada, como +:XEC.XEC:ecash:q..., puede partirse por el separador : y provocar que ecash se intente resolver como un THORName.

La rama agrega un bloqueo explícito en FetchAddress(): si la primera parte coincide con el prefijo reservado de XEC para la red actual, se devuelve error y se exige usar una dirección XEC sin prefijo dentro de memos.

"ecash" / "ectest" / "ecregtest" quedan reservados según red. Resultado: usar XEC prefixless en memos o fallar explícitamente.

Este candado es importante porque convierte un edge case peligroso en una regla explícita. No deja que una dirección mal formateada se transforme silenciosamente en una búsqueda de THORName.

XEC está apagado por defecto

Otro punto correcto desde la perspectiva upstream es que XEC aparece en la configuración, pero con disabled: true. Esto permite que el código exista, se revise y se pruebe sin activar la cadena hasta que haya decisión de red, infraestructura, endpoints, pruebas y configuración adecuada.

xec: disabled: true chain_id: XEC

Esta decisión separa el merge técnico de la activación operativa. Para una integración de cadena nativa, esa separación es sana: primero el código, luego las pruebas, después la configuración, y solo al final la activación.

El único punto pendiente: DustThreshold

La revisión dejó un punto que conviene confirmar con starsquid: el valor de DustThreshold() para XEC parece representar aproximadamente un umbral económico de 100 XEC, mientras que el DustLimit() técnico parece compartir un valor más bajo de 546 native units.

Pregunta abierta: ¿100 XEC como DustThreshold económico es intencional para XEC, separado del dust limit técnico? No se afirma que esté mal; se marca como punto que merece confirmación.

Qué significa para Tonalli y Teyolia

La revisión también tiene consecuencias directas para Tonalli Wallet. Si THORChain quiere direcciones XEC prefixless dentro de memos, Tonalli debe preparar un builder especializado para ADDLP y swaps que respete esa semántica. El soporte OP_RETURN genérico es útil, pero no reemplaza todavía un builder específico para THORChain.

Para Teyolia, el despliegue de 2.1-G Governance-Bridge encaja con esta dirección: una campaña exitosa puede liquidar hacia una multisig de gobernanza durable y desde ahí coordinar ADDLP posterior, en lugar de depender de un covenant efímero como ruta final de retorno LP.

Próximas validaciones

El objetivo final sigue siendo simple: XEC nativo en THORChain. No wrapped XEC. No bridge custodial. No token sintético como sustituto del L1. La diferencia es que ahora la conversación ya tiene arquitectura concreta, paths de código reales y preguntas técnicas específicas.

En una frase: XEC ya no está solamente tocando la puerta. Dentro del branch xec-client, XEC ya camina como una cadena UTXO real dentro de THORNode.