18
18
thiserror:: Error ,
19
19
} ;
20
20
21
- use crate :: codec:: { decode_vec, encode_slice, Decode , Encode } ;
21
+ use crate :: {
22
+ codec:: { decode_vec, encode_slice, Decode , Encode } ,
23
+ OPENVM_VERSION ,
24
+ } ;
22
25
23
26
/// Number of bytes in a Bn254Fr.
24
27
pub ( crate ) const BN254_BYTES : usize = 32 ;
@@ -72,6 +75,9 @@ pub struct ProofData {
72
75
#[ serde_as]
73
76
#[ derive( Clone , Debug , Deserialize , Serialize ) ]
74
77
pub struct EvmProof {
78
+ /// The openvm major and minor version v{}.{}. The proof format will not change on patch
79
+ /// versions.
80
+ pub version : String ,
75
81
#[ serde( flatten) ]
76
82
/// Bn254Fr public value app commits.
77
83
pub app_commit : AppExecutionCommit ,
@@ -108,6 +114,7 @@ impl EvmProof {
108
114
user_public_values,
109
115
app_commit,
110
116
proof_data,
117
+ version : _,
111
118
} = self ;
112
119
113
120
let ProofData { accumulator, proof } = proof_data;
@@ -171,6 +178,7 @@ impl TryFrom<RawEvmProof> for EvmProof {
171
178
} ;
172
179
173
180
Ok ( Self {
181
+ version : format ! ( "v{}" , OPENVM_VERSION ) ,
174
182
app_commit,
175
183
user_public_values,
176
184
proof_data : ProofData {
@@ -189,6 +197,7 @@ impl TryFrom<EvmProof> for RawEvmProof {
189
197
mut app_commit,
190
198
user_public_values,
191
199
proof_data,
200
+ version : _,
192
201
} = evm_openvm_proof;
193
202
194
203
app_commit. app_exe_commit . reverse ( ) ;
@@ -238,28 +247,32 @@ impl TryFrom<EvmProof> for RawEvmProof {
238
247
/// Struct purely for encoding and decoding of [VmStarkProof].
239
248
#[ serde_as]
240
249
#[ derive( Clone , Debug , Deserialize , Serialize ) ]
241
- pub struct VmStarkProofBytes {
250
+ pub struct VersionedVmStarkProof {
251
+ /// The openvm major and minor version v{}.{}. The proof format will not change on patch
252
+ /// versions.
253
+ pub version : String ,
242
254
#[ serde_as( as = "serde_with::hex::Hex" ) ]
243
255
pub user_public_values : Vec < u8 > ,
244
256
#[ serde_as( as = "serde_with::hex::Hex" ) ]
245
257
pub proof : Vec < u8 > ,
246
258
}
247
259
248
- impl VmStarkProofBytes {
260
+ impl VersionedVmStarkProof {
249
261
pub fn new ( proof : VmStarkProof < SC > ) -> Result < Self > {
250
262
let mut user_public_values = Vec :: new ( ) ;
251
263
encode_slice ( & proof. user_public_values , & mut user_public_values) ?;
252
264
Ok ( Self {
265
+ version : format ! ( "v{}" , OPENVM_VERSION ) ,
253
266
user_public_values,
254
267
proof : proof. inner . encode_to_vec ( ) ?,
255
268
} )
256
269
}
257
270
}
258
271
259
- impl TryFrom < VmStarkProofBytes > for VmStarkProof < SC > {
272
+ impl TryFrom < VersionedVmStarkProof > for VmStarkProof < SC > {
260
273
type Error = std:: io:: Error ;
261
- fn try_from ( proof : VmStarkProofBytes ) -> Result < Self , std:: io:: Error > {
262
- let VmStarkProofBytes {
274
+ fn try_from ( proof : VersionedVmStarkProof ) -> Result < Self , std:: io:: Error > {
275
+ let VersionedVmStarkProof {
263
276
proof,
264
277
user_public_values,
265
278
..
0 commit comments