Skip to content

Commit

Permalink
Add another old SubmitResult format
Browse files Browse the repository at this point in the history
  • Loading branch information
birchmd committed Sep 12, 2023
1 parent 0e47acb commit 4bd98d8
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 8 deletions.
18 changes: 10 additions & 8 deletions refiner-lib/src/hashchain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,14 +106,16 @@ pub fn validate_tx_hashchain(
let result = crate::legacy::SubmitResultLegacyV2 {
status,
gas_used: transaction.gas_used,
logs: transaction
.logs
.iter()
.map(|l| crate::legacy::ResultLogV1 {
topics: l.topics.clone(),
data: l.data.clone(),
})
.collect(),
logs: crate::legacy::to_v1_logs(&transaction.logs),
};
Cow::Owned(result.try_to_vec().expect(MUST_BORSH_SERIALIZE))
}
HashchainOutputKind::SubmitResultLegacyV3 => {
let result = crate::legacy::SubmitResultLegacyV3 {
status: transaction.status,
gas_used: transaction.gas_used,
result: transaction.output.clone(),
logs: crate::legacy::to_v1_logs(&transaction.logs),
};
Cow::Owned(result.try_to_vec().expect(MUST_BORSH_SERIALIZE))
}
Expand Down
49 changes: 49 additions & 0 deletions refiner-lib/src/legacy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,40 @@ impl From<SubmitResultLegacyV2> for SubmitResult {
}
}

#[derive(BorshSerialize, BorshDeserialize)]
pub struct SubmitResultLegacyV3 {
pub status: bool,
pub gas_used: u64,
pub result: Vec<u8>,
pub logs: Vec<ResultLogV1>,
}

impl From<SubmitResultLegacyV3> for SubmitResult {
fn from(result: SubmitResultLegacyV3) -> Self {
let status = if result.status {
TransactionStatus::Succeed(result.result)
} else if !result.result.is_empty() {
TransactionStatus::Revert(result.result)
} else {
TransactionStatus::OutOfFund
};
SubmitResult::new(
status,
result.gas_used,
result.logs.into_iter().map(Into::into).collect(),
)
}
}

pub fn to_v1_logs(logs: &[ResultLog]) -> Vec<ResultLogV1> {
logs.iter()
.map(|l| ResultLogV1 {
topics: l.topics.clone(),
data: l.data.clone(),
})
.collect()
}

pub fn decode_submit_result(result: &[u8]) -> Result<(SubmitResult, HashchainOutputKind)> {
SubmitResult::try_from_slice(result)
.map(|x| {
Expand All @@ -68,12 +102,27 @@ pub fn decode_submit_result(result: &[u8]) -> Result<(SubmitResult, HashchainOut
(x.into(), HashchainOutputKind::SubmitResultLegacyV2(tag))
})
})
.or_else(|_| {
SubmitResultLegacyV3::try_from_slice(result)
.map(|x| (x.into(), HashchainOutputKind::SubmitResultLegacyV3))
})
}

#[cfg(test)]
mod tests {
use super::decode_submit_result;

#[test]
fn test_legacy_may_2021() {
// `SubmitResult` taken from
// https://explorer.mainnet.near.org/transactions/CeG24XrGneQb3PF5xmgzkPGPcFZ3yDzKJ755ZPdXAT6Q#B36aGoLRkspLkjGPgR13ZqUtR3vK7WftqT6HH2BJu5r2
let data = hex::decode(
"01b026010000000000140000008a778c47d1d6b4dd5d2cef9881f889c250cd882000000000",
)
.unwrap();
decode_submit_result(&data).unwrap();
}

#[test]
fn test_legacy_v2() {
let data = vec![
Expand Down
2 changes: 2 additions & 0 deletions refiner-types/src/aurora_block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,8 @@ pub enum HashchainOutputKind {
SubmitResultLegacyV1(ResultStatusTag),
/// Borsh-encoding of SubmitResultLegacyV2 (fields populated with data from `AuroraTransaction`).
SubmitResultLegacyV2(ResultStatusTag),
/// Borsh-encoding of SubmitResultLegacyV3 (fields populated with data from `AuroraTransaction`).
SubmitResultLegacyV3,
/// Borsh-encoding of current SubmitResult version (fields populated with data from `AuroraTransaction`).
SubmitResultV7(ResultStatusTag),
/// Raw output explicitly given in `AuroraTransaction.output`
Expand Down

0 comments on commit 4bd98d8

Please sign in to comment.