11use anyhow:: Result ;
22use ark_poly:: { EvaluationDomain , Radix2EvaluationDomain } ;
33use clap:: Parser ;
4- use mina_curves:: pasta:: { Fp , Vesta } ;
5- use poly_commitment:: { ipa:: SRS , SRS as _} ;
4+ use kimchi:: groupmap:: GroupMap ;
5+ use mina_curves:: pasta:: { Fp , Vesta , VestaParameters } ;
6+ use mina_poseidon:: { constants:: PlonkSpongeConstantsKimchi , sponge:: DefaultFqSponge } ;
7+ use poly_commitment:: { commitment:: CommitmentCurve , ipa:: SRS , SRS as _} ;
8+ use rand:: rngs:: OsRng ;
69use saffron:: {
710 blob:: FieldBlob ,
811 cli:: { self , HexString } ,
9- commitment, env, utils,
12+ commitment, env, proof , utils,
1013} ;
1114use sha3:: { Digest , Sha3_256 } ;
1215use std:: {
@@ -102,6 +105,24 @@ pub fn compute_commitment(args: cli::ComputeCommitmentArgs) -> Result<HexString>
102105 Ok ( HexString ( hash) )
103106}
104107
108+ pub fn storage_proof ( args : cli:: StorageProofArgs ) -> Result < HexString > {
109+ let file = File :: open ( args. input ) ?;
110+ let blob: FieldBlob < Vesta > = rmp_serde:: decode:: from_read ( file) ?;
111+ let proof =
112+ {
113+ let ( srs, _) = get_srs ( args. srs_cache ) ;
114+ let group_map = <Vesta as CommitmentCurve >:: Map :: setup ( ) ;
115+ let mut rng = OsRng ;
116+ let evaluation_point = utils:: encode ( & args. challenge . 0 ) ;
117+ proof:: storage_proof :: <
118+ Vesta ,
119+ DefaultFqSponge < VestaParameters , PlonkSpongeConstantsKimchi > ,
120+ > ( & srs, & group_map, blob, evaluation_point, & mut rng)
121+ } ;
122+ let bytes = rmp_serde:: to_vec ( & proof) . unwrap ( ) ;
123+ Ok ( HexString ( bytes) )
124+ }
125+
105126pub fn main ( ) -> Result < ( ) > {
106127 env:: init_console_subscriber ( ) ;
107128 let args = cli:: Commands :: parse ( ) ;
@@ -113,5 +134,10 @@ pub fn main() -> Result<()> {
113134 println ! ( "{}" , commitment) ;
114135 Ok ( ( ) )
115136 }
137+ cli:: Commands :: StorageProof ( args) => {
138+ let proof = storage_proof ( args) ?;
139+ println ! ( "{}" , proof) ;
140+ Ok ( ( ) )
141+ }
116142 }
117143}
0 commit comments