1- use cosmwasm_schema:: { cw_serde, QueryResponses } ;
21use cosmwasm_std:: {
3- entry_point, from_json, to_json_vec, Binary , Deps , DepsMut , Empty , Env , Ibc2PacketReceiveMsg ,
4- IbcReceiveResponse , MessageInfo , QueryResponse , Response , StdError , StdResult ,
2+ entry_point, from_json, to_json_vec, Binary , Deps , DepsMut , Empty , Env , Ibc2Msg ,
3+ Ibc2PacketReceiveMsg , Ibc2Payload , IbcReceiveResponse , MessageInfo , QueryResponse , Response ,
4+ StdAck , StdError , StdResult , Timestamp ,
55} ;
6- use schemars:: JsonSchema ;
7- use serde:: { Deserialize , Serialize } ;
86
9- #[ derive( Default , Serialize , Deserialize , Clone , Debug , PartialEq , Eq , JsonSchema ) ]
10- pub struct State {
11- ibc2_packet_receive_counter : u32 ,
12- }
13-
14- #[ cw_serde]
15- #[ derive( QueryResponses ) ]
16- pub enum QueryMsg {
17- #[ returns( State ) ]
18- QueryState { } ,
19- }
20-
21- const STATE_KEY : & [ u8 ] = b"state" ;
7+ use crate :: msg:: QueryMsg ;
8+ use crate :: state:: { State , STATE_KEY } ;
229
2310#[ entry_point]
2411pub fn instantiate (
@@ -27,8 +14,12 @@ pub fn instantiate(
2714 _info : MessageInfo ,
2815 _msg : Empty ,
2916) -> StdResult < Response > {
30- deps. storage
31- . set ( STATE_KEY , & to_json_vec ( & State :: default ( ) ) ?) ;
17+ deps. storage . set (
18+ STATE_KEY ,
19+ & to_json_vec ( & State {
20+ ibc2_packet_receive_counter : 0 ,
21+ } ) ?,
22+ ) ;
3223
3324 Ok ( Response :: new ( ) )
3425}
@@ -50,7 +41,7 @@ pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<QueryResponse> {
5041pub fn ibc2_packet_receive (
5142 deps : DepsMut ,
5243 _env : Env ,
53- _msg : Ibc2PacketReceiveMsg ,
44+ msg : Ibc2PacketReceiveMsg ,
5445) -> StdResult < IbcReceiveResponse > {
5546 let data = deps
5647 . storage
@@ -63,6 +54,24 @@ pub fn ibc2_packet_receive(
6354 ibc2_packet_receive_counter : state. ibc2_packet_receive_counter + 1 ,
6455 } ) ?,
6556 ) ;
57+ // Workaround for now.
58+ let ts = Timestamp :: from_nanos ( 1_577_933_900 ) ;
59+ let new_payload = Ibc2Payload :: new (
60+ msg. payload . destination_port ,
61+ msg. payload . source_port ,
62+ msg. payload . version ,
63+ msg. payload . encoding ,
64+ msg. payload . value ,
65+ ) ;
66+ let new_msg = Ibc2Msg :: SendPacket {
67+ channel_id : msg. source_client ,
68+ payloads : vec ! [ new_payload] ,
69+ timeout : ts,
70+ // This causes "timeout exceeds the maximum expected value" error returned from the ibc-go.
71+ // timeout: _env.block.time.plus_seconds(5_u64),
72+ } ;
6673
67- Ok ( IbcReceiveResponse :: new ( [ 1 , 2 , 3 ] ) )
74+ Ok ( IbcReceiveResponse :: new ( StdAck :: success ( b"\x01 " ) )
75+ . add_message ( new_msg)
76+ . add_attribute ( "action" , "handle_increment" ) )
6877}
0 commit comments