@@ -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,7 +1322,7 @@ 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
1289
1328
#[ test]
@@ -1296,9 +1335,26 @@ mod tests {
1296
1335
. unwrap ( )
1297
1336
. unwrap ( ) ;
1298
1337
1338
+ let ibc2_msg = br#"{"response_without_ack": false, "send_async_ack_for_prev_msg": false}"# . as_slice ( ) ;
1339
+ let ibc2_timeout = mock_ibc2_packet_recv ( & ibc2_msg) . unwrap ( ) ;
1340
+ call_ibc2_packet_receive :: < _ , _ , _ , Empty > ( & mut instance, & mock_env ( ) , & ibc2_timeout)
1341
+ . unwrap ( )
1342
+ . unwrap ( ) ;
1343
+ }
1344
+
1345
+ #[ test]
1346
+ fn call_ibc2_packet_timeout_works ( ) {
1347
+ // init
1348
+ let mut instance = mock_instance ( IBC2 , & [ ] ) ;
1349
+ let info = mock_info ( "creator" , & [ ] ) ;
1350
+ let instantiate_msg = br#"{}"# ;
1351
+ call_instantiate :: < _ , _ , _ , Empty > ( & mut instance, & mock_env ( ) , & info, instantiate_msg)
1352
+ . unwrap ( )
1353
+ . unwrap ( ) ;
1354
+
1299
1355
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)
1356
+ let ibc2_msg = mock_ibc2_packet_timeout ( ibc2_msg) . unwrap ( ) ;
1357
+ call_ibc2_packet_timeout :: < _ , _ , _ , Empty > ( & mut instance, & mock_env ( ) , & ibc2_msg)
1302
1358
. unwrap ( )
1303
1359
. unwrap ( ) ;
1304
1360
}
0 commit comments