Skip to content

Commit 9fbaf91

Browse files
committed
Extract a context variable in the IBC transaction handler
The context is created in all datagram handlers.
1 parent daa5dae commit 9fbaf91

File tree

1 file changed

+9
-13
lines changed
  • core/src/ibc/transaction_handler

1 file changed

+9
-13
lines changed

core/src/ibc/transaction_handler/mod.rs

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,29 +30,29 @@ use rlp::{Decodable, Rlp};
3030
pub fn execute(
3131
bytes: &[u8],
3232
state: &mut TopLevelState,
33-
fee_payer: &Address,
33+
_fee_payer: &Address,
3434
_sender_public: &Public,
3535
current_block_number: u64,
3636
) -> StateResult<()> {
37+
let mut context = ibc_context::TopLevelContext::new(state, current_block_number);
3738
let datagram = Datagram::decode(&Rlp::new(bytes)).expect("Verification passed");
3839
match datagram {
3940
Datagram::CreateClient {
4041
id,
4142
kind,
4243
consensus_state,
43-
} => create_client(state, fee_payer, &id, kind, &consensus_state, current_block_number),
44+
} => create_client(&mut context, &id, kind, &consensus_state),
4445
Datagram::UpdateClient {
4546
id,
4647
header,
47-
} => update_client(state, &id, &header, current_block_number),
48+
} => update_client(&mut context, &id, &header),
4849
Datagram::ConnOpenInit {
4950
identifier,
5051
desired_counterparty_connection_identifier,
5152
counterparty_prefix,
5253
client_identifier,
5354
counterparty_client_identifier,
5455
} => {
55-
let mut context = ibc_context::TopLevelContext::new(state, current_block_number);
5656
let connection_manager = ibc_connection::Manager::new();
5757
connection_manager
5858
.handle_open_init(
@@ -98,14 +98,11 @@ pub fn execute(
9898

9999

100100
fn create_client(
101-
state: &mut TopLevelState,
102-
_fee_payer: &Address,
101+
ctx: &mut dyn ibc::Context,
103102
id: &str,
104103
kind: ibc_client::Kind,
105104
consensus_state: &[u8],
106-
current_block_number: u64,
107105
) -> StateResult<()> {
108-
let mut context = ibc_context::TopLevelContext::new(state, current_block_number);
109106
let client_manager = ibc_client::Manager::new();
110107
if kind != ibc_client::KIND_FOUNDRY {
111108
return Err(RuntimeError::IBC(format!("CreateClient has invalid type {}", kind)).into())
@@ -119,17 +116,16 @@ fn create_client(
119116
};
120117

121118
client_manager
122-
.create(&mut context, id, &foundry_consensus_state)
119+
.create(ctx, id, &foundry_consensus_state)
123120
.map_err(|err| RuntimeError::IBC(format!("CreateClient: {:?}", err)))?;
124121
Ok(())
125122
}
126123

127-
fn update_client(state: &mut TopLevelState, id: &str, header: &[u8], current_block_number: u64) -> StateResult<()> {
128-
let mut context = ibc_context::TopLevelContext::new(state, current_block_number);
124+
fn update_client(ctx: &mut dyn ibc::Context, id: &str, header: &[u8]) -> StateResult<()> {
129125
let client_manager = ibc_client::Manager::new();
130-
let client_state = client_manager.query(&mut context, id).map_err(RuntimeError::IBC)?;
126+
let client_state = client_manager.query(ctx, id).map_err(RuntimeError::IBC)?;
131127

132-
client_state.update(&mut context, header).map_err(RuntimeError::IBC)?;
128+
client_state.update(ctx, header).map_err(RuntimeError::IBC)?;
133129

134130
Ok(())
135131
}

0 commit comments

Comments
 (0)