mirror of
https://git.ghostchain.io/proxmio/ghost-node.git
synced 2025-12-27 03:09:56 +00:00
ability to avoid too big deviations between from_block and to_block
Signed-off-by: Uncle Stinky <uncle.stinky@ghostchain.io>
This commit is contained in:
@@ -687,6 +687,7 @@ impl<T: Config> Pallet<T> {
|
||||
let network_id_encoded = network_id.encode();
|
||||
|
||||
let block_number_key = Self::create_storage_key(b"block-", &network_id_encoded);
|
||||
let block_distance_key = Self::create_storage_key(b"block-distance-", &network_id_encoded);
|
||||
let endpoint_key = Self::create_storage_key(b"endpoint-", &network_id_encoded);
|
||||
|
||||
let rpc_endpoint = StorageValueRef::persistent(&endpoint_key)
|
||||
@@ -695,6 +696,12 @@ impl<T: Config> Pallet<T> {
|
||||
.flatten()
|
||||
.unwrap_or(network_data.default_endpoint.clone());
|
||||
|
||||
let max_block_distance = StorageValueRef::persistent(&block_distance_key)
|
||||
.get()
|
||||
.ok()
|
||||
.flatten()
|
||||
.unwrap_or(network_data.block_distance);
|
||||
|
||||
let mutation_result = StorageValueRef::persistent(&block_number_key).mutate(|result_block_range: Result<Option<(u64, u64)>, StorageRetrievalError>| {
|
||||
match result_block_range {
|
||||
Ok(maybe_block_range) => {
|
||||
@@ -708,7 +715,7 @@ impl<T: Config> Pallet<T> {
|
||||
|
||||
match network_data.network_type {
|
||||
NetworkType::Evm => {
|
||||
let new_evm_block = Self::apply_evm_response(
|
||||
let maybe_new_evm_block = Self::apply_evm_response(
|
||||
&response_bytes,
|
||||
authority_index,
|
||||
authority_key,
|
||||
@@ -717,12 +724,20 @@ impl<T: Config> Pallet<T> {
|
||||
)?;
|
||||
|
||||
let finality_delay = network_data.finality_delay.unwrap_or_default();
|
||||
let estimated_block = new_evm_block.saturating_sub(finality_delay);
|
||||
let estimated_block = maybe_new_evm_block
|
||||
.map(|new_evm_block| new_evm_block.saturating_sub(finality_delay))
|
||||
.unwrap_or_default();
|
||||
|
||||
Ok(match maybe_block_range {
|
||||
Some((from_block, to_block)) => match new_evm_block {
|
||||
0 => (to_block, to_block),
|
||||
_ => (from_block, estimated_block),
|
||||
Some((from_block, to_block)) => match maybe_new_evm_block {
|
||||
Some(_) => match estimated_block.checked_sub(from_block) {
|
||||
Some(current_distance) if current_distance < max_block_distance =>
|
||||
(from_block, estimated_block),
|
||||
_ => (from_block, from_block
|
||||
.saturating_add(max_block_distance)
|
||||
.min(estimated_block)),
|
||||
},
|
||||
None => (to_block, to_block),
|
||||
},
|
||||
None => (estimated_block, estimated_block),
|
||||
})
|
||||
@@ -748,7 +763,7 @@ impl<T: Config> Pallet<T> {
|
||||
authority_key: T::AuthorityId,
|
||||
session_index: SessionIndex,
|
||||
network_id: NetworkIdOf<T>
|
||||
) -> OffchainResult<T, u64> {
|
||||
) -> OffchainResult<T, Option<u64>> {
|
||||
match Self::parse_evm_response(&response_bytes)? {
|
||||
EvmResponseType::BlockNumber(new_evm_block) => {
|
||||
log::info!(
|
||||
@@ -757,7 +772,7 @@ impl<T: Config> Pallet<T> {
|
||||
new_evm_block,
|
||||
network_id,
|
||||
);
|
||||
Ok(new_evm_block)
|
||||
Ok(Some(new_evm_block))
|
||||
},
|
||||
EvmResponseType::TransactionLogs(evm_logs) => {
|
||||
let claps: Vec<_> = evm_logs
|
||||
@@ -799,7 +814,7 @@ impl<T: Config> Pallet<T> {
|
||||
.map_err(|_| OffchainErr::SubmitTransaction)?;
|
||||
}
|
||||
|
||||
Ok(0u64)
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user