|
1 | 1 | use cosmwasm_std::{ |
2 | 2 | entry_point, from_json, to_json_binary, wasm_execute, BankMsg, Binary, CosmosMsg, Deps, |
3 | | - DepsMut, Empty, Env, Event, Ibc3ChannelOpenResponse, IbcBasicResponse, IbcChannelCloseMsg, |
4 | | - IbcChannelConnectMsg, IbcChannelOpenMsg, IbcChannelOpenResponse, IbcOrder, IbcPacketAckMsg, |
5 | | - IbcPacketReceiveMsg, IbcPacketTimeoutMsg, IbcReceiveResponse, MessageInfo, Never, |
6 | | - QueryResponse, Reply, Response, StdError, StdResult, SubMsg, SubMsgResponse, SubMsgResult, |
7 | | - WasmMsg, |
| 3 | + DepsMut, Empty, Env, Event, Ibc3ChannelOpenResponse, IbcAcknowledgement, IbcBasicResponse, |
| 4 | + IbcChannelCloseMsg, IbcChannelConnectMsg, IbcChannelOpenMsg, IbcChannelOpenResponse, IbcMsg, |
| 5 | + IbcOrder, IbcPacketAckMsg, IbcPacketReceiveMsg, IbcPacketTimeoutMsg, IbcReceiveResponse, |
| 6 | + MessageInfo, Never, QueryResponse, Reply, Response, StdError, StdResult, SubMsg, |
| 7 | + SubMsgResponse, SubMsgResult, WasmMsg, |
8 | 8 | }; |
9 | 9 |
|
10 | 10 | use crate::msg::{ |
11 | 11 | AccountInfo, AccountResponse, AcknowledgementMsg, BalancesResponse, DispatchResponse, |
12 | | - InstantiateMsg, ListAccountsResponse, PacketMsg, QueryMsg, ReflectExecuteMsg, |
| 12 | + ExecuteMsg, InstantiateMsg, ListAccountsResponse, PacketMsg, QueryMsg, ReflectExecuteMsg, |
13 | 13 | ReturnMsgsResponse, WhoAmIResponse, |
14 | 14 | }; |
15 | 15 | use crate::state::{ |
@@ -37,6 +37,34 @@ pub fn instantiate( |
37 | 37 | Ok(Response::new().add_attribute("action", "instantiate")) |
38 | 38 | } |
39 | 39 |
|
| 40 | +#[entry_point] |
| 41 | +pub fn execute( |
| 42 | + _deps: DepsMut, |
| 43 | + _env: Env, |
| 44 | + _info: MessageInfo, |
| 45 | + msg: ExecuteMsg, |
| 46 | +) -> StdResult<Response> { |
| 47 | + match msg { |
| 48 | + ExecuteMsg::AsyncAck { |
| 49 | + channel_id, |
| 50 | + packet_sequence, |
| 51 | + ack, |
| 52 | + } => execute_async_ack(channel_id, packet_sequence.u64(), ack), |
| 53 | + } |
| 54 | +} |
| 55 | + |
| 56 | +fn execute_async_ack( |
| 57 | + channel_id: String, |
| 58 | + packet_sequence: u64, |
| 59 | + ack: IbcAcknowledgement, |
| 60 | +) -> StdResult<Response> { |
| 61 | + Ok(Response::new().add_message(IbcMsg::WriteAcknowledgement { |
| 62 | + channel_id, |
| 63 | + packet_sequence, |
| 64 | + ack, |
| 65 | + })) |
| 66 | +} |
| 67 | + |
40 | 68 | #[entry_point] |
41 | 69 | pub fn reply(deps: DepsMut, _env: Env, reply: Reply) -> StdResult<Response> { |
42 | 70 | match (reply.id, reply.result) { |
@@ -249,6 +277,7 @@ pub fn ibc_packet_receive( |
249 | 277 | PacketMsg::Panic {} => execute_panic(), |
250 | 278 | PacketMsg::ReturnErr { text } => execute_error(text), |
251 | 279 | PacketMsg::ReturnMsgs { msgs } => execute_return_msgs(msgs), |
| 280 | + PacketMsg::NoAck {} => Ok(IbcReceiveResponse::without_ack()), |
252 | 281 | } |
253 | 282 | })() |
254 | 283 | .or_else(|e| { |
@@ -607,7 +636,7 @@ mod tests { |
607 | 636 | // acknowledgement is an error |
608 | 637 | let ack: AcknowledgementMsg<DispatchResponse> = |
609 | 638 | from_json(res.acknowledgement.unwrap()).unwrap(); |
610 | | - assert_eq!(ack.unwrap_err(), "invalid packet: Error parsing into type ibc_reflect::msg::PacketMsg: unknown variant `reflect_code_id`, expected one of `dispatch`, `who_am_i`, `balances`, `panic`, `return_err`, `return_msgs`"); |
| 639 | + assert_eq!(ack.unwrap_err(), "invalid packet: Error parsing into type ibc_reflect::msg::PacketMsg: unknown variant `reflect_code_id`, expected one of `dispatch`, `who_am_i`, `balances`, `panic`, `return_err`, `return_msgs`, `no_ack`"); |
611 | 640 | } |
612 | 641 |
|
613 | 642 | #[test] |
|
0 commit comments