Skip to content

Commit edada3e

Browse files
authored
Merge pull request #1940 from CosmWasm/1649-ack-required
Make ack required in `IbcReceiveResponse::new`
2 parents 0294194 + 3bee728 commit edada3e

File tree

6 files changed

+36
-35
lines changed

6 files changed

+36
-35
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ and this project adheres to
3434
- cosmwasm-std: Upgrade to `serde-json-wasm` 1.0. This means `u128` and `i128`
3535
are now serialized as numbers instead of strings. Use `Uint128` and `Int128`
3636
instead. ([#1939])
37+
- cosmwasm-std: Add `ack` parameter to `IbcReceiveResponse::new` and remove
38+
`IbcReceiveResponse::set_ack` ([#1940])
3739
- cosmwasm-std: Make `BalanceResponse`, `AllBalanceResponse`,
3840
`DelegationRewardsResponse`, `DelegatorReward`, `DelegatorValidatorsResponse`,
3941
`PortIdResponse`, `ListChannelsResponse`, `ChannelResponse`,
@@ -51,6 +53,7 @@ and this project adheres to
5153
[#1898]: https://github.com/CosmWasm/cosmwasm/pull/1898
5254
[#1902]: https://github.com/CosmWasm/cosmwasm/pull/1902
5355
[#1939]: https://github.com/CosmWasm/cosmwasm/pull/1939
56+
[#1940]: https://github.com/CosmWasm/cosmwasm/pull/1940
5457

5558
### Removed
5659

MIGRATING.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,14 @@ major releases of `cosmwasm`. Note that you can also view the
107107
+const item: Item<Uint128> = Item::new("item");
108108
```
109109

110+
- Replace all uses of `IbcReceiveResponse::set_ack` with calls to
111+
`IbcReceiveResponse::new`:
112+
113+
```diff
114+
- Ok(IbcReceiveResponse::new().set_ack(b"{}"))
115+
+ Ok(IbcReceiveResponse::new(b"{}"))
116+
```
117+
110118
## 1.4.x -> 1.5.0
111119

112120
- Update `cosmwasm-*` dependencies in Cargo.toml (skip the ones you don't use):

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,7 @@ pub fn ibc_packet_receive(
101101
_env: Env,
102102
_packet: IbcPacketReceiveMsg,
103103
) -> Result<IbcReceiveResponse, Never> {
104-
Ok(IbcReceiveResponse::new()
105-
.set_ack(b"{}")
106-
.add_attribute("action", "ibc_packet_ack"))
104+
Ok(IbcReceiveResponse::new(b"{}").add_attribute("action", "ibc_packet_ack"))
107105
}
108106

109107
#[entry_point]

contracts/ibc-reflect/src/contract.rs

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -255,8 +255,7 @@ pub fn ibc_packet_receive(
255255
// we try to capture all app-level errors and convert them into
256256
// acknowledgement packets that contain an error code.
257257
let acknowledgement = encode_ibc_error(format!("invalid packet: {e}"));
258-
Ok(IbcReceiveResponse::new()
259-
.set_ack(acknowledgement)
258+
Ok(IbcReceiveResponse::new(acknowledgement)
260259
.add_event(Event::new("ibc").add_attribute("packet", "receive")))
261260
})
262261
}
@@ -269,9 +268,7 @@ fn receive_who_am_i(deps: DepsMut, caller: String) -> StdResult<IbcReceiveRespon
269268
};
270269
let acknowledgement = to_json_binary(&AcknowledgementMsg::Ok(response))?;
271270
// and we are golden
272-
Ok(IbcReceiveResponse::new()
273-
.set_ack(acknowledgement)
274-
.add_attribute("action", "receive_who_am_i"))
271+
Ok(IbcReceiveResponse::new(acknowledgement).add_attribute("action", "receive_who_am_i"))
275272
}
276273

277274
// processes PacketMsg::Balances variant
@@ -284,9 +281,7 @@ fn receive_balances(deps: DepsMut, caller: String) -> StdResult<IbcReceiveRespon
284281
};
285282
let acknowledgement = to_json_binary(&AcknowledgementMsg::Ok(response))?;
286283
// and we are golden
287-
Ok(IbcReceiveResponse::new()
288-
.set_ack(acknowledgement)
289-
.add_attribute("action", "receive_balances"))
284+
Ok(IbcReceiveResponse::new(acknowledgement).add_attribute("action", "receive_balances"))
290285
}
291286

292287
// processes PacketMsg::Dispatch variant
@@ -307,8 +302,7 @@ fn receive_dispatch(
307302
// we wrap it in a submessage to properly report errors
308303
let msg = SubMsg::reply_on_error(wasm_msg, RECEIVE_DISPATCH_ID);
309304

310-
Ok(IbcReceiveResponse::new()
311-
.set_ack(acknowledgement)
305+
Ok(IbcReceiveResponse::new(acknowledgement)
312306
.add_submessage(msg)
313307
.add_attribute("action", "receive_dispatch"))
314308
}
@@ -324,8 +318,7 @@ fn execute_error(text: String) -> StdResult<IbcReceiveResponse> {
324318
fn execute_return_msgs(msgs: Vec<CosmosMsg>) -> StdResult<IbcReceiveResponse> {
325319
let acknowledgement = to_json_binary(&AcknowledgementMsg::<ReturnMsgsResponse>::Ok(()))?;
326320

327-
Ok(IbcReceiveResponse::new()
328-
.set_ack(acknowledgement)
321+
Ok(IbcReceiveResponse::new(acknowledgement)
329322
.add_messages(msgs)
330323
.add_attribute("action", "receive_dispatch"))
331324
}

packages/std/src/ibc.rs

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -636,25 +636,24 @@ impl<T> Default for IbcReceiveResponse<T> {
636636
}
637637

638638
impl<T> IbcReceiveResponse<T> {
639-
pub fn new() -> Self {
640-
Self::default()
641-
}
642-
643-
/// Set the acknowledgement for this response.
639+
/// Create a new response with the given acknowledgement.
644640
///
645641
/// ## Examples
646642
///
647643
/// ```
648644
/// use cosmwasm_std::{StdAck, IbcReceiveResponse};
649645
///
650-
/// fn make_response_with_ack() -> IbcReceiveResponse {
651-
/// let ack = StdAck::success(b"\x01"); // 0x01 is a FungibleTokenPacketSuccess from ICS-20.
652-
/// IbcReceiveResponse::new().set_ack(ack)
653-
/// }
646+
/// // 0x01 is a FungibleTokenPacketSuccess from ICS-20.
647+
/// let resp: IbcReceiveResponse = IbcReceiveResponse::new(StdAck::success(b"\x01"));
648+
/// assert_eq!(resp.acknowledgement, b"{\"result\":\"AQ==\"}");
654649
/// ```
655-
pub fn set_ack(mut self, ack: impl Into<Binary>) -> Self {
656-
self.acknowledgement = ack.into();
657-
self
650+
pub fn new(ack: impl Into<Binary>) -> Self {
651+
Self {
652+
acknowledgement: ack.into(),
653+
messages: vec![],
654+
attributes: vec![],
655+
events: vec![],
656+
}
658657
}
659658

660659
/// Add an attribute included in the main `wasm` event.
@@ -695,14 +694,14 @@ impl<T> IbcReceiveResponse<T> {
695694
/// ## Examples
696695
///
697696
/// ```
698-
/// use cosmwasm_std::{attr, IbcReceiveResponse};
697+
/// use cosmwasm_std::{attr, IbcReceiveResponse, StdAck};
699698
///
700699
/// let attrs = vec![
701700
/// ("action", "reaction"),
702701
/// ("answer", "42"),
703702
/// ("another", "attribute"),
704703
/// ];
705-
/// let res: IbcReceiveResponse = IbcReceiveResponse::new().add_attributes(attrs.clone());
704+
/// let res: IbcReceiveResponse = IbcReceiveResponse::new(StdAck::success(b"\x01")).add_attributes(attrs.clone());
706705
/// assert_eq!(res.attributes, attrs);
707706
/// ```
708707
pub fn add_attributes<A: Into<Attribute>>(
@@ -718,10 +717,10 @@ impl<T> IbcReceiveResponse<T> {
718717
/// ## Examples
719718
///
720719
/// ```
721-
/// use cosmwasm_std::{CosmosMsg, IbcReceiveResponse};
720+
/// use cosmwasm_std::{CosmosMsg, IbcReceiveResponse, StdAck};
722721
///
723722
/// fn make_response_with_msgs(msgs: Vec<CosmosMsg>) -> IbcReceiveResponse {
724-
/// IbcReceiveResponse::new().add_messages(msgs)
723+
/// IbcReceiveResponse::new(StdAck::success(b"\x01")).add_messages(msgs)
725724
/// }
726725
/// ```
727726
pub fn add_messages<M: Into<CosmosMsg<T>>>(self, msgs: impl IntoIterator<Item = M>) -> Self {
@@ -733,10 +732,10 @@ impl<T> IbcReceiveResponse<T> {
733732
/// ## Examples
734733
///
735734
/// ```
736-
/// use cosmwasm_std::{SubMsg, IbcReceiveResponse};
735+
/// use cosmwasm_std::{SubMsg, StdAck, IbcReceiveResponse};
737736
///
738737
/// fn make_response_with_submsgs(msgs: Vec<SubMsg>) -> IbcReceiveResponse {
739-
/// IbcReceiveResponse::new().add_submessages(msgs)
738+
/// IbcReceiveResponse::new(StdAck::success(b"\x01")).add_submessages(msgs)
740739
/// }
741740
/// ```
742741
pub fn add_submessages(mut self, msgs: impl IntoIterator<Item = SubMsg<T>>) -> Self {

packages/std/src/stdack.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ impl StdAck {
8787
///
8888
/// let ack = StdAck::success(b"\x01"); // 0x01 is a FungibleTokenPacketSuccess from ICS-20.
8989
///
90-
/// let res: IbcReceiveResponse = IbcReceiveResponse::new().set_ack(ack.to_binary());
91-
/// let res: IbcReceiveResponse = IbcReceiveResponse::new().set_ack(ack); // Does the same but consumes the instance
90+
/// let res: IbcReceiveResponse = IbcReceiveResponse::new(ack.to_binary());
91+
/// let res: IbcReceiveResponse = IbcReceiveResponse::new(ack); // Does the same but consumes the instance
9292
/// ```
9393
pub fn to_binary(&self) -> Binary {
9494
// We need a non-failing StdAck -> Binary conversion to allow using StdAck in

0 commit comments

Comments
 (0)