Skip to content

Commit d579010

Browse files
apollo_proof_manager: impl ProofStorage
1 parent 72c429f commit d579010

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

crates/apollo_proof_manager/src/proof_storage.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,31 @@ impl FsProofStorage {
123123

124124
Ok(Proof(Arc::new(proof_data)))
125125
}
126+
127+
fn write_proof_atomically(&self, facts_hash: Felt, proof: Proof) -> FsProofStorageResult<()> {
128+
// Write proof to a temporary directory.
129+
let (_tmp_root, tmp_dir) = self.create_tmp_dir(facts_hash)?;
130+
self.write_proof_to_file(facts_hash, proof)?;
131+
132+
// Atomically rename directory to persistent one.
133+
let persistent_dir = self.get_persistent_dir_with_create(facts_hash)?;
134+
std::fs::rename(tmp_dir, persistent_dir)?;
135+
Ok(())
136+
}
137+
}
138+
139+
impl ProofStorage for FsProofStorage {
140+
type Error = FsProofStorageError;
141+
142+
fn set_proof(&self, facts_hash: Felt, proof: Proof) -> Result<(), Self::Error> {
143+
self.write_proof_atomically(facts_hash, proof)?;
144+
Ok(())
145+
}
146+
147+
fn get_proof(&self, facts_hash: Felt) -> Result<Option<Proof>, Self::Error> {
148+
match self.read_proof_from_file(facts_hash) {
149+
Ok(proof) => Ok(Some(proof)),
150+
Err(e) => Err(e),
151+
}
152+
}
126153
}

0 commit comments

Comments
 (0)