mirror of
https://github.com/logos-blockchain/lssa.git
synced 2026-02-06 06:23:08 +00:00
fix: suggestion added 1
This commit is contained in:
parent
bb9b28933d
commit
173a8e5821
@ -9,12 +9,20 @@ pub struct PrivateDataBlob(pub [u8; PRIVATE_BLOB_SIZE]);
|
||||
|
||||
pub type PrivateSCState = BTreeMap<usize, PrivateDataBlob>;
|
||||
|
||||
#[derive(thiserror::Error, Debug)]
|
||||
pub enum PrivateDataBlobError {
|
||||
#[error("Given data len: {0} does not fit into {PRIVATE_BLOB_SIZE}")]
|
||||
DataDoesNotFit(usize),
|
||||
}
|
||||
|
||||
#[derive(thiserror::Error, Debug)]
|
||||
pub enum PrivateStateError {
|
||||
#[error("Trying to read from slot too big: Read slot {0}, max_slot {1}")]
|
||||
ReadSizeMismatch(usize, usize),
|
||||
#[error("Can not write empty bytes into state")]
|
||||
EmptyWrite,
|
||||
#[error("Error occured while interacting ith PrivateDataBlob {0}")]
|
||||
PrivateDataBlobError(#[from] PrivateDataBlobError),
|
||||
}
|
||||
|
||||
impl From<[u8; PRIVATE_BLOB_SIZE]> for PrivateDataBlob {
|
||||
@ -56,47 +64,53 @@ impl<'de> Deserialize<'de> for PrivateDataBlob {
|
||||
}
|
||||
|
||||
impl PrivateDataBlob {
|
||||
///Produce `DataBlob` from vector of size <= `PRIVATE_BLOB_SIZE`
|
||||
///
|
||||
///Extends to `PRIVATE_BLOB_SIZE`, if necessary.
|
||||
///
|
||||
/// Returns an error, if size > `PRIVATE_BLOB_SIZE`
|
||||
pub fn try_produce_blob_from_fit_vec(data: Vec<u8>) -> Result<Self, PrivateDataBlobError> {
|
||||
let data_len = data.len();
|
||||
|
||||
if data_len <= PRIVATE_BLOB_SIZE {
|
||||
return Err(PrivateDataBlobError::DataDoesNotFit(data_len));
|
||||
}
|
||||
|
||||
let mut blob: PrivateDataBlob = [0; PRIVATE_BLOB_SIZE].into();
|
||||
|
||||
for (idx, item) in data.into_iter().enumerate() {
|
||||
blob.0[idx] = item
|
||||
}
|
||||
|
||||
Ok(blob)
|
||||
}
|
||||
|
||||
///Produce `DataBlob` from slice of size <= `PRIVATE_BLOB_SIZE`
|
||||
///
|
||||
///Extends to `PRIVATE_BLOB_SIZE`, if necessary.
|
||||
///
|
||||
/// Returns an error, if size > `PRIVATE_BLOB_SIZE`
|
||||
pub fn try_produce_blob_from_fit_slice(data: &[u8]) -> Result<Self, PrivateDataBlobError> {
|
||||
let data_len = data.len();
|
||||
|
||||
if data_len <= PRIVATE_BLOB_SIZE {
|
||||
return Err(PrivateDataBlobError::DataDoesNotFit(data_len));
|
||||
}
|
||||
|
||||
let mut blob: PrivateDataBlob = [0; PRIVATE_BLOB_SIZE].into();
|
||||
|
||||
for (idx, item) in data.into_iter().enumerate() {
|
||||
blob.0[idx] = *item
|
||||
}
|
||||
|
||||
Ok(blob)
|
||||
}
|
||||
|
||||
pub fn to_vec(&self) -> Vec<u8> {
|
||||
self.0.to_vec()
|
||||
}
|
||||
}
|
||||
|
||||
///Produce `DataBlob` from vector of size <= `PRIVATE_BLOB_SIZE`
|
||||
///
|
||||
///Extends to `PRIVATE_BLOB_SIZE`, if necessary.
|
||||
///
|
||||
///Panics, if size > `PRIVATE_BLOB_SIZE`
|
||||
pub fn produce_blob_from_fit_vec(data: Vec<u8>) -> PrivateDataBlob {
|
||||
let data_len = data.len();
|
||||
|
||||
assert!(data_len <= PRIVATE_BLOB_SIZE);
|
||||
let mut blob: PrivateDataBlob = [0; PRIVATE_BLOB_SIZE].into();
|
||||
|
||||
for (idx, item) in data.into_iter().enumerate() {
|
||||
blob.0[idx] = item
|
||||
}
|
||||
|
||||
blob
|
||||
}
|
||||
|
||||
///Produce `DataBlob` from slice of size <= `PRIVATE_BLOB_SIZE`
|
||||
///
|
||||
///Extends to `PRIVATE_BLOB_SIZE`, if necessary.
|
||||
///
|
||||
///Panics, if size > `PRIVATE_BLOB_SIZE`
|
||||
pub fn produce_blob_from_fit_slice(data: &[u8]) -> PrivateDataBlob {
|
||||
let data_len = data.len();
|
||||
|
||||
assert!(data_len <= PRIVATE_BLOB_SIZE);
|
||||
let mut blob: PrivateDataBlob = [0; PRIVATE_BLOB_SIZE].into();
|
||||
|
||||
for (idx, item) in data.into_iter().enumerate() {
|
||||
blob.0[idx] = *item
|
||||
}
|
||||
|
||||
blob
|
||||
}
|
||||
|
||||
pub fn calculate_offset_slot(offset: usize) -> usize {
|
||||
offset / PRIVATE_BLOB_SIZE
|
||||
}
|
||||
@ -168,7 +182,9 @@ pub fn write_num_bytes_append(
|
||||
let mut curr = 0;
|
||||
|
||||
while (curr + PRIVATE_BLOB_SIZE) < bytes.len() {
|
||||
let data_blob = produce_blob_from_fit_slice(&bytes[curr..(curr + PRIVATE_BLOB_SIZE)]);
|
||||
let data_blob = PrivateDataBlob::try_produce_blob_from_fit_slice(
|
||||
&bytes[curr..(curr + PRIVATE_BLOB_SIZE)],
|
||||
)?;
|
||||
|
||||
state.insert(max_slot_state, data_blob);
|
||||
|
||||
@ -176,7 +192,7 @@ pub fn write_num_bytes_append(
|
||||
max_slot_state += 1;
|
||||
}
|
||||
|
||||
let data_blob = produce_blob_from_fit_slice(&bytes[curr..(bytes.len())]);
|
||||
let data_blob = PrivateDataBlob::try_produce_blob_from_fit_slice(&bytes[curr..(bytes.len())])?;
|
||||
|
||||
state.insert(max_slot_state, data_blob);
|
||||
|
||||
@ -200,7 +216,9 @@ pub fn write_num_bytes_rewrite(
|
||||
let mut curr = 0;
|
||||
|
||||
while (curr + PRIVATE_BLOB_SIZE) < bytes.len() {
|
||||
let data_blob = produce_blob_from_fit_slice(&bytes[curr..(curr + PRIVATE_BLOB_SIZE)]);
|
||||
let data_blob = PrivateDataBlob::try_produce_blob_from_fit_slice(
|
||||
&bytes[curr..(curr + PRIVATE_BLOB_SIZE)],
|
||||
)?;
|
||||
|
||||
state.insert(curr_slot, data_blob);
|
||||
|
||||
@ -208,7 +226,7 @@ pub fn write_num_bytes_rewrite(
|
||||
curr_slot += 1;
|
||||
}
|
||||
|
||||
let data_blob = produce_blob_from_fit_slice(&bytes[curr..(bytes.len())]);
|
||||
let data_blob = PrivateDataBlob::try_produce_blob_from_fit_slice(&bytes[curr..(bytes.len())])?;
|
||||
|
||||
state.insert(curr_slot, data_blob);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user