orders: exchange-rate encoding panics on rate>1 and collapses same-rate mirrors to one OrderID
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 45/100
Línea de trabajo
Comienza con x/orders/transactions/make/message.go e immediate/message.go; después, sigue NewOrderID a través de qualified/base/immutables.go y DecData.Bytes. Reproduce tanto el caso rate>1 como los casos espejo con la misma tasa antes de elegir entre una codificación representable y una validación explícita. Se considera terminado cuando el comportamiento seleccionado está implementado, cubierto para ambos defectos y ya no provoca panics ni crea alias de órdenes legítimas.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Two related defects in the order exchange-rate encoding, both PRE-EXISTING and surfaced by the immediate-matcher review (rwa/phase3-identity-compliance).
A. Rate > 1 panics in OrderID derivation (user-reachable)
make/put/immediate store exchangeRate = takerSplit / 1e-18 / makerSplit. When takerSplit > makerSplit the value exceeds LegacyMaxSortableDec (1e18), and NewOrderID -> Immutables.GenerateHashID -> DecData.Bytes -> LegacySortableDecBytes panics "dec must be within bounds". ValidateBasic only checks positivity (x/orders/transactions/make/message.go, immediate/message.go), so a normal user message with a sell price above 1:1 reaches the panic. baseapp recovers it (failed tx, not a halt), but it silently forbids all rate>1 orders.
B. Same-rate mirror shares an OrderID
Immutables.GenerateHashID (schema qualified/base/immutables.go) hashes each property's data ID and sorts them, ignoring the property key. Swapping MakerAssetID/TakerAssetID at the same rate/height/parties yields the same OrderID, so a legitimate counterparty at an identical rate is rejected as EntityAlreadyExists, and the immediate matcher must rely on rate differing to see a counterparty.
Proposed direction (needs a design decision)
Either (a) change the rate encoding so the full economic range is representable and hashable, or (b) explicitly reject rate>1 in ValidateBasic with a clear error (a cap, not a panic) and document the constraint. (B) is a footgun-removal; (A) is the real fix and touches schema hashing (wide blast radius).
Fix-priority scorecard
| SEC | UX | AUTO | YAGNI | DELTA | FIN |
|---|---|---|---|---|---|
| 40 | 55 | 35 | 45 | 40 | 43 |
- Lenguaje dominante
- Go
- Estrellas
- 21
- Forks
- 12
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de AssetMantle/modules
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
AssetMantle/modules#465 ·
-
Send Asset allows empty assetid in message/restQuizá libre de nuevo @deepanshutr la tomó hace 1135 días y no hay ningún pull request abierto. Abierto
AssetMantle/modules#426 · 1 asignado ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 20/100
AssetMantle/modules#387 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 30/100
AssetMantle/modules#386 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 20/100
AssetMantle/modules#384 ·
Todos los issues de AssetMantle/modules
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
yetone/magpie#4095 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
docs: Google Safe Browsing flags go-bonnie.dev as "deceptive" (pipe-to-shell install instructions)Abiertodocumentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 2 días
-
[Bug]: Telegram bot (v3.11.0): "Ban log" no longer sends the current 3xipl-banned.logPosiblemente ocupada @HamedSanaei la tomó hoy. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
MHSanaei/3x-ui#6990 · 1 comentario ·
Los mantenedores suelen responder en 3 días
-
bug(tool/internal/instrument): identical inject_code rules from two rule packages are applied twiceAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
open-telemetry/opentelemetry-go-compile-instrumentation#1611 ·
Los mantenedores suelen responder en 2 días