1
- use cosmwasm_schema:: { cw_serde, QueryResponses } ;
2
1
use 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 ,
5
5
} ;
6
- use schemars:: JsonSchema ;
7
- use serde:: { Deserialize , Serialize } ;
8
6
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 } ;
20
9
21
- const STATE_KEY : & [ u8 ] = b"state" ;
10
+ pub const PACKET_LIFETIME : u64 = 60 * 60 ;
22
11
23
12
#[ entry_point]
24
13
pub fn instantiate (
@@ -27,8 +16,12 @@ pub fn instantiate(
27
16
_info : MessageInfo ,
28
17
_msg : Empty ,
29
18
) -> 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
+ ) ;
32
25
33
26
Ok ( Response :: new ( ) )
34
27
}
@@ -50,7 +43,7 @@ pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<QueryResponse> {
50
43
pub fn ibc2_packet_receive (
51
44
deps : DepsMut ,
52
45
_env : Env ,
53
- _msg : Ibc2PacketReceiveMsg ,
46
+ msg : Ibc2PacketReceiveMsg ,
54
47
) -> StdResult < IbcReceiveResponse > {
55
48
let data = deps
56
49
. storage
@@ -63,6 +56,24 @@ pub fn ibc2_packet_receive(
63
56
ibc2_packet_receive_counter : state. ibc2_packet_receive_counter + 1 ,
64
57
} ) ?,
65
58
) ;
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
+ } ;
66
75
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" ) )
68
79
}
0 commit comments