Skip to content

Commit 31fbbc1

Browse files
committed
Add context in the Managers in IBC code
1 parent 9fbaf91 commit 31fbbc1

File tree

4 files changed

+46
-53
lines changed

4 files changed

+46
-53
lines changed

core/src/ibc/client_02/manager.rs

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,30 +19,28 @@ use super::types::{ConsensusState, State};
1919
use crate::ibc;
2020
use ibc::client_02::get_state;
2121

22-
#[derive(Default)]
23-
pub struct Manager {}
22+
pub struct Manager<'a> {
23+
ctx: &'a mut dyn ibc::Context,
24+
}
2425

25-
impl Manager {
26-
pub fn new() -> Self {
27-
Manager {}
26+
impl<'a> Manager<'a> {
27+
pub fn new(ctx: &'a mut dyn ibc::Context) -> Self {
28+
Manager {
29+
ctx,
30+
}
2831
}
2932

30-
pub fn create(
31-
&self,
32-
ctx: &mut dyn ibc::Context,
33-
id: &str,
34-
cs: &dyn ConsensusState,
35-
) -> Result<Box<dyn State>, String> {
36-
let state = new_state(id, ctx, cs.kind());
37-
if state.exists(ctx) {
33+
pub fn create(&mut self, id: &str, cs: &dyn ConsensusState) -> Result<Box<dyn State>, String> {
34+
let state = new_state(id, self.ctx, cs.kind());
35+
if state.exists(self.ctx) {
3836
return Err("Create client on already existing id".to_owned())
3937
}
40-
state.set_root(ctx, cs.get_height(), cs.get_root());
41-
state.set_consensus_state(ctx, cs);
38+
state.set_root(self.ctx, cs.get_height(), cs.get_root());
39+
state.set_consensus_state(self.ctx, cs);
4240
Ok(state)
4341
}
4442

45-
pub fn query(&self, ctx: &mut dyn ibc::Context, id: &str) -> Result<Box<dyn State>, String> {
46-
get_state(id, ctx)
43+
pub fn query(&mut self, id: &str) -> Result<Box<dyn State>, String> {
44+
get_state(id, self.ctx)
4745
}
4846
}

core/src/ibc/connection_03/manager.rs

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,29 +21,31 @@ use crate::ibc::connection_03::client_connections_path;
2121
use crate::ibc::connection_03::types::{ConnectionEnd, ConnectionIdentifiersInClient, ConnectionState};
2222
use rlp::{Encodable, Rlp};
2323

24-
#[derive(Default)]
25-
pub struct Manager {}
24+
pub struct Manager<'a> {
25+
ctx: &'a mut dyn ibc::Context,
26+
}
2627

2728
// FIXME: this will be changed after implementing Vector commitment
2829
fn get_commiment_prefix() -> String {
2930
"".to_owned()
3031
}
3132

32-
impl Manager {
33-
pub fn new() -> Self {
34-
Manager {}
33+
impl<'a> Manager<'a> {
34+
pub fn new(ctx: &'a mut dyn ibc::Context) -> Self {
35+
Manager {
36+
ctx,
37+
}
3538
}
3639

3740
pub fn handle_open_init(
38-
&self,
39-
ctx: &mut dyn ibc::Context,
41+
&mut self,
4042
identifier: Identifier,
4143
desired_counterparty_connection_identifier: Identifier,
4244
counterparty_prefix: CommitmentPrefix,
4345
client_identifier: Identifier,
4446
counterparty_client_identifier: Identifier,
4547
) -> Result<(), String> {
46-
let kv_store = ctx.get_kv_store();
48+
let kv_store = self.ctx.get_kv_store();
4749
if kv_store.has(&connection_path(&identifier)) {
4850
return Err("Connection exist".to_owned())
4951
}
@@ -56,15 +58,14 @@ impl Manager {
5658
counterparty_client_identifier,
5759
};
5860
kv_store.set(&connection_path(&identifier), &connection.rlp_bytes());
59-
self.add_connection_to_client(ctx, client_identifier, identifier)?;
61+
self.add_connection_to_client(client_identifier, identifier)?;
6062
Ok(())
6163
}
6264

6365
// We all following ICS spec.
6466
#[allow(clippy::too_many_arguments)]
6567
pub fn handle_open_try(
66-
&self,
67-
ctx: &mut dyn ibc::Context,
68+
&mut self,
6869
desired_identifier: Identifier,
6970
counterparty_connection_identifier: Identifier,
7071
counterparty_prefix: CommitmentPrefix,
@@ -75,7 +76,7 @@ impl Manager {
7576
proof_height: u64,
7677
consensus_height: u64,
7778
) -> Result<(), String> {
78-
let current_height = ctx.get_current_height();
79+
let current_height = self.ctx.get_current_height();
7980
if consensus_height > current_height {
8081
return Err(format!(
8182
"Consensus height {} is greater than current height {}",
@@ -98,9 +99,9 @@ impl Manager {
9899
counterparty_client_identifier: counterparty_client_identifier.clone(),
99100
};
100101

101-
self.verify_connection_state(ctx, &connection, proof_height, proof_init, desired_identifier.clone(), &expected);
102+
self.verify_connection_state(&connection, proof_height, proof_init, desired_identifier.clone(), &expected);
102103

103-
if let Some(previous_connection_end) = self.query(ctx, &desired_identifier) {
104+
if let Some(previous_connection_end) = self.query(&desired_identifier) {
104105
let expected_init = ConnectionEnd {
105106
state: ConnectionState::INIT,
106107
counterparty_connection_identifier,
@@ -116,13 +117,13 @@ impl Manager {
116117
}
117118
}
118119

119-
let kv_store = ctx.get_kv_store();
120+
let kv_store = self.ctx.get_kv_store();
120121
kv_store.set(&connection_path(&desired_identifier), &connection.rlp_bytes());
121122
Ok(())
122123
}
123124

124-
fn query(&self, ctx: &mut dyn ibc::Context, identifier: &str) -> Option<ConnectionEnd> {
125-
let kv_store = ctx.get_kv_store();
125+
fn query(&mut self, identifier: &str) -> Option<ConnectionEnd> {
126+
let kv_store = self.ctx.get_kv_store();
126127

127128
let path = connection_path(&identifier);
128129
if kv_store.has(&path) {
@@ -135,8 +136,7 @@ impl Manager {
135136
}
136137

137138
fn verify_connection_state(
138-
&self,
139-
ctx: &mut dyn ibc::Context,
139+
&mut self,
140140
connection: &ConnectionEnd,
141141
proof_height: u64,
142142
proof: CommitmentProof,
@@ -160,12 +160,11 @@ impl Manager {
160160
}
161161

162162
fn add_connection_to_client(
163-
&self,
164-
ctx: &mut dyn ibc::Context,
163+
&mut self,
165164
client_identifier: Identifier,
166165
connection_identifier: Identifier,
167166
) -> Result<(), String> {
168-
let kv_store = ctx.get_kv_store();
167+
let kv_store = self.ctx.get_kv_store();
169168
if kv_store.has(&connection_path(&connection_identifier)) {
170169
return Err("Connection exist".to_owned())
171170
}

core/src/ibc/transaction_handler/mod.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,9 @@ pub fn execute(
5353
client_identifier,
5454
counterparty_client_identifier,
5555
} => {
56-
let connection_manager = ibc_connection::Manager::new();
56+
let mut connection_manager = ibc_connection::Manager::new(&mut context);
5757
connection_manager
5858
.handle_open_init(
59-
&mut context,
6059
identifier,
6160
desired_counterparty_connection_identifier,
6261
counterparty_prefix,
@@ -77,10 +76,9 @@ pub fn execute(
7776
consensus_height,
7877
} => {
7978
let mut context = ibc_context::TopLevelContext::new(state, current_block_number);
80-
let connection_manager = ibc_connection::Manager::new();
79+
let mut connection_manager = ibc_connection::Manager::new(&mut context);
8180
connection_manager
8281
.handle_open_try(
83-
&mut context,
8482
desired_identifier,
8583
counterparty_connection_identifier,
8684
counterparty_prefix,
@@ -103,7 +101,7 @@ fn create_client(
103101
kind: ibc_client::Kind,
104102
consensus_state: &[u8],
105103
) -> StateResult<()> {
106-
let client_manager = ibc_client::Manager::new();
104+
let mut client_manager = ibc_client::Manager::new(ctx);
107105
if kind != ibc_client::KIND_FOUNDRY {
108106
return Err(RuntimeError::IBC(format!("CreateClient has invalid type {}", kind)).into())
109107
}
@@ -116,14 +114,14 @@ fn create_client(
116114
};
117115

118116
client_manager
119-
.create(ctx, id, &foundry_consensus_state)
117+
.create(id, &foundry_consensus_state)
120118
.map_err(|err| RuntimeError::IBC(format!("CreateClient: {:?}", err)))?;
121119
Ok(())
122120
}
123121

124122
fn update_client(ctx: &mut dyn ibc::Context, id: &str, header: &[u8]) -> StateResult<()> {
125-
let client_manager = ibc_client::Manager::new();
126-
let client_state = client_manager.query(ctx, id).map_err(RuntimeError::IBC)?;
123+
let mut client_manager = ibc_client::Manager::new(ctx);
124+
let client_state = client_manager.query(id).map_err(RuntimeError::IBC)?;
127125

128126
client_state.update(ctx, header).map_err(RuntimeError::IBC)?;
129127

rpc/src/v1/impls/ibc.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,8 @@ where
5757
};
5858

5959
let mut context = ibc::context::TopLevelContext::new(&mut state, block_number);
60-
let client_manager = ibc::client::Manager::new();
61-
let client_state =
62-
client_manager.query(&mut context, &client_id).map_err(|_| errors::ibc_client_not_exist())?;
60+
let mut client_manager = ibc::client::Manager::new(&mut context);
61+
let client_state = client_manager.query(&client_id).map_err(|_| errors::ibc_client_not_exist())?;
6362

6463
let consensus_state = client_state.get_consensus_state(&mut context);
6564

@@ -97,9 +96,8 @@ where
9796
};
9897

9998
let mut context = ibc::context::TopLevelContext::new(&mut state, block_number);
100-
let client_manager = ibc::client::Manager::new();
101-
let client_state =
102-
client_manager.query(&mut context, &client_id).map_err(|_| errors::ibc_client_not_exist())?;
99+
let mut client_manager = ibc::client::Manager::new(&mut context);
100+
let client_state = client_manager.query(&client_id).map_err(|_| errors::ibc_client_not_exist())?;
103101

104102
let root =
105103
client_state.get_root(&mut context, other_block_number).map_err(|_| errors::ibc_client_root_not_exist())?;

0 commit comments

Comments
 (0)