diff --git a/pallets/slow-clap/Cargo.toml b/pallets/slow-clap/Cargo.toml index 815b94a..95849ce 100644 --- a/pallets/slow-clap/Cargo.toml +++ b/pallets/slow-clap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ghost-slow-clap" -version = "0.4.22" +version = "0.4.23" description = "Applause protocol for the EVM bridge" license.workspace = true authors.workspace = true diff --git a/pallets/slow-clap/src/deserialisations.rs b/pallets/slow-clap/src/deserialisations.rs index 1597555..4e832ac 100644 --- a/pallets/slow-clap/src/deserialisations.rs +++ b/pallets/slow-clap/src/deserialisations.rs @@ -8,7 +8,7 @@ where Ok(Some(s.as_bytes().to_vec())) } -pub fn de_string_to_u64<'de, D>(de: D) -> Result, D::Error> +pub fn de_string_to_block_number<'de, D>(de: D) -> Result, D::Error> where D: Deserializer<'de>, { @@ -17,7 +17,7 @@ where Ok(u64::from_str_radix(s, 16).ok()) } -pub fn de_string_to_u64_pure<'de, D>(de: D) -> Result +pub fn de_string_to_block_number_pure<'de, D>(de: D) -> Result where D: Deserializer<'de>, { diff --git a/pallets/slow-clap/src/evm_types.rs b/pallets/slow-clap/src/evm_types.rs index 1c64b25..7450132 100644 --- a/pallets/slow-clap/src/evm_types.rs +++ b/pallets/slow-clap/src/evm_types.rs @@ -2,13 +2,10 @@ use sp_runtime::{traits::UniqueSaturatedInto, SaturatedConversion, Saturating}; use sp_staking::SessionIndex; use crate::{ - deserialisations::{ - de_string_to_bytes, de_string_to_h256, de_string_to_u64, de_string_to_u64_pure, + AuthIndex, BLOCK_COMMITMENT_DELAY, BalanceOf, BlockCommitment, BlockCommitments, BlockNumberFor, Call, Clap, Config, Decode, Deserialize, Encode, ExternalBlockNumber, H256, LOG_TARGET, NetworkIdOf, RuntimeAppPublic, RuntimeDebug, SubmitTransaction, Vec, deserialisations::{ + de_string_to_bytes, de_string_to_h256, de_string_to_block_number, de_string_to_block_number_pure, de_string_to_vec_of_bytes, - }, - AuthIndex, BalanceOf, BlockCommitment, BlockCommitments, BlockNumberFor, Call, Clap, Config, - Decode, Deserialize, Encode, NetworkIdOf, RuntimeAppPublic, RuntimeDebug, SubmitTransaction, - Vec, BLOCK_COMMITMENT_DELAY, H256, LOG_TARGET, + } }; const NUMBER_OF_TOPICS: usize = 3; @@ -28,8 +25,8 @@ pub struct EvmResponse { #[derive(RuntimeDebug, Clone, PartialEq, Deserialize, Encode, Decode)] #[serde(untagged)] pub enum EvmResponseType { - #[serde(deserialize_with = "de_string_to_u64_pure")] - BlockNumber(u64), + #[serde(deserialize_with = "de_string_to_block_number_pure")] + BlockNumber(ExternalBlockNumber), TransactionLogs(Vec), } @@ -38,8 +35,8 @@ pub enum EvmResponseType { pub struct Log { #[serde(default, deserialize_with = "de_string_to_h256")] pub transaction_hash: Option, - #[serde(default, deserialize_with = "de_string_to_u64")] - pub block_number: Option, + #[serde(default, deserialize_with = "de_string_to_block_number")] + pub block_number: Option, #[serde(default, deserialize_with = "de_string_to_vec_of_bytes")] pub topics: Vec>, pub removed: bool, @@ -145,7 +142,7 @@ impl EvmResponseType { fn sign_and_submit_block_commitment( &self, block_now: BlockNumberFor, - from_block: u64, + from_block: ExternalBlockNumber, authority_index: AuthIndex, authority_key: T::AuthorityId, session_index: SessionIndex, @@ -210,7 +207,7 @@ impl EvmResponseType { pub fn sign_and_submit( &self, block_now: BlockNumberFor, - from_block: u64, + from_block: ExternalBlockNumber, authority_index: AuthIndex, authority_key: T::AuthorityId, session_index: SessionIndex, diff --git a/pallets/slow-clap/src/lib.rs b/pallets/slow-clap/src/lib.rs index a849fca..275c3a0 100644 --- a/pallets/slow-clap/src/lib.rs +++ b/pallets/slow-clap/src/lib.rs @@ -123,7 +123,7 @@ pub struct Clap { pub session_index: SessionIndex, pub authority_index: AuthIndex, pub transaction_hash: H256, - pub block_number: u64, + pub block_number: ExternalBlockNumber, pub removed: bool, pub network_id: NetworkId, pub receiver: AccountId, @@ -135,12 +135,12 @@ pub struct ApplauseDetail { pub network_id: NetworkId, pub authorities: BitMap, pub clapped_amount: Balance, - pub block_number: u64, + pub block_number: ExternalBlockNumber, pub finalized: bool, } impl ApplauseDetail { - pub fn new(network_id: NetworkId, block_number: u64, max_authorities: usize) -> Self { + pub fn new(network_id: NetworkId, block_number: ExternalBlockNumber, max_authorities: usize) -> Self { ApplauseDetail { network_id, block_number, @@ -156,7 +156,7 @@ pub struct PreparedApplause { pub network_id: NetworkId, pub receiver: AccountId, pub amount: Balance, - pub block_number: u64, + pub block_number: ExternalBlockNumber, } #[cfg_attr(test, derive(PartialEq))] @@ -171,7 +171,7 @@ enum OffchainErr { DifferentEvmResponseTypes, MissingBlockNumber(u32, u32), ContradictoryTransactionLogs(u32, u32), - ContradictoryBlockMedian(u64, u64, u64), + ContradictoryBlockMedian(ExternalBlockNumber, ExternalBlockNumber, ExternalBlockNumber), UnparsableRequestBody(Vec), NoEndpointAvailable(NetworkId), StorageRetrievalError(NetworkId), @@ -347,7 +347,7 @@ pub mod pallet { network_id: NetworkIdOf, receiver: T::AccountId, received_amount: BalanceOf, - block_number: u64, + block_number: ExternalBlockNumber, }, BlockCommited { authority_id: AuthIndex, @@ -384,7 +384,7 @@ pub mod pallet { #[pallet::storage] #[pallet::getter(fn latest_executed_block)] pub(super) type LatestExecutedBlock = - StorageMap<_, Twox64Concat, NetworkIdOf, u64, ValueQuery>; + StorageMap<_, Twox64Concat, NetworkIdOf, ExternalBlockNumber, ValueQuery>; #[pallet::storage] #[pallet::getter(fn block_commitments)] @@ -484,7 +484,7 @@ pub mod pallet { fn on_initialize(current_block: BlockNumberFor) -> Weight { let mut weight = T::DbWeight::get().reads(1); let networks_count = T::NetworkDataHandler::count(); - let current_block_number: u64 = current_block.unique_saturated_into(); + let current_block_number: ExternalBlockNumber = current_block.unique_saturated_into(); let check_block_interval = T::EpochDuration::get().saturating_div(BLOCK_CHECK_CYCLES); if check_block_interval == 0 { @@ -668,7 +668,7 @@ impl Pallet { H256::from_slice(&sp_io::hashing::keccak_256(&clap_args_str)[..]) } - fn u64_to_hexadecimal_bytes(value: u64) -> Vec { + fn block_number_to_hexadecimal_bytes(value: ExternalBlockNumber) -> Vec { let mut hex_str = Vec::new(); hex_str.push(b'0'); hex_str.push(b'x'); @@ -878,17 +878,9 @@ impl Pallet { } fn start_slow_clapping(block_number: BlockNumberFor) -> OffchainResult { + let converted_block: usize = block_number.unique_saturated_into(); let session_index = T::ValidatorSet::session_index(); - let networks = T::NetworkDataHandler::iter().collect::>(); - let network_index = block_number - .into() - .as_usize() - .checked_rem(networks.len()) - .unwrap_or_default(); - - let network_in_use = networks - .iter() - .nth(network_index) + let network_in_use = T::NetworkDataHandler::network_for_block(converted_block) .ok_or(OffchainErr::NoStoredNetworks)?; log::info!( @@ -946,7 +938,7 @@ impl Pallet { return Err(OffchainErr::NoEndpointAvailable(network_id)); } - let (from_block, to_block): (u64, u64) = StorageValueRef::persistent(&block_number_key) + let (from_block, to_block): (ExternalBlockNumber, ExternalBlockNumber) = StorageValueRef::persistent(&block_number_key) .get() .map_err(|_| OffchainErr::StorageRetrievalError(network_id))? .unwrap_or_default(); @@ -1028,7 +1020,7 @@ impl Pallet { fn local_authorities( session_index: &SessionIndex, - ) -> impl Iterator { + ) -> impl Iterator { let authorities = Authorities::::get(session_index); let mut local_authorities = T::AuthorityId::all(); local_authorities.sort(); @@ -1102,7 +1094,7 @@ impl Pallet { fn get_balanced_evm_response( parsed_evm_responses: &Vec, - max_block_distance: u64, + max_block_distance: ExternalBlockNumber, ) -> OffchainResult { let first_evm_response = parsed_evm_responses .first() @@ -1264,8 +1256,8 @@ impl Pallet { } fn prepare_evm_request_body_for_latest_transfers( - from_block: u64, - to_block: u64, + from_block: ExternalBlockNumber, + to_block: ExternalBlockNumber, network_data: &NetworkData, ) -> Vec { match network_data.network_type { @@ -1274,9 +1266,9 @@ impl Pallet { b"{\"id\":0,\"jsonrpc\":\"2.0\",\"method\":\"eth_getLogs\",\"params\":[{" .to_vec(); body.extend(b"\"fromBlock\":\"".to_vec()); - body.extend(Self::u64_to_hexadecimal_bytes(from_block)); + body.extend(Self::block_number_to_hexadecimal_bytes(from_block)); body.extend(b"\",\"toBlock\":\"".to_vec()); - body.extend(Self::u64_to_hexadecimal_bytes(to_block)); + body.extend(Self::block_number_to_hexadecimal_bytes(to_block)); body.extend(b"\",\"address\":\"".to_vec()); body.extend(network_data.gatekeeper.to_vec()); body.extend(b"\",\"topics\":[\"".to_vec());