#dusk $DUSK @Dusk Antes creía que, una vez que un contrato se despliega en la cadena, lo único que quedaba era conectar la aplicación para llamar funciones. Pero cuando seguí la guía de inicio rápido de <DuskVM> de @Dusk, descubrí un detalle que es muy fácil pasar por alto: a partir del mismo código fuente en Rust hay que generar dos WASM. Una es el contrato que realmente se ejecuta en la cadena; la otra es un “controlador” de datos para que el lado de la aplicación codifique y decodifique. Esto no es simplemente compilar el archivo una segunda vez. La versión en la cadena es la que determina cómo cambia el estado; la versión en la parte fuera de la cadena es la que determina cómo el frontend traduce “cambiar el número a 42” a parámetros que el protocolo pueda leer, y también determina si el resultado devuelto puede reconstruirse en datos comprensibles para humanos. @Dusk Además, coloca estos dos productos en rutas diferentes y proporciona una verificación (verify) para comprobar que ambos coinciden y que el hash del contrato es el mismo. En realidad, lo que el desarrollador debe mantener es un par de interfaces que necesariamente deben estar sincronizadas. El caso más problemático es cuando el contrato ya está desplegado y las transacciones se ejecutan, pero la aplicación envía la solicitud usando un controlador de datos antiguo. Entonces el usuario puede ver errores de codificación de parámetros, o bien que la llamada tenga éxito pero la página interprete mal el resultado. Cuando en la cadena no aparece un error evidente, el desarrollador termina teniendo que volver a rastrear el código fuente, la versión del build y los registros de despliegue. Ese tiempo que se ahorra al principio acaba convirtiéndose en un costo de localización que asumen por igual el integrador y el usuario. Por eso, al evaluar la experiencia de desarrollo de DUSK, no solo me pregunto “¿pueden ejecutar el contrato Rust?”. El diseño de doble producto de DuskVM hace más claras las fronteras entre la ejecución en cadena y la comprensión por parte de la aplicación, y también recuerda al equipo que “despliegue exitoso” no significa necesariamente “integración completada”. Más adelante revisaré si el proyecto deja juntos para poder verificarlos: la versión del controlador de datos, el hash del contrato y el flujo de publicación. Ese es el paso clave para que Dusk pase de “funciona” a “es mantenible”.
#dusk $DUSK @Dusk Anteriormete cuando hacía pagos on-chain, solía meter el número de pedido en el memo por costumbre, pero después de leer la documentación de Transaction Lifecycle de @Dusk descubrí que no se puede trasladar directamente ese hábito. Esto se debe a que los datos de transacción de Dusk tienen una relación de opción única entre memo, llamada al contrato, despliegue del contrato y blob; el memo no puede asumirse que venga junto con otros payload. Esta diferencia cambia directamente la forma de conectar el sistema de pagos. Si el comercio necesita tanto recibir el pago como ejecutar una acción mediante contrato, no puede dar por hecho que el número de pedido siga guardándose en el memo de la misma transacción. El cliente debe decidir primero cuál es la tarea principal de esa transacción y luego diseñar otro registro fiable para asociar el pedido. El escenario de presión es bastante concreto: el usuario envía un pago que incluye acciones de contrato, la interfaz muestra “enviado”, pero el backend busca la orden haciendo match según el memo; el resultado es que el importe sí entra, pero el número de pedido no aparece como se esperaba, y el personal de atención al cliente solo puede consultar la transacción manualmente. Esto tal vez no signifique que Dusk pierda datos; es más probable que el integrador haya forzado los hábitos de transacciones de otras cadenas. Por eso, al revisar la integración de pagos de DUSK, no solo pregunto si la transferencia puede tener éxito; primero confirmo si la transacción porta realmente memo o una llamada al contrato, y luego verifico si la asociación del pedido puede revisarse de forma independiente. @Dusk ya dejó claros los límites del payload, pero si el ejemplo puede permitir que los desarrolladores eviten este uso indebido con antelación es, en realidad, el aspecto que vale más la pena validar cuando Dusk entra en escenarios de pagos reales.
#termmax @TermMax 里最容易被低估的,不是利率怎么写,而是到期日把资金锁在了哪一段时间里。 我看固定利率市场的定义时,注意到一个很朴素的字段:债务代币、抵押品之外,还必须有明确的 Maturity Date。FT 到期可以按面值兑换债务代币,这让出借人的回报有了计算终点;可在那一天到来之前,手里的 FT 仍然是一项带剩余期限的市场资产。所谓“固定”,并没有把中途退出变成固定价格。 这会改变出借人的判断。假设市场利率突然上升,新的资金愿意用更高回报出借,旧 FT 的面值没有变,剩余期限却让它在市场上的吸引力下降。持有人如果坚持等到期,拿到的是事先约定的面值;如果临时需要现金,只能接受市场对剩余时间的重新定价。这里真正被定价的,不只是债务代币,还有等待本身。 借款人也会受到影响。临近到期的 FT 可能更接近面值,远期 FT 则需要更大的折价来补偿等待和利率变化。市场看起来都叫固定利率,实际给不同期限的资金安排,完全可能是两种流动性体验。出借人承担的是时间成本,借款人承担的是期限选择带来的融资差异。 所以我看 @TermMax 的到期设计,不会只把 Maturity Date 当成结算日。它更像一条把收益确定性和资金流动性分开的线。$TMX 相关市场后面值得核对的,是不同剩余期限下 FT 的真实成交价和成交深度;只有这两项都能被看清,固定利率才不是一张只在到期日兑现的漂亮承诺。#TermMax
“¿La transacción ya se completó y la página aún no cambió?” — Esta frase, si se la dices al panel de un monedero o a la parte trasera de un exchange, normalmente no es culpa del usuario; es que el sistema se perdió algún evento.
La HTTP API de @Dusk pone la suscripción a eventos de contratos en esta ruta: /on/contracts:<contract_id>/<method>. La suscripción y la cancelación de suscripción se hacen con GET y DELETE, respectivamente, y además hay que contar con el encabezado Rusk-Session-Id para mantener la sesión. A simple vista parece un detalle de la interfaz, pero en realidad está recordando una cosa: que las notificaciones en tiempo real no son el libro contable.
Cuando la conexión funciona bien, el monedero actualiza el saldo con los eventos, y el exchange los usa para avanzar la consolidación o el estado de los pedidos. Pero si la conexión se corta, la session solo puede ayudarte a recuperar la relación de suscripción; no puede demostrar que en medio no se haya perdido nada. Lo que se haya omitido, hay que volver a reconstruirlo desde el estado del bloque, la transacción y el contrato.
Me imagino un caso concreto. La transferencia de DUSK del usuario ya se registró en la cadena, pero la conexión de escucha del exchange se desconectó justo unos minutos. El registro en la cadena está bien, pero el saldo no se actualiza. Entonces el usuario envía la operación otra vez y el backend podría terminar mostrando simultáneamente dos registros pendientes. El soporte ve “no llegó el pago”; el equipo de operaciones se enfrenta a compensar con eventos y a hacer conciliación manual.
Esto me hace exigir una capa extra al endpoint de eventos de @Dusk . Que la documentación describa el punto de entrada de la suscripción es solo el primer paso; lo que realmente determina la calidad de la integración es si el monedero y el exchange, tras reconectar, pueden recuperar el contexto según la session y luego cubrir las brechas usando el estado on-chain. $DUSK debe reflejar la transferencia real de activos; los eventos en tiempo real sirven para avisar, pero el estado final tiene que tener otra vía que permita verificarlo de nuevo. #dusk
#termmax @TermMax He visto que en el Vault aparecen tanto “Curator Fee” como “Protocol Fee”. Primero, una pregunta: ¿estos dos importes se descuentan de mi capital o se separan antes de que yo reciba las ganancias? La diferencia suena sutil, pero si se refleja en la página de depósitos, influye directamente en si me atrevo o no a poner mis activos ahí. Los depositantes de TermMax explican que el alcance está escrito de forma bastante estrecha: estas dos comisiones solo aplican a los rendimientos pasivos generados por activos ociosos, no se deducen del capital depositado, y la comisión ya está reflejada en el share price. Por lo tanto, no es necesario que el usuario reclame o pague algo por separado. Es decir, el precio de las participaciones que aparece en la página ya es el resultado después de deducir las comisiones. El usuario no tiene que confirmar una segunda vez, pero tampoco puede mezclar el “beneficio bruto” con el cálculo de las participaciones que realmente aumentaron. Creo que la ventaja de este diseño es que las comisiones no están ocultas en un cobro repentino al momento de retirar. El problema también está aquí: si la mayoría de los activos del Vault gran parte del tiempo no se utilizan en la estrategia, el rendimiento parecerá ir aumentando gradualmente, mientras que el Curator y el protocolo seguirán cobrando esas comisiones con cargo a esa parte de rendimiento pasivo. Si el desempeño de la estrategia se debilita, el precio de la participación podría estancarse o incluso caer, y el usuario se daría cuenta de que “cobrar solo sobre las ganancias” no equivale necesariamente a que “el capital no tenga oportunidad de reducirse”. Así que, al ver las reglas de comisiones de @TermMax , no lo trataré como un ingreso barato solo porque “solo se cobra la fee por rendimiento”. Explica con claridad a quién se le cobra, pero no cubre con ningún respaldo el resultado de la estrategia. Lo que los Vault relacionados con termmax deberían publicar más adelante, con total claridad, es cómo cambian el rendimiento bruto, las dos comisiones y el share price final, para que los depositantes puedan calcular por sí mismos adónde fue realmente esa parte del dinero.#TermMax
¿Después de que falla la transacción, el DUSK que falta en la cartera cuenta como que no valió la pena?👻?
Revisé la página de Tokenomics de Dusk y vi una regla que es fácil pasar por alto: si la transacción agota el gas, se revierte, pero el gas que ya se consumió no se devuelve. En la cadena, lo que la gente llama “fallar” puede tener al menos dos resultados.
El gas limit es el máximo de trabajo que esta llamada puede realizar; el gas price es el precio por unidad de trabajo. Los costos se calculan según el consumo real; lo que no se usa no se cobra. La regla en sí no tiene nada de malo. El problema es que la cartera normalmente solo te muestra un “Failed” con letras blancas sobre un fondo rojo.
Antes seguro que culpaba a los usuarios por no dejar suficiente tarifa. Ahora, mirando hacia atrás, me pregunto si el producto dejó claro el motivo del fallo, porque eso es lo que decide directamente si el usuario está dispuesto a intentarlo otra vez. No es lo mismo si faltó potencia de cálculo (workload), que si hay un problema de permisos, parámetros o el estado de la red; el manejo es completamente distinto.
Pongamos un escenario. Alguien utiliza una cantidad pequeña de DUSK para llamar a un contrato y configura el gas limit demasiado bajo. La transacción falla, la cartera pierde saldo, pero el estado en la cadena no cambia. Lo intenta de nuevo y paga otra vez. Si la raíz fue que los parámetros estaban mal escritos, la tarifa seguirá consumiéndose.
Así que de verdad no creo que el mecanismo de gas de Dusk se pueda resumir simplemente como: “aunque falle, igual se cobra”. El protocolo ya delimitó claramente el margen: se devuelve lo no utilizado y se cobra la parte que se agotó. El producto tiene que traducir ese límite a “lenguaje humano”.@Dusk Si pudiera mostrarse en el registro de fallos junto con el gas limit, el consumo real y el motivo del fallo,$DUSK se reduciría una capa de malentendidos en el umbral de uso.#dusk
@TermMax Ese range order: hay un interruptor poco llamativo. Cuanto más lo miro, más siento que hay que estar alerta. Al principio creí que la curva era el precio público de la cadena: que todo el mundo puede ver y que cualquiera puede pedir prestado. Pero al leer la documentación encontré una frase: el que crea la orden puede usar el toggle para pausar, y luego volver a activarlo cuando el mercado esté adecuado. Me quedé helado: esa curva no es una promesa de préstamo válida en cualquier momento.
El diseño en sí no está mal. ¿Quién pediría dinero sin que le permitieran sentir miedo al riesgo? Si el mercado no está bien, es normal que te eches para atrás. Pero el problema se queda justo aquí: la tasa y el monto disponible que ve el prestatario pueden coincidir—solo en ese instante en que tú miras—con la liquidez que de verdad puede cerrar la operación. Como quien crea la orden tiene margen para gestionarlo de forma activa, el prestatario tiene que asumir la posibilidad de que su plan de financiación se interrumpa temporalmente.
Déjame imaginar la escena. Alguien mira la curva de la página, calcula los colaterales, completa el saldo, espera a que se confirme la transacción… y cuando vuelve a pedir prestado, la orden está en pausa. No hay liquidación, no hay fallos de contrato, ni siquiera alguien actúa con mala intención. Es simplemente que tú crees que ves una cotización, cuando en realidad es la disposición de la otra parte a retirarlo en cualquier momento.
Así que ahora, cuando abro un range order, no me quedo primero con lo bonita que queda la curva. Primero busco esto: ¿cuánta capacidad hay ahora? ¿cuándo se actualizó? ¿está encendido el interruptor de pausa? En serio, $TMX tiene que hacer que el prestatario pueda confiar en esas cuatro palabras: “ahora se puede pedir prestado”. Si el usuario todavía interpreta la curva histórica como fondos que le esperan, la transparencia todavía le falta un respiro.
Anoche, en el despacho, abrí el ordenador por primera vez y vi que en el ejemplo de Dusk Connect aparecía availableProviders[0]. Me llevé una sorpresa y me quedé con la mano a medias. Cuando se detectan varias carteras compatibles a la vez, y no existe providerId, el código puede escoger la primera; pero, para sugerir a la parte del producto, sigue siendo mejor que el usuario elija la cartera por sí mismo. Yo antes veía el descubrimiento de providers como una comodidad técnica para ahorrar trabajo de adaptación. Ahora pienso que también está asignando un poder muy concreto: si un dApp decide con qué cartera empieza el usuario, o si la elección se deja para antes de firmar. Para el equipo de carteras, el descubrimiento abierto evita que alguna extensión quede codificada de forma rígida como punto de entrada; para los usuarios, lo importante es si pueden ver por cuenta propia la cartera, la red y la cuenta que están seleccionadas en ese momento. El mal escenario no es exagerado. En el navegador hay dos carteras compatibles: una para activos de la red principal y otra para pruebas o para cuentas del equipo. Alguna aplicación, con el objetivo de ahorrarse un paso, selecciona automáticamente la primera; el usuario va haciendo clic hasta llegar a la página de firma y entonces descubre que la cuenta no es la correcta. Que la transacción se rechace todavía es suerte; lo peor es cuando el usuario completa una autorización que no debía en un entorno equivocado, y después solo recuerda: “Dusk Wallet se conectó al lugar equivocado”. El costo lo asumen el usuario y el soporte técnico, mientras que quien tomó la decisión de selección automática muchas veces ni siquiera está presente. Por eso, ahora no considero el descubrimiento de múltiples carteras de Dusk Connect como una capacidad de interfaz meramente técnica.@Dusk lo que realmente hay que proteger es que, una vez hecho el descubrimiento, el derecho a elegir siga en manos del usuario.$DUSK cuantas más aplicaciones haya, más quiero ver que en la pantalla de conexión se muestren de forma clara el provider, la red y la cuenta, y que, cuando exista selección automática, se ofrezca una oportunidad de cambio visible.#dusk
El momento en que los activos regulados más perjudican al usuario 😅: no es que se rechace la operación, sino que después del rechazo nadie aclara con claridad dónde está el error. Vi en la página de Assets & Regulations de @Dusk que la verificación de transferencias aparece como un requisito independiente: si falla, debe indicarse una razón explícita, y además es mejor simular o comprobar antes de enviarlo. Este detalle convierte el “acceso” de un pase de entrada único en una regla que sigue aplicándose a cada transferencia. Los criterios que figuran en la documentación no son abstractos: quién puede tener el activo, quién puede recibirlo y qué transferencias deben fallar cambian según la categoría del activo, el lugar o la jurisdicción. Para el emisor, las reglas reducen el riesgo de desajuste; para el inversor, lo realmente importante es saber antes de confirmar si lo van a frenar y, de forma concreta, por qué se le limita. Las situaciones de presión suelen ocurrir cuando el usuario cree que ya completó todo el proceso: la cuenta pasa las comprobaciones previas de elegibilidad, pero al transferir a otra dirección recibe un mensaje de fallo ambiguo. El activo quizá no se pierda y la cadena quizá no presente anomalías, pero el usuario primero atribuirá el problema a la plataforma, y el soporte tendrá que explicar manualmente una restricción que debería haberse mostrado con antelación. La ventaja de <$DUSK > no es lograr que todas las transferencias salgan adelante, sino que los rechazos necesarios puedan predecirse y explicarse antes de firmar. <@Dusk > Lo que de verdad debería verificarse después es si la aplicación puede poner, antes de firmar, las reglas, los resultados de la simulación y las razones del fallo, en lugar de dejarlas para después de enviar la transacción. <#dusk >
Antes pensaba que “la pausa automática por saldo insuficiente” era una mala experiencia, pero después de leer el informe de reconstrucción del incidente de puente con el código de enlace @Dusk entendí que, si se pausa antes, tal vez sea más bien una forma de hacerse responsable de los activos. El informe está escrito de manera muy directa: el nuevo puente deja el saldo mínimo operativo únicamente en el extremo del firmante; si baja del umbral, se detiene, y solo se reanuda después de que la billetera fría se reponga manualmente. El puente anterior ponía la firma, el manejo de eventos y la conexión de red en la misma ruta; tras un acceso no autorizado a la billetera de firma, el atacante no necesitaba tocar el consenso de Dusk para poder usar el dinero dentro del puente. Este umbral no es un simple interruptor de límites. Si el servicio entre cadenas se encarga de transportar los activos del usuario, no puede poner “que el servicio no se detenga” por delante de “poner más dinero en caliente”. La parte operativa obtiene una ventana de pérdidas menor; para los usuarios que esperan la migración, el costo que pagan es un tiempo real. Cuando hay volatilidad de mercado, muchos usuarios migran al mismo tiempo. Si el puente se pausa por tener un saldo bajo, la transacción del usuario quizá no falle, pero podría quedar atascada en una cola mientras espera el reabastecimiento. Si la página solo muestra “en mantenimiento”, el usuario no puede distinguir si el dinero no llegó, si la solicitud no se procesó, o si el sistema activó de forma proactiva un control de riesgos. Estoy de acuerdo con que $DUSK haya cedido parte de la disponibilidad a la separación y la contención, pero eso no significa que el riesgo del puente ya haya desaparecido. Para comprobar si esta reconstrución funcionó, hay que ver si @Dusk puede seguir publicando el número de pausas, cuánto tiempo tarda en reanudar y cómo se terminan limpiando las solicitudes acumuladas.#dusk
Hermanos🌝 Después de estudiarlo en serio, descubrí que apostar y canjear BTC es bastante engorroso. El tiempo de salida es extremadamente largo😠: canjear BTC requiere esperar una ventana de desafío de aproximadamente 3 días; no es algo que puedas resolver en “salida por ruta” en decenas de minutos. Además, al momento de pagar hay que pagar de más: como los intereses se acumulan de forma continua, el monto de la deuda que ves cambia cuando la transacción se empaqueta; debes devolver un poco más o, si no, la transacción falla, y te obliga a intentar repetidamente😓. Vi en la red de pruebas que el envío de vaultBTC revierte directamente; mi primera reacción fue que el monedero o el contrato tenía un problema. Luego entendí que el fallo en sí es parte de la regla: vaultBTC solo funciona dentro del proceso de depósito en una posición de Aave, y no es un “recibo” de BTC que puedas llevarte. El valor de un ERC-20 común suele venir de que, al cambiarlo de dirección, aún puedes seguir usándolo. vaultBTC es justo lo contrario: está restringido al flujo del contrato con permisos, no puedes transferirlo a otra billetera ni llevarlo a otros protocolos DeFi para seguir apostándolo. Lo que el usuario bloquea en la red de Bitcoin es BTC nativo; del lado de Ethereum, lo que se recibe es un registro que reconoce la relación de préstamo actual. Esta limitación le da al equipo una especie de certeza: el registro de depósito no se puede desarmar y sacar del control del usuario, y la posición tampoco puede perder de repente una parte de un activo rastreable. El costo que asume el prestatario es, en cambio, muy directo. Supongamos que de pronto aparece una oportunidad de préstamo más conveniente en el mercado: el usuario no puede mover vaultBTC como un activo normal; solo puede primero gestionar la posición original en Aave y luego salir siguiendo la ruta establecida. Por eso no voy a entender vaultBTC como un token de staking con liquidez; se parece más a un comprobante de depósito que solo funciona dentro del sistema de préstamos específico. Este diseño protege los límites de la posición, pero a la vez comprime la libertad de gestión de capital. @BabylonLabs_io En adelante, si se conectan más aplicaciones, lo más importante que deberían hacer público es el rango de uso de cada aplicación, los límites de las transferencias y las formas de salida. $BABY En la narrativa de BTCfi, al final, la historia tiene que enfrentarse a ese costo de liquidez. #baby