0xMiden / 0xMiden/docs

Comparisons and overflow/underflow on `Felt`

Đang mở
#202 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
enhancement
Ngôn ngữ chính
TypeScript
Star
10
Fork
50
Merge trung bình
22 ngày 23 giờ
Pull request đã merge (30 ngày)
1

Mô tả

## 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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.