0xMiden / 0xMiden/docs

Comparisons and overflow/underflow on `Felt`

Abierto
#202 1 comentario 0 reacciones 0 asignados Ver en GitHub
enhancement
Lenguaje dominante
TypeScript
Estrellas
10
Forks
50
Merge medio
22 d 23 h
PR fusionados (30 d)
1

Descripción

## Felt Comparison
https://docs.miden.xyz/builder/tutorials/rust-compiler/miden-bank/constants-constraints#safe-felt-comparisons says:
> Never use `<`, `>`, `<=`, or `>=` operators directly on `Felt` values. They produce incorrect results due to field element ordering.

Is this still accurate? It looks like `miden_field::Felt` properly uses the built-in instructions for this which shouldn't produce "incorrect" results (I'm not sure what exactly we mean by that).

## Safe Arithmetic

Similarly, the miden bank tutorial has a large section on the dangers of underflows: https://docs.miden.xyz/builder/tutorials/rust-compiler/miden-bank/asset-management#step-2-add-the-withdraw-method-skeleton.

Ideally this would be easy for users to avoid, e.g. by implementing `checked*` arithmetic for the `miden_field::Felt` type , so users can easily do things like `current_balance.checked_sub(withdraw_amount).expect("insufficient balance")`.

If correct/agreed, we'd have to open an issue in `miden-crypto`.

An even safer alternative, at least for on-chain users, would be to let `impl Add for Felt` (and all such related impls) panic instead of wrap around. We'd implement `wrapping_add` and such instead for explicit use. In other words, it'd be ideal to follow the safe design of arithmetic functionality on the Rust primitive types and have `Felt::{wrapping_add, checked_add, overflowing_add, ...}`.

Maybe we could selectively do this only for the `miden_field::Felt` type in `wasm32`, which would be ideal to not have to touch the non-wasm parts, though even that might be doable.

cc @greenhat for thoughts

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Revise las secciones de documentación enlazadas sobre comparaciones de Felt y aritmética segura. Examine el tipo `miden_field::Felt` en el repositorio miden-crypto para comprender sus operadores de comparación e implementaciones aritméticas actuales. Determine si la documentación es precisa y si se necesitan cambios en el tipo de Rust (como agregar métodos `checked_*`), lo que requeriría abrir un issue en miden-crypto.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
rust, wasm
Área
backend, documentation
Tipo de issue
Documentación
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.