Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,361 changes: 1,227 additions & 1,134 deletions Cargo.lock

Large diffs are not rendered by default.

162 changes: 81 additions & 81 deletions Cargo.toml

Large diffs are not rendered by default.

14 changes: 14 additions & 0 deletions client/api/src/backend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,20 @@ pub trait Backend<Block: BlockT>: Send + Sync {
/// Returns reference to log indexer backend.
fn log_indexer(&self) -> &dyn LogIndexerBackend<Block>;

/// Get the ethereum block hash for a given block number.
async fn block_hash_by_number(&self, block_number: u64) -> Result<Option<H256>, String>;

/// Persist or repair the ethereum block hash for a given block number.
///
/// Backends that cannot mutate mappings can rely on the default no-op.
async fn set_block_hash_by_number(
&self,
_block_number: u64,
_ethereum_block_hash: H256,
) -> Result<(), String> {
Ok(())
}

/// Indicate whether the log indexing feature is supported.
fn is_indexed(&self) -> bool {
self.log_indexer().is_indexed()
Expand Down
36 changes: 33 additions & 3 deletions client/cli/src/frontier_db_cmd/mapping_db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ use serde::Deserialize;
// Substrate
use sp_api::ProvideRuntimeApi;
use sp_blockchain::HeaderBackend;
use sp_runtime::traits::Block as BlockT;
use sp_runtime::traits::{Block as BlockT, Header as HeaderT, UniqueSaturatedInto};
// Frontier
use fp_rpc::EthereumRuntimeRPCApi;

Expand Down Expand Up @@ -103,7 +103,22 @@ where
ethereum_transaction_hashes: existing_transaction_hashes,
};

self.backend.mapping().write_hashes(commitment)?;
// Get block number from header
let block_number: u64 = (*self
.client
.header(*substrate_block_hash)
.map_err(|e| format!("{e:?}"))?
.ok_or_else(|| {
format!("Header not found for block {substrate_block_hash:?}")
})?
.number())
.unique_saturated_into();

self.backend.mapping().write_hashes(
commitment,
block_number,
fc_db::kv::NumberMappingWrite::Write,
)?;
} else {
return Err(self.key_not_empty_error(key));
}
Expand Down Expand Up @@ -161,7 +176,22 @@ where
ethereum_transaction_hashes: existing_transaction_hashes,
};

self.backend.mapping().write_hashes(commitment)?;
// Get block number from header
let block_number: u64 = (*self
.client
.header(*substrate_block_hash)
.map_err(|e| format!("{e:?}"))?
.ok_or_else(|| {
format!("Header not found for block {substrate_block_hash:?}")
})?
.number())
.unique_saturated_into();

self.backend.mapping().write_hashes(
commitment,
block_number,
fc_db::kv::NumberMappingWrite::Write,
)?;
}
}
_ => return Err(self.key_value_error(key, value)),
Expand Down
Loading
Loading