Skip to content

Commit b496644

Browse files
committed
Add error + backtrace to failed_block_proof_input_HASH.binprot
1 parent b08c599 commit b496644

File tree

15 files changed

+142
-125
lines changed

15 files changed

+142
-125
lines changed

Cargo.lock

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

ledger/src/proofs/block.rs

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::{rc::Rc, sync::Arc};
22

3+
use anyhow::Context;
34
use ark_ff::fields::arithmetic::InvalidBigInt;
45
use consensus::ConsensusState;
56
use mina_curves::pasta::Fq;
@@ -51,7 +52,7 @@ use super::{
5152
},
5253
step::{step, InductiveRule, OptFlag, PreviousProofStatement, StepParams, StepProof},
5354
to_field_elements::ToFieldElements,
54-
transaction::{transaction_snark::checked_hash, Check, ProofError, Prover},
55+
transaction::{transaction_snark::checked_hash, Check, Prover},
5556
witness::Witness,
5657
wrap::WrapProof,
5758
};
@@ -195,7 +196,7 @@ impl Check<Fp> for ProtocolState {
195196
fn ledger_proof_opt(
196197
proof: Option<&v2::LedgerProofProdStableV2>,
197198
next_state: &v2::MinaStateProtocolStateValueStableV2,
198-
) -> Result<(Statement<SokDigest>, Arc<v2::TransactionSnarkProofStableV2>), InvalidBigInt> {
199+
) -> anyhow::Result<(Statement<SokDigest>, Arc<v2::TransactionSnarkProofStableV2>)> {
199200
match proof {
200201
Some(proof) => {
201202
let statement: Statement<SokDigest> = (&proof.0.statement).try_into()?;
@@ -216,7 +217,7 @@ fn ledger_proof_opt(
216217
fn checked_hash_protocol_state(
217218
state: &ProtocolState,
218219
w: &mut Witness<Fp>,
219-
) -> Result<(Fp, Fp), InvalidBigInt> {
220+
) -> anyhow::Result<(Fp, Fp)> {
220221
let ProtocolState {
221222
previous_state_hash,
222223
body,
@@ -499,7 +500,7 @@ mod floating_point {
499500
res
500501
}
501502

502-
pub fn constant(value: &BigInteger256, precision: usize) -> Result<Self, InvalidBigInt> {
503+
pub fn constant(value: &BigInteger256, precision: usize) -> anyhow::Result<Self> {
503504
Ok(Self {
504505
value: (*value).try_into()?,
505506
precision,
@@ -714,7 +715,7 @@ mod vrf {
714715
message: Message,
715716
prover_state: &v2::ConsensusStakeProofStableV2,
716717
w: &mut Witness<Fp>,
717-
) -> Result<(Fp, Box<crate::Account>), InvalidBigInt> {
718+
) -> anyhow::Result<(Fp, Box<crate::Account>)> {
718719
let private_key = prover_state.producer_private_key.to_field::<Fq>()?;
719720
let private_key = w.exists(field_to_bits::<Fq, 255>(private_key));
720721

@@ -779,15 +780,12 @@ mod vrf {
779780
seed: Fp,
780781
prover_state: &v2::ConsensusStakeProofStableV2,
781782
w: &mut Witness<Fp>,
782-
) -> Result<
783-
(
784-
Boolean,
785-
Fp,
786-
Box<[bool; VRF_OUTPUT_NBITS]>,
787-
Box<crate::Account>,
788-
),
789-
InvalidBigInt,
790-
> {
783+
) -> anyhow::Result<(
784+
Boolean,
785+
Fp,
786+
Box<[bool; VRF_OUTPUT_NBITS]>,
787+
Box<crate::Account>,
788+
)> {
791789
let (winner_addr, winner_addr_bits) = {
792790
const LEDGER_DEPTH: usize = 35;
793791
assert_eq!(constraint_constants().ledger_depth, LEDGER_DEPTH as u64);
@@ -1283,7 +1281,7 @@ pub mod consensus {
12831281
supply_increase: CheckedSigned<Fp, CheckedAmount<Fp>>,
12841282
prover_state: &v2::ConsensusStakeProofStableV2,
12851283
w: &mut Witness<Fp>,
1286-
) -> Result<(Boolean, CheckedConsensusState), InvalidBigInt> {
1284+
) -> anyhow::Result<(Boolean, CheckedConsensusState)> {
12871285
let previous_blockchain_state_ledger_hash = prev_state
12881286
.body
12891287
.blockchain_state
@@ -1535,7 +1533,7 @@ fn genesis_state_hash_checked(
15351533
state_hash: Fp,
15361534
state: &ProtocolState,
15371535
w: &mut Witness<Fp>,
1538-
) -> Result<Fp, InvalidBigInt> {
1536+
) -> anyhow::Result<Fp> {
15391537
let is_genesis = is_genesis_state_var(&state.body.consensus_state, w);
15401538

15411539
Ok(w.exists_no_check(match is_genesis {
@@ -1608,7 +1606,7 @@ fn protocol_create_var(
16081606
fn block_main<'a>(
16091607
params: BlockMainParams<'a>,
16101608
w: &mut Witness<Fp>,
1611-
) -> Result<(Fp, [PreviousProofStatement<'a>; 2]), InvalidBigInt> {
1609+
) -> anyhow::Result<(Fp, [PreviousProofStatement<'a>; 2])> {
16121610
let BlockMainParams {
16131611
transition,
16141612
prev_state,
@@ -1835,7 +1833,7 @@ const BLOCK_N_PREVIOUS_PROOFS: usize = 2;
18351833
pub(super) fn generate_block_proof(
18361834
params: BlockParams,
18371835
w: &mut Witness<Fp>,
1838-
) -> Result<WrapProof, ProofError> {
1836+
) -> anyhow::Result<WrapProof> {
18391837
let BlockParams {
18401838
input:
18411839
v2::ProverExtendBlockchainInputStableV2 {
@@ -1855,7 +1853,7 @@ pub(super) fn generate_block_proof(
18551853
} = params;
18561854

18571855
let (txn_snark_statement, txn_snark_proof) =
1858-
ledger_proof_opt(ledger_proof.as_deref(), next_state)?;
1856+
ledger_proof_opt(ledger_proof.as_deref(), next_state).context("ledger_proof_opt")?;
18591857
let prev_state_proof = &chain.proof;
18601858

18611859
let (new_state_hash, previous_proof_statements) = block_main(
@@ -1870,10 +1868,12 @@ pub(super) fn generate_block_proof(
18701868
pending_coinbase,
18711869
},
18721870
w,
1873-
)?;
1871+
)
1872+
.context("block_main")?;
18741873

18751874
let prev_challenge_polynomial_commitments =
1876-
extract_recursion_challenges(&[prev_state_proof, &txn_snark_proof])?;
1875+
extract_recursion_challenges(&[prev_state_proof, &txn_snark_proof])
1876+
.context("extract_recursion_challenges")?;
18771877

18781878
let rule = InductiveRule {
18791879
previous_proof_statements,
@@ -1918,7 +1918,8 @@ pub(super) fn generate_block_proof(
19181918
only_verify_constraints,
19191919
},
19201920
w,
1921-
)?;
1921+
)
1922+
.context("step")?;
19221923

19231924
if let Some(expected) = expected_step_proof {
19241925
let proof_json = serde_json::to_vec(&proof.proof).unwrap();
@@ -1943,4 +1944,5 @@ pub(super) fn generate_block_proof(
19431944
},
19441945
&mut w,
19451946
)
1947+
.context("wrap")
19461948
}

ledger/src/proofs/merge.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ use super::{
2929
step::{
3030
extract_recursion_challenges, InductiveRule, OptFlag, PreviousProofStatement, StepProof,
3131
},
32-
transaction::{PlonkVerificationKeyEvals, ProofError, Prover},
32+
transaction::{PlonkVerificationKeyEvals, Prover},
3333
util::two_u64_to_field,
3434
witness::Witness,
3535
wrap::WrapProof,
@@ -39,7 +39,7 @@ fn merge_main(
3939
statement: &Statement<SokDigest>,
4040
proofs: &[v2::LedgerProofProdStableV2; 2],
4141
w: &mut Witness<Fp>,
42-
) -> Result<(Statement<SokDigest>, Statement<SokDigest>), InvalidBigInt> {
42+
) -> anyhow::Result<(Statement<SokDigest>, Statement<SokDigest>)> {
4343
let (s1, s2) = w.exists({
4444
let [p1, p2] = proofs;
4545
let (s1, s2) = (&p1.0.statement, &p2.0.statement);
@@ -216,7 +216,7 @@ const MERGE_N_PREVIOUS_PROOFS: usize = 2;
216216
pub(super) fn generate_merge_proof(
217217
params: MergeParams,
218218
w: &mut Witness<Fp>,
219-
) -> Result<WrapProof, ProofError> {
219+
) -> anyhow::Result<WrapProof> {
220220
let MergeParams {
221221
statement,
222222
proofs,

ledger/src/proofs/mod.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,21 +46,17 @@ pub type ProverProof<F> = kimchi::proof::ProverProof<
4646

4747
pub fn generate_tx_proof(
4848
params: transaction::TransactionParams,
49-
) -> Result<wrap::WrapProof, transaction::ProofError> {
49+
) -> anyhow::Result<wrap::WrapProof> {
5050
use {mina_hasher::Fp, witness::Witness};
5151
let mut w: Witness<Fp> = Witness::new::<constants::StepTransactionProof>();
5252
transaction::generate_tx_proof(params, &mut w)
5353
}
54-
pub fn generate_merge_proof(
55-
params: merge::MergeParams,
56-
) -> Result<wrap::WrapProof, transaction::ProofError> {
54+
pub fn generate_merge_proof(params: merge::MergeParams) -> anyhow::Result<wrap::WrapProof> {
5755
use {mina_hasher::Fp, witness::Witness};
5856
let mut w: Witness<Fp> = Witness::new::<constants::StepMergeProof>();
5957
merge::generate_merge_proof(params, &mut w)
6058
}
61-
pub fn generate_block_proof(
62-
params: block::BlockParams,
63-
) -> Result<wrap::WrapProof, transaction::ProofError> {
59+
pub fn generate_block_proof(params: block::BlockParams) -> anyhow::Result<wrap::WrapProof> {
6460
use {mina_hasher::Fp, witness::Witness};
6561
let mut w: Witness<Fp> = Witness::new::<constants::StepBlockProof>();
6662
block::generate_block_proof(params, &mut w)

ledger/src/proofs/prover.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use std::{borrow::Cow, str::FromStr};
22

3-
use ark_ff::fields::arithmetic::InvalidBigInt;
43
use kimchi::{
54
poly_commitment::PolyComm,
65
proof::{PointEvaluations, ProofEvaluations, ProverCommitments, RecursionChallenge},
@@ -37,11 +36,12 @@ pub fn make_padded_proof_from_p2p(
3736
prev_evals: _, // unused
3837
proof,
3938
}: &PicklesProofProofsVerified2ReprStableV2,
40-
) -> Result<ProverProof<Fq>, InvalidBigInt> {
41-
let of_coord =
42-
|(a, b): &(BigInt, BigInt)| Ok(Pallas::of_coordinates(a.to_field()?, b.to_field()?));
39+
) -> anyhow::Result<ProverProof<Fq>> {
40+
let of_coord = |(a, b): &(BigInt, BigInt)| -> anyhow::Result<_> {
41+
Ok(Pallas::of_coordinates(a.to_field()?, b.to_field()?))
42+
};
4343

44-
let make_poly = |poly: &(BigInt, BigInt)| {
44+
let make_poly = |poly: &(BigInt, BigInt)| -> anyhow::Result<_> {
4545
Ok(PolyComm {
4646
elems: vec![of_coord(poly)?],
4747
})
@@ -66,7 +66,7 @@ pub fn make_padded_proof_from_p2p(
6666
let lr: Vec<(Pallas, Pallas)> = lr
6767
.iter()
6868
.map(|(a, b)| Ok((of_coord(a)?, of_coord(b)?)))
69-
.collect::<Result<_, _>>()?;
69+
.collect::<anyhow::Result<_>>()?;
7070

7171
let delta: Pallas = of_coord(&bulletproof.delta)?;
7272
let z1: Fq = bulletproof.z_1.to_field()?;
@@ -83,7 +83,7 @@ pub fn make_padded_proof_from_p2p(
8383
// };
8484

8585
// let to_fields = |x: &Vec<BigInt>| x.iter().map(BigInt::to_field).collect();
86-
let to_pt_eval = |(first, second): &(BigInt, BigInt)| {
86+
let to_pt_eval = |(first, second): &(BigInt, BigInt)| -> anyhow::Result<_> {
8787
Ok(PointEvaluations {
8888
zeta: vec![first.to_field::<Fq>()?],
8989
zeta_omega: vec![second.to_field::<Fq>()?],
@@ -130,7 +130,7 @@ pub fn make_padded_proof_from_p2p(
130130
old_bulletproof_challenges.0[1].0.clone(),
131131
]);
132132

133-
let make_poly = |poly: &(BigInt, BigInt)| {
133+
let make_poly = |poly: &(BigInt, BigInt)| -> anyhow::Result<_> {
134134
let point = of_coord(poly)?;
135135
Ok(PolyComm { elems: vec![point] })
136136
};

ledger/src/proofs/public_input/prepared_statement.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use ark_ff::{fields::arithmetic::InvalidBigInt, BigInteger256, Zero};
1+
use ark_ff::{BigInteger256, Zero};
22
use mina_curves::pasta::Fq;
33
use mina_hasher::Fp;
44
use mina_p2p_messages::v2::{
@@ -51,7 +51,7 @@ pub struct PreparedStatement {
5151
impl PreparedStatement {
5252
/// Implementation of `tock_unpadded_public_input_of_statement`
5353
/// https://github.com/MinaProtocol/mina/blob/32a91613c388a71f875581ad72276e762242f802/src/lib/pickles/common.ml#L202
54-
pub fn to_public_input(&self, npublic_input: usize) -> Result<Vec<Fq>, InvalidBigInt> {
54+
pub fn to_public_input(&self, npublic_input: usize) -> anyhow::Result<Vec<Fq>> {
5555
let PreparedStatement {
5656
proof_state:
5757
ProofState {
@@ -186,7 +186,7 @@ impl PreparedStatement {
186186
&self,
187187
hack_feature_flags: OptFlag,
188188
npublic_input: usize,
189-
) -> Result<Vec<Packed>, InvalidBigInt> {
189+
) -> anyhow::Result<Vec<Packed>> {
190190
let PreparedStatement {
191191
proof_state:
192192
ProofState {

0 commit comments

Comments
 (0)