Skip to content

Commit

Permalink
Use types from upstream cf-guest (#488)
Browse files Browse the repository at this point in the history
  • Loading branch information
mina86 authored Mar 30, 2024
1 parent 0e3152a commit 3367f2a
Show file tree
Hide file tree
Showing 21 changed files with 521 additions and 1,142 deletions.
45 changes: 35 additions & 10 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ibc/modules/src/core/ics23_commitment/commitment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ use super::merkle::MerkleProof;

#[derive(Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(transparent)]
#[repr(transparent)]
pub struct CommitmentRoot {
#[serde(serialize_with = "crate::serializers::ser_hex_upper")]
#[serde(deserialize_with = "crate::serializers::deser_hex_upper")]
Expand Down
15 changes: 9 additions & 6 deletions light-clients/cf-guest-cw/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ use ibc::{
core::{
ics02_client::{
client_consensus::ConsensusState as _,
client_state::ClientType,
client_state::{ClientState as _, ClientType},
context::{ClientKeeper, ClientReader, ClientTypes},
error::Error,
},
Expand Down Expand Up @@ -73,7 +73,10 @@ impl<'a> ClientReader for Context<'a> {
}
}

fn client_state(&self, client_id: &ClientId) -> Result<ClientState<crate::crypto::PubKey>, Error> {
fn client_state(
&self,
client_id: &ClientId,
) -> Result<ClientState<crate::crypto::PubKey>, Error> {
let client_states = ReadonlyClientStates::new(self.storage());
let data = client_states.get().ok_or_else(|| Error::client_not_found(client_id.clone()))?;
let state = Self::decode_client_state(&data)?;
Expand Down Expand Up @@ -256,8 +259,7 @@ impl<'a> Context<'a> {
))
})?;
let any = Any::decode(&*wasm_state.data).map_err(Error::decode)?;
let state =
ClientState::decode_vec(&any.value).map_err(Error::invalid_any_client_state)?;
let state = ClientState::decode_vec(&any.value).map_err(Error::invalid_any_client_state)?;
Ok(state)
}

Expand Down Expand Up @@ -286,8 +288,9 @@ impl<'a> Context<'a> {
"[client_state]: error decoding client state bytes to WasmConsensusState {e}"
))
})?;
wasm_client_state.data = ibc_proto::google::protobuf::Any::from(&client_state).encode_to_vec();
wasm_client_state.latest_height = ibc::Height::new(0, client_state.latest_height.into());
wasm_client_state.data =
ibc_proto::google::protobuf::Any::from(&client_state).encode_to_vec();
wasm_client_state.latest_height = client_state.latest_height();
let vec1 = wasm_client_state.to_any().encode_to_vec();
Ok(vec1)
}
Expand Down
12 changes: 7 additions & 5 deletions light-clients/cf-guest-cw/src/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,10 @@ impl<'a> Context<'a> {
consensus_states.insert_prefixed(height, encoded, prefix);
}

pub fn client_state_prefixed(&self, prefix: &[u8]) -> Result<ClientState<crate::crypto::PubKey>, ContractError> {
pub fn client_state_prefixed(
&self,
prefix: &[u8],
) -> Result<ClientState<crate::crypto::PubKey>, ContractError> {
let bytes =
ReadonlyClientStates::new(self.storage()).get_prefixed(prefix).ok_or_else(|| {
ContractError::Tendermint(format!("no client state found for prefix {prefix:?}",))
Expand All @@ -137,10 +140,9 @@ impl<'a> Context<'a> {
let data = client_states.get_prefixed(prefix).ok_or_else(|| {
ContractError::Tendermint("no client state found for prefix".to_string())
})?;
let encoded = Context::encode_client_state(client_state, data)
.map_err(|e| {
ContractError::Tendermint(format!("error encoding client state: {e:?}"))
})?;
let encoded = Context::encode_client_state(client_state, data).map_err(|e| {
ContractError::Tendermint(format!("error encoding client state: {e:?}"))
})?;
let mut client_states = ClientStates::new(self.storage_mut());
client_states.insert_prefixed(encoded, prefix);
Ok(())
Expand Down
11 changes: 5 additions & 6 deletions light-clients/cf-guest-cw/src/contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ pub fn instantiate(
let client_state = ctx
.client_state(&client_id)
.map_err(|e| ContractError::Tendermint(e.to_string()))?;
let latest_height = ibc::Height::new(0, client_state.latest_height.into());
let latest_height = client_state.latest_height();
ctx.store_update_height(client_id.clone(), latest_height, ctx.host_height())
.map_err(|e| ContractError::Tendermint(e.to_string()))?;
ctx.store_update_time(client_id, latest_height, ctx.host_timestamp())
Expand Down Expand Up @@ -198,7 +198,7 @@ fn process_message(
.map_err(|e| ContractError::Tendermint(e.to_string()))?;
},
}
if u64::from(cs.latest_height) > latest_revision_height {
if u64::from(cs.0.latest_height) > latest_revision_height {
ctx.store_client_state(client_id, cs)
.map_err(|e| ContractError::Tendermint(e.to_string()))?;
}
Expand Down Expand Up @@ -266,15 +266,14 @@ pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult<Binary> {
return to_binary(&QueryResponse::status("Frozen".to_string()));
}

let height = client_state.latest_height;
let height = ibc::Height::new(0, height.into());
let height = client_state.latest_height();
let consensus_state = match get_consensus_state(deps, &client_id, height) {
Ok(state) => state,
Err(_) => return to_binary(&QueryResponse::status("Expired".to_string())),
};

let last_update = consensus_state.timestamp_ns.get();
let trusting_period = client_state.trusting_period_ns;
let last_update = consensus_state.0.timestamp_ns.get();
let trusting_period = client_state.0.trusting_period_ns;
let now = env.block.time.nanos();
if last_update + trusting_period < now {
return to_binary(&QueryResponse::status("Expired".to_string()))
Expand Down
10 changes: 10 additions & 0 deletions light-clients/cf-guest-cw/src/crypto.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ impl guestchain::PubKey for PubKey {
fn to_vec(&self) -> Vec<u8> {
self.0.as_bytes().to_vec()
}

fn as_bytes<'a>(&'a self) -> alloc::borrow::Cow<'a, [u8]> {
alloc::borrow::Cow::Borrowed(&self.0.as_bytes()[..])
}

fn from_bytes(bytes: &[u8]) -> Result<Self, guestchain::BadFormat> {
bytes.try_into().map(Self).map_err(|_| guestchain::BadFormat)
}
Expand Down Expand Up @@ -53,6 +58,11 @@ impl guestchain::Signature for Signature {
fn to_vec(&self) -> Vec<u8> {
self.0.to_vec()
}

fn as_bytes<'a>(&'a self) -> alloc::borrow::Cow<'a, [u8]> {
self.0.to_vec().into()
}

fn from_bytes(bytes: &[u8]) -> Result<Self, guestchain::BadFormat> {
ed25519_dalek::Signature::from_slice(bytes)
.map(Self)
Expand Down
8 changes: 4 additions & 4 deletions light-clients/cf-guest-cw/src/helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ use crate::{
use cosmwasm_std::{to_binary, Addr, CosmosMsg, StdResult, WasmMsg};
use ibc::core::{
ics02_client::{
client_consensus::ConsensusState as _, context::ClientReader, error::Error as Ics02Error,
height::Height,
client_consensus::ConsensusState as _, client_state::ClientState as _,
context::ClientReader, error::Error as Ics02Error, height::Height,
},
ics23_commitment::{commitment::CommitmentProofBytes, merkle::MerkleProof},
ics24_host::identifier::ClientId,
Expand Down Expand Up @@ -123,12 +123,12 @@ pub fn prune_oldest_consensus_state(
current_time: u64,
) {
let mut processed_states = ProcessedStates::new(ctx.storage_mut());
let latest_height = ibc::Height::new(0, client_state.latest_height.into());
let latest_height = client_state.latest_height();
if let Some(earliest_height) = processed_states.get_earliest_height(latest_height) {
let processed_time =
processed_states.get_processed_time(earliest_height, &mut Vec::new()).unwrap();
let elapsed = current_time.saturating_sub(processed_time);
let expired = elapsed > client_state.trusting_period_ns;
let expired = elapsed > client_state.0.trusting_period_ns;
if expired {
processed_states.remove_states_at_height(earliest_height);
let mut consensus_states = ConsensusStates::new(ctx.storage_mut());
Expand Down
9 changes: 5 additions & 4 deletions light-clients/cf-guest-cw/src/msg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -263,11 +263,11 @@ impl VerifyClientMessage {
let client_message = match raw {
ClientMessageRaw::Header(header) => {
let any = Any::decode(&mut header.data.as_slice())?;
ClientMessage::Header(Header::decode_vec(&any.value)?)
Header::decode_vec(&any.value)?.into()
},
ClientMessageRaw::Misbehaviour(misbehaviour) => {
let any = Any::decode(&mut misbehaviour.data.as_slice())?;
ClientMessage::Misbehaviour(Misbehaviour::decode_vec(&any.value)?)
Misbehaviour::decode_vec(&any.value)?.into()
},
};
Ok(client_message)
Expand Down Expand Up @@ -355,8 +355,9 @@ impl TryFrom<VerifyUpgradeAndUpdateStateMsgRaw> for VerifyUpgradeAndUpdateStateM

fn try_from(raw: VerifyUpgradeAndUpdateStateMsgRaw) -> Result<Self, Self::Error> {
let any = Any::decode(&mut raw.upgrade_client_state.data.as_slice())?;
let upgrade_client_state: ClientState<crate::crypto::PubKey> = ClientState::decode_vec(&any.value)?;
if upgrade_client_state.is_frozen {
let upgrade_client_state: ClientState<crate::crypto::PubKey> =
ClientState::decode_vec(&any.value)?;
if upgrade_client_state.0.is_frozen {
return ibc::prelude::Err(ContractError::Tendermint(
"Upgrade client state not zeroed".to_string(),
))
Expand Down
19 changes: 11 additions & 8 deletions light-clients/cf-guest/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@ borsh = "0.10"
bytemuck = { version = "1.14", default-features = false, features = ["must_cast"]}
derive_more = { version = "0.99", features = ["from"], default-features = false }
prost = { version = "0.11" ,features = ["prost-derive"], default-features = false }
prost-12 = { package = "prost", version = "0.12", default-features = false }
ed25519-consensus = { version = "2", default-features = false }
serde = { version = "1.0", default-features = false, features = ["derive"] }

# New IBC
ibc-core-client-context = { git = "https://github.com/dhruvja/ibc-rs", rev = "6bb51e2d02c016d572974ec8f47633c1f85b6ba8", default-features = false }
ibc-core-client-types = { git = "https://github.com/dhruvja/ibc-rs", rev = "6bb51e2d02c016d572974ec8f47633c1f85b6ba8", default-features = false }
ibc-core-handler-types = { git = "https://github.com/dhruvja/ibc-rs", rev = "6bb51e2d02c016d572974ec8f47633c1f85b6ba8", default-features = false }
ibc-core-host-types = { git = "https://github.com/dhruvja/ibc-rs", rev = "6bb51e2d02c016d572974ec8f47633c1f85b6ba8", default-features = false }
Expand All @@ -24,11 +26,12 @@ ibc-derive = { path = "../../ibc/derive", default-features = false }

tendermint-proto = { git = "https://github.com/informalsystems/tendermint-rs", rev = "e81f7bf23d63ffbcd242381d1ce5e35da3515ff1", default-features = false }

guestchain = { git = "https://github.com/ComposableFi/emulated-light-client/", default-features = false }
lib = { git = "https://github.com/ComposableFi/emulated-light-client/", features = ["borsh"], default-features = false }
trie-ids = { git = "https://github.com/ComposableFi/emulated-light-client/", default-features = false }
sealable-trie = { git = "https://github.com/ComposableFi/emulated-light-client/", features = ["borsh"], default-features = false }
stdx = { git = "https://github.com/ComposableFi/emulated-light-client/", default-features = false }
guestchain = { git = "https://github.com/ComposableFi/emulated-light-client/", default-features = false }
lib = { git = "https://github.com/ComposableFi/emulated-light-client/", features = ["borsh"], default-features = false }
trie-ids = { git = "https://github.com/ComposableFi/emulated-light-client/", default-features = false }
sealable-trie = { git = "https://github.com/ComposableFi/emulated-light-client/", features = ["borsh"], default-features = false }
stdx = { git = "https://github.com/ComposableFi/emulated-light-client/", default-features = false }
cf-guest-upstream = { package = "cf-guest", git = "https://github.com/ComposableFi/emulated-light-client/", default-features = false }

[build-dependencies]
prost-build = { version = "0.11", default-features = false }
Expand All @@ -37,9 +40,9 @@ prost-build = { version = "0.11", default-features = false }
insta = { version = "1.34.0" }
rand = { version = "0.8.5" }

guestchain = { git = "https://github.com/ComposableFi/emulated-light-client/", default-features = false, features = ["test_utils"] }
lib = { git = "https://github.com/ComposableFi/emulated-light-client/", features = ["test_utils"] }
memory = { git = "https://github.com/ComposableFi/emulated-light-client/", features = ["test_utils"] }
guestchain = { git = "https://github.com/ComposableFi/emulated-light-client/", default-features = false, features = ["test_utils"] }
lib = { git = "https://github.com/ComposableFi/emulated-light-client/", default-features = false, features = ["test_utils"] }
memory = { git = "https://github.com/ComposableFi/emulated-light-client/", default-features = false, features = ["test_utils"] }

[features]
std = []
7 changes: 0 additions & 7 deletions light-clients/cf-guest/build.rs

This file was deleted.

Loading

0 comments on commit 3367f2a

Please sign in to comment.