Skip to content

Commit bfb17fc

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

File tree

1 file changed

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

1 file changed

+14
-13
lines changed

core/src/ibc/transaction_handler/mod.rs

Lines changed: 14 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(
@@ -93,19 +93,21 @@ pub fn execute(
9393
)
9494
.map_err(|err| RuntimeError::IBC(format!("ConnOpenTry: {}", err)).into())
9595
}
96+
Datagram::ConnOpenAck {
97+
..
98+
} => {
99+
unimplemented!();
100+
}
96101
}
97102
}
98103

99104

100105
fn create_client(
101-
state: &mut TopLevelState,
102-
_fee_payer: &Address,
106+
ctx: &mut dyn ibc::Context,
103107
id: &str,
104108
kind: ibc_client::Kind,
105109
consensus_state: &[u8],
106-
current_block_number: u64,
107110
) -> StateResult<()> {
108-
let mut context = ibc_context::TopLevelContext::new(state, current_block_number);
109111
let client_manager = ibc_client::Manager::new();
110112
if kind != ibc_client::KIND_FOUNDRY {
111113
return Err(RuntimeError::IBC(format!("CreateClient has invalid type {}", kind)).into())
@@ -119,17 +121,16 @@ fn create_client(
119121
};
120122

121123
client_manager
122-
.create(&mut context, id, &foundry_consensus_state)
124+
.create(ctx, id, &foundry_consensus_state)
123125
.map_err(|err| RuntimeError::IBC(format!("CreateClient: {:?}", err)))?;
124126
Ok(())
125127
}
126128

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);
129+
fn update_client(ctx: &mut dyn ibc::Context, id: &str, header: &[u8]) -> StateResult<()> {
129130
let client_manager = ibc_client::Manager::new();
130-
let client_state = client_manager.query(&mut context, id).map_err(RuntimeError::IBC)?;
131+
let client_state = client_manager.query(ctx, id).map_err(RuntimeError::IBC)?;
131132

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

134135
Ok(())
135136
}

0 commit comments

Comments
 (0)