@@ -16,7 +16,7 @@ use cosmwasm_std::{
16
16
} ;
17
17
18
18
#[ cfg( feature = "ibc2" ) ]
19
- use cosmwasm_std:: Ibc2PacketReceiveMsg ;
19
+ use cosmwasm_std:: { Ibc2PacketReceiveMsg , Ibc2PacketTimeoutMsg } ;
20
20
21
21
use crate :: backend:: { BackendApi , Querier , Storage } ;
22
22
use crate :: conversion:: ref_to_u32;
@@ -61,7 +61,7 @@ mod read_limits {
61
61
#[ cfg( feature = "stargate" ) ]
62
62
pub const RESULT_IBC_PACKET_ACK : usize = 64 * MI ;
63
63
/// Max length (in bytes) of the result data from a ibc_packet_timeout call.
64
- #[ cfg( feature = "stargate" ) ]
64
+ #[ cfg( any ( feature = "stargate" , feature = "ibc2" ) ) ]
65
65
pub const RESULT_IBC_PACKET_TIMEOUT : usize = 64 * MI ;
66
66
/// Max length (in bytes) of the result data from a ibc_source_callback call.
67
67
pub const RESULT_IBC_SOURCE_CALLBACK : usize = 64 * MI ;
@@ -104,7 +104,7 @@ mod deserialization_limits {
104
104
#[ cfg( feature = "stargate" ) ]
105
105
pub const RESULT_IBC_PACKET_ACK : usize = 256 * KI ;
106
106
/// Max length (in bytes) of the result data from a ibc_packet_timeout call.
107
- #[ cfg( feature = "stargate" ) ]
107
+ #[ cfg( any ( feature = "stargate" , feature = "ibc2" ) ) ]
108
108
pub const RESULT_IBC_PACKET_TIMEOUT : usize = 256 * KI ;
109
109
/// Max length (in bytes) of the result data from a ibc_source_callback call.
110
110
pub const RESULT_IBC_SOURCE_CALLBACK : usize = 256 * KI ;
@@ -697,6 +697,45 @@ where
697
697
)
698
698
}
699
699
700
+ #[ cfg( feature = "ibc2" ) ]
701
+ pub fn call_ibc2_packet_timeout < A , S , Q , U > (
702
+ instance : & mut Instance < A , S , Q > ,
703
+ env : & Env ,
704
+ msg : & Ibc2PacketTimeoutMsg ,
705
+ ) -> VmResult < ContractResult < IbcBasicResponse < U > > >
706
+ where
707
+ A : BackendApi + ' static ,
708
+ S : Storage + ' static ,
709
+ Q : Querier + ' static ,
710
+ U : DeserializeOwned + CustomMsg ,
711
+ {
712
+ let env = to_vec ( env) ?;
713
+ let msg = to_vec ( msg) ?;
714
+ let data = call_ibc2_packet_timeout_raw ( instance, & env, & msg) ?;
715
+ let result = from_slice ( & data, deserialization_limits:: RESULT_IBC_PACKET_TIMEOUT ) ?;
716
+ Ok ( result)
717
+ }
718
+
719
+ #[ cfg( feature = "ibc2" ) ]
720
+ pub fn call_ibc2_packet_timeout_raw < A , S , Q > (
721
+ instance : & mut Instance < A , S , Q > ,
722
+ env : & [ u8 ] ,
723
+ msg : & [ u8 ] ,
724
+ ) -> VmResult < Vec < u8 > >
725
+ where
726
+ A : BackendApi + ' static ,
727
+ S : Storage + ' static ,
728
+ Q : Querier + ' static ,
729
+ {
730
+ instance. set_storage_readonly ( false ) ;
731
+ call_raw (
732
+ instance,
733
+ "ibc2_packet_timeout" ,
734
+ & [ env, msg] ,
735
+ read_limits:: RESULT_IBC_PACKET_TIMEOUT ,
736
+ )
737
+ }
738
+
700
739
pub fn call_ibc_source_callback_raw < A , S , Q > (
701
740
instance : & mut Instance < A , S , Q > ,
702
741
env : & [ u8 ] ,
@@ -1283,9 +1322,15 @@ mod tests {
1283
1322
#[ cfg( feature = "ibc2" ) ]
1284
1323
mod ibc2 {
1285
1324
use super :: * ;
1286
- use cosmwasm_std:: testing:: mock_ibc2_packet_recv;
1325
+ use cosmwasm_std:: testing:: { mock_ibc2_packet_recv, mock_ibc2_packet_timeout } ;
1287
1326
static IBC2 : & [ u8 ] = include_bytes ! ( "../testdata/ibc2.wasm" ) ;
1288
1327
1328
+ #[ derive( serde:: Serialize ) ]
1329
+ pub struct IbcPayload {
1330
+ pub response_without_ack : bool ,
1331
+ pub send_async_ack_for_prev_msg : bool ,
1332
+ }
1333
+
1289
1334
#[ test]
1290
1335
fn call_ibc2_packet_receive_works ( ) {
1291
1336
// init
@@ -1296,9 +1341,29 @@ mod tests {
1296
1341
. unwrap ( )
1297
1342
. unwrap ( ) ;
1298
1343
1344
+ let ibc2_msg = IbcPayload {
1345
+ response_without_ack : false ,
1346
+ send_async_ack_for_prev_msg : false ,
1347
+ } ;
1348
+ let ibc2_timeout = mock_ibc2_packet_recv ( & ibc2_msg) . unwrap ( ) ;
1349
+ call_ibc2_packet_receive :: < _ , _ , _ , Empty > ( & mut instance, & mock_env ( ) , & ibc2_timeout)
1350
+ . unwrap ( )
1351
+ . unwrap ( ) ;
1352
+ }
1353
+
1354
+ #[ test]
1355
+ fn call_ibc2_packet_timeout_works ( ) {
1356
+ // init
1357
+ let mut instance = mock_instance ( IBC2 , & [ ] ) ;
1358
+ let info = mock_info ( "creator" , & [ ] ) ;
1359
+ let instantiate_msg = br#"{}"# ;
1360
+ call_instantiate :: < _ , _ , _ , Empty > ( & mut instance, & mock_env ( ) , & info, instantiate_msg)
1361
+ . unwrap ( )
1362
+ . unwrap ( ) ;
1363
+
1299
1364
let ibc2_msg = br#"SomeRandomMsg"# ;
1300
- let ibc2_msg = mock_ibc2_packet_recv ( ibc2_msg) . unwrap ( ) ;
1301
- call_ibc2_packet_receive :: < _ , _ , _ , Empty > ( & mut instance, & mock_env ( ) , & ibc2_msg)
1365
+ let ibc2_msg = mock_ibc2_packet_timeout ( ibc2_msg) . unwrap ( ) ;
1366
+ call_ibc2_packet_timeout :: < _ , _ , _ , Empty > ( & mut instance, & mock_env ( ) , & ibc2_msg)
1302
1367
. unwrap ( )
1303
1368
. unwrap ( ) ;
1304
1369
}
0 commit comments