Skip to content

Commit 6bbe295

Browse files
committed
check clientid and use prefix of counterparty
1 parent d8c4acd commit 6bbe295

File tree

4 files changed

+53
-1
lines changed

4 files changed

+53
-1
lines changed

ibc-eureka-core/ics04-channel/src/handler/acknowledgement.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use ibc_eureka_core_channel_types::events::AcknowledgePacket;
66
use ibc_eureka_core_channel_types::msgs::MsgAcknowledgement;
77
use ibc_eureka_core_client::context::prelude::*;
88
use ibc_eureka_core_handler_types::events::{IbcEvent, MessageEvent};
9+
use ibc_eureka_core_host::types::identifiers::ClientId;
910
use ibc_eureka_core_host::types::path::{
1011
AckPathV2 as AckPath, ClientConsensusStatePath, CommitmentPathV2 as CommitmentPath, Path,
1112
};
@@ -134,9 +135,20 @@ where
134135
{
135136
// TODO(rano): avoid a vs b confusion
136137
let id_target_client_on_source = channel_target_client_on_source.as_ref();
138+
let id_source_client_on_target: &ClientId = channel_source_client_on_target.as_ref();
137139

138140
let client_val_ctx_a = ctx_a.get_client_validation_context();
139141

142+
let (stored_id_source_client_on_target, target_prefix) =
143+
client_val_ctx_a.counterparty_client(id_target_client_on_source)?;
144+
145+
if &stored_id_source_client_on_target != id_source_client_on_target {
146+
return Err(ChannelError::MismatchCounterparty {
147+
expected: stored_id_source_client_on_target.clone(),
148+
actual: id_source_client_on_target.clone(),
149+
});
150+
}
151+
140152
let target_client_on_source = client_val_ctx_a.client_state(id_target_client_on_source)?;
141153

142154
target_client_on_source

ibc-eureka-core/ics04-channel/src/handler/recv_packet.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use ibc_eureka_core_channel_types::events::{ReceivePacket, WriteAcknowledgement}
66
use ibc_eureka_core_channel_types::msgs::MsgRecvPacket;
77
use ibc_eureka_core_client::context::prelude::*;
88
use ibc_eureka_core_handler_types::events::{IbcEvent, MessageEvent};
9+
use ibc_eureka_core_host::types::identifiers::ClientId;
910
use ibc_eureka_core_host::types::path::{
1011
AckPathV2 as AckPath, ClientConsensusStatePath, CommitmentPathV2 as CommitmentPath, Path,
1112
ReceiptPathV2 as ReceiptPath, SeqRecvPathV2 as SeqRecvPath,
@@ -140,7 +141,20 @@ where
140141
// Verify proofs
141142
{
142143
let id_source_client_on_target = channel_source_client_on_target.as_ref();
144+
let id_target_client_on_source: &ClientId = channel_target_client_on_source.as_ref();
145+
143146
let client_val_ctx_b = ctx_b.get_client_validation_context();
147+
148+
let (stored_id_target_client_on_source, source_prefix) =
149+
client_val_ctx_b.counterparty_client(id_source_client_on_target)?;
150+
151+
if &stored_id_target_client_on_source != id_target_client_on_source {
152+
return Err(ChannelError::MismatchCounterparty {
153+
expected: stored_id_target_client_on_source.clone(),
154+
actual: id_target_client_on_source.clone(),
155+
});
156+
}
157+
144158
let source_client_on_target = client_val_ctx_b.client_state(id_source_client_on_target)?;
145159

146160
source_client_on_target

ibc-eureka-core/ics04-channel/src/handler/send_packet.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use ibc_eureka_core_channel_types::events::SendPacket;
44
use ibc_eureka_core_channel_types::packet::Packet;
55
use ibc_eureka_core_client::context::prelude::*;
66
use ibc_eureka_core_handler_types::events::{IbcEvent, MessageEvent};
7+
use ibc_eureka_core_host::types::identifiers::ClientId;
78
use ibc_eureka_core_host::types::path::{
89
ClientConsensusStatePath, CommitmentPathV2 as CommitmentPath, SeqSendPathV2 as SeqSendPath,
910
};
@@ -36,9 +37,20 @@ pub fn send_packet_validate(
3637
let channel_source_client_on_target = &packet.header.source_client_on_target;
3738
let seq_on_a = &packet.header.seq_on_a;
3839

40+
let client_val_ctx_a = ctx_a.get_client_validation_context();
41+
3942
let id_target_client_on_source = channel_target_client_on_source.as_ref();
43+
let id_source_client_on_target: &ClientId = channel_source_client_on_target.as_ref();
4044

41-
let client_val_ctx_a = ctx_a.get_client_validation_context();
45+
let (stored_id_source_client_on_target, _) =
46+
client_val_ctx_a.counterparty_client(id_target_client_on_source)?;
47+
48+
if &stored_id_source_client_on_target != id_source_client_on_target {
49+
return Err(ChannelError::MismatchCounterparty {
50+
expected: stored_id_source_client_on_target.clone(),
51+
actual: id_source_client_on_target.clone(),
52+
});
53+
}
4254

4355
let target_client_on_source = client_val_ctx_a.client_state(id_target_client_on_source)?;
4456

ibc-eureka-core/ics04-channel/src/handler/timeout.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use ibc_eureka_core_channel_types::events::TimeoutPacket;
44
use ibc_eureka_core_channel_types::msgs::MsgTimeout;
55
use ibc_eureka_core_client::context::prelude::*;
66
use ibc_eureka_core_handler_types::events::{IbcEvent, MessageEvent};
7+
use ibc_eureka_core_host::types::identifiers::ClientId;
78
use ibc_eureka_core_host::types::path::{
89
ClientConsensusStatePath, CommitmentPathV2 as CommitmentPath, Path,
910
ReceiptPathV2 as ReceiptPath,
@@ -125,7 +126,20 @@ where
125126
// Verify proofs
126127
{
127128
let id_target_client_on_source = channel_target_client_on_source.as_ref();
129+
let id_source_client_on_target: &ClientId = channel_source_client_on_target.as_ref();
130+
128131
let client_val_ctx_a = ctx_a.get_client_validation_context();
132+
133+
let (stored_id_source_client_on_target, target_prefix) =
134+
client_val_ctx_a.counterparty_client(id_target_client_on_source)?;
135+
136+
if &stored_id_source_client_on_target != id_source_client_on_target {
137+
return Err(ChannelError::MismatchCounterparty {
138+
expected: stored_id_source_client_on_target.clone(),
139+
actual: id_source_client_on_target.clone(),
140+
});
141+
}
142+
129143
let target_client_on_source = client_val_ctx_a.client_state(id_target_client_on_source)?;
130144

131145
target_client_on_source

0 commit comments

Comments
 (0)