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
- }
20
-
21
- const STATE_KEY : & [ u8 ] = b"state" ;
7
+ use crate :: msg:: QueryMsg ;
8
+ use crate :: state:: { State , STATE_KEY } ;
22
9
23
10
#[ entry_point]
24
11
pub fn instantiate (
@@ -27,8 +14,12 @@ pub fn instantiate(
27
14
_info : MessageInfo ,
28
15
_msg : Empty ,
29
16
) -> 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
+ ) ;
32
23
33
24
Ok ( Response :: new ( ) )
34
25
}
@@ -50,7 +41,7 @@ pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<QueryResponse> {
50
41
pub fn ibc2_packet_receive (
51
42
deps : DepsMut ,
52
43
_env : Env ,
53
- _msg : Ibc2PacketReceiveMsg ,
44
+ msg : Ibc2PacketReceiveMsg ,
54
45
) -> StdResult < IbcReceiveResponse > {
55
46
let data = deps
56
47
. storage
@@ -63,6 +54,24 @@ pub fn ibc2_packet_receive(
63
54
ibc2_packet_receive_counter : state. ibc2_packet_receive_counter + 1 ,
64
55
} ) ?,
65
56
) ;
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
+ } ;
66
73
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" ) )
68
77
}
0 commit comments