Skip to content

Commit 3d2edae

Browse files
committed
mina-tx-type: integrate currency types with ledger crate
Move currency types (Amount, Balance, Fee, Nonce, Slot, etc.) to mina-tx-type and have ledger crate re-export them. This includes: - Add mina-p2p-messages as dependency for type conversions - Add ark-ff dependency for field operations in Magnitude trait - Move From implementations for p2p message types to mina-tx-type - Move rand Distribution implementations to mina-tx-type - Update ledger/scan_state/currency.rs to re-export from mina-tx-type - Add extension traits (AmountToChecked, etc.) for checked conversions - Clean up unused imports across ledger crate - Add mina-tx-type to frontend Dockerfile for WASM builds
1 parent d806567 commit 3d2edae

File tree

24 files changed

+1555
-878
lines changed

24 files changed

+1555
-878
lines changed

Cargo.lock

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ COPY genesis_ledgers ./genesis_ledgers
6969
COPY ledger ./ledger
7070
COPY macros ./macros
7171
COPY mina-p2p-messages ./mina-p2p-messages
72+
COPY mina-tx-type ./mina-tx-type
7273
COPY node ./node
7374
COPY p2p ./p2p
7475
COPY poseidon ./poseidon

ledger/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ mina-macros = { workspace = true }
4343
mina-p2p-messages = { workspace = true }
4444
mina-poseidon = { workspace = true }
4545
mina-signer = { workspace = true }
46+
mina-tx-type = { workspace = true }
4647
num-bigint = { workspace = true }
4748
o1-utils = { workspace = true }
4849
once_cell = { workspace = true }

ledger/src/account/common.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use crate::{
44
numbers::{
55
currency::{CheckedAmount, CheckedBalance},
66
nat::{CheckedSlot, CheckedSlotSpan},
7+
AmountToChecked, BalanceToChecked, SlotSpanToChecked, SlotToChecked,
78
},
89
to_field_elements::ToFieldElements,
910
},

ledger/src/proofs/block.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use crate::{
2828
wrap::{wrap, WrapParams},
2929
},
3030
scan_state::{
31-
currency,
31+
currency::{self, Magnitude},
3232
fee_excess::{self, FeeExcess},
3333
pending_coinbase::{PendingCoinbase, PendingCoinbaseWitness, Stack},
3434
protocol_state::MinaHash,
@@ -47,6 +47,7 @@ use super::{
4747
numbers::{
4848
currency::CheckedAmount,
4949
nat::{CheckedBlockTime, CheckedBlockTimeSpan, CheckedLength},
50+
AmountToChecked, LengthToChecked, SignedAmountToChecked,
5051
},
5152
step::{step, InductiveRule, OptFlag, PreviousProofStatement, StepParams, StepProof},
5253
to_field_elements::ToFieldElements,

ledger/src/proofs/merge.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use crate::{
2323
use super::{
2424
constants::WrapMergeProof,
2525
field::{Boolean, CircuitVar, FieldWitness},
26+
numbers::{SignedAmountToChecked, SignedFeeToChecked},
2627
public_input::plonk_checks::PlonkMinimal,
2728
step::{
2829
extract_recursion_challenges, InductiveRule, OptFlag, PreviousProofStatement, StepProof,

ledger/src/proofs/numbers/currency.rs

Lines changed: 73 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -510,22 +510,6 @@ macro_rules! impl_currency {
510510
}
511511
}
512512

513-
impl $unchecked {
514-
pub fn to_checked<F: FieldWitness>(&self) -> $name<F> {
515-
$name::from_inner(*self)
516-
}
517-
}
518-
519-
impl Signed<$unchecked> {
520-
pub fn to_checked<F: FieldWitness>(&self) -> CheckedSigned<F, $name<F>> {
521-
CheckedSigned {
522-
magnitude: self.magnitude.to_checked(),
523-
sgn: CircuitVar::Var(self.sgn),
524-
value: Cell::new(None),
525-
}
526-
}
527-
}
528-
529513
impl<F: FieldWitness> ForZkappCheck<F> for $unchecked {
530514
type CheckedType = $name<F>;
531515
fn checked_from_field(field: F) -> Self::CheckedType {
@@ -543,3 +527,76 @@ impl_currency!(
543527
{CheckedFee, Fee},
544528
{CheckedBalance, Balance}
545529
);
530+
531+
// Extension traits for to_checked conversion
532+
pub trait AmountToChecked {
533+
fn to_checked<F: FieldWitness>(&self) -> CheckedAmount<F>;
534+
}
535+
536+
impl AmountToChecked for Amount {
537+
fn to_checked<F: FieldWitness>(&self) -> CheckedAmount<F> {
538+
CheckedAmount::from_inner(*self)
539+
}
540+
}
541+
542+
pub trait FeeToChecked {
543+
fn to_checked<F: FieldWitness>(&self) -> CheckedFee<F>;
544+
}
545+
546+
impl FeeToChecked for Fee {
547+
fn to_checked<F: FieldWitness>(&self) -> CheckedFee<F> {
548+
CheckedFee::from_inner(*self)
549+
}
550+
}
551+
552+
pub trait BalanceToChecked {
553+
fn to_checked<F: FieldWitness>(&self) -> CheckedBalance<F>;
554+
}
555+
556+
impl BalanceToChecked for Balance {
557+
fn to_checked<F: FieldWitness>(&self) -> CheckedBalance<F> {
558+
CheckedBalance::from_inner(*self)
559+
}
560+
}
561+
562+
pub trait SignedAmountToChecked {
563+
fn to_checked<F: FieldWitness>(&self) -> CheckedSigned<F, CheckedAmount<F>>;
564+
}
565+
566+
impl SignedAmountToChecked for Signed<Amount> {
567+
fn to_checked<F: FieldWitness>(&self) -> CheckedSigned<F, CheckedAmount<F>> {
568+
CheckedSigned {
569+
magnitude: AmountToChecked::to_checked::<F>(&self.magnitude),
570+
sgn: CircuitVar::Var(self.sgn),
571+
value: Cell::new(None),
572+
}
573+
}
574+
}
575+
576+
pub trait SignedFeeToChecked {
577+
fn to_checked<F: FieldWitness>(&self) -> CheckedSigned<F, CheckedFee<F>>;
578+
}
579+
580+
impl SignedFeeToChecked for Signed<Fee> {
581+
fn to_checked<F: FieldWitness>(&self) -> CheckedSigned<F, CheckedFee<F>> {
582+
CheckedSigned {
583+
magnitude: FeeToChecked::to_checked::<F>(&self.magnitude),
584+
sgn: CircuitVar::Var(self.sgn),
585+
value: Cell::new(None),
586+
}
587+
}
588+
}
589+
590+
pub trait SignedBalanceToChecked {
591+
fn to_checked<F: FieldWitness>(&self) -> CheckedSigned<F, CheckedBalance<F>>;
592+
}
593+
594+
impl SignedBalanceToChecked for Signed<Balance> {
595+
fn to_checked<F: FieldWitness>(&self) -> CheckedSigned<F, CheckedBalance<F>> {
596+
CheckedSigned {
597+
magnitude: BalanceToChecked::to_checked::<F>(&self.magnitude),
598+
sgn: CircuitVar::Var(self.sgn),
599+
value: Cell::new(None),
600+
}
601+
}
602+
}

ledger/src/proofs/numbers/mod.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
11
pub mod common;
22
pub mod currency;
33
pub mod nat;
4+
5+
// Re-export extension traits for to_checked conversion
6+
pub use currency::{
7+
AmountToChecked, BalanceToChecked, FeeToChecked, SignedAmountToChecked, SignedBalanceToChecked,
8+
SignedFeeToChecked,
9+
};
10+
pub use nat::{
11+
BlockTimeSpanToChecked, BlockTimeToChecked, IndexToChecked, LengthToChecked, NonceToChecked,
12+
SlotSpanToChecked, SlotToChecked, TxnVersionToChecked,
13+
};

ledger/src/proofs/numbers/nat.rs

Lines changed: 83 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ impl CheckedSlot<Fp> {
204204
w: &mut Witness<Fp>,
205205
) -> Boolean {
206206
// constant
207-
let c = |n: u32| Length::from_u32(n).to_checked();
207+
let c = |n: u32| LengthToChecked::to_checked::<Fp>(&Length::from_u32(n));
208208
let third_epoch = {
209209
let (q, _r) = constants.slots_per_epoch.div_mod(&c(3), w);
210210
q
@@ -260,12 +260,6 @@ macro_rules! impl_nat {
260260
}
261261
}
262262

263-
impl $unchecked {
264-
pub fn to_checked<F: FieldWitness>(&self) -> $name<F> {
265-
$name::from_inner(*self)
266-
}
267-
}
268-
269263
impl<F: FieldWitness> ForZkappCheck<F> for $unchecked {
270264
type CheckedType = $name<F>;
271265
fn checked_from_field(field: F) -> Self::CheckedType {
@@ -349,3 +343,85 @@ impl<F: FieldWitness> CheckedN32<F> {
349343
Self::from_field(n.into())
350344
}
351345
}
346+
347+
// Extension traits for to_checked conversion
348+
349+
pub trait TxnVersionToChecked {
350+
fn to_checked<F: FieldWitness>(&self) -> CheckedTxnVersion<F>;
351+
}
352+
353+
impl TxnVersionToChecked for TxnVersion {
354+
fn to_checked<F: FieldWitness>(&self) -> CheckedTxnVersion<F> {
355+
CheckedTxnVersion::from_inner(*self)
356+
}
357+
}
358+
359+
pub trait SlotToChecked {
360+
fn to_checked<F: FieldWitness>(&self) -> CheckedSlot<F>;
361+
}
362+
363+
impl SlotToChecked for Slot {
364+
fn to_checked<F: FieldWitness>(&self) -> CheckedSlot<F> {
365+
CheckedSlot::from_inner(*self)
366+
}
367+
}
368+
369+
pub trait SlotSpanToChecked {
370+
fn to_checked<F: FieldWitness>(&self) -> CheckedSlotSpan<F>;
371+
}
372+
373+
impl SlotSpanToChecked for SlotSpan {
374+
fn to_checked<F: FieldWitness>(&self) -> CheckedSlotSpan<F> {
375+
CheckedSlotSpan::from_inner(*self)
376+
}
377+
}
378+
379+
pub trait LengthToChecked {
380+
fn to_checked<F: FieldWitness>(&self) -> CheckedLength<F>;
381+
}
382+
383+
impl LengthToChecked for Length {
384+
fn to_checked<F: FieldWitness>(&self) -> CheckedLength<F> {
385+
CheckedLength::from_inner(*self)
386+
}
387+
}
388+
389+
pub trait NonceToChecked {
390+
fn to_checked<F: FieldWitness>(&self) -> CheckedNonce<F>;
391+
}
392+
393+
impl NonceToChecked for Nonce {
394+
fn to_checked<F: FieldWitness>(&self) -> CheckedNonce<F> {
395+
CheckedNonce::from_inner(*self)
396+
}
397+
}
398+
399+
pub trait IndexToChecked {
400+
fn to_checked<F: FieldWitness>(&self) -> CheckedIndex<F>;
401+
}
402+
403+
impl IndexToChecked for Index {
404+
fn to_checked<F: FieldWitness>(&self) -> CheckedIndex<F> {
405+
CheckedIndex::from_inner(*self)
406+
}
407+
}
408+
409+
pub trait BlockTimeToChecked {
410+
fn to_checked<F: FieldWitness>(&self) -> CheckedBlockTime<F>;
411+
}
412+
413+
impl BlockTimeToChecked for BlockTime {
414+
fn to_checked<F: FieldWitness>(&self) -> CheckedBlockTime<F> {
415+
CheckedBlockTime::from_inner(*self)
416+
}
417+
}
418+
419+
pub trait BlockTimeSpanToChecked {
420+
fn to_checked<F: FieldWitness>(&self) -> CheckedBlockTimeSpan<F>;
421+
}
422+
423+
impl BlockTimeSpanToChecked for BlockTimeSpan {
424+
fn to_checked<F: FieldWitness>(&self) -> CheckedBlockTimeSpan<F> {
425+
CheckedBlockTimeSpan::from_inner(*self)
426+
}
427+
}

ledger/src/proofs/transaction.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ use crate::{
5252
use super::{
5353
constants::ProofConstants,
5454
field::{field, Boolean, CircuitVar, FieldWitness, GroupAffine, ToBoolean},
55+
numbers::{
56+
AmountToChecked, BalanceToChecked, FeeToChecked, NonceToChecked, SignedAmountToChecked,
57+
SignedFeeToChecked, SlotToChecked,
58+
},
5559
public_input::messages::{dummy_ipa_step_sg, MessagesForNextWrapProof},
5660
step,
5761
step::{InductiveRule, OptFlag, StepProof},

0 commit comments

Comments
 (0)