Skip to content

Commit ea28380

Browse files
authored
Merge pull request #3034 from ljedrz/perf/faster_db_deser
[Perf] More unchecked deserialization from the DB
2 parents e79ed9e + b638139 commit ea28380

File tree

12 files changed

+70
-5
lines changed

12 files changed

+70
-5
lines changed

algorithms/src/polycommit/sonic_pc/data_structures.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,11 @@ impl<E: PairingEngine> FromBytes for BatchLCProof<E> {
686686
CanonicalDeserialize::deserialize_compressed(&mut reader)
687687
.map_err(|err| into_io_error(anyhow::Error::from(err).context("could not deserialize struct")))
688688
}
689+
690+
fn read_le_unchecked<R: Read>(mut reader: R) -> io::Result<Self> {
691+
CanonicalDeserialize::deserialize_compressed_unchecked(&mut reader)
692+
.map_err(|err| into_io_error(anyhow::Error::from(err).context("could not deserialize struct")))
693+
}
689694
}
690695

691696
impl<E: PairingEngine> ToBytes for BatchLCProof<E> {

algorithms/src/snark/varuna/data_structures/certificate.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,9 @@ impl<E: PairingEngine> FromBytes for Certificate<E> {
4444
Self::deserialize_compressed(&mut r)
4545
.map_err(|err| into_io_error(anyhow::Error::from(err).context("Failed to deserialize certificate")))
4646
}
47+
48+
fn read_le_unchecked<R: Read>(mut r: R) -> io::Result<Self> {
49+
Self::deserialize_compressed_unchecked(&mut r)
50+
.map_err(|err| into_io_error(anyhow::Error::from(err).context("Failed to deserialize certificate")))
51+
}
4752
}

algorithms/src/snark/varuna/data_structures/circuit_verifying_key.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ impl<E: PairingEngine> FromBytes for CircuitVerifyingKey<E> {
4343
Self::deserialize_compressed(r)
4444
.map_err(|err| into_io_error(anyhow::Error::from(err).context("could not deserialize CircuitVerifyingKey")))
4545
}
46+
47+
fn read_le_unchecked<R: Read>(r: R) -> io::Result<Self> {
48+
Self::deserialize_compressed_unchecked(r)
49+
.map_err(|err| into_io_error(anyhow::Error::from(err).context("could not deserialize CircuitVerifyingKey")))
50+
}
4651
}
4752

4853
impl<E: PairingEngine> ToBytes for CircuitVerifyingKey<E> {

algorithms/src/snark/varuna/data_structures/proof.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,11 @@ impl<E: PairingEngine> FromBytes for Proof<E> {
379379
Self::deserialize_compressed(&mut r)
380380
.map_err(|err| into_io_error(anyhow::Error::from(err).context("could not deserialize Proof")))
381381
}
382+
383+
fn read_le_unchecked<R: Read>(mut r: R) -> io::Result<Self> {
384+
Self::deserialize_compressed_unchecked(&mut r)
385+
.map_err(|err| into_io_error(anyhow::Error::from(err).context("could not deserialize Proof")))
386+
}
382387
}
383388

384389
/// Computes the size in bytes of a Varuna proof as produced by

ledger/authority/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ use console::{
3434
Error,
3535
Formatter,
3636
FromBytes,
37-
FromBytesDeserializer,
37+
FromBytesUncheckedDeserializer,
3838
FromStr,
3939
IoResult,
4040
Read,

ledger/authority/src/serialize.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ impl<'de, N: Network> Deserialize<'de> for Authority<N> {
5959
_ => Err(de::Error::custom(error("Invalid authority type"))),
6060
}
6161
}
62-
false => FromBytesDeserializer::<Self>::deserialize_with_size_encoding(deserializer, "authority"),
62+
false => FromBytesUncheckedDeserializer::<Self>::deserialize_with_size_encoding(deserializer, "authority"),
6363
}
6464
}
6565
}

synthesizer/snark/src/certificate/bytes.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,19 @@ impl<N: Network> FromBytes for Certificate<N> {
2929
// Return the certificate.
3030
Ok(Self { certificate })
3131
}
32+
33+
fn read_le_unchecked<R: Read>(mut reader: R) -> IoResult<Self> {
34+
// Read the version.
35+
let version = u8::read_le(&mut reader)?;
36+
// Ensure the version is valid.
37+
if version != 1 {
38+
return Err(error("Invalid certificate version"));
39+
}
40+
// Read the certificate.
41+
let certificate = FromBytes::read_le_unchecked(&mut reader)?;
42+
// Return the certificate.
43+
Ok(Self { certificate })
44+
}
3245
}
3346

3447
impl<N: Network> ToBytes for Certificate<N> {

synthesizer/snark/src/certificate/serialize.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ impl<'de, N: Network> Deserialize<'de> for Certificate<N> {
3030
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3131
match deserializer.is_human_readable() {
3232
true => FromStr::from_str(&String::deserialize(deserializer)?).map_err(de::Error::custom),
33-
false => FromBytesDeserializer::<Self>::deserialize_with_size_encoding(deserializer, "certificate"),
33+
false => {
34+
FromBytesUncheckedDeserializer::<Self>::deserialize_with_size_encoding(deserializer, "certificate")
35+
}
3436
}
3537
}
3638
}

synthesizer/snark/src/proof/bytes.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,19 @@ impl<N: Network> FromBytes for Proof<N> {
2929
// Return the proof.
3030
Ok(Self { proof })
3131
}
32+
33+
fn read_le_unchecked<R: Read>(mut reader: R) -> IoResult<Self> {
34+
// Read the version.
35+
let version = u8::read_le(&mut reader)?;
36+
// Ensure the version is valid.
37+
if version != 1 {
38+
return Err(error("Invalid proof version"));
39+
}
40+
// Read the proof.
41+
let proof = FromBytes::read_le_unchecked(&mut reader)?;
42+
// Return the proof.
43+
Ok(Self { proof })
44+
}
3245
}
3346

3447
impl<N: Network> ToBytes for Proof<N> {

synthesizer/snark/src/proof/serialize.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ impl<'de, N: Network> Deserialize<'de> for Proof<N> {
3030
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3131
match deserializer.is_human_readable() {
3232
true => FromStr::from_str(&String::deserialize(deserializer)?).map_err(de::Error::custom),
33-
false => FromBytesDeserializer::<Self>::deserialize_with_size_encoding(deserializer, "proof"),
33+
false => FromBytesUncheckedDeserializer::<Self>::deserialize_with_size_encoding(deserializer, "proof"),
3434
}
3535
}
3636
}

0 commit comments

Comments
 (0)