From b4b0a02cd404214b3d3e3e756222da7d7338c960 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 11 Dec 2023 20:25:10 +0100 Subject: [PATCH 1/2] fix cargo check --- light-clients/ics08-wasm/src/instantiate.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/light-clients/ics08-wasm/src/instantiate.rs b/light-clients/ics08-wasm/src/instantiate.rs index aeea865bb..91c9a6d17 100644 --- a/light-clients/ics08-wasm/src/instantiate.rs +++ b/light-clients/ics08-wasm/src/instantiate.rs @@ -1,5 +1,4 @@ -use crate::Bytes; -use crate::msg::Base64; +use crate::{msg::Base64, Bytes}; #[cfg(feature = "cosmwasm")] use cosmwasm_schema::cw_serde; @@ -7,13 +6,13 @@ use cosmwasm_schema::cw_serde; #[cfg_attr(not(feature = "cosmwasm"), derive(Clone, Debug, PartialEq))] #[derive(Eq)] pub struct InstantiateMessage { - #[schemars(with = "String")] - #[serde(with = "Base64", default)] + #[cfg_attr(feature = "cosmwasm", schemars(with = "String"))] + #[cfg_attr(feature = "cosmwasm", serde(with = "Base64", default))] pub client_state: Bytes, - #[schemars(with = "String")] - #[serde(with = "Base64", default)] + #[cfg_attr(feature = "cosmwasm", schemars(with = "String"))] + #[cfg_attr(feature = "cosmwasm", serde(with = "Base64", default))] pub consensus_state: Bytes, - #[schemars(with = "String")] - #[serde(with = "Base64", default)] - pub checksum: Bytes + #[cfg_attr(feature = "cosmwasm", schemars(with = "String"))] + #[cfg_attr(feature = "cosmwasm", serde(with = "Base64", default))] + pub checksum: Bytes, } From d41fbec9bee1e3f0b26af64fa282d9116e5eb814 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Mon, 11 Dec 2023 20:25:45 +0100 Subject: [PATCH 2/2] fix linter --- contracts/pallet-ibc/src/light_clients.rs | 24 ++-- .../ics07-tendermint-cw/src/connection.rs | 2 +- .../ics07-tendermint-cw/src/context.rs | 17 ++- .../ics07-tendermint-cw/src/contract.rs | 25 ++-- .../ics07-tendermint-cw/src/error.rs | 2 +- light-clients/ics07-tendermint-cw/src/msg.rs | 24 ++-- .../ics07-tendermint-cw/src/state.rs | 5 +- light-clients/ics08-wasm/src/client_def.rs | 25 ++-- .../ics08-wasm/src/client_message.rs | 18 ++- .../ics08-wasm/src/consensus_state.rs | 3 +- light-clients/ics10-grandpa-cw/src/client.rs | 5 +- light-clients/ics10-grandpa-cw/src/context.rs | 17 ++- .../ics10-grandpa-cw/src/contract.rs | 113 ++++++++++-------- light-clients/ics10-grandpa-cw/src/error.rs | 2 +- light-clients/ics10-grandpa-cw/src/msg.rs | 17 ++- light-clients/ics10-grandpa-cw/src/state.rs | 5 +- .../generated/src/composable/parachain.rs | 2 +- .../subxt/generated/src/default/parachain.rs | 2 +- .../generated/src/picasso_kusama/parachain.rs | 2 +- .../generated/src/picasso_rococo/parachain.rs | 2 +- 20 files changed, 163 insertions(+), 149 deletions(-) diff --git a/contracts/pallet-ibc/src/light_clients.rs b/contracts/pallet-ibc/src/light_clients.rs index 6bbe179c3..60a0ba748 100644 --- a/contracts/pallet-ibc/src/light_clients.rs +++ b/contracts/pallet-ibc/src/light_clients.rs @@ -6,8 +6,7 @@ use frame_support::{ use ibc::core::{ ics02_client, ics02_client::{ - client_consensus::ConsensusState, client_message::ClientMessage, - client_state::ClientState, + client_consensus::ConsensusState, client_message::ClientMessage, client_state::ClientState, }, }; use ibc_derive::{ClientDef, ClientMessage, ClientState, ConsensusState, Protobuf}; @@ -22,10 +21,8 @@ use ics07_tendermint::{ consensus_state::TENDERMINT_CONSENSUS_STATE_TYPE_URL, }; use ics08_wasm::{ - client_message::WASM_CLIENT_MESSAGE_TYPE_URL, - client_state::WASM_CLIENT_STATE_TYPE_URL, - consensus_state::WASM_CONSENSUS_STATE_TYPE_URL, - Bytes, + client_message::WASM_CLIENT_MESSAGE_TYPE_URL, client_state::WASM_CLIENT_STATE_TYPE_URL, + consensus_state::WASM_CONSENSUS_STATE_TYPE_URL, Bytes, }; use ics10_grandpa::{ client_message::{ @@ -329,18 +326,15 @@ pub enum AnyClientMessage { impl AnyClientMessage { pub fn wasm(inner: Self) -> Result { - Ok(Self::Wasm( - ics08_wasm::client_message::ClientMessage { - data: inner.encode_to_vec()?, - inner: Box::new(inner), - } - )) + Ok(Self::Wasm(ics08_wasm::client_message::ClientMessage { + data: inner.encode_to_vec()?, + inner: Box::new(inner), + })) } pub fn unpack_recursive_into(self) -> Self { match self { - Self::Wasm(ics08_wasm::client_message::ClientMessage{inner, data}) => - *inner, + Self::Wasm(ics08_wasm::client_message::ClientMessage { inner, data }) => *inner, _ => self, } } @@ -400,7 +394,7 @@ impl From for Any { match client_msg { AnyClientMessage::Wasm(msg) => Any { type_url: WASM_CLIENT_MESSAGE_TYPE_URL.to_string(), - value: msg.encode_vec().expect("encode_vec failed") + value: msg.encode_vec().expect("encode_vec failed"), }, AnyClientMessage::Grandpa(msg) => match msg { ics10_grandpa::client_message::ClientMessage::Header(h) => Any { diff --git a/light-clients/ics07-tendermint-cw/src/connection.rs b/light-clients/ics07-tendermint-cw/src/connection.rs index ba6a4e8c6..e29b82173 100644 --- a/light-clients/ics07-tendermint-cw/src/connection.rs +++ b/light-clients/ics07-tendermint-cw/src/connection.rs @@ -50,4 +50,4 @@ impl<'a, H: HostFunctionsProvider> ConnectionReader for Context<'a, H> { "'connection_counter' is unavailable from the client".to_string(), )) } -} \ No newline at end of file +} diff --git a/light-clients/ics07-tendermint-cw/src/context.rs b/light-clients/ics07-tendermint-cw/src/context.rs index 1ed0c272f..7fecd9ba1 100644 --- a/light-clients/ics07-tendermint-cw/src/context.rs +++ b/light-clients/ics07-tendermint-cw/src/context.rs @@ -75,7 +75,7 @@ impl<'a, H> Context<'a, H> { pub fn log(&self, msg: &str) { match &self.deps_mut { Some(deps_mut) => deps_mut.api.debug(msg), - None => unimplemented!() + None => unimplemented!(), } } @@ -84,15 +84,15 @@ impl<'a, H> Context<'a, H> { Some(deps_mut) => deps_mut.storage, None => match &self.deps { Some(deps) => deps.storage, - None => unimplemented!() - } + None => unimplemented!(), + }, } } pub fn storage_mut(&mut self) -> &mut dyn Storage { match &mut self.deps_mut { Some(deps_mut) => deps_mut.storage, - None => unimplemented!() + None => unimplemented!(), } } } @@ -168,11 +168,10 @@ where let client_states = ReadonlyClientStates::new(self.storage()); let checksum = match self.checksum.clone() { None => { - let encoded_wasm_client_state = client_states.get_prefixed(prefix).ok_or_else(|| { - ContractError::Tendermint( - Error::client_not_found(client_id).to_string(), - ) - })?; + let encoded_wasm_client_state = + client_states.get_prefixed(prefix).ok_or_else(|| { + ContractError::Tendermint(Error::client_not_found(client_id).to_string()) + })?; let any = Any::decode(&*encoded_wasm_client_state) .map_err(Error::decode) .map_err(|e| ContractError::Tendermint(e.to_string()))?; diff --git a/light-clients/ics07-tendermint-cw/src/contract.rs b/light-clients/ics07-tendermint-cw/src/contract.rs index 2f1d4d543..c57cef78e 100644 --- a/light-clients/ics07-tendermint-cw/src/contract.rs +++ b/light-clients/ics07-tendermint-cw/src/contract.rs @@ -22,10 +22,9 @@ use crate::{ }, ics23::ReadonlyProcessedStates, msg::{ - CheckForMisbehaviourMsg, ContractResult, ExportMetadataMsg, QueryMsg, - QueryResponse, StatusMsg, SudoMsg, UpdateStateMsg, UpdateStateOnMisbehaviourMsg, - VerifyClientMessage, VerifyMembershipMsg, VerifyNonMembershipMsg, - VerifyUpgradeAndUpdateStateMsg, + CheckForMisbehaviourMsg, ContractResult, ExportMetadataMsg, QueryMsg, QueryResponse, + StatusMsg, SudoMsg, UpdateStateMsg, UpdateStateOnMisbehaviourMsg, VerifyClientMessage, + VerifyMembershipMsg, VerifyNonMembershipMsg, VerifyUpgradeAndUpdateStateMsg, }, state::{get_client_state, get_consensus_state}, }; @@ -169,11 +168,7 @@ pub fn instantiate( Ok(response) } #[cfg_attr(not(feature = "library"), entry_point)] -pub fn sudo( - deps: DepsMut, - env: Env, - msg: SudoMsg, -) -> Result { +pub fn sudo(deps: DepsMut, env: Env, msg: SudoMsg) -> Result { let client = TendermintClient::::default(); let client_id = ClientId::from_str(env.contract.address.as_str()).expect("client id is valid"); let mut ctx = Context::::new(deps, env); @@ -267,7 +262,7 @@ fn process_message( msg.value, ) .map_err(|e| ContractError::Tendermint(e.to_string())) - .map(|_| to_binary(&ContractResult::success())) + .map(|_| to_binary(&ContractResult::success())) }, SudoMsg::VerifyNonMembership(msg) => { let client_state = ctx @@ -357,7 +352,9 @@ pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { let tp = client_state.trusting_period.as_secs(); let now = env.block.time.seconds(); if (last_update + tp) < now { - return to_binary(&QueryResponse::success().status("Expired".to_string())) + return to_binary( + &QueryResponse::success().status("Expired".to_string()), + ) } to_binary(&QueryResponse::success().status("Active".to_string())) }, @@ -370,7 +367,11 @@ pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { let consensus_state = ctx .consensus_state(&client_id, msg.height) .map_err(|e| ContractError::Tendermint(e.to_string()))?; - to_binary(&QueryResponse::success().timestamp(consensus_state.timestamp.unix_timestamp_nanos().unsigned_abs() as u64)) + to_binary( + &QueryResponse::success().timestamp( + consensus_state.timestamp.unix_timestamp_nanos().unsigned_abs() as u64, + ), + ) }, QueryMsg::VerifyClientMessage(msg) => { let ctx = Context::::new_ro(deps, env); diff --git a/light-clients/ics07-tendermint-cw/src/error.rs b/light-clients/ics07-tendermint-cw/src/error.rs index c694db223..32541b02d 100644 --- a/light-clients/ics07-tendermint-cw/src/error.rs +++ b/light-clients/ics07-tendermint-cw/src/error.rs @@ -60,4 +60,4 @@ impl From for StdError { fn from(e: ContractError) -> Self { StdError::GenericErr { msg: e.to_string() } } -} \ No newline at end of file +} diff --git a/light-clients/ics07-tendermint-cw/src/msg.rs b/light-clients/ics07-tendermint-cw/src/msg.rs index d7267e354..ac9627401 100644 --- a/light-clients/ics07-tendermint-cw/src/msg.rs +++ b/light-clients/ics07-tendermint-cw/src/msg.rs @@ -27,7 +27,10 @@ use ibc::{ }; use ibc_proto::{google::protobuf::Any, ibc::core::client::v1::Height as HeightRaw}; use ics07_tendermint::{ - client_message::{ClientMessage, Header, Misbehaviour, TENDERMINT_HEADER_TYPE_URL, TENDERMINT_MISBEHAVIOUR_TYPE_URL}, + client_message::{ + ClientMessage, Header, Misbehaviour, TENDERMINT_HEADER_TYPE_URL, + TENDERMINT_MISBEHAVIOUR_TYPE_URL, + }, client_state::ClientState, consensus_state::ConsensusState, }; @@ -67,7 +70,13 @@ pub struct QueryResponse { impl QueryResponse { pub fn success() -> Self { - Self { is_valid: true, status: None, genesis_metadata: None, found_misbehaviour: None, timestamp: None } + Self { + is_valid: true, + status: None, + genesis_metadata: None, + found_misbehaviour: None, + timestamp: None, + } } pub fn status(mut self, status: String) -> Self { @@ -79,7 +88,7 @@ impl QueryResponse { self.genesis_metadata = genesis_metadata; self } - + pub fn misbehaviour(mut self, found_misbehavior: bool) -> Self { self.found_misbehaviour = Some(found_misbehavior); self @@ -176,7 +185,8 @@ impl VerifyClientMessage { let any = Any::decode(&mut raw.as_slice())?; let client_message = match &*any.type_url { TENDERMINT_HEADER_TYPE_URL => ClientMessage::Header(Header::decode_vec(&any.value)?), - TENDERMINT_MISBEHAVIOUR_TYPE_URL => ClientMessage::Misbehaviour(Misbehaviour::decode_vec(&any.value)?), + TENDERMINT_MISBEHAVIOUR_TYPE_URL => + ClientMessage::Misbehaviour(Misbehaviour::decode_vec(&any.value)?), _ => return Err(ContractError::Tendermint("unknown client message type".to_string())), }; Ok(client_message) @@ -361,7 +371,7 @@ impl TryFrom for VerifyUpgradeAndUp let any = Any::decode(&mut raw.upgrade_client_state.as_slice())?; let upgrade_client_state = ClientState::decode_vec(&any.value)?; let any = Any::decode(&mut raw.upgrade_consensus_state.as_slice())?; - let upgrade_consensus_state = ConsensusState::decode_vec(&any.value)?; + let upgrade_consensus_state = ConsensusState::decode_vec(&any.value)?; if upgrade_client_state.trust_level != TrustThreshold::ZERO || upgrade_client_state.trusting_period != Duration::ZERO || upgrade_client_state.max_clock_drift != Duration::ZERO || @@ -373,8 +383,8 @@ impl TryFrom for VerifyUpgradeAndUp } Ok(VerifyUpgradeAndUpdateStateMsg { - upgrade_client_state: upgrade_client_state, - upgrade_consensus_state: upgrade_consensus_state, + upgrade_client_state, + upgrade_consensus_state, proof_upgrade_client: CommitmentProofBytes::try_from(raw.proof_upgrade_client)?, proof_upgrade_consensus_state: CommitmentProofBytes::try_from( raw.proof_upgrade_consensus_state, diff --git a/light-clients/ics07-tendermint-cw/src/state.rs b/light-clients/ics07-tendermint-cw/src/state.rs index 2b7ae678f..057892a82 100644 --- a/light-clients/ics07-tendermint-cw/src/state.rs +++ b/light-clients/ics07-tendermint-cw/src/state.rs @@ -25,7 +25,10 @@ use ics07_tendermint::{client_state::ClientState, consensus_state::ConsensusStat use prost::Message; /// Retrieves raw bytes from storage and deserializes them into [`ClientState`] -pub fn get_client_state(deps: Deps, client_id: ClientId) -> Result, Error> { +pub fn get_client_state( + deps: Deps, + client_id: ClientId, +) -> Result, Error> { deps.storage .get(&"clientState".to_string().into_bytes()) .ok_or_else(|| Error::unknown_client_state_type(client_id.to_string())) diff --git a/light-clients/ics08-wasm/src/client_def.rs b/light-clients/ics08-wasm/src/client_def.rs index 32d23ab00..3725850fd 100644 --- a/light-clients/ics08-wasm/src/client_def.rs +++ b/light-clients/ics08-wasm/src/client_def.rs @@ -77,12 +77,8 @@ where client_state: Self::ClientState, client_msg: Self::ClientMessage, ) -> Result<(), Error> { - self.inner.verify_client_message( - ctx, - client_id, - *client_state.inner, - *client_msg.inner, - ) + self.inner + .verify_client_message(ctx, client_id, *client_state.inner, *client_msg.inner) } fn update_state( @@ -92,12 +88,9 @@ where client_state: Self::ClientState, client_msg: Self::ClientMessage, ) -> Result<(Self::ClientState, ConsensusUpdateResult), Error> { - let (inner_client_state, inner_consensus_update_result) = self.inner.update_state( - ctx, - client_id, - *client_state.inner, - *client_msg.inner, - )?; + let (inner_client_state, inner_consensus_update_result) = + self.inner + .update_state(ctx, client_id, *client_state.inner, *client_msg.inner)?; let client_state = ClientState { data: client_state.data.clone(), checksum: client_state.checksum.clone(), @@ -132,12 +125,8 @@ where client_state: Self::ClientState, client_msg: Self::ClientMessage, ) -> Result { - self.inner.check_for_misbehaviour( - ctx, - client_id, - *client_state.inner, - *client_msg.inner, - ) + self.inner + .check_for_misbehaviour(ctx, client_id, *client_state.inner, *client_msg.inner) } fn verify_upgrade_and_update_state( diff --git a/light-clients/ics08-wasm/src/client_message.rs b/light-clients/ics08-wasm/src/client_message.rs index 2c89ce958..42799f821 100644 --- a/light-clients/ics08-wasm/src/client_message.rs +++ b/light-clients/ics08-wasm/src/client_message.rs @@ -24,11 +24,11 @@ use core::fmt::Display; #[cfg(feature = "cosmwasm")] use cosmwasm_schema::cw_serde; use ibc::{ - core::ics02_client::client_message::ClientMessage as IbcClientMessage, - protobuf::Protobuf, + core::ics02_client::client_message::ClientMessage as IbcClientMessage, protobuf::Protobuf, +}; +use ibc_proto::{ + google::protobuf::Any, ibc::lightclients::wasm::v1::ClientMessage as RawClientMessage, }; -use ibc_proto::google::protobuf::Any; -use ibc_proto::ibc::lightclients::wasm::v1::ClientMessage as RawClientMessage; use prost::Message; pub const WASM_CLIENT_MESSAGE_TYPE_URL: &str = "/ibc.lightclients.wasm.v1.ClientMessage"; @@ -81,12 +81,10 @@ where fn try_from(raw: RawClientMessage) -> Result { let any = Any::decode(&mut &raw.data[..]) .map_err(|e| format!("failed to decode ClientMessage::data into Any: {}", e))?; - let inner = AnyClientMessage::try_from(any).map_err( - |e| { - format!("failed to decode ClientMessage::data into ClientMessage: {}", e) - })?; - Ok(Self { data: raw.data, inner: Box::new(inner)}) - + let inner = AnyClientMessage::try_from(any).map_err(|e| { + format!("failed to decode ClientMessage::data into ClientMessage: {}", e) + })?; + Ok(Self { data: raw.data, inner: Box::new(inner) }) } } diff --git a/light-clients/ics08-wasm/src/consensus_state.rs b/light-clients/ics08-wasm/src/consensus_state.rs index 9921ae23d..33dab6555 100644 --- a/light-clients/ics08-wasm/src/consensus_state.rs +++ b/light-clients/ics08-wasm/src/consensus_state.rs @@ -30,8 +30,7 @@ use cosmwasm_schema::cw_serde; use ibc::{ core::{ ics02_client::client_consensus::{ - ConsensusState as IcsConsensusState, - ConsensusState as IbcConsensusState, + ConsensusState as IcsConsensusState, ConsensusState as IbcConsensusState, }, ics23_commitment::commitment::CommitmentRoot, }, diff --git a/light-clients/ics10-grandpa-cw/src/client.rs b/light-clients/ics10-grandpa-cw/src/client.rs index 71d944023..38ee87ba6 100644 --- a/light-clients/ics10-grandpa-cw/src/client.rs +++ b/light-clients/ics10-grandpa-cw/src/client.rs @@ -70,9 +70,7 @@ impl<'a, H: HostFunctions
> ClientReader for Context<' })?; match ClientType::from_str(&data) { Err(_err) => Err(Error::unknown_client_type(data.to_string())), - Ok(val) => { - Ok(val) - }, + Ok(val) => Ok(val), } } @@ -88,7 +86,6 @@ impl<'a, H: HostFunctions
> ClientReader for Context<' client_id: &ClientId, height: Height, ) -> Result { - let consensus_states = ReadonlyConsensusStates::new(self.storage()); let value = consensus_states .get(height) diff --git a/light-clients/ics10-grandpa-cw/src/context.rs b/light-clients/ics10-grandpa-cw/src/context.rs index 2909b90b6..71ad1dce7 100644 --- a/light-clients/ics10-grandpa-cw/src/context.rs +++ b/light-clients/ics10-grandpa-cw/src/context.rs @@ -80,7 +80,7 @@ impl<'a, H> Context<'a, H> { pub fn log(&self, msg: &str) { match &self.deps_mut { Some(deps_mut) => deps_mut.api.debug(msg), - None => unimplemented!() + None => unimplemented!(), } } @@ -89,15 +89,15 @@ impl<'a, H> Context<'a, H> { Some(deps_mut) => deps_mut.storage, None => match &self.deps { Some(deps) => deps.storage, - None => unimplemented!() - } + None => unimplemented!(), + }, } } pub fn storage_mut(&mut self) -> &mut dyn Storage { match &mut self.deps_mut { Some(deps_mut) => deps_mut.storage, - None => unimplemented!() + None => unimplemented!(), } } @@ -186,11 +186,10 @@ where let client_states = ReadonlyClientStates::new(self.storage()); let checksum = match self.checksum.clone() { None => { - let encoded_wasm_client_state = client_states.get_prefixed(prefix).ok_or_else(|| { - ContractError::Grandpa( - Error::client_not_found(client_id).to_string(), - ) - })?; + let encoded_wasm_client_state = + client_states.get_prefixed(prefix).ok_or_else(|| { + ContractError::Grandpa(Error::client_not_found(client_id).to_string()) + })?; let any = Any::decode(&*encoded_wasm_client_state) .map_err(Error::decode) .map_err(|e| ContractError::Grandpa(e.to_string()))?; diff --git a/light-clients/ics10-grandpa-cw/src/contract.rs b/light-clients/ics10-grandpa-cw/src/contract.rs index f094c2d7c..8503bc5aa 100644 --- a/light-clients/ics10-grandpa-cw/src/contract.rs +++ b/light-clients/ics10-grandpa-cw/src/contract.rs @@ -18,9 +18,8 @@ use crate::{ error::ContractError, log, msg::{ - CheckForMisbehaviourMsg, - ContractResult, SudoMsg, ExportMetadataMsg, QueryMsg, QueryResponse, - StatusMsg, UpdateStateMsg, UpdateStateOnMisbehaviourMsg, VerifyClientMessage, + CheckForMisbehaviourMsg, ContractResult, ExportMetadataMsg, QueryMsg, QueryResponse, + StatusMsg, SudoMsg, UpdateStateMsg, UpdateStateOnMisbehaviourMsg, VerifyClientMessage, VerifyMembershipMsg, VerifyNonMembershipMsg, VerifyUpgradeAndUpdateStateMsg, }, state::{get_client_state, get_consensus_state}, @@ -30,7 +29,9 @@ use byteorder::{ByteOrder, LittleEndian}; use core::hash::Hasher; #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; -use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult, StdError}; +use cosmwasm_std::{ + to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdError, StdResult, +}; use cw_storage_plus::{Item, Map}; use digest::Digest; use grandpa_light_client_primitives::justification::AncestryChain; @@ -152,11 +153,7 @@ pub fn instantiate( } #[cfg_attr(not(feature = "library"), entry_point)] -pub fn sudo( - deps: DepsMut, - env: Env, - msg: SudoMsg, -) -> Result { +pub fn sudo(deps: DepsMut, env: Env, msg: SudoMsg) -> Result { let client = GrandpaClient::::default(); let client_id = ClientId::from_str(env.contract.address.as_str()).expect("client id is valid"); let mut ctx = Context::::new(deps, env); @@ -220,7 +217,8 @@ fn process_message( }) }, SudoMsg::MigrateClientStore(_msg) => { - // load the substitute client state from the combined storage using the appropriate prefix + // load the substitute client state from the combined storage using the appropriate + // prefix let substitute_client_state = ctx .client_state_prefixed(SUBSTITUTE_PREFIX) .map_err(|e| ContractError::Grandpa(e.to_string()))?; @@ -250,7 +248,7 @@ fn process_message( msg.value, ) .map_err(|e| ContractError::Grandpa(e.to_string())) - .map(|_| to_binary(&ContractResult::success())) + .map(|_| to_binary(&ContractResult::success())) }, SudoMsg::VerifyNonMembership(msg) => { let msg = VerifyNonMembershipMsg::try_from(msg)?; @@ -324,9 +322,18 @@ pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { let height = client_state.latest_height(); match get_consensus_state(deps, &client_id, height) { Ok(consensus_state_raw) => { - let consensus_state = Context::::decode_consensus_state(&consensus_state_raw).map_err(|e|StdError::serialize_err(e.to_string(), e.to_string()))?; - if client_state.expired(core::time::Duration::from_secs(env.block.time.seconds() - consensus_state.timestamp.unix_timestamp() as u64)) { - return to_binary(&QueryResponse::success().status("Expired".to_string())); + let consensus_state = + Context::::decode_consensus_state(&consensus_state_raw) + .map_err(|e| { + StdError::serialize_err(e.to_string(), e.to_string()) + })?; + if client_state.expired(core::time::Duration::from_secs( + env.block.time.seconds() - + consensus_state.timestamp.unix_timestamp() as u64, + )) { + return to_binary( + &QueryResponse::success().status("Expired".to_string()), + ) } to_binary(&QueryResponse::success().status("Active".to_string())) }, @@ -339,7 +346,11 @@ pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { let consensus_state = ctx .consensus_state(&client_id, msg.height) .map_err(|e| ContractError::Grandpa(e.to_string()))?; - to_binary(&QueryResponse::success().timestamp(consensus_state.timestamp.unix_timestamp_nanos().unsigned_abs() as u64)) + to_binary( + &QueryResponse::success().timestamp( + consensus_state.timestamp.unix_timestamp_nanos().unsigned_abs() as u64, + ), + ) }, QueryMsg::VerifyClientMessage(msg) => { let ctx = Context::::new_ro(deps, env); @@ -456,56 +467,58 @@ pub extern "C" fn ext_hashing_twox_64_version_1(data: i64) -> i32 { out_ptr as i32 } - #[cfg(test)] mod tests { - use cosmwasm_std::from_binary; - use cosmwasm_std::testing::{mock_dependencies, mock_env}; - use tendermint::Time; + use cosmwasm_std::{ + from_binary, + testing::{mock_dependencies, mock_env}, + }; use ibc::core::ics02_client::client_state::ClientState; + use tendermint::Time; - use crate::ics23::ClientStates; + use crate::ics23::ClientStates; - use super::*; - #[test] - fn test_query() { + use super::*; + #[test] + fn test_query() { let mut deps = mock_dependencies(); - let env = mock_env(); - - - for (expected, offset) in [("Active", 0i64), ("Expired", env.block.time.seconds() as i64 - 10), ("Frozen", 0i64)] { - let mut client_state = ics10_grandpa::client_state::ClientState::::default(); - let mut consensus_state = ics10_grandpa::consensus_state::ConsensusState::new(vec![], Time::from_unix_timestamp(0, 0).unwrap()); - let height = Height { revision_number: 0, revision_height: 1000}; + let env = mock_env(); + + for (expected, offset) in + [("Active", 0i64), ("Expired", env.block.time.seconds() as i64 - 10), ("Frozen", 0i64)] + { + let mut client_state = + ics10_grandpa::client_state::ClientState::::default(); + let mut consensus_state = ics10_grandpa::consensus_state::ConsensusState::new( + vec![], + Time::from_unix_timestamp(0, 0).unwrap(), + ); + let height = Height { revision_number: 0, revision_height: 1000 }; client_state.latest_para_height = height.revision_height as _; - - consensus_state.timestamp = Time::from_unix_timestamp(env.block.time.seconds() as i64 - offset, 0).unwrap(); + consensus_state.timestamp = + Time::from_unix_timestamp(env.block.time.seconds() as i64 - offset, 0).unwrap(); let deps_mut = deps.as_mut(); if expected == "Frozen" { - let height = Height { revision_number: 0, revision_height: height.revision_height - 100}; + let height = + Height { revision_number: 0, revision_height: height.revision_height - 100 }; client_state = client_state.with_frozen_height(height.clone()).unwrap(); } - + let mut client_states = ClientStates::new(deps_mut.storage); client_states.insert(client_state.encode_to_vec().unwrap()); - + let mut context = Context::new(deps_mut, env.clone()); context.store_client_state(ClientId::default(), client_state).unwrap(); - context.store_consensus_state(ClientId::default(), height , consensus_state).unwrap(); - - let resp = query( - deps.as_ref(), - mock_env(), - QueryMsg::Status(StatusMsg{}) - ).unwrap(); - + context + .store_consensus_state(ClientId::default(), height, consensus_state) + .unwrap(); + + let resp = query(deps.as_ref(), mock_env(), QueryMsg::Status(StatusMsg {})).unwrap(); + let resp: QueryResponse = from_binary(&resp).unwrap(); - - assert_eq!( - resp, - QueryResponse::success().status(expected.to_string()) - ); + + assert_eq!(resp, QueryResponse::success().status(expected.to_string())); } - } -} \ No newline at end of file + } +} diff --git a/light-clients/ics10-grandpa-cw/src/error.rs b/light-clients/ics10-grandpa-cw/src/error.rs index 44d4baf7e..ba39107ca 100644 --- a/light-clients/ics10-grandpa-cw/src/error.rs +++ b/light-clients/ics10-grandpa-cw/src/error.rs @@ -60,4 +60,4 @@ impl From for StdError { fn from(e: ContractError) -> Self { StdError::GenericErr { msg: e.to_string() } } -} \ No newline at end of file +} diff --git a/light-clients/ics10-grandpa-cw/src/msg.rs b/light-clients/ics10-grandpa-cw/src/msg.rs index b7b27c024..13d7d0c99 100644 --- a/light-clients/ics10-grandpa-cw/src/msg.rs +++ b/light-clients/ics10-grandpa-cw/src/msg.rs @@ -30,7 +30,9 @@ use ics08_wasm::{ consensus_state::ConsensusState as WasmConsensusState, }; use ics10_grandpa::{ - client_message::{ClientMessage, Header, Misbehaviour, GRANDPA_HEADER_TYPE_URL, GRANDPA_MISBEHAVIOUR_TYPE_URL}, + client_message::{ + ClientMessage, Header, Misbehaviour, GRANDPA_HEADER_TYPE_URL, GRANDPA_MISBEHAVIOUR_TYPE_URL, + }, client_state::ClientState, consensus_state::ConsensusState, }; @@ -70,7 +72,13 @@ pub struct QueryResponse { impl QueryResponse { pub fn success() -> Self { - Self { is_valid: true, status: None, genesis_metadata: None, found_misbehaviour: None, timestamp: None } + Self { + is_valid: true, + status: None, + genesis_metadata: None, + found_misbehaviour: None, + timestamp: None, + } } pub fn status(mut self, status: String) -> Self { @@ -82,7 +90,7 @@ impl QueryResponse { self.genesis_metadata = genesis_metadata; self } - + pub fn misbehaviour(mut self, found_misbehavior: bool) -> Self { self.found_misbehaviour = Some(found_misbehavior); self @@ -198,7 +206,8 @@ impl VerifyClientMessage { let any = Any::decode(&mut raw.as_slice())?; let client_message = match &*any.type_url { GRANDPA_HEADER_TYPE_URL => ClientMessage::Header(Header::decode_vec(&any.value)?), - GRANDPA_MISBEHAVIOUR_TYPE_URL => ClientMessage::Misbehaviour(Misbehaviour::decode_vec(&any.value)?), + GRANDPA_MISBEHAVIOUR_TYPE_URL => + ClientMessage::Misbehaviour(Misbehaviour::decode_vec(&any.value)?), _ => return Err(ContractError::Grandpa("unknown client message type".to_string())), }; Ok(client_message) diff --git a/light-clients/ics10-grandpa-cw/src/state.rs b/light-clients/ics10-grandpa-cw/src/state.rs index 4720f59bc..23b9813f4 100644 --- a/light-clients/ics10-grandpa-cw/src/state.rs +++ b/light-clients/ics10-grandpa-cw/src/state.rs @@ -25,7 +25,10 @@ use ics10_grandpa::client_state::ClientState; use prost::Message; /// Retrieves raw bytes from storage and deserializes them into [`ClientState`] -pub fn get_client_state(deps: Deps, client_id: ClientId) -> Result, Error> { +pub fn get_client_state( + deps: Deps, + client_id: ClientId, +) -> Result, Error> { deps.storage .get(&"clientState".to_string().into_bytes()) .ok_or_else(|| Error::unknown_client_state_type(client_id.to_string())) diff --git a/utils/subxt/generated/src/composable/parachain.rs b/utils/subxt/generated/src/composable/parachain.rs index 5da5147be..24de0c69a 100644 --- a/utils/subxt/generated/src/composable/parachain.rs +++ b/utils/subxt/generated/src/composable/parachain.rs @@ -28492,7 +28492,7 @@ pub mod api { module_id: ::std::vec::Vec<::core::primitive::u8>, }, #[codec(index = 24)] - PushWasmCode { wasm_checksum : ::std::vec::Vec<::core::primitive::u8> }, + PushWasmCode { wasm_checksum: ::std::vec::Vec<::core::primitive::u8> }, } } pub mod ics20_fee { diff --git a/utils/subxt/generated/src/default/parachain.rs b/utils/subxt/generated/src/default/parachain.rs index fb717dae3..0a5a752c5 100644 --- a/utils/subxt/generated/src/default/parachain.rs +++ b/utils/subxt/generated/src/default/parachain.rs @@ -13474,7 +13474,7 @@ pub mod api { module_id: ::std::vec::Vec<::core::primitive::u8>, }, #[codec(index = 24)] - PushWasmCode { wasm_checksum : ::std::vec::Vec<::core::primitive::u8> }, + PushWasmCode { wasm_checksum: ::std::vec::Vec<::core::primitive::u8> }, } } pub mod pallet { diff --git a/utils/subxt/generated/src/picasso_kusama/parachain.rs b/utils/subxt/generated/src/picasso_kusama/parachain.rs index 1bf8634fb..579d5bb94 100644 --- a/utils/subxt/generated/src/picasso_kusama/parachain.rs +++ b/utils/subxt/generated/src/picasso_kusama/parachain.rs @@ -34281,7 +34281,7 @@ pub mod api { module_id: ::std::vec::Vec<::core::primitive::u8>, }, #[codec(index = 24)] - PushWasmCode { wasm_checksum : ::std::vec::Vec<::core::primitive::u8> }, + PushWasmCode { wasm_checksum: ::std::vec::Vec<::core::primitive::u8> }, } } pub mod ics20_fee { diff --git a/utils/subxt/generated/src/picasso_rococo/parachain.rs b/utils/subxt/generated/src/picasso_rococo/parachain.rs index 1bf8634fb..579d5bb94 100644 --- a/utils/subxt/generated/src/picasso_rococo/parachain.rs +++ b/utils/subxt/generated/src/picasso_rococo/parachain.rs @@ -34281,7 +34281,7 @@ pub mod api { module_id: ::std::vec::Vec<::core::primitive::u8>, }, #[codec(index = 24)] - PushWasmCode { wasm_checksum : ::std::vec::Vec<::core::primitive::u8> }, + PushWasmCode { wasm_checksum: ::std::vec::Vec<::core::primitive::u8> }, } } pub mod ics20_fee {