Skip to content

Commit

Permalink
Fix contracts
Browse files Browse the repository at this point in the history
  • Loading branch information
JakeHartnell committed Aug 6, 2022
1 parent 4d490f8 commit b4e7d14
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 76 deletions.
68 changes: 2 additions & 66 deletions contracts/cw-ibc-queries/src/contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,8 @@ mod tests {

use super::*;
use cosmwasm_std::testing::{
mock_dependencies, mock_env, mock_ibc_channel_close_init, mock_ibc_channel_connect_ack,
mock_ibc_channel_open_init, mock_ibc_channel_open_try, mock_ibc_packet_recv, mock_info,
mock_wasmd_attr, MockApi, MockQuerier, MockStorage,
mock_dependencies, mock_env, mock_ibc_channel_connect_ack, mock_ibc_channel_open_init,
mock_ibc_channel_open_try, mock_info, MockApi, MockQuerier, MockStorage,
};
use cosmwasm_std::OwnedDeps;
use cw_ibc_query::{APP_ORDER, BAD_APP_ORDER, IBC_APP_VERSION};
Expand Down Expand Up @@ -142,67 +141,4 @@ mod tests {
let res = ibc_channel_connect(deps.as_mut(), mock_env(), handshake_connect).unwrap();
assert_eq!(0, res.messages.len());
}

//// TODO
// #[test]
// fn handle_ibc_query_packet() {
// let mut deps = setup();

// let channel_id = "channel-123";
// let account = "acct-123";

// // receive a packet for an unregistered channel returns app-level error (not Result::Err)
// let msgs_to_dispatch = vec![BankMsg::Send {
// to_address: "my-friend".into(),
// amount: coins(123456789, "uatom"),
// }
// .into()];
// let ibc_msg = PacketMsg::Dispatch {
// msgs: msgs_to_dispatch.clone(),
// };
// let msg = mock_ibc_packet_recv(channel_id, &ibc_msg).unwrap();
// // this returns an error
// ibc_packet_receive(deps.as_mut(), mock_env(), msg).unwrap_err();

// // register the channel
// connect(deps.as_mut(), channel_id, account);

// // receive a packet for an unregistered channel returns app-level error (not Result::Err)
// let msg = mock_ibc_packet_recv(channel_id, &ibc_msg).unwrap();
// let res = ibc_packet_receive(deps.as_mut(), mock_env(), msg).unwrap();

// // assert app-level success
// let ack: StdAck = from_slice(&res.acknowledgement).unwrap();
// ack.unwrap();

// // and we dispatch the BankMsg via submessage
// assert_eq!(1, res.messages.len());
// assert_eq!(RECEIVE_DISPATCH_ID, res.messages[0].id);

// // parse the output, ensuring it matches
// if let CosmosMsg::Wasm(WasmMsg::Execute {
// contract_addr,
// msg,
// funds,
// }) = &res.messages[0].msg
// {
// assert_eq!(account, contract_addr.as_str());
// assert_eq!(0, funds.len());
// // parse the message - should callback with proper channel_id
// let rmsg: cw1_whitelist::msg::ExecuteMsg = from_slice(msg).unwrap();
// assert_eq!(
// rmsg,
// cw1_whitelist::msg::ExecuteMsg::Execute {
// msgs: msgs_to_dispatch
// }
// );
// } else {
// panic!("invalid return message: {:?}", res.messages[0]);
// }

// // invalid packet format on registered channel also returns error
// let bad_data = InstantiateMsg { cw1_code_id: 12345 };
// let msg = mock_ibc_packet_recv(channel_id, &bad_data).unwrap();
// ibc_packet_receive(deps.as_mut(), mock_env(), msg).unwrap_err();
// }
}
61 changes: 51 additions & 10 deletions contracts/cw-ibc-queries/src/ibc.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use cosmwasm_std::{
entry_point, from_slice, to_binary, Deps, DepsMut, Empty, Env, Event, Ibc3ChannelOpenResponse,
IbcBasicResponse, IbcChannelCloseMsg, IbcChannelConnectMsg, IbcChannelOpenMsg,
IbcChannelOpenResponse, IbcPacketAckMsg, IbcPacketReceiveMsg, IbcPacketTimeoutMsg,
IbcReceiveResponse, QueryRequest, StdResult, WasmMsg,
entry_point, from_slice, to_binary, Binary, Deps, DepsMut, Empty, Env, Event,
Ibc3ChannelOpenResponse, IbcBasicResponse, IbcChannelCloseMsg, IbcChannelConnectMsg,
IbcChannelOpenMsg, IbcChannelOpenResponse, IbcPacketAckMsg, IbcPacketReceiveMsg,
IbcPacketTimeoutMsg, IbcReceiveResponse, QueryRequest, StdResult, SystemResult, WasmMsg,
};
use cw_ibc_query::{
check_order, check_version, IbcQueryResponse, PacketMsg, ReceiveIbcResponseMsg, StdAck,
Expand Down Expand Up @@ -87,15 +87,18 @@ pub fn ibc_packet_receive(
}

// Processes IBC query
fn receive_query(
pub fn receive_query(
deps: Deps,
msgs: Vec<QueryRequest<Empty>>,
) -> Result<IbcReceiveResponse, ContractError> {
let mut results = vec![];
let mut results: Vec<Binary> = vec![];

for query in msgs {
let res = deps.querier.query(&query)?;
results.push(res);
let res = match deps.querier.raw_query(&to_binary(&query)?) {
SystemResult::Ok(res) => res,
SystemResult::Err(err) => cosmwasm_std::ContractResult::Err(err.to_string()),
};
results.push(to_binary(&res)?);
}
let response = IbcQueryResponse { results };

Expand Down Expand Up @@ -133,14 +136,14 @@ pub fn ibc_packet_timeout(
fn acknowledge_query(
deps: DepsMut,
env: Env,
caller: String,
channel_id: String,
callback: Option<String>,
msg: IbcPacketAckMsg,
) -> Result<IbcBasicResponse, ContractError> {
// store IBC response for later querying from the smart contract??
LATEST_QUERIES.save(
deps.storage,
&caller,
&channel_id,
&IbcQueryResultResponse {
last_update_time: env.block.time,
response: msg.clone(),
Expand All @@ -162,3 +165,41 @@ fn acknowledge_query(
None => Ok(IbcBasicResponse::new().add_attribute("action", "acknowledge_ibc_query")),
}
}

#[cfg(test)]
mod tests {
use cosmwasm_std::{
testing::{mock_dependencies, mock_env, mock_ibc_packet_ack},
BankQuery, IbcAcknowledgement,
};

use crate::msg::InstantiateMsg;

use super::*;

const CHANNEL: &str = "channel-42";

#[test]
fn try_receive_query() {
let deps = mock_dependencies();

let res = receive_query(
deps.as_ref(),
vec![QueryRequest::<Empty>::Bank(BankQuery::AllBalances {
address: String::from("test"),
})],
);
assert!(res.is_ok());
}

#[test]
fn try_acknowledge_query() {
let mut deps = mock_dependencies();
let env = mock_env();

let ack = IbcAcknowledgement::new([]);
let ibc_res = mock_ibc_packet_ack(CHANNEL, &InstantiateMsg {}, ack).unwrap();
let res = acknowledge_query(deps.as_mut(), env, CHANNEL.to_string(), None, ibc_res);
assert!(res.is_ok());
}
}

0 comments on commit b4e7d14

Please sign in to comment.