forked from ghostchain/ghost-node
		
	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:
		
							parent
							
								
									d5643472ee
								
							
						
					
					
						commit
						d8e934a98e
					
				
							
								
								
									
										4
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							@ -1186,7 +1186,7 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "casper-runtime"
 | 
					name = "casper-runtime"
 | 
				
			||||||
version = "3.5.23"
 | 
					version = "3.5.24"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "casper-runtime-constants",
 | 
					 "casper-runtime-constants",
 | 
				
			||||||
 "frame-benchmarking",
 | 
					 "frame-benchmarking",
 | 
				
			||||||
@ -3834,7 +3834,7 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "ghost-slow-clap"
 | 
					name = "ghost-slow-clap"
 | 
				
			||||||
version = "0.3.27"
 | 
					version = "0.3.28"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "frame-benchmarking",
 | 
					 "frame-benchmarking",
 | 
				
			||||||
 "frame-support",
 | 
					 "frame-support",
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
[package]
 | 
					[package]
 | 
				
			||||||
name = "ghost-slow-clap"
 | 
					name = "ghost-slow-clap"
 | 
				
			||||||
version = "0.3.27"
 | 
					version = "0.3.28"
 | 
				
			||||||
description = "Applause protocol for the EVM bridge"
 | 
					description = "Applause protocol for the EVM bridge"
 | 
				
			||||||
license.workspace = true
 | 
					license.workspace = true
 | 
				
			||||||
authors.workspace = true
 | 
					authors.workspace = true
 | 
				
			||||||
 | 
				
			|||||||
@ -687,6 +687,7 @@ impl<T: Config> Pallet<T> {
 | 
				
			|||||||
        let network_id_encoded = network_id.encode();
 | 
					        let network_id_encoded = network_id.encode();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let block_number_key = Self::create_storage_key(b"block-", &network_id_encoded);
 | 
					        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 endpoint_key = Self::create_storage_key(b"endpoint-", &network_id_encoded);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let rpc_endpoint = StorageValueRef::persistent(&endpoint_key)
 | 
					        let rpc_endpoint = StorageValueRef::persistent(&endpoint_key)
 | 
				
			||||||
@ -695,6 +696,12 @@ impl<T: Config> Pallet<T> {
 | 
				
			|||||||
            .flatten()
 | 
					            .flatten()
 | 
				
			||||||
            .unwrap_or(network_data.default_endpoint.clone());
 | 
					            .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>| {
 | 
					        let mutation_result = StorageValueRef::persistent(&block_number_key).mutate(|result_block_range: Result<Option<(u64, u64)>, StorageRetrievalError>| {
 | 
				
			||||||
            match result_block_range {
 | 
					            match result_block_range {
 | 
				
			||||||
                Ok(maybe_block_range) => {
 | 
					                Ok(maybe_block_range) => {
 | 
				
			||||||
@ -708,7 +715,7 @@ impl<T: Config> Pallet<T> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    match network_data.network_type {
 | 
					                    match network_data.network_type {
 | 
				
			||||||
                        NetworkType::Evm => {
 | 
					                        NetworkType::Evm => {
 | 
				
			||||||
                            let new_evm_block = Self::apply_evm_response(
 | 
					                            let maybe_new_evm_block = Self::apply_evm_response(
 | 
				
			||||||
                                &response_bytes,
 | 
					                                &response_bytes,
 | 
				
			||||||
                                authority_index,
 | 
					                                authority_index,
 | 
				
			||||||
                                authority_key,
 | 
					                                authority_key,
 | 
				
			||||||
@ -717,12 +724,20 @@ impl<T: Config> Pallet<T> {
 | 
				
			|||||||
                            )?;
 | 
					                            )?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            let finality_delay = network_data.finality_delay.unwrap_or_default();
 | 
					                            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 {
 | 
					                            Ok(match maybe_block_range {
 | 
				
			||||||
                                Some((from_block, to_block)) => match new_evm_block {
 | 
					                                Some((from_block, to_block)) => match maybe_new_evm_block {
 | 
				
			||||||
                                    0 => (to_block, to_block),
 | 
					                                    Some(_) => match estimated_block.checked_sub(from_block) {
 | 
				
			||||||
                                    _ => (from_block, estimated_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),
 | 
					                                None => (estimated_block, estimated_block),
 | 
				
			||||||
                            })
 | 
					                            })
 | 
				
			||||||
@ -748,7 +763,7 @@ impl<T: Config> Pallet<T> {
 | 
				
			|||||||
        authority_key: T::AuthorityId,
 | 
					        authority_key: T::AuthorityId,
 | 
				
			||||||
        session_index: SessionIndex,
 | 
					        session_index: SessionIndex,
 | 
				
			||||||
        network_id: NetworkIdOf<T>
 | 
					        network_id: NetworkIdOf<T>
 | 
				
			||||||
    ) -> OffchainResult<T, u64> {
 | 
					    ) -> OffchainResult<T, Option<u64>> {
 | 
				
			||||||
        match Self::parse_evm_response(&response_bytes)? {
 | 
					        match Self::parse_evm_response(&response_bytes)? {
 | 
				
			||||||
            EvmResponseType::BlockNumber(new_evm_block) => {
 | 
					            EvmResponseType::BlockNumber(new_evm_block) => {
 | 
				
			||||||
                log::info!(
 | 
					                log::info!(
 | 
				
			||||||
@ -757,7 +772,7 @@ impl<T: Config> Pallet<T> {
 | 
				
			|||||||
                    new_evm_block,
 | 
					                    new_evm_block,
 | 
				
			||||||
                    network_id,
 | 
					                    network_id,
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
                Ok(new_evm_block)
 | 
					                Ok(Some(new_evm_block))
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            EvmResponseType::TransactionLogs(evm_logs) => {
 | 
					            EvmResponseType::TransactionLogs(evm_logs) => {
 | 
				
			||||||
                let claps: Vec<_> = evm_logs
 | 
					                let claps: Vec<_> = evm_logs
 | 
				
			||||||
@ -799,7 +814,7 @@ impl<T: Config> Pallet<T> {
 | 
				
			|||||||
                        .map_err(|_| OffchainErr::SubmitTransaction)?;
 | 
					                        .map_err(|_| OffchainErr::SubmitTransaction)?;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                Ok(0u64)
 | 
					                Ok(None)
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -24,7 +24,7 @@ fn prepare_evm_network(
 | 
				
			|||||||
        chain_name: "Ethereum".into(),
 | 
					        chain_name: "Ethereum".into(),
 | 
				
			||||||
        default_endpoint: get_rpc_endpoint(),
 | 
					        default_endpoint: get_rpc_endpoint(),
 | 
				
			||||||
        finality_delay: Some(69),
 | 
					        finality_delay: Some(69),
 | 
				
			||||||
        release_delay: Some(69),
 | 
					        block_distance: 69,
 | 
				
			||||||
        network_type: ghost_networks::NetworkType::Evm,
 | 
					        network_type: ghost_networks::NetworkType::Evm,
 | 
				
			||||||
        gatekeeper: get_gatekeeper(),
 | 
					        gatekeeper: get_gatekeeper(),
 | 
				
			||||||
        topic_name: get_topic_name(),
 | 
					        topic_name: get_topic_name(),
 | 
				
			||||||
@ -197,9 +197,9 @@ fn should_make_http_call_and_parse_block_number() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        let request_body = SlowClap::prepare_request_body_for_latest_block(&network_data);
 | 
					        let request_body = SlowClap::prepare_request_body_for_latest_block(&network_data);
 | 
				
			||||||
        let raw_response = SlowClap::fetch_from_remote(&rpc_endpoint, &request_body)?;
 | 
					        let raw_response = SlowClap::fetch_from_remote(&rpc_endpoint, &request_body)?;
 | 
				
			||||||
        let evm_block_number = SlowClap::apply_evm_response(&raw_response, 69, Default::default(), 420, 1)?;
 | 
					        let maybe_evm_block_number = SlowClap::apply_evm_response(&raw_response, 69, Default::default(), 420, 1)?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assert_eq!(evm_block_number, 20335745);
 | 
					        assert_eq!(maybe_evm_block_number, Some(20335745));
 | 
				
			||||||
        Ok(())
 | 
					        Ok(())
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -234,7 +234,7 @@ fn should_make_http_call_and_parse_logs() {
 | 
				
			|||||||
            EvmResponseType::TransactionLogs(evm_logs) => assert_eq!(evm_logs.len(), 2),
 | 
					            EvmResponseType::TransactionLogs(evm_logs) => assert_eq!(evm_logs.len(), 2),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let evm_block_number = SlowClap::apply_evm_response(
 | 
					        let maybe_evm_block_number = SlowClap::apply_evm_response(
 | 
				
			||||||
            &raw_response,
 | 
					            &raw_response,
 | 
				
			||||||
            1,
 | 
					            1,
 | 
				
			||||||
            UintAuthorityId::from(2),
 | 
					            UintAuthorityId::from(2),
 | 
				
			||||||
@ -242,7 +242,7 @@ fn should_make_http_call_and_parse_logs() {
 | 
				
			|||||||
            network_id,
 | 
					            network_id,
 | 
				
			||||||
        )?;
 | 
					        )?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assert_eq!(evm_block_number, 0);
 | 
					        assert_eq!(maybe_evm_block_number, None);
 | 
				
			||||||
        Ok(())
 | 
					        Ok(())
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user