diff --git a/Cargo.lock b/Cargo.lock index 0668773..49c5a77 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -452,13 +452,12 @@ dependencies = [ [[package]] name = "ethereum-consensus" version = "0.1.0" -source = "git+https://github.com/datachainlab/ethereum-light-client-rs?rev=v0.1.3#edc099170b44afee83508ffa1c951b32361e4d4f" +source = "git+https://github.com/datachainlab/ethereum-light-client-rs?rev=v0.1.4#8ef10cf5982d28cb9d71b126ca41d364dda18788" dependencies = [ "displaydoc", "hex", "milagro_bls", "primitive-types", - "rs_merkle", "serde", "sha2 0.10.7", "ssz-rs", @@ -480,7 +479,7 @@ dependencies = [ [[package]] name = "ethereum-ibc" version = "0.1.0" -source = "git+https://github.com/datachainlab/ethereum-ibc-rs?rev=v0.0.14#27719dd36f9971bc4a7d09c1059b454e3ce2a073" +source = "git+https://github.com/datachainlab/ethereum-ibc-rs?rev=v0.0.15#d652f330f24d638720cbed03099f3df7ae2d5b30" dependencies = [ "bytes", "displaydoc", @@ -500,7 +499,7 @@ dependencies = [ [[package]] name = "ethereum-ibc-proto" version = "0.1.0" -source = "git+https://github.com/datachainlab/ethereum-ibc-rs?rev=v0.0.14#27719dd36f9971bc4a7d09c1059b454e3ce2a073" +source = "git+https://github.com/datachainlab/ethereum-ibc-rs?rev=v0.0.15#d652f330f24d638720cbed03099f3df7ae2d5b30" dependencies = [ "prost", "serde", @@ -509,7 +508,7 @@ dependencies = [ [[package]] name = "ethereum-light-client-verifier" version = "0.1.0" -source = "git+https://github.com/datachainlab/ethereum-light-client-rs?rev=v0.1.3#edc099170b44afee83508ffa1c951b32361e4d4f" +source = "git+https://github.com/datachainlab/ethereum-light-client-rs?rev=v0.1.4#8ef10cf5982d28cb9d71b126ca41d364dda18788" dependencies = [ "displaydoc", "ethereum-consensus", @@ -1289,15 +1288,6 @@ dependencies = [ "rustc-hex", ] -[[package]] -name = "rs_merkle" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05225752ca6ede4cb1b73aa37ce3904affd042e98f28246f56f438ebfd47a810" -dependencies = [ - "sha2 0.10.7", -] - [[package]] name = "ruint" version = "1.11.1" diff --git a/Cargo.toml b/Cargo.toml index 0e5a14a..29f41c6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,4 +10,4 @@ displaydoc = { version = "0.2", default-features = false } tiny-keccak = { version = "1.4" } light-client = { git = "https://github.com/datachainlab/lcp", rev = "v0.2.11", default-features = false, features = ["ibc"] } -ethereum-ibc = { git = "https://github.com/datachainlab/ethereum-ibc-rs", rev = "v0.0.14", default-features = false } +ethereum-ibc = { git = "https://github.com/datachainlab/ethereum-ibc-rs", rev = "v0.0.15", default-features = false } diff --git a/src/client.rs b/src/client.rs index d4ee1c0..53a95b1 100644 --- a/src/client.rs +++ b/src/client.rs @@ -3,11 +3,10 @@ use crate::internal_prelude::*; use crate::message::{ClientMessage, Header, Misbehaviour}; use crate::state::{gen_state_id, ClientState, ConsensusState}; use core::str::FromStr; +use core::time::Duration; use ethereum_ibc::client_state::ClientState as EthereumClientState; -use ethereum_ibc::consensus::compute::compute_timestamp_at_slot; use ethereum_ibc::consensus_state::ConsensusState as EthereumConsensusState; use ethereum_ibc::eth_client_type; -use ethereum_ibc::light_client_verifier::updates::ConsensusUpdate; use ibc::core::ics02_client::client_state::{ downcast_client_state, ClientState as Ics02ClientState, UpdatedState, }; @@ -351,20 +350,6 @@ impl EthereumLightClient .clone(), ); - let cctx = client_state.build_context(&ibc_ctx); - let (update_0, update_1) = misbehaviour.data.clone().updates(); - - let update_0_timestamp = Time::from_unix_timestamp_nanos( - compute_timestamp_at_slot(&cctx, update_0.finalized_beacon_header().slot).0 as u128 - * 1_000_000_000, - ) - .unwrap(); - let update_1_timestamp = Time::from_unix_timestamp_nanos( - compute_timestamp_at_slot(&cctx, update_1.finalized_beacon_header().slot).0 as u128 - * 1_000_000_000, - ) - .unwrap(); - Ok(MisbehaviourData { new_any_client_state: new_client_state.into(), message: MisbehaviourProxyMessage { @@ -374,25 +359,13 @@ impl EthereumLightClient &client_state, vec![trusted_height.into()], )?, + // For misbehaviour, it is acceptable if the header's timestamp points to the future. context: ValidationContext::TrustingPeriod(TrustingPeriodContext::new( client_state.trusting_period, - client_state.max_clock_drift, - update_0_timestamp, + Duration::ZERO, + Time::unix_epoch(), trusted_consensus_state.timestamp.into(), - )) - .aggregate(ValidationContext::TrustingPeriod( - TrustingPeriodContext::new( - client_state.trusting_period, - client_state.max_clock_drift, - update_1_timestamp, - trusted_consensus_state.timestamp.into(), - ), - )) - .map_err(|e| { - Error::ICS02(ClientError::ClientSpecific { - description: e.to_string(), - }) - })?, + )), client_message: Any::from(misbehaviour), }, }) diff --git a/src/state.rs b/src/state.rs index facf90e..e9145f7 100644 --- a/src/state.rs +++ b/src/state.rs @@ -77,31 +77,22 @@ impl From for Any { } // canonicalize_client_state canonicalizes some fields of specified client state -// target fields: latest_slot, latest_execution_block_number, frozen_height +// target fields: latest_execution_block_number, frozen_height pub fn canonicalize_client_state( client_state: ClientState, ) -> ClientState { let mut client_state = client_state.0; - client_state.latest_slot = 0u64.into(); client_state.latest_execution_block_number = 0u64.into(); client_state.frozen_height = None; ClientState(client_state) } -// canonicalize_consensus_state canonicalizes some fields of specified consensus state -// target field: next_sync_committee -pub fn canonicalize_consensus_state(consensus_state: ConsensusState) -> ConsensusState { - let mut consensus_state = consensus_state.0; - consensus_state.next_sync_committee = None; - ConsensusState(consensus_state) -} - pub fn gen_state_id( client_state: ClientState, consensus_state: ConsensusState, ) -> Result { Ok(gen_state_id_from_any( &canonicalize_client_state(client_state).into(), - &canonicalize_consensus_state(consensus_state).into(), + &consensus_state.into(), )?) }