Skip to content

Commit 6a8053e

Browse files
committed
Allow ibc ack of None
1 parent 0aab099 commit 6a8053e

File tree

5 files changed

+20
-11
lines changed

5 files changed

+20
-11
lines changed

contracts/ibc-reflect-send/src/ibc.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use cosmwasm_std::{
2-
entry_point, from_json, to_json_binary, DepsMut, Env, Ibc3ChannelOpenResponse,
2+
entry_point, from_json, to_json_binary, Binary, DepsMut, Env, Ibc3ChannelOpenResponse,
33
IbcBasicResponse, IbcChannelCloseMsg, IbcChannelConnectMsg, IbcChannelOpenMsg,
44
IbcChannelOpenResponse, IbcMsg, IbcOrder, IbcPacketAckMsg, IbcPacketReceiveMsg,
55
IbcPacketTimeoutMsg, IbcReceiveResponse, Never, StdError, StdResult,
@@ -101,7 +101,7 @@ pub fn ibc_packet_receive(
101101
_env: Env,
102102
_packet: IbcPacketReceiveMsg,
103103
) -> Result<IbcReceiveResponse, Never> {
104-
Ok(IbcReceiveResponse::new(b"{}").add_attribute("action", "ibc_packet_ack"))
104+
Ok(IbcReceiveResponse::new(Binary::from(b"{}")).add_attribute("action", "ibc_packet_ack"))
105105
}
106106

107107
#[entry_point]

contracts/ibc-reflect/src/contract.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,8 @@ mod tests {
546546
res.events[0]
547547
);
548548
// acknowledgement is an error
549-
let ack: AcknowledgementMsg<DispatchResponse> = from_json(res.acknowledgement).unwrap();
549+
let ack: AcknowledgementMsg<DispatchResponse> =
550+
from_json(res.acknowledgement.unwrap()).unwrap();
550551
assert_eq!(
551552
ack.unwrap_err(),
552553
"invalid packet: account channel-123 not found"
@@ -560,7 +561,7 @@ mod tests {
560561
let res = ibc_packet_receive(deps.as_mut(), mock_env(), msg).unwrap();
561562

562563
// assert app-level success
563-
let ack: AcknowledgementMsg<()> = from_json(res.acknowledgement).unwrap();
564+
let ack: AcknowledgementMsg<()> = from_json(res.acknowledgement.unwrap()).unwrap();
564565
ack.unwrap();
565566

566567
// and we dispatch the BankMsg via submessage
@@ -597,7 +598,8 @@ mod tests {
597598
// we didn't dispatch anything
598599
assert_eq!(0, res.messages.len());
599600
// acknowledgement is an error
600-
let ack: AcknowledgementMsg<DispatchResponse> = from_json(res.acknowledgement).unwrap();
601+
let ack: AcknowledgementMsg<DispatchResponse> =
602+
from_json(res.acknowledgement.unwrap()).unwrap();
601603
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`");
602604
}
603605

contracts/ibc-reflect/tests/integration.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ fn handle_dispatch_packet() {
240240
);
241241
// acknowledgement is an error
242242
let ack: AcknowledgementMsg<DispatchResponse> =
243-
from_slice(&res.acknowledgement, DESERIALIZATION_LIMIT).unwrap();
243+
from_slice(&res.acknowledgement.unwrap(), DESERIALIZATION_LIMIT).unwrap();
244244
assert_eq!(
245245
ack.unwrap_err(),
246246
"invalid packet: account channel-123 not found"
@@ -255,7 +255,7 @@ fn handle_dispatch_packet() {
255255

256256
// assert app-level success
257257
let ack: AcknowledgementMsg<DispatchResponse> =
258-
from_slice(&res.acknowledgement, DESERIALIZATION_LIMIT).unwrap();
258+
from_slice(&res.acknowledgement.unwrap(), DESERIALIZATION_LIMIT).unwrap();
259259
ack.unwrap();
260260

261261
// and we dispatch the BankMsg
@@ -293,6 +293,6 @@ fn handle_dispatch_packet() {
293293
assert_eq!(0, res.messages.len());
294294
// acknowledgement is an error
295295
let ack: AcknowledgementMsg<DispatchResponse> =
296-
from_slice(&res.acknowledgement, DESERIALIZATION_LIMIT).unwrap();
296+
from_slice(&res.acknowledgement.unwrap(), DESERIALIZATION_LIMIT).unwrap();
297297
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`");
298298
}

packages/std/src/ibc.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -601,8 +601,9 @@ impl<T> IbcBasicResponse<T> {
601601
#[non_exhaustive]
602602
pub struct IbcReceiveResponse<T = Empty> {
603603
/// The bytes we return to the contract that sent the packet.
604-
/// This may represent a success or error of execution
605-
pub acknowledgement: Binary,
604+
/// This may represent a success or error of execution.
605+
/// In case of `None`, no acknowledgement is written.
606+
pub acknowledgement: Option<Binary>,
606607
/// Optional list of messages to pass. These will be executed in order.
607608
/// If the ReplyOn member is set, they will invoke this contract's `reply` entry point
608609
/// after execution. Otherwise, they act like "fire and forget".
@@ -633,7 +634,7 @@ impl<T> IbcReceiveResponse<T> {
633634
///
634635
/// // 0x01 is a FungibleTokenPacketSuccess from ICS-20.
635636
/// let resp: IbcReceiveResponse = IbcReceiveResponse::new(StdAck::success(b"\x01"));
636-
/// assert_eq!(resp.acknowledgement, b"{\"result\":\"AQ==\"}");
637+
/// assert_eq!(resp.acknowledgement.unwrap(), b"{\"result\":\"AQ==\"}");
637638
/// ```
638639
pub fn new(ack: impl Into<Binary>) -> Self {
639640
Self {

packages/std/src/stdack.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,12 @@ impl From<StdAck> for Binary {
118118
}
119119
}
120120

121+
impl From<StdAck> for Option<Binary> {
122+
fn from(original: StdAck) -> Option<Binary> {
123+
Some(original.into())
124+
}
125+
}
126+
121127
#[cfg(test)]
122128
mod tests {
123129
use super::*;

0 commit comments

Comments
 (0)