Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

orders: exchange-rate encoding panics on rate>1 and collapses same-rate mirrors to one OrderID

Abierto
#464 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
45/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
go
Área
backend

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

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de AssetMantle/modules

Todos los issues de AssetMantle/modules

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.