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- }
7+ use crate :: msg:: QueryMsg ;
8+ use crate :: state:: { State , STATE_KEY } ;
209
21- const STATE_KEY : & [ u8 ] = b"state" ;
10+ pub const PACKET_LIFETIME : u64 = 60 * 60 ;
2211
2312#[ entry_point]
2413pub fn instantiate (
@@ -27,8 +16,12 @@ pub fn instantiate(
2716 _info : MessageInfo ,
2817 _msg : Empty ,
2918) -> StdResult < Response > {
30- deps. storage
31- . set ( STATE_KEY , & to_json_vec ( & State :: default ( ) ) ?) ;
19+ deps. storage . set (
20+ STATE_KEY ,
21+ & to_json_vec ( & State {
22+ ibc2_packet_receive_counter : 1000 ,
23+ } ) ?,
24+ ) ;
3225
3326 Ok ( Response :: new ( ) )
3427}
@@ -50,7 +43,7 @@ pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<QueryResponse> {
5043pub fn ibc2_packet_receive (
5144 deps : DepsMut ,
5245 _env : Env ,
53- _msg : Ibc2PacketReceiveMsg ,
46+ msg : Ibc2PacketReceiveMsg ,
5447) -> StdResult < IbcReceiveResponse > {
5548 let data = deps
5649 . storage
@@ -63,6 +56,24 @@ pub fn ibc2_packet_receive(
6356 ibc2_packet_receive_counter : state. ibc2_packet_receive_counter + 1 ,
6457 } ) ?,
6558 ) ;
59+ // Workaround for now.
60+ let ts = Timestamp :: from_nanos ( 1_577_933_900 ) ;
61+ let new_payload = Ibc2Payload :: new (
62+ msg. payload . destination_port ,
63+ msg. payload . source_port ,
64+ msg. payload . version ,
65+ msg. payload . encoding ,
66+ msg. payload . value ,
67+ ) ;
68+ let new_msg = Ibc2Msg :: SendPacket {
69+ channel_id : msg. source_client ,
70+ payloads : vec ! [ new_payload] ,
71+ timeout : ts,
72+ // This causes "timeout exceeds the maximum expected value" error returned from the ibc-go.
73+ // timeout: _env.block.time.plus_seconds(5_u64),
74+ } ;
6675
67- Ok ( IbcReceiveResponse :: new ( [ 1 , 2 , 3 ] ) )
76+ Ok ( IbcReceiveResponse :: new ( StdAck :: success ( b"\x01 " ) )
77+ . add_message ( new_msg)
78+ . add_attribute ( "action" , "handle_increment" ) )
6879}
0 commit comments